2 分钟阅读 次阅读

核心作用

PPP:解决“你是谁”(认证)和“你的地址是什么”(IP 分配)的问题,创建虚拟点对点链路。 L2TP:解决“如何将 PPP 帧在 IP 网络上传送”的问题,扩展了 PPP 的适用范围,区分不同的用户连接。 IPsec:解决“如何保证在公共 IP 网络上的通信绝对安全”的问题,为整个通信过程提供底层保护。

设计哲学

  • PPP (Point-to-Point Protocol) - 点对点协议 原始设计目标:在直接相连的两个节点之间建立连接、进行认证并配置网络参数。它本质上是一条虚拟的、直接的点对点链路。
  • L2TP (Layer 2 Tunneling Protocol) - 二层隧道协议 原始设计目标:将原本只能在直接链路上运行的 PPP 帧,通过一个 IP 网络进行“隧道化”传输。它扩展了 PPP 的物理距离。
  • IPsec (Internet Protocol Security) - IP 层安全协议 原始设计目标:在 IP 层为 IP 数据包直接提供加密、认证等安全服务,使其能安全地穿越不信任的网络(如互联网)。它不关心传输的是什么上层协议。

详解

用户 A 向 VPN 服务器发送一个 HTTP 请求(比如访问example.com 为例,从“数据的视角”跟踪它在连接建立阶段数据传输阶段如何通过 strongswanxl2tpdppp 协同处理。过程中会明确数据的形态变化(原始数据 → 封装/加密后数据),以及每个软件的具体动作。

前提:用户 A 已启动 VPN 客户端,准备连接服务器

假设服务器公网 IP 为 203.0.113.10,用户 A 的公网 IP 为 198.51.100.20,双方已配置好预共享密钥(PSK)或证书。

阶段一:连接建立——三层软件协同完成“隧道握手”

在发送实际数据前,需先建立 IPsec 安全隧道、L2TP 隧道,并通过 PPP 认证用户身份。这一步是“数据通路”的准备,涉及三类控制报文的交互。

1. IPsec 握手:strongswan 建立“加密外壳”

目标:协商加密规则、生成共享密钥,建立 IPsec 安全隧道(防窃听/篡改)。
数据流向:用户 A 的 VPN 客户端 → 服务器 strongswan

  • 用户 A 客户端发送 IKE 请求(数据形态:IKEv1/IKEv2控制报文,UDP 端口 500):
    包含客户端支持的加密算法(如 AES-256)、认证方式(PSK)、随机数等。
  • 服务器 strongswan 处理
    监听 UDP 500 端口,收到请求后,用自己的配置(如相同的 PSK)验证客户端合法性,协商出双方认可的加密算法(如 AES-256-GCM)、密钥交换参数(DH 组),生成第一阶段 ISAKMP SA(用于保护后续协商)。
  • 继续协商 IPsec SA(第二阶段):
    双方交换“如何加密真实数据”的规则(如 ESP 协议、加密算法、哈希算法),生成IPsec SA(含加密密钥、SPI 标识等),并协商 NAT 穿越(若用户 A 在路由器后,改用 UDP 4500 端口传输数据)。
  • 结果:IPsec 隧道建立完成,后续数据将通过 ESP 协议加密传输(外层 IP 头+ESP 头+加密数据+ESP 尾)。

2. L2TP 隧道建立:xl2tpd 创建“传输管道”

目标:在 IPsec 隧道内创建 L2TP 隧道(逻辑通道),用于承载 PPP 数据。
数据流向:用户 A 的 VPN 客户端 → 服务器 xl2tpd(UDP 端口 1701)。

  • 用户 A 客户端发送 L2TP 控制报文(数据形态:SCCRQ“Start-Control-Connection-Request”):
    包含客户端支持的 L2TP 版本、主机名等,请求建立 L2TP 隧道。
  • 服务器 xl2tpd 处理
    监听 UDP 1701 端口,收到请求后,创建L2TP 隧道(分配隧道 ID,如服务器侧 ID=1),回复SCCRP“Start-Control-Connection-Reply”确认。
  • 创建 L2TP 会话(Session)
    客户端发送ICRQ“Incoming-Call-Request”(请求建立会话),xl2tpd 分配会话 ID(如会话 ID=100),回复ICRP“Incoming-Call-Reply”,完成会话绑定(隧道 ID+会话 ID 唯一标识一个用户的连接)。
  • 结果:L2TP 隧道+会话建立完成,后续 PPP 数据将通过此会话传输。

3. PPP 认证与 IP 分配:ppp 完成“用户准入”

目标:验证用户 A 身份,为其分配私有 IP(模拟局域网接入)。
数据流向:用户 A 的 VPN 客户端 → 服务器 pppd(通过 L2TP 会话传输)。

  • xl2tpd 调用 pppd 启动 PPP 会话
    L2TP 会话建立后,xl2tpd 会触发服务器上的pppd(ppp 软件的核心守护进程),启动 PPP 协议栈。
  • 用户 A 发送 PPP 认证报文(数据形态:CHAP Challenge-ResponsePAP用户名密码):
    假设用 CHAP 认证,客户端发送用户名(如userA)和挑战响应值(基于服务器发送的随机数和用户密码计算)。
  • 服务器 pppd 处理
    验证用户名密码(查本地文件或 RADIUS 服务器),通过后,通过 PPP 协议为用户 A 分配私有 IP(如10.0.0.100),服务器自身虚拟接口(ppp0)分配10.0.0.1,并发送“IPCP 确认报文”(告知客户端分配的 IP)。
  • 结果:用户 A 获得私有 IP,PPP 会话激活,可传输数据。

阶段二:数据传输——用户数据经三层软件“层层封装”

连接建立后,用户 A 的 HTTP 请求(访问example.com)开始发送,数据会依次经过 PPP→L2TP→IPsec 三层封装,最终通过互联网传输到服务器;服务器反向解封装后,将数据转发给example.com

Step 1:PPP 层(ppp)——封装用户数据为“PPP 帧”

用户 A 端

  • 原始数据:HTTP 请求 IP 包(源 IP=用户 A 私有 IP10.0.0.100,目的 IP=example.com的 IP93.184.216.34,TCP 端口 80,内容GET /index.html)。
  • ppp 处理
    ppp 协议将这个 IP 包封装成PPP 帧(添加 PPP 头:协议字段0x0021表示“IPv4 数据”,校验位 FCS),形成“PPP 帧数据”。

Step 2:L2TP 层(xl2tpd)——将 PPP 帧封装为“L2TP 报文”

用户 A 端

  • xl2tpd 处理
    将 PPP 帧数据嵌入 L2TP 报文,添加 L2TP 头(包含隧道 ID=1、会话 ID=100,标识这是用户 A 的会话),形成“L2TP 报文数据”。

Step 3:IPsec 层(strongswan)——加密 L2TP 报文为“ESP 包”

用户 A 端

  • strongswan 处理
    用阶段一协商的 IPsec SA(含 AES-256 密钥),对 L2TP 报文数据进行ESP 加密(添加 ESP 头:SPI=12345、序列号,用于标识 SA;ESP 尾:填充位、校验位),再用外层 IP 头(源 IP=用户 A 公网 IP198.51.100.20,目的 IP=服务器公网 IP203.0.113.10,UDP 端口 4500,因 NAT 穿越)封装,形成最终的“ESP 加密包”。

数据传输:ESP 包通过互联网到服务器

这个 ESP 包(外层 IP+UDP 4500+ESP 加密数据)通过互联网传输到服务器公网 IP 203.0.113.10

服务器反向处理:三层软件“层层解封装”

服务器收到 ESP 包后,按相反顺序处理:

  1. strongswan 解密 ESP 包
    用 SPI=12345 找到对应的 IPsec SA,用密钥解密 ESP 数据,得到原始的 L2TP 报文(隧道 ID=1,会话 ID=100)。

  2. xl2tpd 解封装 L2TP 报文
    解析 L2TP 头,确认隧道/会话有效,剥离 L2TP 头,得到 PPP 帧数据(协议0x0021)。

  3. pppd 解封装 PPP 帧
    剥离 PPP 头(校验 FCS),得到原始 HTTP 请求 IP 包(源10.0.0.100,目的93.184.216.34)。

  4. 服务器转发数据
    pppd 将 IP 包交给服务器内核,内核通过物理网卡转发给example.com(或若服务器是网关,直接路由)。

总结:数据视角的协同逻辑

阶段 数据形态变化 核心软件 关键作用
IPsec 握手 IKE 控制报文(UDP 500/4500) strongswan 协商加密规则,生成密钥,建立 IPsec 安全隧道
L2TP 隧道建立 L2TP 控制报文(UDP 1701:SCCRQ/ICRQ 等) xl2tpd 创建隧道+会话,分配隧道/会话 ID
PPP 认证 PPP 认证报文(CHAP/PAP)+ IPCP 确认 ppp(pppd) 验证用户身份,分配私有 IP
数据传输 原始 IP 包 → PPP 帧 → L2TP 报文 → ESP 加密包 ppp → xl2tpd → strongswan 逐层封装:PPP 管用户数据格式,xl2tpd 管隧道标识,strongswan 管加密
服务器接收 ESP 加密包 → L2TP 报文 → PPP 帧 → 原始 IP 包 strongswan → xl2tpd → ppp 逐层解封装:解密 → 拆隧道 → 拆 PPP 帧 → 还原用户数据

简言之:用户数据像“包裹”,PPP 给它贴“用户标签”(认证/IP),xl2tpd 套“隧道快递袋”(隧道 ID),strongswan 用“保险箱”(加密)锁起来,通过互联网送到服务器;服务器用钥匙(密钥)开保险箱,拆快递袋,撕标签,拿到原始包裹(数据)。三者环环相扣,缺一不可。

留下评论