Sorgen Sie dafür, dass der Linux-Server Pakete, die für seine externe IP bestimmt sind, an den lokalen Host weiterleitet.

Sorgen Sie dafür, dass der Linux-Server Pakete, die für seine externe IP bestimmt sind, an den lokalen Host weiterleitet.

Ich habe einen Router mit einer bestimmten statischen IP a.b.c.d, der auf der einen Seite mit einem Linux-Server und auf der anderen Seite mit dem Internet verbunden ist.

Der Zugriff auf eine auf dem Linux-Server installierte Software von außerhalb über die IP-Adresse a.b.c.d:portxxfunktioniert problemlos.

Wenn jedoch ein von jemandem vom Server selbst geöffneter Browser versucht, auf dieselbe Software zuzugreifen, a.b.c.d:portxxschlägt dies fehl. localhost:portxxEin erneuter Versuch funktioniert einwandfrei.

Meine Diagnose ist also, dass der DSL-Router dumm ist und das nicht erkennt a.b.c.d.

Gibt es eine Möglichkeit, dies zu beheben, vorzugsweise ohne etwas am Router zu ändern? Through /etc/hostsOder kann ein beliebiges Paket über einen anderen Mechanismus auf dem Server a.b.c.dumgeleitet werden localhost?

Kann dadurch noch etwas anderes kaputt gehen?

Antwort1

Das Problem liegt nicht am Router. Der Router tut, was er konfiguriert hat – er übersetzt das Verkehrsziel abcd:portxx auf Ihren Linux-Server. Das funktioniert nicht, aber um es zu verstehen, müssen Sie sich ansehen, was im Netzwerk passiert. Beispielsweise ist Ihr Linux-Server 192.168.1.2 und Ihr Router 192.168.1.1 in Ihrem LAN-Netzwerk.

  • Vom Server senden Sie ein Paket
  • Quelle 192.168.1.2:1024 Ziel abcd:portxx
  • auf dem Router erfolgt die Übersetzung (zurück zum Server)
  • Quelle 192.168.1.2:1024 Ziel 192.168.1.2:portxx
  • Paket kommt zur Server-Anwendung, sie antwortet - und sendet Antwortpaket
  • Quelle 192.168.1.2:portxx Ziel 192.168.1.2:1024
  • Paket kommt (bleibt) auf dem Server zur Client-Anwendung, aber diese Verbindung ist nicht bekannt, weil Sie eine Verbindung zu abcd initiieren und eine Antwort von 192.168.1.2 und nicht von (abcd) erhalten – Paket wird gelöscht.

Also mögliche Lösung:

1) Wenn möglich, stellen Sie auf dem Router SNAT für Pakete ein, die aus dem lokalen Netzwerk kommen, und zwar auf Ihre öffentliche NAT-IP. Wenn Sie einen Linux-Router haben, versuchen Sie etwas

iptables -t nat -I PREROUTING -s 192.168.0.0/24 -d a.b.c.d -j SNAT --to-source 192.168.1.1

Sie haben die Quellpaketadresse geändert, damit das Paket vom internen Netzwerk durch den Router geht, die Serveranwendung antwortet auf 192.168.1.1 und die SNAT-Regel beim Empfang der Antwort das Paket korrekt Ihrer Clientanwendung auf dem Server zuordnet. Diese Lösung funktioniert für alle Computer im internen Netzwerk, aber auf dem Server sehen Sie, dass alle Anfragen von der Routeradresse 192.168.1.1 kommen.

2) Auf dem Server können Sie den Verkehr mit iptables umleiten

 iptables -t nat -I OUTPUT -d a.b.c.d -p tcp --dport portxx -j REDIRECT --to-ports portxx

Es leitet die ausgehende Verbindung von Ihrem Server zum lokalen Port des Servers um.Ich denke, das könnte die beste Lösung für Ihren Fall sein

3) Das Hinzufügen einer abcd-Adresse auf dem Server könnte in einigen Fällen eine Lösung sein, aber manchmal hört der Server-Daemon (und dieser ist anwendungsspezifisch) nicht auf allen IP-Adressen zu oder gibt eine andere Antwort für andere Adressen.

4) Wenn Sie Hostnamen und keine IP-Adressen verwenden, können Sie /etc/hosts auf dem Linux-Server neu definieren - das ist am einfachsten und manchmal hilfreich (DNS-Rückgabe: Linuxserver abcd). Schreiben Sie also in /etc/hosts die Zeile

192.168.1.2 linuxserver

Und die Verbindung vom Linux-Server zum "Linuxserver" geht direkt zu 192.168.1.2

verwandte Informationen