分类:
2005-11-23 21:07:18
朋友牵了ADSL,想建个FTP服务器,但是在作了端口映射后发现还是不行,可以连接上并登陆但是就是list不出来文件,也更不能下载或者上传了。于是上网找了找资料,找到了这篇文章,并综合其它得文章,总算将问题解决了。特将该文章转载在这里,以备其它有同样问题的人可以查看,自己以后遇到同样的问题却忘记了解决办法也可以用来勾起忘却的记忆。
路由器后FTP的设置 | ||||||||
这片估计是最完整解释了,我会增加插图的 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,已经设好端口映射,但是其他人连过来就是: 怎么办? 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-->< -->Advanced 勾上 Allow passive mode data transfer, use IP 填入外网IP 2 打开开若干端口并且限制在这些范围内 2.1 打开若干端口 2.1.1 端口映射 使用porttunnel,windows自带得端口映射,或者设置路由器。 以下为TPLink路由器举一个例子 设置好一个映射为控制连接,这个是你公开你的ftp用得端口。 比如tplink路由器的映射功能(就是 虚拟服务) 注意第三行把路由器的2121映射到192.168.0.13的2121 设置好一段范围的映射,给数据连接使用。 比如tplink路由器支持特殊应用程序, 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-->< -->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 |