一、前言
接上篇文章,假设公司外网IP是10.123.123.123
(只要公司局域网里能上外网,就总会有一个外网IP,联系运营商改成静态的);
公司路由器配置,端口转发(Port Forwarding),配置了21的端口转发:
a
2221 TCP 192.168.1.9 21
这个配置的效果是,把访问10.123.123.123:2221
的报文(TCP协议的),转发给公司内部局域网电脑192.168.1.9:21
上,这台电脑就是公司内部的FTP服务器,默认FTP协议就是21。
现在的问题是,只配置21的端口转发不行,从外部还是链接不了公司内部的FTP服务器,报错超时。
二、FTP的两种模式
因为FTP协议是多端口协议,还需要其他端口才行;并且有两种工作模式,如图:
![](https://i-blog.csdnimg.cn/direct/d6352acc51f7499481b785e18a2be5d5.png)
![](https://i-blog.csdnimg.cn/direct/033bdf1b7ae044559f9821c769ec0f9a.png)
现在推荐使用的是被动模式,不推荐主动模式;(Windows CMD比较老了,只有主动模式,无法使用被动模式,注意别用这个测试)
1.假设客户端使用被动模式链接FTP服务器,首先要给服务器的21端口发请求;然后服务器会开放一个随机端口通知客户端,客户端再给服务器的随机端口发请求,才能完成数据传输。
2.假设客户端用主动模式链接FTP服务器,首先要给服务器的21端口发请求,然后自己开放一个随机端口、还走21端口通知给服务器,最后服务器去给客户端的随机端口发请求,完成数据传输。
三、FTP内网穿透配置方法
假设客户端用被动模式链接公司内网FTP服务器,访问10.123.123.123:2221
,被路由器转发到了192.168.1.9:21
,登录成功;
然后FTP服务器开放了一个随机端口,通知客户端、下次访问这个端口;
但是客户端再访问10.123.123.123:随机端口
,就链接不上服务器了,因为没有配置其他的路由器的端口转发规则。
1.路由器配置
a
2221 TCP 192.168.1.9 21
60000-65534 TCP 192.168.1.9 60000-65534
首先,多配置一个路由器端口转发规则,注意这次需要对应一致。
2.FTP服务器配置
![](https://i-blog.csdnimg.cn/direct/80cdf952e1404ca9b8987c750f71212d.png)
注意这个是FileZilla FTP服务器,不是客户端。
其中,选择了自定义开放端口范围,60000-65534
,与路由器转发端口保持一致;外网服务器地址(Public IP)10.123.123.123
,与公司外网IP保持一致,下面的对钩,意思是,如果用内网访问FTP服务器(192.168.1.9),那就返回给客户端内网IP(192.168.1.9)。
四、梳理流程
假设客户端用被动模式链接FTP服务器,先访问10.123.123.123:2221
,被路由器转发到192.168.1.9:21
,登录成功;
然后FTP服务器根据配置,随机一个端口(假设是60000),返回10.123.123.123.:60000
,告诉客户端,下次用这个链接:端口
来拿数据;
最后客户端访问10.123.123.123:60000
,被路由器转发到192.168.1.9:60000
,就能成功拿到数据。
五、备注
如果客户端用主动模式链接服务器,最后一步,服务器访问客户端的IP:随机端口
时,通常会被客户端这边的防火墙/路由器拦截,导致传输超时。防火墙为了安全,默认就是让出不让进,不让陌生端口的数据进来。
(用被动模式就行,FileZilla客户端与FlashFXP客户端都支持被动模式,除了Windows CMD)