我有以下配置:
FTP 客户端 (公共 IP1) => 互联网 => 防火墙 (公共 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
)。如何更改它?
答案1
您的 ftp 服务器应该已配置,因为它位于 NAT 后面。您没有说明您使用的是哪种 ftp 服务器软件,因此我将提供 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
答案2
存在两种解决方案:
正如@andrii-kupchanko 所说,您可以更改 ftp 服务器配置。这会强制服务器将外部 IP(
Public_IP2
)作为被动反向连接的 IP 发送给客户端。缺点是需要将被动连接转发回私有子网驻留 FTP 服务器(通过 iptables)并静态绑定被动连接使用的端口您只需要两个模块
nf_conntrack_ftp
和nf_nat_ftp
。缺少第二个模块是网关后面的服务器被动连接不起作用的原因。