LINUX.ORG.RU
ФорумAdmin

Проброс портов


0

1

Имеется программный роутер на Arch Linux. Требуется пробросить один порт с компьютера из локальной сети во внешний мир.

ppp0 - Внешний интерфейс

wlan1 - Интерфейс локальной сети.

192.168.225.2 - Адрес локального сервера.

1.2.3.4 - Внешний IP адрес роутера (для примера привожу несуществующий).

1234 - Порт, который надо пробросить (и TCP, и UDP)

Настраиваю проброс такими командами:

iptables -A INPUT -p udp --dport 1234 -j ACCEPT
iptables -A INPUT -p tcp --dport 1234 -j ACCEPT
iptables -A FORWARD -i ppp0 -d 192.168.225.2 -p udp --dport 1234 -j ACCEPT
iptables -t nat -A PREROUTING -d 1.2.3.4 -p udp --dport 1234 -j DNAT --to-destination 192.168.225.2:1234
iptables -A FORWARD -i ppp0 -d 192.168.225.2 -p tcp --dport 1234 -j ACCEPT
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 1234 -j DNAT --to-destination 192.168.225.2:1234

Однако сервер из-вне не доступен. При этом запущенный на самом «роутере» веб-сервер и SSH вполне себе откликается.

★★★★★

А поменяй на:
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 1234 -j DNAT --to-destination 192.168.225.2:1234
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 1234 -j DNAT --to-destination 192.168.225.2:1234

и покажи что происходит на wlan1 когда идет обращение на этот порт
tcpdump/tshark -i wlan1 -n port 1234

DiMoN ★★★ ()

Я, конечно, дурак, но маскарад в таких случаях не нужно делать? Или SNAT вручную? А то destination address меняется, а source address остается, и есть ли на внутреннем сервере маршрут для правильного ответа, неизвестно.

Конкретно - source address'ом на пробрасываемых пакетах будет, видимо, какой-то реальный айпишник, значит, на внутреннем ресурсе, на который пробрасывают пакеты, должен быть маршрут в интернет. Или я что-то путаю?

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

Тут и без топологии всё ясно. Проверить можно просто всё это дело: Запусти сниффер на wlan1 и посмотри вылетает чего-нибудь в сторону 192.168.225.2 что-то при попытке подцепиться к 1.2.3.4:1234

Счетчики у правил тикают ? Снача dnat отрабатывать должен потом форвард. Посмотри это.

В форвард должны для каждого пакета тикать счетчики, а в dnat они только для первого пакета в сессии срабатывают.

Нат писать или не писать - вопрос только в том нужен ли выход в интернет на 192.168.225.2 на DNAT это не виляет.

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

На wlan1 никаких пакетов нет (на порт 1234). А на ppp0 такие пакеты:

15:16:32.143409 IP x.x.x.x.53988 > 1.2.3.4.1234: Flags [S], seq 2786286046, win 14600, options [mss 1442,sackOK,TS val 411413495 ecr 0,nop,wscale 6], length 0
15:16:33.145393 IP x.x.x.x.53988 > 1.2.3.4.1234: Flags [S], seq 2786286046, win 14600, options [mss 1442,sackOK,TS val 411413796 ecr 0,nop,wscale 6], length 0
15:16:35.151261 IP x.x.x.x.53988 > 1.2.3.4.1234: Flags [S], seq 2786286046, win 14600, options [mss 1442,sackOK,TS val 411414398 ecr 0,nop,wscale 6], length 0
Тут x.x.x.x - IP с которого пытаются зайти на сервер. В данном случае я для проверки повесил на этот порт SSH-сервер (потому что тот сервер, что в итоге нужен не очень удобно проверять). При попытке подключиться получаю в клиенте No route to host.

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

Есть выход в интернет. Более того, ВСЕ исходящие соединения по инициативе компьютера из локалки разрешены. Фаервол ограничивает только входящие подключения (но порт 1234 я открыл везде, где надо).

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

Топология самая простая.

Локальный сервер (192.168.225.2) --> Роутер (NAT работает, все исходящие подключения разрешены) --> Интернет.

Из локалки зайти на внутренний сервер получается.

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

На нат наплевать.

А счетчики как себя ведут ?

iptables -L -v -n

iptables -L -v -n -t nat

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

На локальном сервере:

iptables -A INPUT -p tcp --dport 1234 -j LOG
tailf /var/log/messages

И ткните сервер в нужный порт снаружи, наблюдая за выводом. Если пакеты пойдут от роутера, то надо дальше разбираться, а если нет - значит, роутер настроен неправильно.

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

Один там, один. Иначе бы я сейчас не мог писать сообщение, потому что пишу с одной из машин, на которые этот роутер раздаёт интернет через NAT.

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

Ну.. не знаю.. тогда можно показать полный iptables -vnL :)

А, хм. -j LOG нужно добавлять не в конец (-A), а в начало (-I), попробуйте - может, что прояснится.

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