FTP-сервер в пассивном режиме в частной подсети
У меня есть следующая конфигурация:
FTP-клиент (public_IP1) => internet => Брандмауэр (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
). Как это изменить?
2 ответа
Ваш FTP-сервер должен быть настроен, так как он находится за NAT. Вы не сказали, какое программное обеспечение ftp-сервера вы используете, поэтому я приведу необходимый пример директивы config для 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
Существует два решения:
Как упомянуто @andrii-kupchanko, вы можете изменить конфигурацию ftp-сервера. Это заставляет сервер отправлять внешний IP (
Public_IP2
) клиенту как IP для пассивного обратного соединения. Недостатком является необходимость пересылки пассивного соединения обратно на резидентный FTP-сервер частной подсети (через iptables) и статически связывающие порты, используемые пассивными соединениями.Вам просто нужно два модуля
nf_conntrack_ftp
а такжеnf_nat_ftp
, Отсутствие второго модуля является причиной того, что пассивное подключение к серверу за шлюзом не работает.