LINUX.ORG.RU
ФорумAdmin

Проброс трафика по порту

 


0

1

Доброго времени, подскажите, что-то я не догоняю немного. В интернете масса статей на эту тему, где все красиво работает чуть ли не одним нажатием кнопки, а у меня не выходит :)

Итак, имеем: Машина с двумя интерфейсами - ens192 внешний ip, пусть будет 8.8.8.8 и ens160 внутренний ip 172.16.8.46. Вторая машина во внутренней сети, eth3 172.16.8.25. Необходимо весь трафик по порту 9091 приходящий на внешний интерфейс первой машины маршрутизировать на вторую на тот же порт, ну и конечно же ответы вернуть в мир.

Что делаю: Через iptables делаю маршрутизацию между интерфейсами первой машины:

$ sudo iptables -A FORWARD -i ens192 -o ens160 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

$ sudo iptables -A FORWARD -i ens160 -o ens192 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Далее делаю форвард на вторую машину

$ iptables -t nat -A PREROUTING -d 8.8.8.8 -p tcp -m tcp --dport 9091 -j DNAT --to-destination 172.16.8.25:9091

$ iptables -t nat -A POSTROUTING -s 172.16.8.25 -p tcp -m tcp --dport 9091 -j SNAT --to-source 8.8.8.8

Получаю: стучусь на внешний интерфейс первой машины и вижу (tcpdump) как трафик проходи ens192, уходит на ens160, приходит на eth3 второй машины, но вот ответы назад не идут, а улетают на default gw этой сети 172.16.8.1. Чего не хватает в правилах? Все настройки выполняю на первой машине. На второй что-то нужно выполнять?



Последнее исправление: xopc2010 (всего исправлений: 1)

Ответ на: комментарий от af5

не хватает правила iptables? Можно пример?

Или именно маршрута в сети? Если второе, то как я могу маршрутизировать только один порт? Ведь на машине крутится backend и def gw нужен для всего остального.

xopc2010
() автор топика
Ответ на: комментарий от xopc2010

правила iptables?

ip route

Или именно маршрута в сети?

на втором хосте

только один порт?

не порт, а src IP. тот, с которого ты на этот порт ходишь.

def gw нужен для всего остального.

ну вот пусть и остается для всего остального. А для хоста/хостов с которых подключаешься на этот порт добавь выделенный маршрут

af5 ★★★★★
()
Ответ на: комментарий от af5

текущая таблица

172.16.8.0      0.0.0.0         255.255.255.0   U         0 0          0 eth3
0.0.0.0         172.16.8.1      0.0.0.0         UG        0 0          0 eth3

Так что ли?

route add -host 172.16.8.46 gw 172.16.8.46

xopc2010
() автор топика
Ответ на: комментарий от xopc2010

а чего хост и gw одно и то же? Хост должно быть что-то вроде 203.0.113.2 или откуда там пакеты летят

af5 ★★★★★
()

но вот ответы назад не идут, а улетают на default gw этой сети 172.16.8.1. Чего не хватает в правилах?
$ iptables -t nat -A PREROUTING -d 8.8.8.8 -p tcp -m tcp --dport 9091 -j DNAT --to-destination 172.16.8.25:9091
$ iptables -t nat -A POSTROUTING -s 172.16.8.25 -p tcp -m tcp --dport 9091 -j SNAT --to-source 8.8.8.8

«У меня кот второй день полиэтилен жрет. Может ему чего-то не хватает? »
«Мозгов»
Как-то так было из башорга.

Совсем недавно тут обсуждали вопрос SNAT vs MASQ почему MASQ срабатывает, а SNAT не работает. Вот теперь посмотрите на свой --dport в POSTROUTING и включите голову.

anc ★★★★★
()
Ответ на: комментарий от af5

ну так они снаружи ж летят, максимум что можно прописать

route add -host 8.8.8.8 gw 172.16.8.46
в нашем случае, это внешний интерфейс той же машины (с внутренним 172.16.8.46)

xopc2010
() автор топика
Ответ на: комментарий от xopc2010

Хз, я как-то всегда знаю IP хостов с которых подключаюсь извне (на самомделе я даже для себя напрямую порты в локалку не прокидываю). Но если тебе вдруг захотелось всему миру пробросить порт до сервака в локалке через каой-то левый маршрутизатор, то можешь попробовать как-то так:
на «втором компе» создай еще одну таблицу маршрутизации (man LARTC), добавь туда твой роутер дефолтным шлюзом, создай правило (ip rule) чтоб исходящие пакеты с меткой (fwmark) роутились через неё, в iptables замаркируй (--set-mark) исходящие пакеты с src port 9091 соответствующей меткой.

af5 ★★★★★
()

Ты, похоже, забыл NEW для conntrack

Если на шлюзе 172.16.8.46(8.8.8.8) уже настроен NAT(читай работает инет для локалки), то больше ничего не требуется.

iptables -t nat -A PREROUTING -d 8.8.8.8 -p tcp -m tcp --dport 9091 -j DNAT --to-destination 172.16.8.25
iptables -t filter -o ens160 -d 172.16.8.25 -p tcp --dport 9091 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -i ens160 -s 172.16.8.25 -p tcp --sport 9091 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

P.S. Клоунов пятизвездочных не слушай

greek_31 ★★
()
Ответ на: комментарий от greek_31

лол, ты ОП то до конца дочитай

но вот ответы назад не идут, а улетают на default gw этой сети 172.16.8.1

af5 ★★★★★
()
Ответ на: комментарий от xopc2010

--dport из второго правила. предполагаю что хотели сказать sport. Но это лирика хотя тоже имеет значение когда пишите правила. Вам не хватает snat iptables -t nat -A POSTROUTING -d 172.16.8.25 -p tcp -m tcp --dport 9091 -j SNAT --to-source 172.16.8.46

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

т.е. вот это

iptables -t nat -A POSTROUTING -d 172.16.8.25 -p tcp -m tcp --dport 9091 -j SNAT --to-source 172.16.8.46
вместе моей четвертой строки
iptables -t nat -A POSTROUTING -s 172.16.8.25 -p tcp -m tcp --dport 9091 -j SNAT --to-source 8.8.8.8
? Т.е. я меняю обратный адрес на адрес внутренего интерфейса,а не внешнего, так?

xopc2010
() автор топика
Ответ на: комментарий от af5

ну да, всему миру.похоже что так и придется, потому как сейчас прекрасно вижу пакеты с уже подмененным адресом на def gw. все эти схемы с prerouting и postrouting походу работают только если шлюз является def gw для сети

xopc2010
() автор топика
Ответ на: комментарий от xopc2010

Не только, но в твоем случае уже нужен не столько навык администрирования, сколько костылестроения.

af5 ★★★★★
()
Ответ на: комментарий от xopc2010

все эти схемы с prerouting и postrouting походу работают только если шлюз является def gw для сети

А я говорил что snat для неосиляторов. Используйте MASQ и все у вас внезапно заработает. Но вот почему заработает? А патаму что мы как минимум не показали тот же iptables-save, ip a, ip r

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.