开发者社区> 科技小能手> 正文

当两次NAT碰到FTP ALG

简介:
+关注继续查看

           当两次NAT碰到FTP ALG (一)

      相信大家都在出口相关项目中,碰到过FTP服务器访问的问题吧,其实FTP协议是一个很经典和有代表性的问题,因为它和传统的单连接应用(传统的web类应用)不一样,有2个独立的连接:控制连接和数据连接,正是因为这点不同,导致在和出口NAT设备配合使用的时候,因为其独特的协议行为而引起访问问题。而要解决这些访问问题,则需要出口NAT设备配合,既NAT设备支持的FTP ALG。而在不同的网络场景中,相关配置又不相同,最复杂的莫过于两次NAT以后的FTP访问问题,最近我就碰到一个两次NAT以后的FTP访问问题,第一次是链路均衡设备的内向NAT,第二次是防火墙的NAT,结果就遇到了访问问题,经过分析以后找到了原因,所以就在本文中总结一下,需要了解的基本概念为:ftp协议运作细节、ftp ALG工作原理。

      要想深入分析原因,首先需要对ftp协议工作原理有个清晰的认识。

1、  控制连接

 ftp协议要正常工作,需要首先成功建立控制连接,默认情况下,是由ftp客户端向ftp服务器的端口21发起连接请求,通过3次握手成功建立控制连接。控制连接建立之后,ftp客户端会和ftp服务器端协商数据连接建立的方式,有2种方式:主动模式、被动模式,这两种方式分别适用于不同的网络场景。

2、  数据连接

ftp客户端和ftp服务器端协商好数据连接采用的方式以后,就会用协商好的方式建立数据连接。大家平时使用ftp客户端软件连接ftp服务器并且看到的文件列表,就是通过数据连接传送的。因此,ftp映射通常碰到的一个问题,列目录超时,就是数据连接无法成功建立的原因。

       现实环境中,ftp客户端和ftp服务器端的网络位置分多钟类型:

   场景1ftp客户端和ftp服务器端同时位于私有网络,所有端口可达(或者同时位于internet,所有端口可达)

   场景 2ftp客户端位于NAT设备后,ftp服务器位于公网

   场景 3ftp客户端位于公网,ftp服务器位于NAT设备之后的私有网络

   场景 4ftp客户端和ftp服务器端均位于NAT设备之后的私有网络。

 

      再不启用FTP ALG的时候,场景234会碰到不同的问题,在分析2,3,4前,我们

      先详细分析一下场景一的ftp客户端和ftp服务器端的交互行为。

 

   A、我们先分析数据连接采用主动模式时候的行为:

1、  控制连接

 

如上图所示,ftp客户端首先会主动与ftp服务器的21端口通过3次握手建立一个tcp连接,这个tcp连接既为控制连接。客户端和服务器端在控制连接上用ftp特有的7层命令来协商数据连接的建立方式。在场景1的主动模式中,ftp客户端告诉ftp服务器端自己会在192.168.10.50IP地址和2000端口上等待ftp服务器端主动发起的数据连接请求。

 

如上图所示,在协商成功数据连接用主动模式建立之后,ftp服务器端会以端口20为源端口,192.168.10.50为目标IP2000为目标端口,通过一个新的3次握手建立一条tcp连接,这条连接既为数据连接。这条连接一旦成功建立,在ftp客户端上就可以进行文件列表查询,上传下载等行为。

 

     B、再分析数据连接采用被动模式时候的行为:

        1、控制连接

和主动模式相似,ftp客户端首先会主动与ftp服务器的21端口通过3次握手建立控制连接,而与主动模式不同的是,ftp客户端会用pasv命令告诉ftp服务器端,自己会主动发起数据连接的建立,所以ftp服务器端会用port命令告诉ftp客户端,自己会在192.168.10.200上的2000端口等待ftp客户端的连接。

      随后ftp客户端会以大于1024的随机端口为源端口,192.168.10.200为目标IP2000端口为目标端口,发起新的3次握手,成功建立数据连接。 

 从上诉描述来看,所谓主动模式和被动模式,是争对ftp服务器主动发起数据连接建立请求还是被动接受数据连接请求来区分的。

在场景1中,不论是主动还是被动模式,都是可以成功建立的,因为同在私有网络或者同在internet上,正常情况下客户端和服务器端的IP都是互相可达的,且端口也是全部可达。但是对于场景2,3,4,情况就不一样了。

t.d.


本文转自 virtualadc 51CTO博客,原文链接:http://blog.51cto.com/virtualadc/755315


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19825 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29215 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13589 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22544 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16489 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20725 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14905 0
23704
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载