LINUX.ORG.RU
ФорумAdmin

проброс порта, что я делаю не так?


0

0

С шлюза хочу пробросить порт во внутреннюю сеть. Чтобы при ssh EXT_IP -p 22222 попадать на внутренний тазик SOURCE на 22 порт.
Политика по умолчанию - ACCEPT для всех цепочек.

D_PORT="22"
IN_PORT="22222"

iptables -t nat -A PREROUTING -p tcp -d $EXT_IP --dport $IN_PORT -j DNAT --to-destination $SOURCE:$D_PORT
iptables -A FORWARD -i $INT_IF -d $SOURCE -p tcp --dport $D_PORT -j ACCEPT

Не работает :(

iptables -L -n -v -t nat
5 236 DNAT tcp -- * * 0.0.0.0/0 real_ip tcp dpt:22222 to:172.20.20.20:22

telnet <ip> 22000
Trying <ip>...
telnet: Unable to connect to remote host: Connection refused

Что я делаю не так?

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

И что это будет? Это ж используется на шлюзе, для организации NAT? O_O

anonymous
()

> iptables -A FORWARD -i $INT_IF -d $SOURCE -p tcp --dport $D_PORT -j ACCEPT

По-моему "-i $INT_IF" лишнее (или должно быть "-o $INT_IF"):
iptables -A FORWARD -d $SOURCE -p tcp --dport $D_PORT -j ACCEPT

+ разрешить обратные пакеты (если еще нет разрешающего правила):
iptables -A FORWARD -s $SOURCE -p tcp --sport $D_PORT -j ACCEPT

Еще рекомендовал бы использовать в таких делах tcpdump на внутреннем/внешнем интерфейсах.

P.S. В этом случае SNAT обратных пакетов не нужен, он должен выполнятся ядром автоматически.

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

Да, при условии, что до конца цепочки нету правила DROP. Политика --- это как бы правило после последнего правила цепочки.

И еще все правила iptables имеют счётчик, то есть по ним видно, идут ли нужные пакеты. То есть если правило

iptables -A FORWARD -i $INT_IF -d $SOURCE -p tcp --dport $D_PORT -j ACCEPT

имеет не нулевые счетчики, значит пакеты, по крайней мере в одну сторону, проходят.

>iptables -A FORWARD -s $SOURCE -p tcp --sport $D_PORT -j ACCEPT

ИМХО, лучше "-A FORWARD -m state ESTABLISHED -j ACCEPT"

А то получится, что от машины с ip-адресом $SOURCE будут отправлятся пакеты в Инет...

SNAT правило нужно если на машине 172.20.20.20 нет маршрута по умолчанию через маршрутизатор, делающий DNAT, или, если на ней не разрешены коннекты с Интернет ip-адресов.

Кстати "telnet: Unable to connect to remote host: Connection refused" вроде как раз говорит о том, что пакеты до "внутреннего тазика" доходят и он их отбрасывает, так как если бы был просто DROP пакетов на маршрутизаторе, то, вроде, telnet говорил бы "Connection timeout".

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

Возможно, у тебя все и так работает, просто проверять нужно не из локалки, а из внешнего мира, т.к. указано правило прероутинг в котором входящий интерфейс - ВНЕШНИЙ (пакеты должны идти с внешнего мира). У меня работает вот так:

EXT_IF="eth0" #внешний интерфейс
EXT_ADDR="x.y.z.w" #внешний IP
iptables -t nat -A PREROUTING -i $EXT_IF -p tcp -d $EXT_ADDR --dport 7777 -j DNAT --to-destination 192.168.0.2:7777
iptables -t filter -A FORWARD -d 192.168.0.2 -p tcp --dport 7777 -j ACCEPT

тем самым пробрасываем на внутреннюю машину порт 7777.

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