Я нашел вопрос, похожий на свой, но он не дал ответа, который я искал.
Я работаю в школе с двумя отдельными подключениями к Интернету, подключенными к двум отдельным маршрутизаторам 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. Это упростит задачу (см. Ниже).
В основном вам необходимо:
throw
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