У меня есть два модема-маршрутизатора ADSL и сервер в одном и том же диапазоне статических IP-адресов (192.168.0.1/24).
Internet 1 -- (1.1.1.1) Modem 1 (192.168.0.1) -- Switch -- (192.168.0.3) Server
Internet 2 -- (2.2.2.2) Modem 2 (192.168.0.2) -----/
Каждый из модемов перенаправляет порты на сервер, например ssh. Это работает с одним модемом, но не работает с другим. Если я провожу трассировку пакетов, пакеты ssh приходят на сервер и возвращаются через шлюз по умолчанию, внешний IP-адрес которого может отличаться от исходного. Если он не соответствует источнику, ответ отбрасывается, и время ожидания соединения ssh истекает.
например Если шлюз по умолчанию на сервере 192.168.0.1, то пакеты ssh будут проходить по следующим путям:
Request: SSH to 1.1.1.1 -> 192.168.0.1 -> 192.168.0.3
Response: 192.168.0.3 -> 192.168.0.1 -> 1.1.1.1
Result: WORKS! :-D
Request: SSH to 2.2.2.2 -> 192.168.0.2 -> 192.168.0.3
Response: 192.168.0.3 -> 192.168.0.1 -> 1.1.1.1
Result: WRONG RESPONSE IP (2.2.2.2 != 1.1.1.1)
Из беседы с людьми в сети IRC ## я понял, что мне нужна «маршрутизация на основе источника», тип маршрутизации на основе политик.
Насколько я могу судить, PBR выглядит примерно так:
access-list 1 permit 192.168.0.1
access-list 2 permit 192.168.0.2
!
interface async 1
ip policy route-map equal-access
!
route-map equal-access permit 10
match ip address 1
set ip default next-hop 192.168.0.1
route-map equal-access permit 20
match ip address 2
set ip default next-hop 192.168.0.2
route-map equal-access permit 30
set default interface null0
Я потратил много часов на изучение руководств и примеров по этому поводу, но они, похоже, не соответствуют моим потребностям. В частности, я не могу понять:
Вам необходимо добавить к серверу дополнительный IP-адрес (например, 192.168.0.4
) и DNAT - трафик, поступающий на ADSL-модем 2 по новому адресу. Таким образом, сервер сможет различать 2 восходящих соединения; в настоящий момент он не может этого сделать, потому что весь трафик, который он видит, предназначен для 192.168.0.3
с любого адреса источника в Интернете без указания того, через какой ADSL-модем прошел пакет.
С дополнительной настройкой IP-адреса в маршрутизации на основе политик вы отмечаете подключение любого трафика к 192.168.0.3
с меткой, которая использует таблицу маршрутов, которая по умолчанию направляет к ADSL-модему 1, а трафик метки подключения к 192.168.0.4
с пометкой для использования таблицы маршрутизации с ADSL-модемом 2 в качестве шлюза по умолчанию.
Я настраивал это в прошлом, используя маршрутизацию политики из Руководство по расширенной маршрутизации и управлению трафиком в Linux.
В вашем случае у вас немного другая конфигурация с переключателем посередине. Вы можете адаптировать свою конфигурацию к предложению, возможно, добавив второй nic. В противном случае вам может потребоваться настроить несколько VLAN, чтобы выполнить то, что вам нужно, с одним ником.