So debuggen Sie die SSH-Portweiterleitung

8

Dies ist eine Erweiterung des SSH-Ports, um von überall auf meinen Heimcomputer zuzugreifen

Ich habe die dort genannten Dinge ausprobiert, kann aber sshmeine Maschine nicht erreichen.

Netgear-Router-Einstellungen für die Portweiterleitung:

Start Port: 22
End Port: 22
Server IP Address: IP address of by FreeBSD box

/etc/ssh/sshd_conf meiner FreeBSD-Box:

PasswordAuthentication yes
AllowUsers root
X11Forwarding yes
AllowTcpForwarding yes

Wie ich versuche, eine Verbindung herzustellen:

Ich habe mich angemeldet dyndns.comund eine URL erhalten, die meiner externen IP-Adresse zugeordnet ist.

Von einem anderen Computer in meinem Heimnetzwerk aus mache ich Folgendes: ssh -l root my_dyndns_ip Das ist nur eine Zeitüberschreitung.

Andererseits kann ich my_dyndns_urlerfolgreich pingen .

Debugging :

Wie kann ich das beheben, damit ich sshvon überall nach my_dnydns_url?

Ich habe versucht, die Protokolle meines Netgear-Routers zu überprüfen, aber bei einem fehlgeschlagenen SSH-Versuch wurde keine Anmeldung auf dem Router generiert.

Ich habe auch nachgesehen /var/log/messages, konnte aber nichts finden.

Bearbeiten: 0 Ausführen von ssh im ausführlichen Modus (gemäß @jasonwryan vorgeschlagen):

Ich bemerke eine seltsame Sache: Wenn ich ssh mit der von dyndns.com bereitgestellten URL mache, wird versucht, eine Verbindung zu einer anderen IP-Adresse herzustellen als der, die ich von whatismyip.com erhalte. Ist das nicht falsch?

Edit: 1 Problem mit Dyndns ist jetzt gelöst.

Wenn ich jetzt versuche, ssh zu verwenden, tritt eine Zeitüberschreitung auf und ich erhalte die Fehlermeldung: Zeitüberschreitung bei Verbindung

Edit: 2 Hat iptables oder NAT etwas damit zu tun?

Bearbeiten: 3 Ich begann sshmit -d optiondem Erfassen von Debug-Nachrichten.

Wenn ich von einem anderen Computer in wlan auf die freebsd-Box ssh, funktioniert es einwandfrei und ich kann Protokolle sehen.

Aber wenn ich auf eine externe IP ssh (die das an meine freebsd-Box weiterleiten sollte), sehe ich nicht einmal Protokolle - das heißt, die Anfrage erreicht nicht einmal die freebsd-Box. Und es läuft ab.

Hari
quelle
2
Führen Sie SSH im ausführlichen Modus aus, um einige aussagekräftige Fehlermeldungen zu generieren:ssh -vvv ...
jasonwryan
Router können fehlerhaft sein. Wenn sie fehlerhaft sind, sind sie ein Albtraum. Was ist die Marke Ihres Routers und verwenden Sie die Original-Firmware? Wenn möglich, schlage ich vor, es mit einem Router zu versuchen, auf dem (zum Beispiel) Tomato installiert ist. Tomate ist nicht perfekt, aber weitaus besser als die proprietären Router-Firmwares. Hinweis: Ich behaupte nicht, dass dies die Ursache Ihres Problems ist, aber ich habe festgestellt, dass fehlerhafte Router die Dinge erheblich komplizieren können.
Faheem Mitha
Ich denke, Ihre Verwendung des Begriffs URL oben ist falsch. Sie meinen einen vollqualifizierten Domainnamen (FQDN), den ich annehme. Was host my_dyndns_ipzeigt?
Faheem Mitha
Danke @Faheem Mitha. Ich habe netgear WPN824v3. Wie kann ich sicherstellen, dass es fehlerhaft ist? Und was ist Tomate? :)
Hari
@hari: Wenn sich Ihr Router so zu verhalten scheint, wie Sie es nicht erwarten würden, denken Sie daran, dass er möglicherweise fehlerhaft ist. Verwenden Sie die Original-Firmware? Tomate - erster Google-Hit für Tomate.
Faheem Mitha

Antworten:

6

Ich denke, Ihr Problem liegt nicht in der Portweiterleitung, sondern in einer anderen Option in der NAT-Konfiguration im Router.

Stellen Sie zunächst sicher, dass Sie bei Verwendung Ihrer LAN-IP erfolgreich SSH von einem anderen Computer im Netzwerk ausführen können. Dies stellt sicher, dass SSH überhaupt funktioniert.

Zweitens testen Sie von einem anderen Computer außerhalb des Netzwerks mit der öffentlichen IP. Dies stellt sicher, dass die Portweiterleitung funktioniert.

Drittens testen Sie von demselben Computer außerhalb des Netzwerks und verwenden Sie die DynDNS-URL. Dies stellt sicher, dass DynDNS ordnungsgemäß funktioniert.

Wenn all dies erfolgreich ist, ist nichts falsch an Ihrer Konfiguration (was ich für richtig halte) und Ihr Problem besteht darin, nur von innerhalb des Netzwerks auf die öffentliche IP (entweder direkt oder über DynDNS) zuzugreifen . Dies bedeutet, dass auf Ihrem Router die NAT-Reflektion aktiviert sein muss (falls möglich), um interne Anforderungen so weiterzuleiten, als wären sie externe Anforderungen für die öffentliche IP.

MaQleod
quelle
Können Sie etwas einrichten, um auf Port 22 auf einem anderen Computer zu warten, und die Portweiterleitungsregel so ändern, dass sie auf den zweiten Computer zeigt? Sie müssen ausschließen, ob es etwas im Router oder etwas auf dem Computer ist, das es blockiert.
MaQleod
1

Lauscht Ihr SSHD-Server auf Port 22? Fügen Sie Folgendes hinzu:

Port 22

zu Ihrer Konfiguration.

Wenn dies nicht funktioniert, versuchen Sie, einen Port über 1024 weiterzuleiten (einige ISPs erlauben keinen Nicht-Business-Teilnehmerverkehr auf Ports unter 1024). Stellen Sie außerdem sicher, dass Sie in diesem Fall die Zeile in der Conf ändern, von der ich Ihnen gerade erzählt habe, dass sie denselben Wert wiedergibt.

Mike
quelle
Danke @Mike. Ich bin gerade auf ein interessantes Problem gestoßen, das ich als Bearbeiten: 0
hari
Ich habe den Port auf> 1024 geändert. Ich habe versucht, sshing an die IP-Adresse zu senden, die ich von whatismyip.com (meiner externen IP) erhalte, aber meine Verbindung läuft ab. Fehler erhalten: "Zeitüberschreitung der Verbindung"
Hari
0

Versuchen Sie, den SSH-Port auf 443 zu ändern. Wenn Sie eine Verbindung zu diesem Port herstellen können, besteht ein Proxy zwischen dem Client und Ihrem Heim-PC

Protokollieren Sie alle verworfenen und weitergeleiteten Pakete in Ihrer Firewall. Dadurch können Sie möglicherweise falsche Weiterleitungsregeln finden

Versuchen Sie, Ihre externe IP mit nmap (oder einem anderen Tool) zu scannen (Ports <1024). Bei der Firewall-Protokollierung sollten unterbrochene Verbindungen angezeigt werden, und auf der Clientseite sollten geöffnete Ports angezeigt werden

Erstellen Sie vom Client aus eine Traceroute zu Ihrem Heim-PC. Gibt es unerwartete Hosts zwischen diesen Hosts? Sind diese Forward-Ports korrekt?

vasily-vm
quelle
0

Versuchen Sie mit tcptraceroute zu debuggen, wenn Sie zuerst zum Remote-Port wechseln können. Wenn ein Computer den Port blockiert, sehen Sie dies in der Ausgabe. Versuchen Sie, netstat -atun zu verwenden, um die offenen Ports / Verbindungen auf beiden Computern anzuzeigen.

user10819
quelle