как перенаправить порты через несколько переходов с помощью iptables

Я борюсь с этим уже некоторое время и, несмотря на мои усилия, не могу заставить это работать. Я хочу перенаправить порты с общедоступного IP-адреса на хост (host1) в корпоративной сети. Дело в том, что между ними есть несколько «прыжков». Хост находится за брандмауэром, который находится за маршрутизатором Linux, установленным в качестве клиента vpn. Затем весь трафик из корпоративной сети проходит через vpn на VPS в облаке, установленном в качестве vpn-сервера, а затем в Интернет (надеюсь, я достаточно ясен ...) Вот приблизительная схема:

NC1 <==> Интернет <==> VPS (VPN-сервер) <==> Linux-маршрутизатор (VPN-клиент) <==> Брандмауэр <==> Сеть (host1 с прослушивателем netcast на порту 9000)

Вот правила iptables, которые я установил на VPS:

iptables -A FORWARD -i ens3 -o tun0 -p tcp --syn --dport 9000 -m conntrack --ctstate NEW -j ACCEPT

iptables -A FORWARD -i ens3 -o tun0 -d 10.8.0.7 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o ens3 -s 10.8.0.7 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 9000 -j DNAT --to-destination 10.8.0.7

iptables -t nat -A POSTROUTING -o tun0 -p tcp --dport 9000 -d 10.8.0.7 -j SNAT --to-source <Public IP>

iptables -t nat -A POSTROUTING -p tcp -o tun0 --dport 9000 -j MASQUERADE

С этими правилами мне удалось без проблем установить соединение из Интернета с Linux-маршрутизатором

Теперь я пытаюсь переслать те же порты от маршрутизатора linux к клиентскому хосту (соответствующие правила перенаправления уже установлены в брандмауэре):

iptables -A FORWARD -i tun0 -o enp0s8 -p tcp --syn --dport 9000 -m conntrack --ctstate NEW -j ACCEPT

iptables -A FORWARD -i tun0 -o enp0s8 -d 10.0.2.11 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o tun0 -s 10.0.2.11 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 9000 -j DNAT --to-destination 10.0.2.11

iptables -t nat -A POSTROUTING -o enp0s8 -p tcp --dport 9000 -d 10.0.2.11 -j SNAT --to-source 10.0.2.100

iptables -t nat -A POSTROUTING -p tcp -o enp0s8 --dport 9000 -j MASQUERADE

10.0.2.11 - это WAN IP брандмауэра, а 10.0.2.100 - IP интерфейса enp0s8 Linux роутер подключен к межсетевому экрану. 10.8.0.7 - это IP-адрес tun0 маршрутизатора linux.

Здесь все перестает работать. Когда я настраиваю прослушиватель netcat на host1 и пытаюсь подключиться из Интернета (NC1), я получаю ошибку тайм-аута соединения.

Вот вывод tcpdump от компьютера NC1, пытающегося подключиться к netcat listener на host1:

13:57:05.541009 IP NC1.59820 > xx.xx.xx.xx.9000: Flags [S], seq 681754542, win 29200, options [mss 1460,sackOK,TS val 2294604797 ecr 0,nop,wscale 7], length 0

tcpdump из интерфейса tun0 маршрутизатора linux:

15:53:18.060563 IP 10.8.0.1.59818 > 10.8.0.7.9000: Flags [S], seq 3131331659, win 29200, options [mss 1308,sackOK,TS val 2294404076 ecr 0,nop,wscale 7], length 0

tcpdump из интерфейса enp0s8 маршрутизатора linux:

15:53:18.060619 IP 10.0.2.100.59818 > 10.0.2.11.9000: Flags [S], seq 3131331659, win 29200, options [mss 1308,sackOK,TS val 2294404076 ecr 0,nop,wscale 7], length 0

Я также должен упомянуть, что с маршрутизатором linux, напрямую подключенным к Интернету (и, конечно, заменяя интерфейсы IP в правилах iptables) соединение устанавливается нормально.

Возможно, это что-то глупое, но сейчас я этого не вижу.

1
задан 5 May 2018 в 14:49
1 ответ

Хорошо, наконец-то работает. Оказывается, это какая-то ошибка в брандмауэре. После того, как я установил обновление, которое требовало перезагрузки, я попробовал еще раз, и все прошло без проблем. Возможно, старое правило iptables в брандмауэре было блокирующим ...

0
ответ дан 4 December 2019 в 04:00

Теги

Похожие вопросы