请注意:本页内容发布于 3678 天前,内容可能已经过时,请注意甄别。
在前面的一篇文章中(Day#3158),曾经提到本地的内网与放在公网上的某服务器相性不合,被动FTP总是不能正常工作,主要表现为长时间的数据传输(无论上传下载)时,过一段时间(大约30秒至1分钟)速度就会急剧下降,到最后数据连接超时关闭。
曾尝试过许多办法尝试解决这个问题,包括对服务器本身的配置和FTP服务器配置的修改,甚至直接关掉服务器的防火墙,但都没有成功,故而认为问题主要出现在本地内网出口上的设备上。据个人所知,出口上有一个所谓的「上网行为管理系统」,负责管理内网用户的上网行为,还有一个线路自动切换的设备(或策略)来判定对公网的连接应该走电信或者联通(网通)的线路,这些都可能是问题所在,但集团网络中心的人不愿为单个问题去修改设置,所以剩下能修改的地方都已Out of control。
如果说专门的FTP客户端(例如FlashFXP)还能通过一定手段重传的话,那么正在用的一款网站内容采集软件则是主要的障碍之一,这款软件的PORT模式运行正常,但PASV模式就问题百出:一旦遇上数据连接断线,那么重新连接后,就会一个劲的报续传失败,最后整篇文章因为这个而发布失败(因为设定了先上传文件再发布文章,总不能在一篇文章里到处都是×和半截图吧)。
经过与FTP服务器FileZilla Server的作者讨论,并dump了数据包进行分析,发现这款软件有一个很诡异的设定:当在PASV模式下续传文件时,软件的运行过程如下:登录并切换目录后,首先发送SIZE查询已上传的文件大小,然后发送APPE指令通知服务器将要续传文件,但接下来程序没有发送任何文件数据,就以正确的方式(TCP FIN)关闭了数据连接(而不是RST等异常关闭),于是服务器响应226 Successfully appended file,软件会再次使用SIZE查询文件大小,很显然大小与「续传」前相同,于是上传「失败」,重复几次达到最大错误次数后,软件即报上传失败。
与软件作者联系人家不承认,ft。
但是软件还得用,怎么办呢,有的人说换一款软件不就好了,那你帮我重写80多条采集规则谢谢,那么就只能在工作相对正常的PORT模式上下功夫。
经过一段时间的搜索及实验,暂时用Bitvise SSH Server这款SSH服务器解决了问题,使用同一公司出品的Bitvise SSH Client打开SOCKS5代理,在使用FlashFXP试验时,PORT和PASV模式都使用正常。
但某采集软件就是个奇葩:不论如何进行设定,PORT模式向服务器汇报的IP总是127.0.0.1(因为Socks5代理绑定到本地),而PASV数据包的错误一如既往,看来并没有通过SSH通道进行加密(如果加密了理应规避PASV FTP的不正常现象)。
最终的解决方案是:绕过原本部署的FileZilla Server,使用Bitvise SSH Server本身的SFTP功能和Bitvise SSH Client的SFTP-to-FTP Bridge,将采集软件连接的FTP指向本机的SFTP-FTP Bridge并强制使用PORT模式,这下清静了。
因为本Blog没什么人看所以详细的步骤略过(其实配置起来也很容易,另外一点就是感觉写多了好麻烦),如果有需要请于下方评论,我再把详细的步骤写出来。
说说是什么牌子的上网行为管理,要是我认识的话可以直接联系厂家
话说你还真是用心,连filezilla的人都联系了
因为这个问题已经影响到我的日常工作了。
具体是什么牌子的行为管理硬件不知道,只记得有次去机房看见装了一台F5负载均衡器,应该和那个没关系吧。
负载均衡器……有!
以前被坑过,我是做的http服务,结果以前曾被负载均衡把一条连接拆成两个乱发,结果两边都出错。
这些优化设备有时候真心很坑。
……
那我就没办法了。