Назад | Перейти на главную страницу

Простая маршрутизация на основе политик для сопоставления исходного пакета и возвращаемого пакета

У меня есть два модема-маршрутизатора 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

Я потратил много часов на изучение руководств и примеров по этому поводу, но они, похоже, не соответствуют моим потребностям. В частности, я не могу понять:

  1. Как исходный IP-адрес соответствует IP-адресу ответа,
  2. Значение async в приведенном выше примере,
  3. Если приведенный выше пример хотя бы отдаленно верен для моих нужд, и
  4. Где мне разместить эту конфигурацию на стандартном сервере Ubuntu?

Вам необходимо добавить к серверу дополнительный 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, чтобы выполнить то, что вам нужно, с одним ником.