Я хочу перенаправить порт 2222 на сервере Ubuntu 12.04 на удаленный хост 1.2.3.4 порт 22, используя iptables.
Прочитав множество веб-страниц о переадресации портов, я выдаю
$ sysctl net.ipv4.conf.eth0.forwarding
net.ipv4.conf.eth0.forwarding = 1
$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2222 -j DNAT --to-destination 1.2.3.4:22
Которая перенаправляет трафик как я хотел. Но ssh делает не работай. Оказывается, мне нужно было также поставить
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
А теперь хорошо. Я понимаю приведенные выше команды; чего я не понимаю, так это множества сайтов, дающих первую команду, а ни одного не дающего вторую. При каких условиях будет достаточно первой команды?
Примечание: пример сайт давая только команду DNAT.
Сайты, на которые вы ссылаетесь, вероятно, рекомендуют DNAT
в контексте использования iptables на маршрутизаторе, который соединяет внутреннюю локальную сеть с общедоступным Интернетом. В этом случае, поскольку весь трафик между Интернетом и внутренней LAN должен проходить через маршрутизатор iptables, возвращаемые пакеты также автоматически перезаписываются для вас.
В вашей конфигурации вы пытаетесь направить трафик на удаленный хост. В MASQUERADE
Строка необходима для перезаписи пакетов, идущих в 1.2.3.4, чтобы пакеты, возвращаемые из 1.2.3.4, доходили до вашего ящика iptables, чтобы быть перезаписанными и возвращенными исходному отправителю.
Общая картина: чего вы пытаетесь достичь? Переадресация портов, вероятно, не лучший инструмент.