Назад | Перейти на главную страницу

Перенаправление определенного порта

Я попытался перенаправить определенный порт ip: на конкретный порт ip: на Linux-машине. Я использовал iptables со следующей командой:

iptables -t nat -A OUTPUT -p tcp -d 10.0.2.5 --dport 80 -j DNAT --to-destination 69.31.21.42:80

10.0.2.5 - это произвольный адрес, который я выбрал, чтобы проверить, работает ли команда, а 69.31.21.42 - это адрес общедоступного веб-сайта. Затем я подтвердил, что пересылка работает: я запустил nmap -p 80 10.0.2.5 и получил положительный результат. Пока очень хорошо. Однако затем я попытался запустить nmap -p 81 10.0.2.5, а также получил положительный результат. Это не то, что я ожидал, так как мне нужно было перенаправить только порт 80. Я побежал iptables -t nat -L и заметил, что действительно весь хост 10.0.2.5 отображается на 69.31.21.42:80:

Chain OUTPUT (policy ACCEPT)
target     prot opt source     destination
DNAT       tcp  --  anywhere   ip-10-0-2-5.ec2.internal  tcp dpt:http to:69.31.21.42:80

Чего не хватает в моей команде iptables? Почему нет --dport работает?

Вам нужно использовать POSTROUTING цепочка для того, чтобы делать то, что вы хотите делать.

iptables -t nat -A POSTROUTING -p tcp -d 10.0.2.5 --dport 80 -j SNAT --to 69.31.21.42:80

человек iptables

and POSTROUTING (for altering packets as they  are  about  to  go
                  out)

Прежде всего, имейте в виду, что невозможно перенаправить TCP IP: порт на другой IP: порт. Это возможно только с UDP, и для этого есть отдельный Perl-скрипт.

Да, вы можете перенаправить IP-адрес напрямую на другой компьютер, а не на конкретный порт.