组网介绍
防火墙作为出口(GigabitEthernet0/0/1),下挂ftp服务器192.168.0.10
在防火墙做映射
nat server 0 protocol tcp global interface GigabitEthernet0/0/1 10021 inside 192.168.0.10 ftp no-reverse 接口下detect ftp |
用pc通过互联网测试ftp服务,连接正常,无法传数据
分析原因
查看会话表,发现ftp服务器通过20端口主动向客户端发送数据,但20端口在防火墙上并没有映射出去
[xxx]display firewall session table application ftp Current Total Sessions : 4 ftp-data VPN:public --> public 192.168.0.10:20[124.202.xxx.xxx:20]-->222.169.xxx.xxx:16070 ftp VPN:public --> public 222.169.xxx.xxx:1266+->124.202.xxx.xxx:10021[192.168.0.10:21] |
ftp有两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP server。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
Standard模式FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式在建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
解决办法:
1、在防火墙上将20、21端口都映射出去
2、pc侧通过passive模式建立连接(windows cmd貌似不支持passive模式,可以使用ftp客户端软件)。
如下为更换另一个支持passvie模式的设备测试结果正常
ftp-data VPN:public --> public 61.148.xxx.xxx:51302-->124.202.xxx.xxx:15366[192.168.0.10:2121] ftp VPN:public --> public 61.148.xxx.xxx:52598+->124.202.xxx.xxx:10021[192.168.0.10:21] |