1

У меня довольно простой сценарий. К сожалению, я не нашел ответа, соответствующего этой проблеме. У меня есть два маршрутизатора 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 ответ1

0

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

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

Вы сделали.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .