Иногда бывают моменты, когда нужно заставить “видеть” локальный ftp снаружи. Как правильно подойти к этому вопросу? Нормально ли будет он работать за NAT’ом? Для того, что бы ftp нормально работал, нужно выполнение таких условий
1) Только пассивный режим работы самого FTP-сервера
2) Указать диапазон портов для пассивной передачи (passive ports range)
3) Проброс портов должен соответствовать 1:1 (то есть для passive ports range 5000:5099 пробрасываться они должны тоже в порты 5000:5099)
После этого можно спокойно “пробрасывать” в локалку passive ports range + 21-ый. При этом, 21-ый не обязательно снаружи должен быть 21-ым, а вот portrange – должны соответствовать 1:1.
Вот как это выглядит на примере файервола pf:
rdr on $ext_if proto tcp from any to $ext_if port 21 -> 10.10.10.10 port 21
rdr on $ext_if proto tcp from any to $ext_if port 5000:5099 -> 10.10.10.10 port 5000:5099
Естественно, так же нужно в самом файерволе разрешить подключение на указанные порты.
а так для ipfw
ipfw nat 1 config redirect_port tcp 10.10.10.10:21 21
ipfw nat 1 config redirect_port tcp 10.10.10.10:5000-5099 5000-5099
а вот так для iptables
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j DNAT --to-destination 10.10.10.10:21
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5000:5099 -j DNAT --to-destination 10.10.10.10