Linux як маршрутизатор: У мене є 3 Інтернет-провайдери, кожен з яких має свій модем.
Provider1 , адреса шлюзу 192.168.1.1
Підключений до маршрутизатора Linux eth1 /192.168.1.2
Provider2 , адреса шлюзу 192.168.2.1
Підключено до маршрутизатора Linux eth2 /192.168.2.2
Provider3 , адреса шлюзу 192.168.3.1
Підключено до 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 | |
+------------+ \________
Я хотів би направити клієнтів у мережі 10.0.0.0/24 за допомогою джерела IP до різних шлюзів.
Інтерфейс до клієнтської мережі є eth0 /10.0.0.1, що є шлюзом за замовчуванням для всіх клієнтів.
Наприклад:
10.0.0.11 слід перенаправити на Provider1 @ eth1
10.0.0.12 слід перенаправити на Provider2 @ eth2
... і так далі ...
Я думаю, що мені потрібно використовувати ip route
і iptables
для SNAT, але я не зрозумів, як саме.
Ось сценарій у мене поки що.
ipv4 переадресація включена.
#!/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