背景
我有两个路由器,Router_A 和 Router_B。
Router_A LAN 端 IP 地址为172.16.0.1
。Router_A 有两个客户端,Computer_A (IP 172.16.0.11
) 和 Router_B (IP 172.16.0.2
)。
Router_B WAN 端 IP 地址为172.16.0.2
。Router_B LAN 端 IP 地址为10.0.0.1
。Router_B 有一个客户端,FTP_Server_B (IP 10.0.0.2
)。
在 Router_B 中,FTP 端口(21、990 和一系列预定义端口)被转发至10.0.0.2
。
静态路由(不起作用)
在 Router_A 中,我设置了静态路由,如下所示:
Destination Address Subnet Mask Gateway Metric
10.0.0.0 255.255.255.0 172.16.0.2 15
据我了解,此静态路由规则意味着,在 Router_A172.16.0.xxx
子网内,当数据包需要转至 时10.0.0.xxx
,它会到达 Router_A。根据规则,172.16.0.2
知道10.0.0.xxx
地址。因此,Router_A 会将数据包转发到172.16.0.2
。
问题
我尝试从 Computer_A 连接到 FTP_Server_B。
使用
ftp://172.16.0.2
,我可以登录 FTP 服务器。然后服务器回复其被动模式地址10.0.0.2
。此时,10.0.0.2
无法访问,客户端无法列出目录和文件。使用
ftp://10.0.0.2
,我甚至无法登录。我甚至无法访问服务器。
答案1
您有两个不同的问题:
使用ftp://172.16.0.2,我可以登录FTP服务器。然后服务器回复它的被动模式地址10.0.0.2。
您正在 Router_B 中转发 FTP 端口,但尚未加载 FTP 辅助模块(该模块会将 FTP 服务器的 PASV 响应重写为 Router_B 的公共 IP 地址)(在 Linux 中通过加载内核模块nf_nat_ftp
),并且您尚未配置系统以动态允许数据连接的端口转发(在 Linux 中使用ip_conntrack_ftp
内核模块并允许--state RELATED
在您的 iptables 规则集中)。
使用ftp://10.0.0.2,我甚至无法访问服务器。
在 Router_A 上为 10.0.0.0/24 设置静态路由应该会将这些数据包传送到 172.16.0.2,但仍然需要配置 Router_B 以在公共接口上接受 10.0.0.0/24 的传入流量,并将这些数据包路由到您的 LAN。您的问题并未表明您已这样做。