我在CDN公司,遇到一个客户需要加速ftp服务,故给出了这样的方案
客户使用的是vsftpd 2.0.5
我们建议客户在vsftpd.conf里加入如下配置
#pasv
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10250
pasv_addr_resolve=YES
pasv_address=test.a.com #这个是客户的域名,客户端进入pasv模式后,ftp服务器会发送这个域名的解析给客户端
但是问题来了,比如网民访问test.a.com,分这几个步骤
(1)执行ftp test.a.com,解析得到的CDN节点(本例中是用haproxy做ip转发加速的)是1.1.1.1,这时候就会与1.1.1.1的21端口建联,haproxy转发请求到ftp服务器后,建联成功;
(2)客户端默认模式是PASV,客户端执行ls命令(列出远端文件列表),ftp服务器返回地址 2.2.2.2(这个地址是ftp server解析test.a.com得来的,是另外一个CDN节点ip);
(3)客户端连接2.2.2.2,进行数据传输;
以上工作正常,但我疑惑的是,ftp的控制通道和数据通道,竟然不是同一对地址,很让人奇怪
这时出现的问题就是,网民通过CDN系统的智能解析,得到的控制通道的建联ip是离网民最近的,但是数据通道建联的服务器却是离源站ftp最近的,所以无法取得加速效果,除非使用主动模式!
但是主动模式是server连接client,可能会遇到client端的防火墙限制,所以也有不理想的地方!