欢迎访客 ( 登陆 | 注册 )

论坛索引 | 最新主题 | 热门主题 | 搜索论坛 | 成员列表 | 在线帮助

 
关于NAT转换后的FTP服务器不能访问不完全解决方法一例!
« 上一篇主题 | 下一篇主题 » 跟踪主题 | 邮寄主题 | 打印主题
  FreeFire 离线
1. 关于NAT转换后的FTP服务器不能访问不完全解决方法一例!
HP : 88 / 885
MP : 641 / 13135
EXP : 42%
流浪的小孩


成员等级: 36
发表总数: 1924
金币总数: 101
所属组别: 核心成员
注册日期: 2003/12/12

最近学习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的作者还是花了不少心思的。



为人民服务!
发表于2004/09/27, 16:24
      Top
  bug 离线
2. Re:关于NAT转换后的FTP服务器不能访问不完全解决方法一例!...
HP : 243 / 1219
MP : 1501 / 21351
EXP : 77%
测试中......


成员等级: 49
发表总数: 4504
金币总数: 297
所属组别: 核心成员
注册日期: 2003/01/10

虽然这个FTP是老生常谈.可能还是很多人不太理解.
加精,扫一下盲


user posted image
发表于2004/09/27, 17:02
      Top
  FreeFire 离线
3. RE: 关于NAT转换后的FTP服务器不能访问不完全解决方法一例!...
HP : 88 / 885
MP : 641 / 13135
EXP : 42%
流浪的小孩


成员等级: 36
发表总数: 1924
金币总数: 101
所属组别: 核心成员
注册日期: 2003/12/12

QUOTE
虽然这个FTP是老生常谈.可能还是很多人不太理解.
加精,扫一下盲


自己也是刚扫盲出来的:)


为人民服务!
发表于2004/09/27, 17:04
      Top
  xxbin 离线 荣誉奖品 (1)
4. Re:关于NAT转换后的FTP服务器不能访问不完全解决方法一例!...
HP : 1030 / 1717
MP : 4150 / 30192
EXP : 68%
rotartsinimdA


成员等级: 69
发表总数: 12452
金币总数: 455
所属组别: 管理员
注册日期: 2003/01/1

QUOTE
测试过程中还碰到一个有趣的现象,使用FlashFXP在PASV模式下能正常访问服务器,虽然FlashFXP收到的是私有地址,但FlashFXP还能转换到正确的地址上去。虽然这样做有点不规矩,但看的出来FlashFXP的作者还是花了不少心思的。


再次反对这个提法
PASV指令还有其它的用途的,FlashFXP这样做是不对的说。

有关这个问题好像heli原来写过一篇文章,可惜在旧论坛,看不到的说。



user posted image
xxbin@netbuddy.org
发表于2004/09/27, 17:11
    Top
  xxbin 离线 荣誉奖品 (1)
5. Re:关于NAT转换后的FTP服务器不能访问不完全解决方法一例!...
HP : 1030 / 1717
MP : 4150 / 30192
EXP : 68%
rotartsinimdA


成员等级: 69
发表总数: 12452
金币总数: 455
所属组别: 管理员
注册日期: 2003/01/1

另外最好再写一篇客户端在NAT后面的再扫扫盲,哈哈。



user posted image
xxbin@netbuddy.org
发表于2004/09/27, 17:15
    Top
  FreeFire 离线
6. RE: 关于NAT转换后的FTP服务器不能访问不完全解决方法一例!...
HP : 88 / 885
MP : 641 / 13135
EXP : 42%
流浪的小孩


成员等级: 36
发表总数: 1924
金币总数: 101
所属组别: 核心成员
注册日期: 2003/12/12

QUOTE
另外最好再写一篇客户端在NAT后面的再扫扫盲,哈哈。


客户端在防火墙后面整个情况就比较复杂了:(,要处理会很麻烦的。
FlashFXP在这里做的是不规范但能用。


为人民服务!
发表于2004/09/27, 17:51
      Top
  bug 离线
7. RE: 关于NAT转换后的FTP服务器不能访问不完全解决方法一例!...
HP : 243 / 1219
MP : 1501 / 21351
EXP : 77%
测试中......


成员等级: 49
发表总数: 4504
金币总数: 297
所属组别: 核心成员
注册日期: 2003/01/10

QUOTE
QUOTE
测试过程中还碰到一个有趣的现象,使用FlashFXP在PASV模式下能正常访问服务器,虽然FlashFXP收到的是私有地址,但FlashFXP还能转换到正确的地址上去。虽然这样做有点不规矩,但看的出来FlashFXP的作者还是花了不少心思的。


再次反对这个提法
PASV指令还有其它的用途的,FlashFXP这样做是不对的说。

有关这个问题好像heli原来写过一篇文章,可惜在旧论坛,看不到的说。

我估计这个FlashFXP不用PASV发来的IP,直接改用FTP公网IP.


user posted image
发表于2004/09/27, 17:53
      Top
  FreeFire 离线
8. RE: 关于NAT转换后的FTP服务器不能访问不完全解决方法一例!...
HP : 88 / 885
MP : 641 / 13135
EXP : 42%
流浪的小孩


成员等级: 36
发表总数: 1924
金币总数: 101
所属组别: 核心成员
注册日期: 2003/12/12

QUOTE
QUOTE
QUOTE
测试过程中还碰到一个有趣的现象,使用FlashFXP在PASV模式下能正常访问服务器,虽然FlashFXP收到的是私有地址,但FlashFXP还能转换到正确的地址上去。虽然这样做有点不规矩,但看的出来FlashFXP的作者还是花了不少心思的。


再次反对这个提法
PASV指令还有其它的用途的,FlashFXP这样做是不对的说。

有关这个问题好像heli原来写过一篇文章,可惜在旧论坛,看不到的说。

我估计这个FlashFXP不用PASV发来的IP,直接改用FTP公网IP.


可能和FXP这个概念有关,FXP这个概念我还没有看


为人民服务!
发表于2004/09/27, 17:56
      Top
主题评分
未评分. 匿名用户无权对主题进行评分
0 名会员正在浏览该主题 (0 名游客 和 0 名隐身会员)
0 名会员:
有 7 篇回复自 2004/09/27, 16:24 跟踪主题 | 邮寄主题 | 打印主题

<< Back to 网络世界

 




Powered by PhoenixBBS v1.2 © 2000-2003  NetBuddy.Org