![私有子网中处于被动模式的 FTP 服务器](https://linux22.com/image/661749/%E7%A7%81%E6%9C%89%E5%AD%90%E7%BD%91%E4%B8%AD%E5%A4%84%E4%BA%8E%E8%A2%AB%E5%8A%A8%E6%A8%A1%E5%BC%8F%E7%9A%84%20FTP%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我有以下配置:
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
。缺少第二个模块是网关后面的服务器被动连接不起作用的原因。