Lassen Sie den Debian Stretch Webserver auf beiden Netzwerkkarten antworten

Lassen Sie den Debian Stretch Webserver auf beiden Netzwerkkarten antworten

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 -ldann 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.

  1. Der Webserver sollte auf beide ( 192.168.188.11und 192.168.198.11) Adressen oder die 0.0.0.0Adresse hören, was bedeutet all addresses. Überprüfen Sie es mit ss -tlnp sport == :80dem Befehl.

  2. 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
  1. 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
  1. 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 anzeigen local. Wenn es etwas anderes anzeigt, überprüfen Sie den Befehl rp_filtermit ip netconf show dev <iface>. Es sollte offoder im loose-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 der tcpdumpAusgabe gesehen.
  • Überprüfen Sie die Firewall-Regeln mit dem Befehl iptables-save -c. Die Konfigurationerfordert nichtIrgendwelche zusätzlichennatürlichRegeln!

verwandte Informationen