ftp服务器处于被动模式下的私有子网

我有以下configuration:

FTP客户端(public_IP1)=> internet =>防火墙(Public_IP2)=> FTP服务器( 10.10.12.171

我在Firewall有以下iptables规则:

 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 

我也在Firewall加载了nf_conntrack_ftp

 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 )。 如何改变它?

你的ftp服务器应该被configuration,因为它在NAT之后。 你没有说你使用的是什么ftp服务器软件,所以我将提供proFTPd所需的configuration指令示例:

 # 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 

有两个解决scheme:

  1. 正如提及@ andrii-kupchanko你可以改变FTP服务器configuration。 这将更改强制服务器将外部IP( Public_IP2 )作为IP用于被动反向连接。 缺点是必须将被动连接转回到私有子网驻留的FTP服务器(通过iptables)和被动连接使用的静态绑定端口

  2. 你只需要两个模块nf_conntrack_ftpnf_nat_ftp 。 缺乏第二个模块是为什么在网关后面的被动连接不起作用。