В офисе у нас есть сервер с одним $SERVER_IF
имея локальный IP-адрес $SERVER_IP_MAIN=192.168.1.12/24
за маршрутизатором ADSL $ROUTER_MAIN
со статическим внешним IP-адресом от $ISP_MAIN
. Все работает нормально, входящие и исходящие соединения проходят без проблем.
Теперь у нас есть еще одна связь с другим $ISP_BACKUP
для резервных целей, используя $ROUTER_BACKUP
. Мне не нужна балансировка нагрузки; все исходящие соединения должны по-прежнему проходить $ISP_MAIN
, Я просто хочу убедиться, что все входящие соединения через $ISP_BACKUP
проходят через $ROUTER_BACKUP
.
Я пытался следовать некоторым общим советам, используя ip route
и ip rule
, но я, должно быть, делаю что-то не так. (Мой основной источник: http://lartc.org/howto/lartc.rpdb.multiple-links.html )
Текущая настройка выглядит следующим образом:
server has:
$SERVER_IF=eth0 with address $SERVER_IP_MAIN=192.168.1.12/24
$SERVER_IF:0=eth0:0 with address $SERVER_IP_BACKUP=192.168.252.12/24 # pseudo interface
$ROUTER_MAIN has:
$ROUTER_MAIN_IP=192.168.1.254/24
$ROUTER_BACKUP has:
$ROUTER_BACKUP_IP=192.168.252.1/24
С помощью tcpdump
на сервере я подтвердил, что $ROUTER_BACKUP
настроен правильно, так как пакеты проходят $ISP_BACKUP
доставляются в $SERVER_IP_BACKUP
, но я предполагаю, что ответы проходят через $ISP_MAIN
потому что я не могу установить соединение с внешним сервером:
12:54:06.950853 IP 178.128.57.39.dsl.dyn.forthnet.gr.57987 > 192.168.252.12.5631: Flags [S], seq 2240370501, win 5840, options [mss 1452,sackOK,TS val 471912856 ecr 0,nop,wscale 4], length 0
12:54:06.950903 IP 192.168.252.12.5631 > 178.128.57.39.dsl.dyn.forthnet.gr.57987: Flags [S.], seq 2209117020, ack 2240370502, win 14480, options [mss 1460,sackOK,TS val 215023497 ecr 471912556,nop,wscale 4], length 0
Обратите внимание, что $ROUTER_BACKUP
не выполняет SNAT, поскольку сервер получает пакеты с исходным IP-адресом источника внешнего мира.
Как я могу реализовать то, что нужно? (т.е. соединения через $ISP_BACKUP
быть направленным через $ROUTER_BACKUP
)
Что ж, учитывая настройку, все, что нужно было, это:
backup
в /etc/iproute2/rt_tables
ip route add 192.168.252.0/24 dev eth0:0 src 192.168.252.12 table backup
(локальная сеть для резервных целей)ip route add default via 192.168.252.1 table backup
(его маршрут по умолчанию)ip rule add from 192.168.252.12 lookup backup
(используйте его при ответе от $SERVER_IP_BACKUP
)Должно быть, я как-то испортил последнюю строчку раньше.
После всего вышеперечисленного:
ip route flush table cache