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

ftp-сервер в пассивном режиме в частной подсети

У меня следующая конфигурация:

FTP-клиент (public_IP1) => internet => Firewall (Public_IP2) => FTP-сервер (10.10.12.171)

У меня следующие правила iptables на Firewall:

DNAT        tcp  --  0.0.0.0/0      Public_IP2  tcp dpt:21 to:10.10.12.171
MASQUERADE  all  --  10.0.0.0/8     0.0.0.0/0

У меня также есть nf_conntrack_ftp загружен в Firewall

nf_conntrack_ftp       13057  0 
nf_conntrack           79944  6 nf_conntrack_ftp,nf_conntrack_ipv4,nf_nat,iptable_nat,vzcpt,vzrst

В активном режиме все работает отлично. В пассивном режиме у меня следующая ошибка (на клиенте):

ftp> passive
Passive mode on.
ftp> dir
227 Entering Passive Mode (10,10,12,171,86,26)
ftp: connect: No route to host

Я предполагаю, что клиент имеет тенденцию подключаться к моему частному IP (10.10.12.171). Как это поменять?

Есть два решения:

  1. Как упоминалось в @ andrii-kupchanko, вы можете изменить конфигурацию ftp-сервера. Это изменение заставляет сервер отправлять внешний IP-адрес (Public_IP2) клиенту в качестве IP для пассивного обратного соединения. Недостатком является необходимость перенаправления пассивного соединения обратно на резидентный FTP-сервер частной подсети (через iptables) и статически привязанные порты, используемые пассивными соединениями.

  2. Вам просто нужно два модуля nf_conntrack_ftp и nf_nat_ftp. Из-за отсутствия второго модуля пассивное подключение к серверу за шлюзом не работало.

Ваш ftp-сервер должен быть настроен, так как он находится за NAT. Вы не сказали, какое программное обеспечение ftp-сервера используете, поэтому я предоставлю пример требуемой директивы конфигурации для proFTPd:

# If your host was NATted, this option is useful in order to
# allow passive tranfers to work. You have to use your public
# address and opening the passive ports used on your firewall as well.
MasqueradeAddress       Public_IP2