У меня есть 2 сервера, один как шлюз / маршрутизатор, другой как сервер. Я использую iptables для перенаправления следующих портов: 21
, 20
, 65500-65600
. Когда я подключаюсь к Filezilla
или Total Commander
, клиент ftp знает, что 10.10.0.1
представляет внутренний IP-адрес и переключается на внешний IP-адрес. Однако NPPftp
плагин от Notepad++
подключается к серверу, но когда он переключается в пассивный режим, он пробует внутренний IP-адрес и зависает.
Вывод:
220 ProFTPD x.x.x Server [10.10.0.1]
-> USER www
331 Password required for www
-> PASS *HIDDEN*
230 User www logged in
-> TYPE A
200 Type set to A
-> MODE S
200 Mode set to S
-> STRU F
200 Structure set to F
-> PWD
257 "/" is the current directory
Connected
-> CWD /
250 CWD command successful
-> PASV
227 Entering Passive Mode (10,10,0,1,255,222).
-> LIST -al
Failure retrieving contents of directory /
Есть ли способ вернуть внешний IP-адрес для пассивных портов из iptables?
Из документа http://www.proftpd.org/docs/howto/NAT.html, есть адрес MasqueradeAddress для использования, и вы должны определить диапазон портов для разрешения (или использовать модуль conntrack_ftp, как сказал MadHatter)
В новых версиях никакой маскировки не требуется. Для возможности активной и пассивной передачи вам необходимо на стороне клиента и сервера открыть следующие порты:
Затем обновите FTP, чтобы использовать диапазон пассивных портов 60000-65535. Затем на стороне клиента используйте пассивный режим (в случае IP-адреса с NAT), в противном случае активный также будет работать. Подробности и инструкция - http://sysadm.pp.ua/linux/proftpd-ubuntu-16-04.html