Ich habe 2 Netzwerkkarten mit öffentlichen IPs. Ich betreibe 2 Dienste. Wie route ich also die Verbindungen?
Derzeit funktioniert nur eine Schnittstellen-IP, obwohl beide vom Internet aus pingbar sind.
Meine Routing-Tabelle sieht momentan so aus:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.128.1 0.0.0.0 UG 0 0 0 eth1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.31.128.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.31.129.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Was muss ich also hinzufügen, damit es funktioniert?
Im Moment funktioniert eth1 ohne Probleme.
Antwort1
Aufgrund der Schnittstellennamen und des Tags „iproute2“ gehe ich von Linux aus.
Dies funktioniert nicht, da das einfache Angeben einer Standardroute bedeutet, dass der gesamte ausgehende Datenverkehr über diese Schnittstelle geleitet wird, sogar Antworten auf Anfragen, die von der anderen Schnittstelle stammen!
In Ihrem Fall sagen Sie, dass Sie öffentliche IPs haben, die beiden direkt verbundenen Schnittstellen jedoch private IP-Adressen haben. Daher gehe ich davon aus, dass dies bedeutet, dass bei Ihnen NAT aktiv ist. Wenn Sie NAT haben, können Sie diese Art von Dreiecksrouting nicht verwenden, bei dem eingehende und ausgehende Pakete unterschiedliche Pfade nehmen, da die Pakete auf dem Weg von der NAT-Box geändert wurden und auf dem Weg nach draußen auf die gleiche Weise geändert werden müssen. Ihr anfordernder Client empfängt letztendlich Pakete von einer IP-Adresse, die er nicht erwartet, und erkennt die Antwort nicht.
Sie müssen dem Betriebssystem mitteilen, dass alle Pakete mit IP-Adressen, die von Ihrer Schnittstelle 172.31.128.0/24 in Richtung Internet gesendet werden, das Gateway bei 172.31.128.1 erreichen müssen, und entsprechend für das Subnetz 172.31.129.0/24.
Dies kann folgendermaßen erreicht werden:
ip route add 172.31.129.0/24 dev eth0 src 172.31.129.XXX table T1
ip route add default via 172.31.129.1 table T1
ip route add 172.31.128.0/24 dev eth1 src 172.31.128.XXX table T2
ip route add default via 172.31.128.1 table T2
ip rule add from 172.31.129.XXX table T1
ip rule add from 172.31.128.XXX table T2
Sie müssen XXX durch die IP-Adresse Ihres Servers in diesen lokalen Subnetzen ersetzen.
Damit haben Sie den Anfang gemacht. Mehr zu diesem Thema finden Sie inAbschnitt 4.2 des Linux Advanced Routing & Traffic Control HOWTO.