
Я попробовал перенаправить определенный ip:port на определенный ip:port на машине 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
?
решение1
Вам нужно использовать 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)
решение2
Прежде всего, знайте, что невозможно перенаправить TCP IP:Port на другой IP:Port. Это возможно только с UDP, и для этого есть отдельный скрипт Perl.
Да, вы можете перенаправить IP-адрес напрямую на другую машину, а не на определенный порт.