Как использовать два шлюза с одним и тем же IP-адресом?

Мне нужно настроить NAT и вручную разделить интернет-трафик между двумя шлюзами, которые подключены к ящику Linux.

Не было проблем, если каждый шлюз имеет определенный IP-адрес. Я могу сделать это с помощью iproute2 :

 ip route add default via 192.168.1.1 dev eth1 ip route add 2.3.4.5 via 192.168.0.1 dev eth0 ip route add 8.9.4.5 via 192.168.0.1 dev eth0 

Но моя проблема так проста! У меня нет доступа к изменению адресов шлюзов и сетевых идентификаторов. Мне просто нужно использовать два интернет-шлюза с тем же адресом из ящика Linux с ядром 3.2.0 и выше.

  +-----------+ | Gateway A | +-----------------------+ |192.168.0.1| | eth0+---->+-----------+ +--------------+eth2 Linux Box | | | eth1+---->+-----------+ | +-----------------------+ | Gateway A | | |192.168.0.1| | +-----------+ +--------+-----------+ | Private Network |--------> Workstation A | | | 10.0.0.0/24 |--------> Workstation B +--------------------+ 

Как я могу решить эту проблему с помощью удивительных сетевых инструментов Linux ( mangling , snat или что-то еще)?

Наконец то я понял. после некоторых попыток я обнаружил, что ядро ​​linux не имеет проблем в этой ситуации. он работает как очаровательный! по этим правилам и маршрутам iproute2:

eth0: 192.168.0.231/24 -> Gateway A: dwl2100ap

eth1: 192.168.0.230/24 -> Gateway B: dwlg132

Настройка интерфейсов:

 ip addr add 192.168.0.231/24 dev eth0 ip addr add 192.168.0.230/24 dev eth1 

Добавление двух таблиц маршрутизации:

 echo "1 dwl2100ap" >> /etc/iproute2/rt_tables echo "2 dwlg132" >> /etc/iproute2/rt_tables 

Добавление маршрутов к таблицам:

 ip route add 192.168.0.0/24 dev eth0 src 192.168.0.231 table dwl2100ap ip route add default via 192.168.0.1 dev eth0 table dwl2100ap ip route add 192.168.0.0/24 dev eth1 src 192.168.0.230 table dwlg132 ip route add default via 192.168.0.1 dev eth1 table dwlg132 

Затем вы настраиваете правила маршрутизации. Фактически они выбирают, с какой маршрутной таблицей маршрутизировать. Вы хотите убедиться, что вы маршрутизируете данный интерфейс, если у вас уже есть соответствующий адрес источника:

 ip rule add from 192.168.0.231 table dwl2100ap ip rule add from 192.168.0.230 table dwlg132 

Маскарирование всех исходящих пакетов:

 iptables -tnat -APOSTROUTING -s10.0.0.0/24 -j MASQUERADE 

Чтобы позволить ядру разделить пропускную способность, я могу отправить этот маршрут:

 ip route add default scope global nexthop via 192.168.0.1 dev eth0 weight 2 nexthop via 192.168.0.1 dev eth1 weight 1 

Для маршрутизации вручную:

 ip route add default via 192.168.0.1 dev eth0 ip route add 8.8.8.8 via 192.168.0.1 dev eth0 ip route add 8.8.4.4 via 192.168.0.1 dev eth1 

ИЗМЕНИТЬ 1:

Кроме того, я могу отметить некоторые пакеты с помощью iptables:

 iptables -tmangle -APREROUTING -i eth2 -s 10.0.0.4 -jMARK --set-mark 4 

Затем проложите их с помощью политики маршрутизации:

 ip rule add fwmark 4 table dwl2100ap 

Мне интересно, что он работает с двумя шлюзами с одинаковым IP-адресом. в ядре 3.2.0-53.