Простая маршрутизация на основе политик для сопоставления исходного пакета и возвращаемого пакета
У меня есть два модем-маршрутизатора 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-адрес сопоставляется с IP-адресом ответа,
- Значение "асинхронный" в приведенном выше примере,
- Если приведенный выше пример даже отдаленно подходит для моих нужд, и
- Где я должен разместить эту конфигурацию на стандартном сервере Ubuntu?
2 ответа
Вам нужно добавить дополнительный IP на сервер (например, 192.168.0.4
) и DNAT трафик, поступающий на ADSL Modem 2 по новому адресу. Таким образом, сервер сможет различать 2 восходящих соединения; на данный момент он не может этого сделать, потому что весь трафик, который он видит, предназначен для 192.168.0.3
с любого адреса источника в Интернете без указания того, какой модем ADSL прошел пакет.
При дополнительной настройке IP-адреса в маршрутизации на основе политик вы помечаете любой трафик на 192.168.0.3
с меткой, которая использует таблицу маршрутов, которая по умолчанию направляет на ADSL Modem 1, и трафиком метки подключения к 192.168.0.4
с отметкой об использовании таблицы маршрутизации с ADSL Modem 2 в качестве шлюза по умолчанию.
Я настраивал это в прошлом, используя политику маршрутизации из Linux Advanced Routing and Traffic Control Howto.
В вашем случае у вас немного другая конфигурация с переключателем посередине. Вы можете адаптировать свою конфигурацию к предложению, возможно, добавив второй ник. В противном случае вам может потребоваться настроить несколько сетей VLAN, чтобы выполнить то, что вам нужно, с помощью единой сети.