|
|
 |
|
|
| 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的作者还是花了不少心思的。
 为人民服务! |
 |
|
|
| 2. Re:关于NAT转换后的FTP服务器不能访问不完全解决方法一例!... |
  |
|
 |
|
HP : 243 / 1219
MP : 1501 / 21351
EXP : 77%
|
|
测试中......
           
成员等级: 49
发表总数: 4504
金币总数: 297
所属组别: 核心成员
注册日期: 2003/01/10

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

 |
 |
|
|
| 3. RE: 关于NAT转换后的FTP服务器不能访问不完全解决方法一例!... |
  |
|
 |
|
HP : 88 / 885
MP : 641 / 13135
EXP : 42%
|
|
流浪的小孩
           
成员等级: 36
发表总数: 1924
金币总数: 101
所属组别: 核心成员
注册日期: 2003/12/12

|
| QUOTE | 虽然这个FTP是老生常谈.可能还是很多人不太理解. 加精,扫一下盲 |
自己也是刚扫盲出来的:)
 为人民服务! |
 |
|
|
| 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原来写过一篇文章,可惜在旧论坛,看不到的说。

 xxbin@netbuddy.org |
 |
|
|
| 5. Re:关于NAT转换后的FTP服务器不能访问不完全解决方法一例!... |
  |
|
 |
|
HP : 1030 / 1717
MP : 4150 / 30192
EXP : 68%
|
|
rotartsinimdA
           
成员等级: 69
发表总数: 12452
金币总数: 455
所属组别: 管理员
注册日期: 2003/01/1

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

 xxbin@netbuddy.org |
 |
|
|
| 6. RE: 关于NAT转换后的FTP服务器不能访问不完全解决方法一例!... |
  |
|
 |
|
HP : 88 / 885
MP : 641 / 13135
EXP : 42%
|
|
流浪的小孩
           
成员等级: 36
发表总数: 1924
金币总数: 101
所属组别: 核心成员
注册日期: 2003/12/12

|
| QUOTE | | 另外最好再写一篇客户端在NAT后面的再扫扫盲,哈哈。 |
客户端在防火墙后面整个情况就比较复杂了:(,要处理会很麻烦的。 FlashFXP在这里做的是不规范但能用。
 为人民服务! |
 |
|
|
| 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.

 |
 |
|
|
| 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这个概念我还没有看
 为人民服务! |
 |
 |