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

Выбор шлюза по портам назначения

Я нашел вопрос, похожий на свой, но он не дал ответа, который я искал.

Я работаю в школе с двумя отдельными подключениями к Интернету, подключенными к двум отдельным маршрутизаторам NAT. В своей сети я настроил Linux-сервер, который использует один из них в качестве шлюза по умолчанию. Однако маршрутизатор по умолчанию не подключен напрямую к Интернету, и я не могу настроить переадресацию портов на нем. Другой есть, но он зарезервирован только для определенных целей, так как соединение намного медленнее.

Оба маршрутизатора находятся в одной сети, один с IP-адресом 192.168.1.1, а другой с IP-адресом 192.168.1.20. По умолчанию, который не подключен напрямую к Интернету, - 192.168.1.1.

Мой вопрос: если шлюз по умолчанию - 192.168.1.1, как мне заставить Linux-сервер использовать 192.168.1.20 в качестве шлюза для ответа на подключения к определенным портам, когда они приходят на один из сетевых интерфейсов (тот, который выполняет NAT для ), как SSH, без установки постоянных маршрутов на 192.168.1.20?

Я благодарю вас заранее.

Вам нужно будет использовать отслеживание подключений с маркировкой подключения, несколькими таблицами маршрутизации и идентифицировать «восходящий» маршрутизатор на основе MAC-адреса.

Если возможно, разделите 2 маршрутизатора на разные сети, даже если они все еще находятся на одном уровне 2. Это упростит задачу (см. Ниже).

В основном вам необходимо:

  1. Создайте 2 новые таблицы маршрутизации, одну с маршрутом по умолчанию через ISP1 (192.168.1.1) и одну с маршрутом по умолчанию через ISP2 (192.168.1.20)
  2. Измените маршрут по умолчанию в основной таблице маршрутизации на throw
  3. Используйте таблицу iptables mangle, чтобы отметить соединения, зависящие от их входящего маршрутизатора. В вашем случае вам нужно будет определить MAC-адрес каждого маршрутизатора, чтобы правильно пометить каждое соединение.

iptables правила для правильной маркировки каждого соединения:

iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -m mac --mac aa:aa:aa:aa:aa:aa -j CONNMARK --set-mark 100
iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -m mac --mac bb:bb:bb:bb:bb:bb -j CONNMARK --set-mark 200

Это не проверено; Я всегда использую отдельные интерфейсы, поэтому могу нас -i eth1 и -i eth2 вместо -m mac --mac синтаксис.

Полная информация и все кровавые подробности слишком велики для ответа здесь, но это отличное руководство, если вы его разберетесь: http://www.cyber.com.au/~twb/doc/dual-uplink.txt