Когда имеет смысл использовать DNAT, а не SNAT?
Я хочу перенаправить порт 2222 на сервере Ubuntu 12.04 на порт 22 удаленного хоста 1.2.3.4, используя 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.
1 ответ
Сайты, на которые вы ссылаетесь, вероятно, рекомендуют DNAT
в контексте использования iptables на маршрутизаторе, который подключает внутреннюю локальную сеть к общедоступному Интернету. В этом случае, поскольку весь трафик между Интернетом и внутренней ЛВС должен проходить через маршрутизатор iptables, возвращаемые пакеты также автоматически перезаписываются для вас.
В вашей конфигурации вы пытаетесь направить трафик на удаленный хост. MASQUERADE
Строка необходима для того, чтобы переписать пакеты, идущие в 1.2.3.4, так, чтобы пакеты, возвращающиеся из 1.2.3.4, добрались до вашего окна iptables, чтобы быть переписанными и должным образом возвращенными исходному отправителю.
Большая картина: что вы пытаетесь достичь? Переадресация портов, вероятно, не правильный инструмент.