我有 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 /
有没有办法从 iptables 返回被动端口的外部 IP 地址?
答案1
来自文档http://www.proftpd.org/docs/howto/NAT.html,有一个 MasqueradeAddress 地址可以使用,并且您要定义允许的端口范围(或者像 MadHatter 所说的那样使用 conntrack_ftp 模块)
答案2
在新版本中,您不需要任何伪装。要实现主动和被动传输,您需要在客户端和服务器端打开以下端口:
- 输入:TCP 20,21,60000-65535
- 输出:TCP 20,21,60000-65535
然后更新 FTP 以使用被动端口范围 60000-65535。然后在客户端使用被动模式(如果是 NATed IP),否则主动模式也可以工作。详细信息和说明 -http://sysadm.pp.ua/linux/proftpd-ubuntu-16-04.html