没有扭曲的需求,不过扭曲的需求需要扭曲的实现


  • 前情提要:
    客户要求在一个内网windows服务器中搭建FTP服务器,FTP端口在核心上映射为1510,要求外网a.b.c.d可以正常访问FTP服务器。

  • 追踪问题:
    远程链接过去,发现服务器是Win Server 2012, FTP服务器是IIS,用户创建了一个FTP用户组并且创建了一个用户,服务器防火墙开了一个1510端口。经过测试发现127.0.0.1:1510正常访问到服务器,但是外网无法连接,外网连接报错 220 227

  • 解决问题:
    很简单,IIS是个傻子,他在接到PASV请求的时候返回了服务器的内网端口与地址,这样客户端进行下一步通信的时候就会连接到内网的服务器和PASV开出来的端口。

    IIS的被动模式端口范围可以通过修改元数据来修改,但是地址并不会返回NAT的外网地址。

    所以解决办法就是,用一个不这么傻的FTP服务器来完成这个操作,这里推荐FileZilla Server,在FileZilla中,有针对与PASV模式的设定,在选项页中,设定一个映射端口范围并在服务器防火墙,NAT规则中设定相应的范围。在下面的IP设定中填写你所连接的NAT后的IP,再进一步配置正常的身份验证等,这样,服务器在接收到请求后,返回的就是定义范围中的端口与公网地址了,连接就正常了。