PPTP穿透NAT之深入分析
时间:2010-10-16 来源:wildlee
PPTP穿透NAT之深入分析 原创:wildlee
大家好,现在是人静时分,我公司人员都以溜光,只有我还在面对computer,在经过不解、迷惑、结论之后,现与大家分享结果,感谢朋友Zyliday,见贤思齐的实验帮助。
在研究技术原理之前,让我们先了解几个基本的概念。我们要了解NAT技术,这个就不用多说了吧!我们的主机大部分存在于一个内部网络中,有一个私有ip地址,所以所有去往Internet的数据包,都要将其源ip与端口转换,来实现数据通信。让我们感到幸运的是,我们对于互联网的服务应用,大部分用tcp与udp协议来传输,由于tcp与udp协议中含有端口,所以往返的数据包很容易找到归宿。但难免会有特殊出现,pptp协议,l2tp协议,ftp 协议,ipsec 协议等,根据其各自协议特殊原因,均无法顺利通过nat,俗话说兵来将挡水来土掩,nat 该怎么办going?今天重点我们放到pptp协议身上。pptp是什么?pptp是其vpn隧道协议中的一种,加以其它协议的配合,成功实现了身份验证、加密数据和协议配置等问题,为远程用户创建了一条穿越公网的安全连接,让我们去了解PPTP协议。
PPTP流量由两条连接产生:
• PPTP控制连接
这是一个逻辑连接,表示必须通过一系列PPTP消息创建、维持和终止的PPTP隧道。 PPTP控制连接流量使用PPTP客户端上动态分配的TCP端口,以及PPTP服务器上由IANA保留的TCP端口1723。
• PPTP数据连接
当数据通过PPTP连接发送时,PPP帧将使用通用路由封装(Generic Routing Encapsulation,GRE)报头进行封装,报头包含用于识别该数据包的特定PPTP隧道的信息。
现在来分析下,由于控制连接用了端口1723,所以这条连接我们就大可放心了,根据nat发送原则,会成功将数据包转发到pptp 服务器,如果你的vpn 服务器建立于内网中,在路由上映射其1723端口到服务器就OK.
让我们看下数据连接,我们发现以经没有了tcp协议参于,反而成了GRE协议包与PPP协议包,为什么它无法通过nat呢?来看下GRE协议格式:
每个字段的详解:
我们发现根本没有发现有端口这个字段,怎么映射?没有就不做端口映射呗~~~就转换ip不就得了。哈哈其实远远不是这样的,这种非常理的数据包格式,对于nat是个问题,对于防火墙也是个问题。今天我们先论nat:先来分析如果一个位于内部网络中( 公网IP2.2.2.2)的主机A192.168.1.2与pptp服务器5.5.5.5建立连接,控制连接成功建立,数据连接于由没有端口,nat只做其ip的转换,于是在2.2.2.2这个网络的nat设备上有这样的一个nat表:
源ip
源port
协议
公网ip
公网port
目标ip
目标port
192.168.1.2
GRE
2.2.2.2
5.5.5.5
192.168.1.3
GRE
2.2.2.2
5.5.5.5
当2.2.2.2这个网络收到来自于pptp服务器的数据流包时,2.2.2.2网络的nat设备发现来自于网络5.5.5.5的gre 协议数据包,是给内部主机192.168.1.2的,所以成功通信。分析如果位于2.2.2.2这个网络中的主机B192.168.1.3 也与5.5.5.5网络中的pptp服务器通信,结果就不太理想了~~如果在nat表中还有一条到达主机192.168.1.3的gre通信,到收到一个gre协议数据包时,2.2.2.2网络中的nat设备犹豫了,这个包给谁呢?192.168.1.2?还是192.168.1.3呢?在此大家也不要忘了,我们的实验环境是只有一个公网ip,内部主机A与B出去的时候,源ip都转换成了公网的ip2.2.2.2,所以收到的数据包都是目标ip为2.2.2.2,然后nat设备根据端口的不同转发到不同的主机。有两个客户端就无法通信,这就是网上说的位于内部的主机只能与同一服务器之间建立一个会话,不能有第二个客户端。
标签分类: 网络技术