Назад | Перейти на главную страницу

iptables с DNAT и несколькими шлюзами: как направить ответы на правильный шлюз?

У меня проблема с настройкой правил и маршрутов 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