У меня проблема с настройкой правил и маршрутов iptables на клиенте Linux для сценария с DNAT и несколькими шлюзами:
У нас есть два выхода в Интернет. У первого фиксированный IP-адрес, у второго лучше пропускная способность. Оба шлюза выполняют SNAT для исходящего трафика из нашей частной сети.
На первом шлюзе с фиксированным IP-адресом я настроил переадресацию портов для порта 22, чтобы весь трафик SSH пересылался моему клиенту Linux.
Это нормально работает.
Но только если я использую этот первый шлюз в качестве маршрута по умолчанию на клиенте Linux.
Когда я переключаю клиент Linux на второй шлюз в качестве маршрута по умолчанию, входящие соединения SSH больше не работают.
Как я могу настроить клиент Linux для отправки ответных пакетов, связанных с входящими SSH-соединениями, на первый шлюз, а весь остальной трафик - на второй шлюз?
Я нашел решение в принятый ответ на вопрос «Направлять обратный трафик на правильный шлюз в зависимости от услуги».
Я реализовал эти правила на своем Linux-клиенте:
# Default route is second gateway:
ip route add default via 10.0.0.2
# Create a routing table "FIXED" using our fixed IP gateway
echo "200 FIXED" >>/etc/iproute2/rt_tables
ip route add default table FIXED via 10.0.0.1
# Create a rule to route any packets marked "42" through FIXED:
ip rule add fwmark 42 table FIXED
# Finally, the iptables rule:
# Any outgoing traffic from source port 22 of my Linux client
# that has a destination inside our private network (10.0.0.0/24)
# is marked "42" (and therefore goes to FIXED):
iptables -t mangle -A OUTPUT ! -d 10.0.0.0/24 \
-p tcp -m tcp --sport 22 \
-j MARK --set-mark 42