
Ist es möglich, einen Linux-Server mit iptables entsprechend zu konfigurieren?
PC (192.168.1.11) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
PC (192.168.1.12) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
PC (192.168.1.13) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router1 (192.168.0.1)
...
PC (192.168.1.21) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
PC (192.168.1.22) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
PC (192.168.1.23) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router2 (192.168.0.2)
...
PC (192.168.1.31) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
PC (192.168.1.32) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
PC (192.168.1.33) ===> (192.168.1.1) Linux Server (192.168.0.100) ===> Router3 (192.168.0.3)
...
Antwort1
iptablesist kein Tool für das Routing. Obwohl es manchmal zur Ergänzung der Routing-Konfiguration durch Markieren von Paketen verwendet werden kann, ist dies hier nicht einmal erforderlich.
Erforderlich istRichtlinienbasiertes Routing: Verwenden Sie zur Auswahl einer Route etwas anderes als nur die Zieladresse: die Quelladresse.
Unter der Annahme oder Feststellung, dass:
- Der Linux-Server wird aufgerufenServer
- Alle 9 PCs,Serverund die 3 Router sind bereits gemäß dem Schema des OP konfiguriert
- Insbesondere die PCs benötigen keine besonderen Einstellungen. Sie müssen nurServerals Standard-Gateway.
- Alle Adressen im Schema des OP verwenden ein /24CIDR/Netzmaske.
- ServerVerwendet:
- eth0mit Adresse 192.168.1.1/24
- eth1mit Adresse 192.168.0.100/24
- ServerEs spielt keine Rolle, ob ein Standardgateway vorhanden ist oder nicht. Das Richtlinienrouting verwendet für weitergeleiteten Datenverkehr seine eigenen separaten Einstellungen und ist daher nicht auf das Standardgateway der Hauptroutingtabelle angewiesen, sofern vorhanden.
Falls nicht bereits geschehen, benötigen die 3 Router zusätzliche Routen, um 192.168.1.0/24 zu erreichen mitServerals Gateway. Dasselbe wäre auf Systemen erforderlich, die im LAN 192.168.0.0/24 erreichen. Wenn sie Linux ausführen würden, würde dies auf den 3 Routern oder jedem anderen System mit folgendem erledigt:
ip route add 192.168.1.0/24 via 192.168.0.100
BEARBEITEN: alsspäter gefragt, wenn man keine anderen Systeme im 192.168.0.0/24 LAN neu konfigurieren darf,Serverkann NAT auf dem Server verwenden, um die Existenz von 192.168.1.0/24 vor diesen Systemen, einschließlich der 3 Router, zu verbergen. Da dies außerhalb der Routing-Phase erfolgt, ist es unabhängig vom Rest der Routing-Konfiguration unten.
Anstatt dies also auf Routern (oder jedem anderen System) zu tun, kann man eineniptables MASQUERADE
Ziel aufServer:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
Jetzt weiterServer, werden 3 alternative Regelgruppen erstellt, um drei zusätzliche Routingtabellen zu erreichen: eine pro ausgewähltem Router, mit diesem Router als Standardgateway. Es ist richtig, dass es nur ein Standardgateway geben kann, aber es ist eines pro Routingtabelle.
Da die IP-Adressen der PCs nicht in Blöcken angeordnet sind, werden 3x3-Regeln verwendet (bei korrekt ausgerichteten IP-Blöcken würden 3 Regeln mit entsprechenden CIDR/Netzmasken ausreichen).
Beschrieben inip rule(8)
:
Unter bestimmten Umständen möchten wir Pakete nicht nur je nach Zieladresse, sondern auch je nach anderen Paketfeldern unterschiedlich weiterleiten: Quelladresse, IP-Protokoll, Transportprotokoll-Ports oder sogar Paketnutzlast. Diese Aufgabe wird als „Policy Routing“ bezeichnet.
[...]
Jede Policy-Routing-Regel besteht aus einem Selektor und einem Aktionsprädikat.
In diesem Fall wählt der Selektor die Quelladressen des PCs aus und die Aktion besteht darin, die zusätzlichen Routingtabellen nachzuschlagen, wodurch die übliche Suche nach denhauptsächlichTabelle, um ein dediziertes Gateway auszuwählen.
Routing-Regeln (die auf nur 3 Regeln vereinfacht werden könnten, wenn die IP-Adressen der PCs in entsprechenden Blöcken angeordnet wären):
ip rule add from 192.168.1.11 lookup 10
ip rule add from 192.168.1.12 lookup 10
ip rule add from 192.168.1.13 lookup 10
ip rule add from 192.168.1.21 lookup 20
ip rule add from 192.168.1.22 lookup 20
ip rule add from 192.168.1.23 lookup 20
ip rule add from 192.168.1.31 lookup 30
ip rule add from 192.168.1.32 lookup 30
ip rule add from 192.168.1.33 lookup 30
Beschrieben inip route(8)
:
Routentabellen: Linux-2.x kann Routen in mehrere Routing-Tabellen packen, die durch eine Nummer im Bereich von 1 bis 2^32-1 oder durch einen Namen aus der Datei /etc/iproute2/rt_tables identifiziert werden. Standardmäßig werden alle normalen Routen in die Haupttabelle (ID 254) eingefügt und der Kernel verwendet diese Tabelle nur zur Berechnung der Routen. [...]
Füllen Sie zusätzliche Routingtabellen mit beliebigen Werten 10, 20 und 30. Jede Routingtabelle behandelt eine Teilansicht des Routings, die dem zu lösenden Problem angemessen ist. Hier geht es darum, ein anderes Gateway auszuwählen.
ip route add default via 192.168.0.1 dev eth1 table 10
ip route add default via 192.168.0.2 dev eth1 table 20
ip route add default via 192.168.0.3 dev eth1 table 30
Sollten die PCs auf andere Systeme in 192.168.0.0/24 zugreifen müssen, sollten diese LAN-Routen hinzugefügt werden (um eine teilweise Haarnadelkurve durch die Router zu vermeiden, was nie eine gute Idee ist):
ip route add 192.168.0.0/24 dev eth1 table 10
ip route add 192.168.0.0/24 dev eth1 table 20
ip route add 192.168.0.0/24 dev eth1 table 30
Das Ergebnis kann überprüft werden aufServermit ip route get
:
root@server:~# ip route get from 192.168.1.11 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.11 via 192.168.0.1 dev eth1 table 10
cache iif eth0
root@server:~# ip route get from 192.168.1.21 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.21 via 192.168.0.2 dev eth1 table 20
cache iif eth0
root@server:~# ip route get from 192.168.1.31 iif eth0 to 8.8.8.8
8.8.8.8 from 192.168.1.31 via 192.168.0.3 dev eth1 table 30
cache iif eth0
Andere Systeme im 192.168.1.0/24 LAN folgen demhauptsächlichRouting-Tabelle ohne richtlinienbasiertes Routing. Wenn zum BeispielServerhat keine Standardroute inhauptsächlichTabelle, sondern nur deren zwei LAN-Routen, dann wird nichts anderes über 192.168.0.0/24 LAN hinaus geroutet:
root@server:~# ip route get from 192.168.1.41 iif eth0 to 8.8.8.8
RTNETLINK answers: Network is unreachable
Anmerkungen
Die drei Router könnten beispielsweise Internet-Gateways sein, die NAT durchführen und in einem kostengünstigen Setup jeweils über eine einzelne öffentliche IP-Adresse (möglicherweise über einen anderen ISP) auf das Internet zugreifen, sodass im Internet drei PC-Gruppen mit drei unterschiedlichen öffentlichen IP-Adressen angezeigt werden.
Die obige Konfiguration muss mit dem Tool zur Netzwerkkonfiguration integriert werden.Server. Abhängig von der Distribution gibt es viele solcher Tools, wie zum Beispielwennauf,Netzwerk Manager,systemd-networkd,Netzplanund wahrscheinlich viele andere, jedes mit seiner spezifischen Konfigurationsmethode. Es ist sicherlich auch möglich, stattdessen ein Skript mit den oben angegebenen Befehlen zu verwenden.