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

Существует два решения:

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

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

Другие вопросы по тегам