PPTP-ALG工作原理
1、PPTP-ALG是一种PPTP穿透NAT技术,由于PPTP协议特殊原因,无法顺利通过NAT。
2、PPTP流量由两条连接产生:
PPTP控制连接
这是一个逻辑连接,表示必须通过一系列PPTP消息创建、维持和终止的PPTP隧道。 PPTP控制连接流量使用PPTP客户端上动态分配的TCP端口,以及PPTP服务器上由IANA保留的TCP端口1723。
PPTP数据连接
当数据通过PPTP连接发送时,PPP帧将使用通用路由封装(Generic Routing Encapsulation,GRE)报头进行封装,报头包含用于识别该数据包的特定PPTP隧道的信息。
3、当建立控制连接后,通过GRE协议封装PPP协议进行认证,IP地址分配等操作。此时已经没有TCP协议参与。
那么未开启PPTP-ALG时,我司设备PPTP会话/快转表项建立如下:
在PPTP 登录过程中,控制连接交互正常,但GRE封装的PPP报文交互失败;
原因是防火墙设备在建立会话时,加入了1500端口(源NAT可选端口最小值),导致服务器回应(或者请求包)报文无法命中NAT还原。所以报文无法正常转发。
当未插入1500端口时,未开启PPTP-ALG情况下,PPTP是能正常登录的,数据也能正常转发。会话建立如下:
GRE 123.1.1.1:0 → 130.1.1.2:0 130.1.1.2:0 → 100.1.1.1:0
若此时还存在一个客户端拨号,会话建立如下:
GRE 123.1.1.2:0 → 130.1.1.2:0 130.1.1.2:0 → 100.1.1.1:0
那么当服务器给的回应报文是给123.1.1.1还是123.1.1.2就无法确定了,此时内部主机只能与同一服务器建立一条会话,不能有第二个客户端。
开启PPTP-ALG后,防火墙设备PPTP会话/快转表项建立如下:
开启PPTP-ALG后,使用GRE协议中的CALL-ID做为端口建立会话。
NAT把客户端的CALL-ID值当做源端口,然后告诉服务器一个假的CALL-ID(我司设备使用控制连接源端口作为该CALL-ID)来充当转换后的端口。这个修改是在控制连接协商CALL-ID阶段中修改的,然后做nat记录后发送给服务器。修改客户端CALL-ID原因是,当其它客户端使用了相同的CALL-ID,且服务器也给了相同的CALL-ID值,这样也会存在问题。