码迷,mamicode.com
首页 > 其他好文 > 详细

记一次FTP服务故障分析

时间:2015-09-06 11:00:57      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:vsftpd   ftp   故障排除   被动模式   

一、 概念理解

FTP的主动、被动模式让人很烦,相信你认真看完下面的描述就不会再烦了!

 

由于历史原因,FTP服务默认需要有2个端口20(数据端口),21(控制端口)

FTP服务的最初的工作过程是:Client请求Server21端口建立控制连接,然后Server主动用20端口去连Client建立数据连接,结果总是被Client的防火墙拒之门外。(主动模式)

 

Server毕竟是为大多数人服务的,这样低三下四又干不成事固然不行,于是为了解决服务端被拒之门外的问题,被动模式诞生了:Client请求Server21端口建立控制连接,然后Server告诉Client我开了哪几个数据端口,你自己来连。(被动模式)

 

2种模式的区别总结为一句话:前提都是Client去请求Server建立控制连接,不同的是谁来发起数据连接。

 

 

 

二、 故障分析案例

 

FTP服务器公网IP为:124.x.x.x   内网IP192.168.1.85  服务端为Vsftpd

故障如图(连接超时):

技术分享


 

当我看到这个问题的时候,我并不知所措,也没有仔细去分析连接的过程,我习惯性的用工具连接了一下,因为我相信工具某些方面比人更强大,果然我用CuteFTP连接正常,于是我看工具连接的日志,注意到了一句话:

技术分享


这句话是什么意思呢?为什么要替换呢?

我们来分析一下过程:

  1. ClientServer(公网IP)发出控制连接申请并通过账号密码验证

  2. ClientServer发出PASV命令进入被动模式

  3. ServerClient返回的是监听IP192.168.1.85)和数据传输端口(38*256+254=9982

  4. Client发现返回的IP192.168.1.85)和之前发出的连接(124.x.x.x)不同,Client自行修改IP为正确的公网IP

  5. Client124.x.x.x9982端口发出数据连接申请,建立数据连接

 

这个分析完之后,我们再回过头来看用命令连接时出现的问题,不难看出,是卡在了ClientServer端发出数据连接申请的时候了,为什么?因为我们命令模式不是智能的,不会自己将Server返回的内网IP转成公网IP,所以连192.168.1.85返回超时。

技术分享

 

 

然后分析的就是为什么会只返回内网IP

原来,公网IP并不是配在该服务端的,而是通过路由进行绑定的,例如云主机上的“弹性IP”等,所以FTP服务端程序只知道存在一个内网的IP

解决办法:配置文件写入pasv_address=公网IP

# man  vsftpd.conf

技术分享


本文出自 “esoul” 博客,请务必保留此出处http://esoul.blog.51cto.com/7825461/1691790

记一次FTP服务故障分析

标签:vsftpd   ftp   故障排除   被动模式   

原文地址:http://esoul.blog.51cto.com/7825461/1691790

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!