Ответить на запрос на правильном шлюзе

Ответить на запрос на правильном шлюзе

У меня довольно простой сценарий. К сожалению, я не нашел ответа, соответствующего этой проблеме. У меня есть два маршрутизатора (=шлюза) Linux для разных WAN (192.168.0.70 и 192.168.0.80). Оба перенаправляют порт 50000 на сервер Linux 192.168.0.60. На сервере есть только один интерфейс со шлюзом по умолчанию 192.168.0.70. Без дополнительной настройки вы получаете следующее поведение:

входящий запрос через 192.168.0.70 -> ответ работает (из-за шлюза по умолчанию)

входящий запрос через 192.168.0.80 -> не работает, так как ответ принимает 192.168.0.70

Как сделать так, чтобы запросы через 192.168.0.80 отправлялись обратно через 192.168.0.80?

решение1

Нам придется помечать НОВЫЕ соединения маркером, затем различать исходящие пакеты на основе маркера и использовать одну из двух таблиц маршрутизации для их маршрутизации на соответствующий шлюз. Возможно, вам придется загрузить модуль CONNTRACK,

          modprobe ip_conntrack

Назовем MAC70 MAC-адресом шлюза 192.168.0.70, а MAC80 MAC-адресом 192.168.0.80. Тогда

       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC70 -p tcp --dport 50000 -j CONNMARK --set-mark 1
       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC80 -p tcp --dport 50000 -j CONNMARK --set-mark 2

Эти два правила помечают входящие новые соединения (для протокола TCP, измените, если нужно) двумя простыми маркерами. Маркеры предназначены для целых соединений,то естьвсе последующие пакеты типа ESTABLISHED, RELATED, принадлежащие этому исходному пакету, будут иметь ту же самую метку.

Различие может быть установлено только на основе MAC-адреса шлюза, поскольку исходный IP-адрес каждого пакета — это адрес клиента, который начинает соединение,нетшлюза. Следовательно, это применимо только к соединениям Ethernet, поскольку кадры Wi-Fi не содержат MAC-адресов.

Сейчас

       ip rule add fwmark 1 table router70
       ip rule add fwmark 2 table router80

Эти две команды указывают, какую таблицу маршрутизации (из двух) использовать, в зависимости от метки соединения/пакета.

Теперь настраиваем две таблицы маршрутизации:

        echo 200 router70 >> /etc/iproute2/rt_tables
        echo 201 router80 >> /etc/iproute2/rt_tables
        ip route add 192.168.0.0/24 dev eth0 table router70
        ip route add 192.168.0.0/24 dev eth0 table router80
        ip route add default via 192.168.0.70 table router70
        ip route add default via 192.168.0.80 table router80

Это предполагает, что ваш сетевой адаптер Ethernet называется eth0, в противном случае измените его соответствующим образом. Маршрутизация для всех остальных портов и/или протоколов остается той, которая у вас уже есть, какой бы она ни была.

Вы сделали.

Связанный контент