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
Ответы:
Вот аналогичная настройка от одного из наших маршрутизаторов (с некоторыми несущественными вещами). Обратите внимание, что это также обрабатывает входящие соединения.
Обратите внимание на использование переменных вместо жестко заданных номеров меток. Так намного проще в обслуживании! Они хранятся в отдельном скрипте и получают из. Имена таблиц настраиваются в
/etc/iproute2/rt_tables
. Имена интерфейсов задаются в/etc/udev/rules.d/70-persistent-net.rules
.И правила:
Таблицы маршрутизации настроены
/etc/network/interfaces
так, что отключение интерфейса переключает его на использование другого:Примечание: Если вы делаете фильтрацию , а также (что вы , вероятно , есть) вам также необходимо добавить соответствующие правила
FORWARD
дляACCEPT
трафика. Особенно для любого входящего трафика.источник
ip rule add from 10.0.0.0/24 pref 1400 lookup eth2
и создав исключения позже.