Linux als Router: Ich habe 3 Internetprovider mit jeweils eigenem Modem.
Provider1 , Gateway-Adresse 192.168.1.1
Verbunden mit Linux-Router eth1 /192.168.1.2
Provider2 , Gateway-Adresse 192.168.2.1
Verbunden mit Linux-Router eth2 /192.168.2.2
Provider3 , Gateway-Adresse 192.168.3.1
Verbunden mit Linux-Router eth3 /192.168.3.2
________
+------------+ /
| | |
+----------------------+ Provider 1 +--------|
__ |192.168.1.2 |192.168.1.1 | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | eth1 | +------------+ /
/ \ eth0| |192.168.2.2 | | |
|Client network -----+ ROUTER eth2|--------------+ Provider 2 +------| Internet
\10.0.0.0/24 __/ | | |192.168.2.1 | |
\__ __/ | eth3 | +------------+ \
\___/ +------+-------+ +------------+ |
|192.168.3.2 | | \
+----------------------+ Provider 3 +-------|
|192.168.3.1 | |
+------------+ \________
Ich möchte die Clients im Netzwerk 10.0.0.0/24 nach Quell-IP an verschiedene Gateways weiterleiten.
Die Schnittstelle zum Client-Netzwerk ist eth0 / 10.0.0.1. Dies ist das Standard-Gateway für alle Clients.
Beispiel:
10.0.0.11 sollte an Provider1 @ eth1 weitergeleitet werden
10.0.0.12 sollte an Provider2 @ eth2 weitergeleitet werden
... und so weiter ...
Ich denke, ich muss ip route
und iptables
für SNAT verwenden, aber ich habe nicht genau herausgefunden, wie.
Hier ist das Skript, das ich bisher habe.
Die IPv4-Weiterleitung ist aktiviert.
#!/bin/bash
# flush tables
ip route flush table connection1
ip route flush table connection2
ip route flush table connection3
# add the default gateways for each table
ip route add table connection1 default via 192.168.1.1
ip route add table connection2 default via 192.168.2.1
ip route add table connection3 default via 192.168.3.1
# add some IP addresses for marking
iptables -t mangle -A PREROUTING -s 10.0.0.11 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -s 10.0.0.12 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -s 10.0.0.13 -j MARK --set-mark 3
# add the source nat rules for each outgoing interface
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.2
iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 192.168.2.2
iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 192.168.3.2
# link routing tables to connections (?)
ip rule add fwmark 1 table connection1
ip rule add fwmark 2 table connection2
ip rule add fwmark 3 table connection3
#default route for anything not configured above should be eth2
Antworten:
Hier ist ein ähnliches Setup von einem unserer Router (mit etwas irrelevantem Material). Beachten Sie, dass dies auch eingehende Verbindungen behandelt.
Beachten Sie die Verwendung von Variablen anstelle von fest codierten Markierungsnummern. So viel einfacher zu warten! Sie werden in einem separaten Skript gespeichert und stammen aus. Tabellennamen werden in konfiguriert
/etc/iproute2/rt_tables
. Schnittstellennamen werden eingestellt/etc/udev/rules.d/70-persistent-net.rules
.Und die Regeln:
Die Routing-Tabellen werden so eingerichtet
/etc/network/interfaces
, dass beim Herunterfahren einer Schnittstelle eine andere verwendet wird:Hinweis: Wenn Sie tun und Filterung (die Sie wahrscheinlich sind) werden Sie auch die entsprechenden Regeln hinzufügen müssen ,
FORWARD
umACCEPT
den Verkehr. Vor allem für eingehenden Verkehr.quelle
ip rule add from 10.0.0.0/24 pref 1400 lookup eth2
und anschließend die Ausnahmen erstellt habe.