Данный: компьютер под управлением CentOS 8 с тремя сетевыми адаптерами.
eth0, eth2: внешний, подключен к двум разным интернет-провайдерам
eth1: выходит на домашнюю сеть (интранет)
Задание: разрешить доступ к определенным внутренним сервисам от любого провайдера. Есть несколько сервисов, я упоминаю только SSH ниже.
В конфигурациях ниже:
IP1: внешний IP у первого интернет-провайдера (ISP1), назначенный eth0
Gateway1: IP шлюза, предоставленного ISP1
Network1,Netmask1: относится к IP1
IP2: внешний IP у второго интернет-провайдера (ISP2), назначенный eth2
Gateway2: IP шлюза, предоставленного ISP2
Network2,Netmask2: относится к IP2
LocalSSHIP: IP в интрасети (eth1), где работает сервер SSH
Текущие конфигурации приведены ниже. Таблицы маршрутизации:
echo "200 isp1" >> /etc/iproute2/rt_tables
echo "201 isp2" >> /etc/iproute2/rt_tables
Политики маршрутизации:
/etc/sysconfig/network-scripts/route-eth0
Network1 dev eth0 src IP1 table isp1
default via Gateway1 dev eth0 table isp1
/etc/sysconfig/network-scripts/route-eth2
Network2 dev eth2 src IP2 table isp2
default via Gateway2 dev eth2 table isp2
Правила маршрутизации:
/etc/sysconfig/network-scripts/rule-eth0
from IP1/32 table isp1
/etc/sysconfig/network-scripts/rule-eth2
from IP2/32 table isp2
Фрагменты iptables. Внешний трафик, перенаправленный на локальный SSH-сервер с обоих интерфейсов:
iptables -A PREROUTING -t nat -i eth0 -p tcp -d IP1 --dport 22 -j DNAT --to LocalSSHIP:22
iptables -A PREROUTING -t nat -i eth2 -p tcp -d IP2 --dport 22 -j DNAT --to LocalSSHIP:22
iptables -A FORWARD -p tcp -d LocalSSHIP --dport 22 -j ACCEPT
eth0 — шлюз по умолчанию:
$ ip route
default via Gateway1 dev eth0 proto static metric 100
default via Gateway2 dev eth2 proto static metric 101
...
$ ip правило
0: from all lookup local
32764: from IP2 lookup isp2
32765: from IP1 lookup isp1
32766: from all lookup main
32767: from all lookup default
SNAT применяется к трафику, исходящему от eth1:
iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j SNAT --to-source IP1
Текущая ситуация:
- Все службы, перенаправленные с eth0, работают нормально.
- Весь трафик, исходящий из интрасети, проходит и возвращается нормально.
- Все попытки доступа к сервисам из eth2 завершаются тайм-аутом.
В /var/log/messages нет никаких явных намеков (вроде жалоб на «марсианские IP-адреса»).
Я немного растерялся, буду очень рад любым советам.