ich habeeinsWebserver mitzwei nicsin einzelnen Subnetzen192.168.188.xUnd192.168.198.xDieser Webserver ist mit 2 verschiedenen Routern (192.168.188.1 und 192.168.198.1) verbunden und über Portforwarding über Port 80 direkt mit dem Internet verbunden (jeder Router hat auch eine eigene öffentliche IP-Adresse).
(external ip) Portforwarding:80 (external ip)
---[ROUTER]---- ---[ROUTER]----
192.168.188.1 Router internal IP 192.168.198.1
| |
| |
| |
| |
+------- 192.168.188.11:80 [WEBSERVER] 192.168.198.11:80 -------+
Ich möchte den Server auf Port 80 fürbeideSubnetze. Leider antwortet es in der Standardkonfiguration nur dem Router, der als Standardgateway eingestellt ist, was ziemlich logisch ist. Aber ich muss es so einrichten, dass die Pakete an die Schnittstelle zurückgesendet werden, von der die Pakete kamen. Wie erreicht man das? Es gibt keine weitere Konfigurationsmöglichkeit über die Portweiterleitung auf den Routern hinaus, z. B. für NAT usw., alles muss auf dem Webserver erledigt werden, der Debian Stretch ist.
Bedenken Sie bitte, dass ich nur etwa einmal in 10 Jahren mit Netzwerkproblemen konfrontiert bin, also machen Sie es mir bitte einfach. :)
Antwort1
Wenn Ihr Webserver richtig konfiguriert ist, um auf 0.0.0.0:80 zu hören, was Sie überprüfen können, ss -l
dann liegt Ihr Problem nicht an der Konfiguration des Webservers, sondern am Routing-Problem. Auch wenn Sie zwei haben, kann immer nur eine Route gleichzeitig erkannt werden. Die einzige Möglichkeit, das gewünschte Ergebnis zu erzielen, besteht darin, eine zweite Standardroute hinzuzufügen und Source Policy Routing zu verwenden. Wenn der Server Linux ist, kann dies über iptables erfolgen. Versuchen SieDasoderDas.
Antwort2
Die Lösung erfordert eine komplexe Routing-Konfiguration.
Der Webserver sollte auf beide (
192.168.188.11
und192.168.198.11
) Adressen oder die0.0.0.0
Adresse hören, was bedeutetall addresses
. Überprüfen Sie es mitss -tlnp sport == :80
dem Befehl.Erstellen Sie eine separate Routing-Tabelle für jedenBeine:
ip route add 192.168.188.0/24 dev <iface1> table 1
ip route add 0/0 via 192.168.118.1 dev <iface1> table 1
ip route add 192.168.198.0/24 dev <iface2> table 2
ip route add 0/0 via 192.168.198.1 dev <iface2> table 2
- Konfigurieren Sie die Routing-Regeln so, dass die Antworten über dieselbe Schnittstelle weitergeleitet werden, über die die Anforderung empfangen wurde:
ip rule add from 192.168.188.11 lookup 1 pref 1000
ip rule add from 192.168.198.11 lookup 2 pref 2000
- Fehlerbehebung:
- Verwenden Sie dies,
tcpdump -ni <iface> 'tcp port 80'
um den Datenverkehr zu überwachen. Zumindest sollten Sie die HTTP-Anfragen von außen sehen. - Überprüfen Sie die Route fürAnfragenmit
ip route get <dst> from <src> iif <iface>
. Es sollte die Route anzeigenlocal
. Wenn es etwas anderes anzeigt, überprüfen Sie den Befehlrp_filter
mitip netconf show dev <iface>
. Es sollteoff
oder imloose
-Modus sein. - Überprüfen Sie die tatsächliche Route fürAntwortenmit
ip route get <dst> from <src-address>
, wobei die Zieladresse die Quelladresse desAnfragenSie haben es in dertcpdump
Ausgabe gesehen. - Überprüfen Sie die Firewall-Regeln mit dem Befehl
iptables-save -c
. Die Konfigurationerfordert nichtIrgendwelche zusätzlichennatürlichRegeln!