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