[转载]NAT转换后FTP服务器不能访问解决方法一例
2009-01-22 00:54
561 查看
[转载]NAT转换后FTP服务器不能访问解决方法一例
文章作者:FreeFire最近学习FreeBSD过程中安装了ProFTP作为FTP服务器,在使用过程中发现有很多用户从外面无法连接到FTP服务器,但我在内网访问无任何问题。
环境描述:
FreeBSD 4.10 安装ProFTP 地址 192.168.0.4/255.255.255.0 192.168.0.254
FTP服务使用非标准端口 2121,支持Port、PASV模式(指定端口50000-65534)
192.168.0.254为公司接入互联网的宽带路由器,PPPoE、动态地址.
在宽带路由器上,对外作2120、2121以及50000-65534(PASV模式)的端口转发。
网络拓扑:
FTP Server - FireWall(NAT) - Internet -[FireWall(NAT)]- FTP Client
注:[]内的FW不一定存在.
问题描述:
外网通过访问FTP服务器,登陆都正常但在LIST的时候就不能接受数据,然后连接超时。
在内网访问没有任何问题。
公司内部另有一台FTP服务器,使用标准端口,访问无任何问题.
故障分析:
通过观察FTP客户端的日志记录,在PASV模式下发现客户端与服务器的连接过程中在发送PASV指令以前一切正常,在发送PASV指令以后服务器发给客户端的回访地址是服务器的内部地
址(192.168.0.4)。外部网络访问这个地址肯定是不能访问的,所以通信失败。
Ftp使用两个tcp通道进行工作,有两种模式 PORT和PASV模式。
FTP通信过程
在Port模式下,FTP server 使用TCP 20和21号端口进行通信21号端口负责传送指令,20端口负责传输数据。当需要在服务器和客户端之间传输数据时,客户端会在控制通道发port指令类似
(PORT 192,168,0,100,6,216),客户端在本机开一个大于1024的监听端口,等待服务器连接,服务器在控制通道接受该port指令后,使用其20端口去连接client的监听端口,即server:20
-> client:any,使用该数据通道进行数据传输;
对于PASV模式,client发pasv指令,server将会随机开放一个>1024的监听端口,随后 CLIENT连接到该高端口进行数据传送。
在本例中假设服务器地址为A,防火墙为地址为B,客户端为C,那么通信过程如下:
C:ANY -> B:2121 -> A:2121 通讯正常 ,但当传输数据的时候
C:ANY(Port指令) -> B:2121 -> A:2121
A:2020 -> C:(Port指定的端口)
如果C不在防火墙(NAT)后面的话,通信是没有问题的,但如果C在防火墙(NAT)后面,并且防火墙没有相应的处理的话,这次通信将宣告失败.
PASV模式下
C:ANY -> B:2121 -> A:2121 通讯正常 ,但当传输数据的时候
C:ANY(PASV指令) -> B:2121 -> A:2121
C:ANY -> B:(PASV指定端口)-> A:(PASV指定端口)
由于服务器发送的是本地地址(私有地址),所以客户端连接也会失败。
通过对分析故障认为是宽带路由器在做NAT地址转换的时候没有对FTP协议进行处理,所以FTP Server把自身的IP地址发送给了FTP客户端。
解决办法:
在PORT模式下,加入FTP客户端也在防火墙后面的话,由于我不能去修改其设置,所以在这里不讨论这种情况下的解决办法.
在PASV模式下由于是客户端连接服务器,所以其解决方法可从两个方面考虑
1、修改防火墙(NAT)设置,使其对FTP协议进行相应的处理。
2、修改FTP服务器使其在接受到PASV指令的时候发送正确的FTP地址。
第一种方式由于我的防火墙使用的是简单的宽带路由器,不具备这样的选项,所以无法修改。通过和厂家的电话联系得知这款路由器只处理标准端口的FTP协议,这也是那台使用标准端口
的FTP服务器能工作的原因。
所以要解决这个问题必须采用第二种方法,通过查看ProFTP的文档发现ProFTP有相关的处理选项。
如下:
MasqueradeAddress=movie.vip.netbuddy.org
重新启动ProFTP,测试正常。
注:本文是事后凭记忆写的,可能会有些不准确的地方,请指正。
在查找问题的时候还使用tcpdump抓取TCP的数据包来分析,但通过包的分析和对FTP日志的分析得出的结果一致,自己把问题复杂化了。:(
测试过程中还碰到一个有趣的现象,使用FlashFXP在PASV模式下能正常访问服务器,虽然FlashFXP收到的是私有地址,但FlashFXP还能转换到正确的地址上去。虽然这样做有点不规矩,但看的出来FlashFXP的作者还是花了不少心思的。
相关文章推荐
- Win2003和Win2008防火墙导致FTP服务器不能访问的解决方法(转载自http://www.jb51.net/article/57008.htm)
- Windows2003和Windows2008防火墙导致FTP服务器不能访问的解决方法
- Windows防火墙导致FTP服务器不能访问的解决方法
- Win2003和Win2008防火墙导致FTP服务器不能访问的解决方法
- ROS Dst-Nat 后内网不能通过公网IP访问内网服务器解决方法
- 关于虚拟机开启FTP服务器,本地Windows不能访问的解决办法
- vsftp服务器root账户不能用于ftp登录的解决方法
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- vsftp服务器root账户不能用于ftp登录的解决方法
- 设置iptables之后不能正常访问ftp解决方法
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- 登录iis7 网站服务器上网站网页可以访问 但远程访问网站网页不能访问的解决方法
- 【centos安装wordpress】要执行请求的操作,WordPress 需要访问您网页服务器的权限。 请输入您的 FTP 登录XXXX”完美解决方法
- 登陆FTP服务器feat命令错误的解决方法[登陆后不能得到文件列表的解决办法]
- 关于serv-u公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法
- (windows)局域网内无法访问FTP服务器的解决方法
- 要执行请求的操作,WordPress 需要访问您网页服务器的权限。 请输入您的 FTP 登录XXXX完美解决方法
- C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法
- 设置iptables之后不能正常访问ftp解决方法
- oracle服务器本地能够登录但是局域网内其他机器不能访问的解决方法