Linux comme routeur: j'ai 3 fournisseurs Internet, chacun avec son propre modem.
Provider1 , qui est l'adresse de passerelle 192.168.1.1
Connecté au routeur linux eth1 /192.168.1.2
Provider2 , adresse de passerelle 192.168.2.1
Connecté au routeur linux eth2 /192.168.2.2
Provider3 , adresse de passerelle 192.168.3.1
Connecté au routeur linux 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 | |
+------------+ \________
Je voudrais router les clients du réseau 10.0.0.0/24 par IP source vers différentes passerelles.
L'interface avec le réseau client est eth0 /10.0.0.1, qui est la passerelle par défaut pour tous les clients.
Par exemple:
10.0.0.11 doit être routé vers Provider1 @ eth1
10.0.0.12 doit être routé vers Provider2 @ eth2
... et ainsi de suite ...
Je pense que je dois utiliser ip route
et iptables
pour SNAT, mais je n'ai pas compris exactement comment.
Voici le script que j'ai jusqu'à présent.
le transfert ipv4 est activé.
#!/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
Réponses:
Voici une configuration similaire de l'un de nos routeurs (avec des trucs non pertinents coupés). Notez que cela gère également les connexions entrantes .
Notez l'utilisation de variables au lieu de numéros de repère codés en dur. Tellement plus facile à entretenir! Ils sont stockés dans un script séparé et fournis dans. Les noms de table sont configurés dans
/etc/iproute2/rt_tables
. Les noms d'interface sont définis/etc/udev/rules.d/70-persistent-net.rules
.Et les règles:
Les tables de routage sont configurées
/etc/network/interfaces
, de sorte que la suppression d'une interface permet de passer à une autre:Remarque: Si vous effectuez également le filtrage (ce que vous êtes probablement), vous devrez également ajouter les règles appropriées
FORWARD
auACCEPT
trafic. Surtout pour tout trafic entrant.la source
ip rule add from 10.0.0.0/24 pref 1400 lookup eth2
et en créant des exceptions par la suite.