SSH-Tunnel für Remotedesktop über Intermediary Server Teil II


10

Ich habe zuvor gefragt, wie 2 SSH-Tunnel mithilfe eines Zwischenservers konfiguriert werden sollen, um Remotedesktop über sie auszuführen, und ich habe es geschafft, dass es funktioniert. Jetzt versuche ich, dasselbe mit denselben Maschinen zu tun, aber in umgekehrter Reihenfolge. Hier ist das Setup:

  1. Windows 7-PC in einem privaten Netzwerk hinter einer Firewall.
  2. Öffentlicher Linux-Server, der Zugriff auf den PC hat.
  3. Windows 7-Laptop zu Hause, auf dem ich Remotedesktop vom PC aus ausführen möchte.

Ich verwende Putty auf dem Laptop, um einen umgekehrten Tunnel von dort zum Linux-Server zu erstellen : R60666 localhost:3389.

Ich benutze Putty auf dem PC, um einen regulären Tunnel von dort zum Linux-Server zu erstellen : L60666 localhost:60666.

Ich SSH auf den Linux-Server und ich telnet localhost 60666 und es scheint die erwartete Ausgabe zu produzieren, wie in den Debugging-Tipps beschrieben, die ich hier erhalten habe .

Ich versuche, Remotedesktop vom PC mit dem Laptop zu verbinden : localhost:60666. Es fragt nach meinem Benutzernamen und Passwort, ich klicke auf OK und es sperrt meine aktuelle Sitzung auf dem Laptop (so dass der Begrüßungsbildschirm auf dem Laptop anstelle meines Desktops angezeigt wird), es zeigt die Begrüßungsnachricht auf dem Remotedesktopbildschirm an und dann es wird nur schwarz. Es wird keine Verbindung getrennt, es wird kein Fehler ausgegeben und ich kann keine Aktionen auf dem Remotedesktopbildschirm ausführen. Ich habe das gleiche Setup mit einem Windows XP-Laptop versucht und habe die gleichen Symptome. Ich habe auch versucht, andere Ports als 60666 zu verwenden, aber nichts hat sich geändert. Hat jemand eine Ahnung, was ich falsch mache?


Update : Wie von @jwinders hervorgehoben, kann ich nicht telnet PC 3389direkt vom Linux-Server ausgeführt werden. Da die Windows-Firewall eine Regel hat, die alle Verbindungen an Port 3389 zulässt, habe ich keine Ahnung, was sie blockiert. Glücklicherweise kann ich einen SSH-Tunnel vom Linux-Computer zum PC erstellen ssh 3389:localhost:3389 'domain\user'@PC.


Ich würde zu diesem Zeitpunkt ernsthaft nur GoToMyPC verwenden.
ewwhite

1
@ewwhite Ich sehe keinen Grund, warum ich das beschriebene Setup nicht verwenden sollte. Selbst wenn es einfachere Lösungen gibt (die die Einbeziehung eines anderen Dritten erfordern), halte ich dies für eine interessante Herausforderung.
Mihai Todor

1
Dies ist ein sehr wichtiger Beitrag, aber das Problem besteht immer noch, und es ist ziemlich frustrierend, dass alle Antworten den Punkt verfehlen. Die Verbindung kann hergestellt werden, unterbricht jedoch eine Sekunde nach dem Start. Der Kommentar "Anmeldung über rdp wird diese Verbindung stören" scheint im Einklang mit dem zu stehen, was beobachtet wird, aber er beantwortet weder das Warum noch schlägt er eine Lösung vor.
Rhermans

Antworten:


3

Ich bin heute selbst auf das gleiche Problem mit dem schwarzen Bildschirm und der Trennung gestoßen und habe Kitt als Client verwendet. Ich habe schließlich eine Lösung gefunden .

Ich wechselte von Putty zu Bitvise Tunnelier und stellte eine S2CVerbindung mit den folgenden Einstellungen her:

listen if:0.0.0.0
listen port:13389
destination host:localhost
dest port:3389

Wie es der Zufall wollte, verwende ich auf meinem Server den Bitvise-SSH-Server. Dies ist möglicherweise nur eine gute Kombination für zwei Produkte desselben Herstellers. Es wäre großartig, wenn dies die Probleme für andere lösen würde.

Ich bin in keiner Weise mit diesen Leuten verbunden.


2

Ich sehe nichts falsch mit Ihren SSH-Tunneln. Die Verbindung zu localhost: 60666 auf dem PC sollte bei localhost: 3389 auf dem Laptop enden. Die Tatsache, dass Sie einen Anmeldebildschirm erhalten, bestätigt diese Einschätzung.

Ein bisschen googeln auf dem leeren Bildschirm bringt mich zu diesem Microsoft Knowledge Base-Artikel: http://support.microsoft.com/kb/555840 . Es heißt, ein leerer Bildschirm könnte aufgrund möglicher MTU-Größeninkongruenzen auftreten:

Stellen Sie sicher, dass der Server, der Client und die Netzwerkausrüstung die Größe "MTU" verwenden.

Angesichts Ihrer angemessenen Anzahl an Netzwerk-Hops, Firewalls und was Sie haben, ist eine Paketfragmentierung sehr wahrscheinlich :) Die meisten Windows-Computer verwenden standardmäßig eine MTU von 1300, während die meisten Linux-Boxen 1500 haben (der maximal zulässige Wert für LAN, ohne Berücksichtigung von Jumbo-Frames ). Sie können versuchen, diese zu verringern, um die Fragmentierung zu verringern.

Siehe auch:


1
Danke für den Tipp, aber leider reicht es nicht aus. Die MTU auf meinem Laptop und dem PC ist auf 1500 ( netsh interface ipv4 show subinterfaces) eingestellt und ping linux_server -f -l 1472funktioniert auf beiden Computern. Nur als Test habe ich versucht, die MTU auf dem PC auf 1300 einzustellen, aber es hat nicht geholfen. Ich habe auch versucht, es auf dem Laptop zu ändern, aber ohne Erfolg :( Ich frage mich, ob es eine "intelligentere" Möglichkeit gibt, dieses Problem zu debuggen ...
Mihai Todor

1

Wäre ein VPN nicht besser geeignet? OpenVPN ist super einfach zu konfigurieren. Hier finden Sie eine Beispielkonfiguration und einige Links, die Sie durch den Prozess der Zertifikaterstellung führen.

Konfigurieren Sie einfach den Vermittler als Host, und die Gäste können sich einwählen und trotzdem miteinander kommunizieren.

apt-get install openvpn
mkdir /etc/openvpn/easy-rsa
mkdir -p /etc/openvpn/ccd/client_server
touch /etc/openvpn/ipp.txt
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca 
./build-key-server server
./build-dh
cd /etc/openvpn/easy-rsa/keys
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -certfile ca.crt

Erstellen Sie dann eine neue Datei, /etc/openvpn/client_server.conffügen Sie Folgendes ein und ändern Sie die SERVER_IP_ADDRESSentsprechende Datei

local SERVER_IP_ADDRESS
port 8443
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
pkcs12 /etc/openvpn/easy-rsa/keys/server.p12
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
ifconfig-pool-persist /etc/openvpn/ipp.txt
server 192.168.100.0 255.255.255.0
client-config-dir /etc/openvpn/ccd/client_server
ccd-exclusive
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
reneg-sec 0
client-to-client

Erstellen Sie dann einen Schlüssel pro Benutzer, der eine Verbindung herstellen soll, und erstellen Sie die Konfigurationsdatei im Verzeichnis ccd

./build-key-pkcs12 user1@domain.com
echo "ifconfig-push 192.168.100.2 255.255.255.0" > /etc/openvpn/ccd/client_server/user1@domain.com

Die IP-Adresse MUSS für ein / 30-Subnetz geeignet sein (siehe http://www.subnet-calculator.com/cidr.php ), da pro Verbindung nur 2 Adressen (Server und Client) verfügbar sind. Ihre nächste verfügbare Client-IP wäre also 192.168.100.6 und so weiter.

Dann haben Sie jetzt statische IPs pro Verbindungsbenutzer.

Geben Sie dann die the user1@domain.com.p12Datei an den Endbenutzer weiter und verwenden Sie die folgende Konfigurationsdatei

client
dev tun
proto udp
remote SERVER_IP_ADDRESS 8443
pkcs12 user1@domain.com.p12
resolv-retry infinite
nobind
ns-cert-type server
comp-lzo
verb 3
reneg-sec 0

1
Nun ja, das könnte funktionieren, aber ich habe nicht den erforderlichen Zugriff auf die Linux-Box, um Dinge zu installieren :( Trotzdem finde ich das Ganze äußerst frustrierend, weil es in eine Richtung funktioniert und in die entgegengesetzte Richtung fehlschlägt.
Mihai Todor

1

Wenn Sie die ssh-Sitzung innerhalb des Benutzerkontos ausführen (mit einem Programm wie putty.exe) und versuchen, sich über rdp anzumelden, wird diese Verbindung unterbrochen, wodurch die rdp-Sitzung unterbrochen wird. Sie müssen den SSH-Tunnel als Dienst ausführen, der nicht unterbrochen wird.


1
Interessant. Ich habe keinen Zugriff mehr auf dieses Setup, daher kann ich Ihre Theorie nicht testen, aber es wäre schön, einige zusätzliche Details zu diesem Thema für andere Personen zu erhalten, die mit demselben Problem konfrontiert sind. Haben Sie eine Referenz für Ihre Ansprüche? Was meinst du damit, dass die Verbindung von Putty unterbrochen wird?
Mihai Todor

0

Ich denke, Sie können alle Conf von Ihrem Laptop aus erledigen

Richten Sie eine Kittverbindung zur Linux-Box auf Ihrem Laptop ein. Geben Sie dann unter 'Verbindung'> 'SSH'> 'Tunnel' 60666 in das Feld 'Quellport' ein und stellen Sie sicher, dass das Optionsfeld Lokal ausgewählt ist. Im 'Ziel' geben Sie win7-box-name-or-ip: 3389 ein.

Speichern Sie all das und es sollte Ihnen ermöglichen, eine Kitt-Sitzung zu Linux-Box zu öffnen, die automatisch einen Tunnel-Weiterleitungsverkehr zu localhost (Ihrem Laptop) erstellt: 60666 zu win7: 3389

Wenn Sie dies in der Befehlszeile tun, sollte es so etwas wie sein

ssh -L60666:win7:3389 linux-box

1
Mal sehen ... Diese Konfiguration sollte Port 3389 vom PC an Port 60666 des Laptops weiterleiten. Ich sehe jedoch nicht, wie dies funktionieren wird, und auf jeden Fall kann ich keinen Remotedesktop auf dem Laptop ausführen ... Soweit ich nicht sagen kann, muss dies mit 2 erfolgen Tunnel.
Mihai Todor

Mit diesem Conf können Sie nicht auf Ihrem Laptop rdp to localhost: 60666?
Jwinders

Nein es geht nicht.
Mihai Todor

1
Das geht nicht Die einzige Möglichkeit, dies zu tun, besteht darin, zuerst einen Tunnel von der Linux-Box zum PC ssh 3389:localhost:3389 'domain\user'@PCund dann telnet localhost 3389auf der Linux-Box einzurichten.
Mihai Todor

1
Das ist ein interessanter Punkt, aber ich bin nicht sicher, ob ich verstehe, was ihn blockiert. Die Windows-Firewall verfügt über eine Regel, die explizit alle Verbindungen an Port 3389 von der Domäne aus zulässt.
Mihai Todor

0

Ich stellte fest, dass ich nach Eingabe der Anmeldeinformationen einen leeren Bildschirm erhalten würde, wenn nicht alle Benutzer vollständig vom Computer abgemeldet wären. Stellen Sie also sicher, dass Sie sich immer abmelden.


2
Netter Versuch, aber immer noch kein Glück :(
Mihai Todor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.