PPTP协议抓包分析及PPTP穿越NAT

目录

1、PPTP协议概述

2、链接控制

3、报文流程

3.1、PPTP建立拓扑

3.2、详细报文解释

4、PPTP穿越NAT原理报文分析

4.1、控制连接

4.2、数据连接


1、PPTP协议概述

 

PPTP英文全称:Point to Point Tunneling Protocol,即点对点隧道协议。是建立在PPP(Point to Point)点对点协议上的VPN隧道技术。

PPTP有两个并行的组成部分:

  • 1. PPTP链路控制: 基于TCP的PAC-PNS对操作的控制连接
  • 2. PPTP数据传输:一个在相同的PAC-PNS对之间的IP隧道操作。 该操作用来传送封装好的PPP包的GRE(Generic Routing Encapsulation,即通用路由封装协议),为PAC-PNS对之间的用户提供服务。

2、链接控制

在PAC和PNS之间的PPP隧道建立之前, 它们之间必须建立控制连接。

控制层的主要功能包括:

1. 彼此交换基本信息;

2. 负责创建、维护、删除Session;

3. 负责创建、维护、删除Tunnel;

4. 更新通信参数;(Set-Link-Info)

5. 维护控制层自身的连接状态。(Echo-Request、Echo-Reply)

控制连接是标准的TCP会话, PPTP呼叫控制和管理信息就可以通过TCP传送。

控制层连接是基于TCP建立的,PPTP Server监听TCP1723端口,等待Client的连接请求。

控制层自身的状态维护:

PPTP连接双方在一段时间内(60秒)如果没有收到任何控制层信息,就会发Echo-Request查询控制层连接状态,接收方会应答Echo-Reply。如果发送方在60秒内还没有收到应答就会断开控制层连接。

3、报文流程

PPTP链接的建立可以分为以下几个阶段:

1. TCP连接的建立阶段

2. PPTP控制层连接的建立阶段

3. PPP会话阶段(包括LCP协商、身份认证、NCP协商等)

4. PPTP隧道中数据包的交互(实际通信流量、通信的packages是经过GRE封装过的PPP包)

5. PPTP链接的维护

6. PPTP链接的终止

3.1、PPTP建立拓扑

                              (DNAT)

Client----------------------------------FW----------------------------------server

(192.168.10.115)    (192.168.10.114)  (10.10.10.1)         (10.10.10.2)

3.2、详细报文解释

1、控制连接

包5-7:client和server建立TCP连接

包8:client向server发送start control connection request报文,请求建立控制连接,初始化client和server之间的隧道,开始建立隧道

Length:该PPTP信息的八位总长,包括整个PPTP头。

Massage type:消息类型;1为控制消息,2为管理消息

Magic Cookie:以连续的 0x1A2B3C4D 进行发送,其基本目的是确保接收端与TCP数据流间的正确同步运行

Control Message Type:控制消息类型;

  • 1为控制连接请求
  • 2为控制连接应答

Reserved保留位

Protocol VersionPPTP版本号

Framing Capabilities指出帧类型,该信息发送方可以提供:

  • 异步帧支持(Asynchronous Framing Supported)
  • 同步帧支持(Synchronous Framing Supported)

Bearer Capabilities:指出承载性能,该信息发送方可以提供:

  • 模拟访问支持(Analog Access Supported)
  • 数字访问支持(Digital access supported)

Maximum Channels:该 PPTP服务器 可以支持的个人 PPP 会话总数。

Firmware Revision:若由 PPTP服务器 出发,则包括发出 PPTP服务器时的固件修订本编号;若由 PPTP客户端出发,则包括 PPTP客户端 PPTP 驱动版本。

Host Name:包括发行的 PPTP服务器 或 PPTP客户端的 DNS 名称。

Vendor Name:包括特定供应商字串,指当请求是由 PPTP客户端 提出时,使用的 PPTP服务器 类型或PPTP客户端软件类型。

包9:server响应ACK报文

包10:server发出的start control connection reply报文,用于响应start control connection request报文。

start control connection reply报文部分字段和start control connection request报文字段一致。

不同点有:

Control Message Type控制连接应答报文

Result Code:表示建立channal是否成功的结果码

  • 1表示成功
  • 2表示通用错误,暗示着有问题
  • 3表示channal已经存在
  • 4表示请求者未授权
  • 5表示请求的PPTP协议版本不支持

Error Code:表示错误码,一般值为0,除非Result Code值为2,不同的错误码表示不同的含义。

包11:由PPTP客户机发出,请求创建PPTP隧道,outgoing-call-request消息包含GRE报头中的Call ID,该ID可唯一地标识一条隧道。

Control Message Type:值为7。

Call ID:由PPTP客户端指定的唯一的会话ID。

Call Serial Number:是由PPTP客户端指定的唯一标识符,用于在记录会话信息中标识特定会话,与Call ID不一样的是,Call Serial Number PPTP客户端与PPTP服务器来说,唯一绑定到一个给定的会话,且是相同的。

Minimum BPS:对于此次会话可接受的最低传输速度,单位为位/秒;

Maximum BPS:对于此次会话可接受的最大传输速度,单位为位/秒;

Bearer Type:指出承载访问支持,该信息发送方可以提供:

  • 1 模拟访问支持(Analog Access Supported);
  • 2 数字访问支持(Digital access supported)。
  • 3 可支持的任何类型。

Framing Type:指出帧类型,该信息发送方可以提供:

  • 1 异步帧支持(Asynchronous Framing Supported);
  • 2 同步帧支持(Synchronous Framing Supported)。
  • 3 异步或同步帧支持。

Packet Receive Window Size:PPTP客户端为此次会话提供最大接收缓冲大小;

Packet Processing Delay:表示PPTP客户端对数据包处理的延时度量,对于PPTP客户端来说,一般设置比较小越好。

Phone number length:拔号号码长度;

Phone number:建立会话向外拔号的号码,一般对于ISDN或模拟方式拔号来说,此字段域为一个ASCII串。

Sub address:额外信息域,一般长度少于64个字节。

包12:服务端回应客户端outgoing-call-request的报文

outgoing-call-reply报文和outgoing-call-request报文大部分字段都一致。

不同字段如下:

Control Message Type:值为8。

Call ID:由PPTP服务器指定的唯一的会话ID。主要用于在PPTP服务器与PPTP客户端建立的会话上,复用与解封装隧道包使用的。

Peer Call ID:设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。

Result Code:表示响应Outgoing-call-request握手是否成功,

  • 1表示成功
  • 2表示通用错误,暗示着有问题
  • 3表示无载波
  • 4表示服务器忙,无法及时响应
  • 5表示无拔号音
  • 6表示呼号超时
  • 7表示未授权

Error Code:表示错误码,一般值为0,除非Result Code值为2,不同的错误码表示不同的含义。

Cause Code:表示进一步错误信息描述;

Connect Speed:连接使用的实际速率;

Rev window size:PPTP服务器为此次会话提供最大接收缓冲大小;

Packet Processing Delay:表示PPTP服务器对数据包处理的延时度量。

Physical Channel ID:由PPTP服务器指定的物理信道ID。

包13:可由PPTP客户机或服务器任何一方发出,控制连接建立成功,设置PPP协商选项。

Length、PPTP Message、Magic cookie与Start-control-connection-request一致

不同的字段含义如下:

Control Message Type值为15

Peer Call ID:设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用

Reserved:保留位,必须为0

Send ACCM发送的ACCM值,默认值为0XFFFFFFFF

Receive ACCM接收的ACCM值,默认值为0XFFFFFFFF

2、数据连接

包14-19:PPP LCP建立PPP链路

包24-25:PPP客户端和服务器建立握手认证。

包26-35:协商PPP压缩算法

包36-53:PPP客户端和服务端协商网络配置

包54-63:PPP封装客户端和服务端之间传输的数据

4、PPTP穿越NAT原理报文分析

通过修改PPTP报文中的call ID值来判断子连接属于哪个控制连接的,然后进行NAT转换。

4.1、控制连接

包30:客户端向服务端发送start control connection request报文,请求建立控制连接

源端口:57371 目的端口:1723

包31:经过防火墙,转换目的IP为pptp服务器IP,源端口转换为1226

源端口:1226 目的地端口:1723

包34:服务端响应start-control-connection-reply报文

源端口:1723 目的端口1226

包35:经过防火墙,匹配连接跟踪表,转换目的IP为192.168.10.115,目的端口转换为57371

源端口:1723 目的端口:57371

包36:客户端发送outgoing-call-request报文,请求建立PPTP隧道,并且携带自己的唯一标识(call id 20631)发送给服务器。

源端口:57371 目的端口:1723 call ID:20631

包37:经过防火墙,生成map表,并记录客户端的call id,转换目的IP为服务器IP,并且修改携带的call ID为源端口并记录修改后的call id带map表中。

源端口:1226 目的端口:1723 call ID:1226

包38:服务器响应outgoing-call-reply报文,携带自己的唯一标识(call id 1280)发送给客户端,并且peer call id填写客户端的ID

源端口:1723 目的端口:1226    call ID:1280    peer call ID:1226

包39:经过防火墙后,通过map表转换peer call id(1226)为对应的客户端peer call id(20631),并且记录服务端的call id(1280)到map表中。然后匹配链接跟踪表转换源IP为客户端IP。

源端口:1723    目的端口:57371    call ID:1280    peer call ID:20631

包40:客户端请求设置PPP协商,携带服务器的call id 1280

源端口:57371    目的端口:1723    peer call ID:1280

包41:经过防火墙,转换目的IP为服务器IP,源端口为1226,不转换服务器的call id

源端口:1226    目的端口:1723    peer call ID:1280

4.2、数据连接

包42:PPP LCP 协商,携带服务器的call id

包43:经过防火墙后,查找map表,发现有call id 1280的表项,然后转换目的IP为服务器IP,并且生成链接跟踪表。

包44:向客户端发送PPP LCP报文,携带客户端的call id 1226

包45:防火墙收到后,防火墙查找map表发现有1226的表项,修改call id 1226为20631。然后查看链接跟踪表,转换目的IP为客户端IP。

 

原文地址:https://www.cnblogs.com/APeng2019/p/10719284.html