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

У меня довольно простой сценарий. К сожалению, я не нашел ответа, соответствующего этой проблеме. У меня есть два маршрутизатора Linux (= шлюзы) для разных глобальных сетей (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, в противном случае измените его соответствующим образом. Маршрутизация для всех других портов и / или протоколов остается той, что у вас уже есть, какой бы она ни была.

Вы сделали.

Другие вопросы по тегам