问题背景
我们使用FileZilla Server搭建FTP服务器。我们在服务器上监听了21
端口作为服务器FTP端口。我们还选择了端口范围49123-49124
作为被动模式端口,因为我们想让客户端全部以被动模式连接。
服务端口
被动模式端口范围
由于我们的服务器不暴露在公网上,我们使用FRP进行内网穿透。配置信息被记录在frpc.ini
中,内容如下。
[common]server_addr = someone.netserver_port = 7000token = passowrdlocal_ip = 192.168.1.185[ftpsrvport]type = tcplocal_port = 21remote_port = 21212[pasvport1]type = tcplocal_port = 49123remote_port = 49123[pasvport2]type = tcplocal_port = 49124remote_port = 49124
预期出现的行为
客户端连接someone.net:21212
以进行FTP命令交互。服务端向客户端发送被动模式连接地址和端口someone.net:49123
或someone.net:49124
,以告诉客户端到何处连接来传输FTP数据。接着,客户端主动连接被告知的地址和端口。
实际出现的行为
尽管已经在FileZilla Server中配置在被动模式时告诉客户端去连接someone.net:49123-49124
作为FTP的数据传输端口,服务器仍然告诉客户端去连接127.0.0.1:49123-49124
,导致客户端无法传输数据。而在使用FileZilla Client时,FileZilla Client也只是在意识到服务器给出的地址不可用后智能地自行决定用服务器的公网地址替换127.0.0.1
才得以连接成功。
FileZilla Client信息输出
原因
内网穿透的来访请求会全部变为127.0.0.1来访。FileZilla Server默认私自决定对于这些非公网来访请求,都不再将被动模式地址替换为我们指定的公网地址。
内网穿透后,所有来访请求都会变成来自127.0.0.1
解决方案
取消这个私自决定。
取消勾选推荐选项
结论背景
尽管在解决后,这个问题的原因显得非常幼稚,但是网络上有无数人遇到这个问题却不知道如何解决。人们给出的对该问题的回答通常模棱两可,例如“检查防火墙配置”或“可能是由于你的服务器(或路由器)配置不正确”。很显然,只有在网路配置不正确的情况下,才会出现问题。这是无意义的虚词。