PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VNC+SSH+PORTFORWARDING = Problem



viijay
18.03.05, 12:43
Hallo Community,

ich weiss, dass das Thema VNC + SSH schon öfter besprochen worden ist, nur leider hab ich auch nach intensiver Suche nichts konkretes zu meinem Problem gefunden. Aber kommen wir mal zum Thema:

Was ich will: Ich will übers Internet auf verschlüsseltem Wege per VNC auf meinem Windows PC zugreifen, der hinter einem Linux Rechner hängt (Internet PC).

HomePC = Mein Windows Rechner
LinuxPC = Mein "Server" (hat die Verbindung ins Netz, Internet PC)
Ext. PC = Der PC von dem aus ich auf den HomePC zugreifen möchte.

Die Konstellation sieht jetzt wie folgt aus:



########### ########### ############ ###########
# HOME PC # <--> # LinuxPC # <--> # Internet # <--> # Ext. PC #
########### ########### ############ ###########

HomePC:
Windows XP, läuft ein VNC Server drauf.

LinuxPC:
Debian (Kernel 2.6.10) läuft ein VNC Server (um auf den Linux-Rechner per VNC zuzugreifen)über Port 5907. Port 5905 wird auf den Windows Server Port 5923 geforwarded
Die VNC relevanten iptables-Regeln sehen so aus:


# Fernwartung VNC für PVR
$PF -t nat -A PREROUTING -p tcp -d $PUBIP $DPORT 5805 -i $EXIF -j DNAT --to-destination $VJ:5823
$PF -t nat -A PREROUTING -p tcp -d $PUBIP $DPORT 5905 -i $EXIF -j DNAT --to-destination $VJ:5923

$PF -A INPUT -i $EXIF -p tcp -s 0/0 $SPORT 1024: -d $PUBIP $DPORT 5805 -j ACCEPT
$PF -A OUTPUT -o $EXIF -p tcp -s $PUBIP $SPORT 5805 -d 0/0 $DPORT 1024: -j ACCEPT
$PF -A INPUT -i $EXIF -p tcp -s 0/0 $SPORT 1024: -d $PUBIP $DPORT 5905 -j ACCEPT
$PF -A OUTPUT -o $EXIF -p tcp -s $PUBIP $SPORT 5905 -d 0/0 $DPORT 1024: -j ACCEPT
$PF -A INPUT -i $EXIF -p tcp -s 0/0 $SPORT 1024: -d $PUBIP $DPORT 5807 -j ACCEPT
$PF -A OUTPUT -o $EXIF -p tcp -s $PUBIP $SPORT 5807 -d 0/0 $DPORT 1024: -j ACCEPT
$PF -A INPUT -i $EXIF -p tcp -s 0/0 $SPORT 1024: -d $PUBIP $DPORT 5907 -j ACCEPT
$PF -A OUTPUT -o $EXIF -p tcp -s $PUBIP $SPORT 5907 -d 0/0 $DPORT 1024: -j ACCEPT

Auf dem Ext. PC habe ich ein PuTTY laufen mit folgenden Tunneln:
L2300 --> mein.dynamischer.dns:5905
L2500 --> mein.dynamischer.dns:5907
L5000 --> 10.23.23.100 (lokale IP meines HomePC, testweise)

Folgendes Phänomen:
Wenn ich über den SSH Tunnel auf meinen LinuxRechner zugreife (SSH Verbindung steht und ich greife per VNC auf localhost:2500 zu), funktioniert das einwandfrei.
Wenn ich jedoch versuche über VNC auf localhost:2300 zuzugreifen, dann kommt folgende Fehlermeldung: "server closed connection unexpectedly".
Versuche ich ganz normal per VNC (unverschlüsselt) mein.dynamischer.dns:5905 zuzugreifen bekomme ich ganz normal die Aufforderung mein Passwort einzugeben und kann mich einloggen.
Versuche ich per VNC auf localhost:5000 zuzugreifen passiert Minuten lang nix und irgendwann ist der Timeout da.

Wo also ist das Problem? Liegt es an den "zwei Portforwardings in Reihe"?

Vielleicht kann jemand meine Situation nachvollziehen und hat einen Tipp, wie ich auch die Verbindung meinem HomePC verschlüsselt hinbekomme.

Gruss ViiJay.

Matzetronic
18.03.05, 18:12
hi,

du hast das ganze ja ziemlich umständlich erdacht ;-)

wenn ich dein problem richtig verstehe, dann willst du wahlweise auf den windows- oder den linux-pc per vnc zugreifen - und das über den ssh-tunnel !??

folgende beispiellösung (aus dem kopf):
1. nur SSH-Port nach außen öffnen (Internet)
2. ssh -L5900:192.168.1.10:5900 -L5901:127.0.0.1:5901 user@deine_dyndns.ip = Tunnelaufbau
3. xvncviewer 127.0.0.1:5900 (VNC -> Home-PC)
4. xvncviewer 127.0.0.1:5901 (VNC -> Linux-PC)

die vnc-ports und die interne ip musst du natürlich an deine gegebenheiten anpassen....
für deine firewall sollte folgender schnipsel ausreichen:
# SSH von außen
iptables -A INPUT -i $EXT_DEV -p tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $EXT_DEV -p tcp --sport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT
# tcp 5900 auf 192.168.1.10 zulassen
iptables -A OUTPUT -o $INT_DEV -p tcp --dport 5900 -d 192.168.1.10 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $INT_DEV -p tcp --sport 5900 -s 192.168.1.10 -m state --state RELATED,ESTABLISHED -j ACCEPT

Das mußt du natürlich an einer sinnvollen stelle deines paketfilters einfügen, bzw. ggf. noch ändern...

ich hoffe, ich konnte helfen.

gruß,
matze

viijay
22.03.05, 09:59
Hm Matzetronic,

ich weiss nicht so Recht. Ok versuche ich es nochmal etwas einfacher zu beschreiben:

Linux PC:
Linux, Debian
Anbindung ans Internet. Auf dem ist auch ein VNC drauf, da ich auf das System auch zugreifen möchte (Port 5907/5807).

Home PC:
Windows XP. Client. Auf dem ist auch nen VNC drauf (Port 5923, früher 5907).

Der Linux PC nimmt Verbindungen auf 5905/5805 an und forwarded die auf 10.23.23.100:5923 (IP:Port meines Home PC).

Der Externe PC baut jetzt nen SSH Tunnel auf den Linux PC auf und in dem Tunnel sind die Forwards
Localhost 2300 --> mydynip.bla:5905
Localhost 2500 --> mydynip.bla:5907
eingerichtet.
Wenn die SSH Verbindung steht, kann ich vom externen PC aus per localhost:2500 auf meinen Linux PC zugreifen - DURCH den SSH Tunnel.
Wenn ich aber auf localhost:2300 zugreife, bekomme ich die Fehlermeldung.

Hoffe das war verständlicher.

Gruss ViiJay.

Matzetronic
22.03.05, 12:18
hi,

irgendwie verstehe ich nicht, was du denn eigentlich willst ? auf der einen seite hast du deinen ssh-tunnel, andererseits schreibst du:


Der Linux PC nimmt Verbindungen auf 5905/5805 an und forwarded die auf 10.23.23.100:5923 (IP:Port meines Home PC).

wozu muss der linux-pc noch verbindungen auf 5905 und 5805 annehmen, wenn port 22 reicht ?
was mich noch verwirrt, sind die angegebenen ports...

vielleicht solltest du mal genau deine vorgehensweise beschreiben, am besten direkt aus der konsole hier einfügen.

Gruß,
Matze

viijay
23.03.05, 12:14
Hm ok also noch mal:

Bisher hatte ich keinen SSH Tunnel im Einsatz. Deshalb --->

Linux PC (VNC Server 5907)
Home PC (VNC Server 5923 | Port Forward: Linux PC 5905 --> Home PC 5923)

Zugriff vom externen PC (per vncviewer) auf:
Linux PC (mydynip.bla:5907)
Home PC (mydynip.bla:5905)

Alles funktioniert. Ich komme direkt auf die beiden VNC Instanzen drauf. Ohne SSH nur per vncviewer. Wie gesagt der externe PC ist ein Windows XP System.

Jetzt wollte ich es wie folgt ändern:
Auf dem externen PC mache ich einen Tunnel auf mit zwei Portforwardings (per PuTTY konfigurierbar unter: Connection --> SSH --> Tunnels --> Portforwarding). Dort habe ich zwei Portforwardings eingerichtet für:
Localhost Port 2300 --> mydynip.bla: 5905
Localhost Port 2500 --> mydynip.bla: 5907

Soweit alles klar hoffe ich.

Wenn ich jetzt die SSH Verbindung aufbaue, kann ich per Localhost:2500 auf den Linux PC per VNC zugreifen, so wie gewünscht.

Wenn ich jedoch versuche auf Localhost:2300 zuzugreifen funktioniert das nicht. Versuche ich es auf dem "alten" Weg per mydynip.bla:5905 (also am Tunnel vorbei!!!), dann geht alles.

Die IPTABLES Regeln sind noch drin, da ich sonst ja nur auf den Linux PC käme und auf den Home PC eben nicht. Deshalb sind die Ports noch freigeschaltet.

Ich hoffe das war jetzt etwas einleuchtender und meine Problemstellung ist etwas anschaulicher geworden.

Gruss ViiJay.