路由器后FTP的设置

      电脑维修经验_软件技巧 2005-11-19 11:22:00
转载自:http://www.stony.cn/showArt.php?id=14


这片估计是最完整解释了,我会增加插图的

Copyright:
This article is on how to Use FTP''s PASV & PORT mode.You can use it freely in
Internet provided that you maintain the copyright information.

Author: Stony.==FF==
email:stony AT sjtu.edu.cn


定义
NAT:
Netwrok Address Transfer网络地址转换,适用于多台机器共享一个外部IP地址,自动把
内网发出的数据报,对报文头进行翻译、转发,并作跟踪返回对应的数据报。NAT相当于
众多的端口映射。sohu级路由器的dmz也有类似的功能,但只把未打开端口映射给一个IP
内部IP:
指互联网上的保留ip段:10.*.*.* 192.168.*.* 172.16-31.*.*,把他们用作intranet,
然后通过NAT服务,从同一个外部IP上网。
外部IP:(实IP)
Internet分配的合法IP。
端口映射:
把发送到IP A端口I数据报,全部转发到IP B端口J,这个就是端口映射。当FTP
Server在内网的时候,外部网络的主机无法直接连接到机器,就需要端口映射来帮忙。比
如把发送到外部IP A的8021数据报都转发到内网某台主机B的ftp 21端口,那么就相当于
A在8021端口开ftp服务。
主动和被动模式:
对于建立一个连接,端口有两种选择:要么连对方的端口,要么自己开放等对方连过来。
从server角度来看,发送server IP等client连接,就是pasv(被动模式);得到client并
连接,就是port主动模式。由于pasv可以保护client的信息,比较安全,所以流行client
都默认使用pasv模式。

问题:
内网开了ftp server,已经设好端口映射,但是其他人连过来就是:
bbs.sjtu.edu.cn:8000/network/1092544380226480.JPG
怎么办?

ftp的服务模式:
一个控制连接,一个数据连接,控制连接用来发送和接受控制信息。
数据连接根据需要,打开和关闭,用来传输数据。主动被动往往就在这个连接上出问题。
一般在list得到列表和传文件的时候要使用数据连接。

分析:
可以看到,客户端使用了pasv模式,服务器端就把自己的ip送出去了。注意到这个ip是
192.168.0.13(后面16,39是表示端口号),如果是外网ip,pasv就正常工作了。但是,现在
是192.168.0.13,这个是Internet上的保留地址,不可路由的(路由:选路的过程,表示可
到达的)。然后client寻找192.168.0.13得主机,连16,39端口,当然是连不上的了。
因此client在这里等待一段时间,就报错:连接已拒绝。

这个问题很好解决,只要客户端使用主动模式,把自己的ip发送出去,不就行了?嗯,基
本是这样,但是,如果client也在内网的话,他也把自己的不可路由ip发送出去,这个又
怎么办呢?

现在问题才进入讨论的实质。
client/server只要做到以下三要素,那么pasv/port就有一种模式可以连接:
1 发送可以路由的实ip;
2 打开对应的端口等待连接,这个可以是端口映射,也可以是dmz,当然NAT服务提供相关的
功能也是可以的(目前已知xp的ics对ftp的21端口支持,soho级路由器对clinet的NAT
也支持)
3 发送的ip和端口,能够正确地把数据报转发给ftp对应的端口。

我们现在来讨论怎样做到这三步
1 发送实IP
客户端:flashfxp 2.x
选项-->参数选择-->代理/防火墙/标识
勾上 将socket捆绑到该地址,并填入外网IP(主机或者路由器的)
服务器:Serv-u 5.x
Serv-U Servers--><>-->Domains-->%ur domain%-->Settings
-->Advanced
勾上 Allow passive mode data transfer, use IP 填入外网IP
2 打开开若干端口并且限制在这些范围内
2.1 打开若干端口
2.1.1 端口映射
使用porttunnel,windows自带得端口映射,或者设置路由器。
以下为TPLink路由器举一个例子
设置好一个映射为控制连接,这个是你公开你的ftp用得端口。
比如tplink路由器的映射功能(就是 虚拟服务)
bbs.sjtu.edu.cn:8000/network/109254380383280.JPG
注意第三行把路由器的2121映射到192.168.0.13的2121
设置好一段范围的映射,给数据连接使用。
比如tplink路由器支持特殊应用程序,
bbs.sjtu.edu.cn:8000/network/1092548854297560.JPG
2121就是映射控制连接,1024-65000为给控制连接用的。不过没必要这
么大的范围,比如只要2049-2148 100个端口就足够了。当你服务器
连接很多的时候,可以多开一些端口。
2.1.2 DMZ 就是把没有打开端口的所有数据报都转发到一台内网机器去,
2.1.3 NAT 已知windows xp支持对服务器控制连接21端口映射的监视,自动做好转发。
tplink soho路由器也支持客户端访问时的自动转发。
以上两种(2.1.2 2.1.3)可以忽略下面的第3步 正确设置好映射关系。
2.2 限制端口范围
客户端:flashfxp 2.x
选项-->参数选择-->代理/防火墙/标识
勾上 限制本地端口范围为 并填写好最小和最大值
服务器:Serv-U 5.x
Serv-U Servers--><>-->Settings-->Advanced
-->Server 勾上 Enable security 并填写好PASV port range范围
3 正确设置好映射关系
控制连接可以随意映射,数据连接要求能够端口号对应,比如外网IP的2049-2058映射到
内网机器的2049-2058端口。

最后的问题:
为什么在同一个网内我们测试是正常的,但是外面就出现上述情况了?
我们讨论问题,是基于ip不可以路由的假设。Internet的保留IP在Internet上是不可以路
由的,但是在Intranet中,有些就是用这些ip搭建起来的,因此有些情况下就成为可以路
由的了。比如客户端和服务器在同一个子网里。这个时候,就不存在这些麻烦的问题了。

实践步骤:
客户端:
客户端:
如果客户端是有实ip的话,使用port模式就没问题了。
否则如果客户端在nat后面,就按照这样的循序检查:
1。不使用 被动模式(pasv) 就是使用主动模式(port)
2。绑定socket连接到你的外网(路由器/主机阿)ip。
同时 测试 使用/不使用 被动模式
3。最后的办法,勾上 站点使用nat/non-routable IP
主动被动模式和绑不绑定socket都试一下

服务器端:
由于pasv在多数ftp client是默认的,要让对方不使用pasv模式很麻烦,最好自己处理。
1。如果是porttunnel做的端口映射,那么可以在ftp的页面里设置pasv/port自动翻译。
2。只能增加端口映射的话,那么只好动server得脑筋,以Serv-u为例,
在Domain-->ur domain name-->Settings-->Advaced
勾上 Allow Passive mode data transfers, Use IP 填外网(路由器/主机)ip



标签集:TAGS:
回复Comments() 点击Count()
喜欢就顶一下

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}