■ 唐山市教育局电化教育馆 方永亮
编者按: 笔者在为客户重新部署在线教学平台后,打开该网盘工具时,总报读文件错误“Read File error!”,于是笔者进行了故障排查。
笔者为某单位部署的在线教学平台提供了一款网盘工具。近期,为满足大容量用户访问需求,笔者重新部署了该在线教学平台。
此次部署首先将原单机部署更改为群集部署,并将数据库服务器、负载均衡服务器、静态文件服务器、缓存服务器、文件下载服务器、视频点播服务器、视频转换服务器、Web服务器等支撑平台运行的服务器部署在不同的服务器上,其中静态文件服务器、缓存服务器、文件下载服务器、视频点播服务器、视频转换服务器、WEB服务器等均部署了多台服务器,分别做了负载均衡,整个在线教学平台部署架构图如图1所示。
图1 在线教学平台部署架构图
目前该在线教学平台能满足1万多人同时访问,基本满足了客户需求。平台自带的网盘工具支持拖拽上传,可以上传整个文件夹、上传下载均支持断点续传,老师们已习惯使用平台自带的网盘工具上传或下载数字化教学资源,重新部署平台后,只要打开该网盘工具,总报读文件错误“Read File error!”。这对习惯使用网盘工具上传教学资源的老师们而言,很不方便。笔者为解决此问题,费劲了周折,终于排除了此故障,下面和大家分享故障排除过程。
图2 FTP客户端上传/下载文件
打开平台自带的网盘工具后,可以看到窗口下方显示的是“版本号1.2(FTP)”,估计此网盘工具是一个FTP客户端工具,访问的是FTP服务器。
于是笔者用一款经典的FTP工具LeadFTP直接连接FTP服务器,经过测试,LeadFTP不仅能连接到笔者部署的FTP服务器,也能正常上传和下载文件,说明FTP服务器工作正常。
考虑到是在外网(公网)发现的网盘错误,如果在内网(校园网)没有错误,说明是IP地址和端口映射问题,于是笔者在内网运行网盘工具,报同样的错误。
从图1所示在线教学平台部署架构图不难看出,无论是在外网还是在内网,只要使用网盘工具访问平台的网盘,都需要经过防火墙。笔者为了提升在线教学平台的安全性能,限制内外网直接访问平台服务器,部署了该防火墙。笔者不仅在防火墙上做了端口限制,还做了网络地址转换(NAT)。难道是防火墙阻挡了网盘工具访问FTP服务器?
于是笔者直接在FTP服务器上运行网盘工具,发现网盘工具可以正常运行,可以用它上传或下载文件。于是笔者又在其他服务器上运行网盘工具,经过测试,网盘工具均能正常运行,说明网盘故障是由防火墙引起的。
笔者又用Telnet命令检测FTP服务器端口号是打开还是关闭状态。经过测试,FTP服务器只有监控端口16021处于打开状态,数据端口16020是关闭状态。
数据端口是关闭状态,FTP服务器又能正常工作,是不是在做网络地址转换时,没有将FTP服务器的端口都映射出去,笔者检查了防火墙上的端口映射,发现FTP服务器端口16022-16422都做了端口映射,也就是说,FTP服务器的数据端口、监控端口和被动模式端口都做了映射,应该不是端口映射的问题。
经过上述操作,基本排除网盘工具程序问题、FTP服务器问题和端口映射问题。难道是端口映射不成功?用FTP工具LeadFTP上传一个较大文件,在上传过程用端口扫描工具扫描端口,发现只有监控端口16021处于打开状态,数据端口16020和笔者设置的被动端口16022-16422都处于关闭状态。
同样,直接在FTP服务器上扫描端FTP服务器的端口,也只有监控端口16021处于打开状态,数据端口16020和笔者设置的被动端口16022-16422都处于关闭状态。
由此可见,给FTP服务器做的端口映射也没有问题,为了研究FTP服务器的数据端口和被动模式端口为什么处于关闭状态,笔者决定重新抓包分析FTP的工作原理。
FTP文件传输一般有主动模式(Port Mode)和被动模式(Passive Mode)两种:
1.主动模式FTP连接双方端口分析
在主动模式下,FTP客户端上传/下载文件的过程如图2所示。
(1)FTP客户端通过临时端口发送一个TCP SYN(TCP同步)包给FTP服务端的监控端口21(默认情况下,FTP监控端口是21,后面步骤就用21代替监控端口)。
(2)FTP服务端通过监控端口21发送SYN ACK(同步应答)包给FTP客户端的临时端口。
(3)FTP客户端通过临时端口发送一个ACK(应答)包给FTP服务端的监控端口21。此时双方的连接建立起来,FTP客户端使用这个连接来发送命令,FTP服务端也使用这个连接来发送FTP应答。
图3 自定义端口范围
(4)当FTP客户端需要获取FTP服务器上的目录列表、上传文件或下载文件时,会发出相应请求,FTP客户端使用的端口时临时端口,数据包里包含客户端的IP地址,它希望FTP客户端打开数据连接时使用该端口。
(5)FTP服务端通过数据端口20发送一个SYN(同步)包给FTP客户端的临时端口(FTP服务器的默认数据端口为 20)。
(6)FTP客户端通过临时端口发送SYN ACK(同步应答)包给FTP服务端的数据端口20。
(7)FTP服务端通过20端口向FTP客户端临时端口发送一个ACK(应答)包。此时二者之间的数据连接就建立起来了。
(8)发送数据的主机以这个连接来发送数据,实现文件上传和下载。
通过上述分析不难得出以下结论,如果FTP客户端通过主动模式连接FTP服务端,需要先提供地址和端口,由FTP服务器去连接FTP客户端的这个端口,这对于互联网应用而言,让FTP服务器连接客户端是部现实的,毕竟多数FTP客户端都是通过NAT连接互联网的。
2.被动模式FTP连接双方端口分析
如果FTP客户端以被动方式发起连接请求,FTP客户端会打开两个本地端口N和 N+1,其中 N是由 FTP客户端产生的,N一般大于等于1024。第一个端口N连接FTP服务器的21端口。和主动方式不同的是,FTP客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令,此时FTP服务器会开启一个任意的非特权端口P(端口号一般也大于1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
通过上述分析不难看出,在被动模式下,是FTP客户端连接FTP服务器提供的端口21和非特权端口P,不用FTP服务器连接FTP客户端,也就是说,如果在互联网环境,FTP客户端适合以被动模式连接FTP服务器。
根据图1所示平台部署架构图,无论校内访问平台,还是校外访问平台,都要经过防火墙。而且笔者为了平台安全,将平台单独部署在一个网段内,平台所有服务器构成一个私网,校内或校外不能直接访问这些服务器,需通过防火墙才能访问。通过上述对FTP工作模式及FTP连接双方端口的分析,平台网盘工具只能工作在被动模式。
在被动模式下,FTP客户端需提交PASV命令,FTP服务器才会开启一个任意的非特权端口P(端口号一般也大于1024)。一般的端口扫描工具,包括终端命令telnet在内,都不会发起PASV命令,FTP服务端也就不会开启被动端口,这就是前面扫描FTP服务期被动端口时,FTP服务器被动端口处于关闭状态的原因。同理,用LeadFTP等FTP工具能连接FTP服务器,能上传或下载数据,但用端口扫描工具扫描FTP服务器端口时,不会发起PORT命令,FTP服务器不会建立数据连接,数据端口自然也处于关闭状态。
老师们在使用平台自带的网盘工具时,报读文件错误“Read File error!”,估计是FTP客户端访问不了FTP服务端的被动端口。如果正确设置FTP服务器,这个问题应该能正确解决。按照上述思路,笔者调整了FTP服务器的被动模式设置,排除了网盘故障。为了保护客户单位平台隐私,下面以FTP服务器FileZilla Server为例,介绍调整了FTP服务器的被动模式设置的过程。
其实,只要进入FTP服务器FileZilla Server被动模式设置页面,就可以看到FileZilla后给出的提示信息:“如果你在NAT路由或防火墙后操控服务器,请使用自定义被动设置.这种情况下,在路由外部不可访问服务器IP,所以你应该在此填入正确的地址. 使用端口范围来限定需要穿过路由提交的端口号.”。
根据图1所示平台框架,FTP服务器在“NAT路由或防火墙后操控服务器”定义范围内,所以需要自定义端口范围,在本例中,定义了如图3所示端口“16022-16422”,共定义了401个被动模式端口。在“用于被动模式传输的外部服务器IP地址”栏选择“使用以下IP”,在地址栏输入正确的IP地址,取消选择“对本地连接不使用外部IP”,完成被动模式设置。
说明:为保护客户隐私,本文(含图片)涉及到的FTP服务器名称、IP地址、端口均为虚拟信息。