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

Когда имеет смысл использовать DNAT, а не SNAT?

Я хочу перенаправить порт 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, чтобы быть перезаписанными и возвращенными исходному отправителю.

Общая картина: чего вы пытаетесь достичь? Переадресация портов, вероятно, не лучший инструмент.