📚 第九章 网络安全
📄 一句话概括

IPsec 在网络层加密,所以上层应用完全不知道它在。 代价是封装会把你辛苦争来的 MTU 吃掉,弄不好就是「网页能开、大文件下不完」。

📝 本节和前面几节的关系

上一节讲的是「谁在说话」。这一节讲「怎么把两个网连成一条加密隧道」。 Demo 把一个 1500 字节的满包塞进两种模式,算清楚它到底会膨胀多少。

一、AH 和 ESP,两个协议号

IPsec 不是单个协议,是一套,其中真正干活的只有两个头:

协议 协议号 做什么 今天还用吗
AH 51 只认证,不加密 基本不用了
ESP 50 加密,也认证 主力

第一行的设计初衷是「我只要防篡改,不想承担加密开销」, 听着合理,但它有一个致命问题:它连 IP 头一起认证。 而 NAT 会改 IP 头(改地址、改端口),一改,认证就失败。 所以 AH 和 NAT 天生不兼容,这也是它被淘汰的直接原因。 ESP 只认证「ESP 之后的部分」,外面的 IP 头随便 NAT 怎么改都不影响, 所以它能穿过 NAT——工程上能活下来的方案,往往不是最强的那个,是最不挑环境的那个。

二、两种模式,一个藏地址

传输模式和隧道模式的差别只有一句话:原来的 IP 头是保留,还是被当成货物装进去。

模式 结构 典型场景 好处
传输模式 原 IP 头 + ESP 主机到主机 开销小
隧道模式 新 IP 头 + ESP(里面是整个原包) 网关到网关 藏住内网地址

第二行就是 VPN 的本质:网关把整个原始包当成货物封起来,再套一层新 IP 头, 于是内网地址在外网完全看不见。 这才是「虚拟专用网」里「虚拟」两个字的来历—— 它不是真的拉了一根专线,而是让公网上的两台网关「表现得像」直连。 所以判断一个方案是不是 VPN,看一个特征就够了:它有没有把原始包整个装进去。 只加密载荷、不动 IP 头的那叫「加密传输」,不叫隧道。

三、IKE 与那五十个字节的代价

两台网关要先商量用哪把钥匙、哪种算法,这件事由 IKE 负责, 它跑在 UDP 500 上(穿过 NAT 时用 4500)。 IKE 分两个阶段:第一阶段建立一条管理通道,第二阶段用这条通道去谈具体的加密参数。 分两阶段的好处是「谈很多次,只建一次通道」。 然后是代价。 ESP 的结构里带着初始向量和完整性校验值,填充又要补齐到 16 的倍数, 所以一个满载的 1500 字节包根本装不下。 不调 MTU 会怎样:包被封好之后超了链路 MTU,只能分片,而分片一旦丢一片,整个包要重传。 表现就是「网页能开(小包),但大文件死活下不完」,这个现象有专门的名字,叫 MTU 黑洞。 排查手法很简单:用 ping 加「不分片」标记,从 1500 往下试,试到能通的那个长度就是真实 MTU。 这也是为什么隧道口普遍设成 1400——留出五十到七十字节的余量,再留一点安全边界。

四、动手 Demo:IPsec 的封装开销,会把你辛苦争来的 MTU 吃掉

一个 1500 字节的满包,分别按传输模式和隧道模式封装,算清楚每一部分占多少, 以及还能不能装进 1500 的 MTU。

ip_h, esp_h, iv, icv = 20, 8, 16, 16
payload = 1500 - ip_h
pad = (16 - payload % 16) % 16      # 补齐到 16 的倍数

esp = esp_h + iv + payload + pad + 1 + 1 + icv
transport = ip_h + esp
tunnel = transport + ip_h           # 外面再套一层新 IP 头

print(transport, transport - 1500)
print(tunnel, tunnel - 1500)

实跑输出:

--------------------------------------------------------------------
IPsec 的封装开销,会把你辛苦争来的 MTU 吃掉
--------------------------------------------------------------------
**IPsec 有两种模式,差别只在「原来的 IP 头怎么处理」。**
**下面把一个 1500 字节的满包分别塞进两种模式,算一遍真实长度。**

  组成                     字节         是什么                   要不要
  --------------------------------------------------------------------------------
  **原始包**               **1500**     —                        —
  **ESP 头**               **8**        **SPI 加序号**           **两种模式都要**
  **初始向量**             **16**       **AES-CBC 需要**         **两种模式都要**
  **填充**                 **8**        **补齐到 16 的倍数**     **两种模式都要**
  **填充长度与下一头**     **2**        **两个 1 字节**          **两种模式都要**
  **完整性校验**           **16**       **ESP 认证**             **两种模式都要**

**先说结论**:

  模式             封装后长度     多出来的     1500 MTU 下
  ---------------------------------------------------------
  **传输模式**     **1550**       **50**       **超了**
  **隧道模式**     **1570**       **70**       **超了**

**两行都超了 1500,而且隧道模式超得更多。**
**为什么多出这么多**:**ESP 的结构本来就带初始向量和校验值,填充又要补齐到 16 的倍数**,
**一个满载的 1500 字节包根本没有余量。**
**所以真实部署里必须把 MTU 调小,常见做法是把隧道口设成 1400。**

**不调会怎样**:**包在 IPsec 网关上被封好之后超了 MTU,只能分片**,
**而分片一旦丢一片,整个包重传**,**表现就是「网页能开,但大文件死活下不完」。**
**这个现象有个专门的名字,叫 MTU 黑洞**,**排查它的标准手法就是 ping 加「不分片」标记试长度。**

**最后分清两种模式用在哪**:

  模式             原 IP 头               典型场景                 好处
  ------------------------------------------------------------------------------------
  **传输模式**     **原 IP 头保留**       **端到端,主机之间**     **开销小一点**
  **隧道模式**     **原包整个装进去**     **网关到网关**           **能藏住内网地址**

**第二行第三列是 VPN 的本质**:**隧道模式把整个原始包当成货物,再套一层新 IP 头**,
**于是内网地址在外网完全看不见**——**这才是「虚拟专用网」里「虚拟」两个字的来历。**

两行都超了 1500,而且隧道模式超得更多。 多出来的五十到七十字节,就是 VPN 的过路费。 为什么这么多: ESP 头 8 字节、初始向量 16 字节、填充 8 字节、填充长度和下一头各 1 字节、校验值 16 字节, 加起来 50;隧道模式再叠一个新 IP 头,就是 70。 注意「填充」那一项是 8 而不是 0:1480 除以 16 余 8,所以要补 8 个字节才能凑成整块。 这个数字每次都可能不同,所以真实设备不会去「算准」,而是直接把 MTU 调小留余量。 最后那张模式对比表是这一节的落点: 传输模式保留原 IP 头,端到端用,开销小;隧道模式把整个包装进去,网关到网关用,能藏地址。 VPN 选的是后者,因为它要解决的正是「内网地址不能暴露在公网上」这件事。

30 秒实验

  1. 算一下:MTU 设成 1400,最多能容纳多少个原始包的长度?(1400 减 70,也就是 1330 的原始包)
  2. 想一下:为什么 AH 和 NAT 天生不兼容?
  3. 想一下:怎么用 ping 判断链路的真实 MTU?

常见误区

  1. 以为「IPsec 就等于 VPN」。 IPsec 是一套协议,VPN 是它的一种用法,隧道模式才等于 VPN。
  2. 以为「加密之后包还是那个大小」。 ESP 会加上五十到七十字节,满载的包必然超 MTU。
  3. 以为「分片了也没关系」。 分片丢一片就整包重传,表现是大文件下不完。
自测三问(点开对答案) 1. AH 和 ESP 的关键差别? —— **AH 只认证不加密,ESP 两头都做**;而且 AH 连 IP 头一起认证,过不了 NAT。 2. 隧道模式为什么能藏住内网地址? —— **整个原始包被当成载荷装进去**,外面只剩两个网关的公网地址。 3. 什么是 MTU 黑洞? —— **小包能过、大包被封完超限只能分片**,丢片就重传,表现为大文件下不动。

下一节看最常见的那个:你每打开一个网页,都在用它。

相关笔记