← 网络基础学习第 50 / 55 章高级40 分钟

模块七 · 网络安全

IPsec 与虚拟专用网

前面的 TLS 工作在应用层和传输层之间,它保护的是"一个应用的连接"。但如果要让整台机器的所有流量都安全地穿过一个不可信的网络呢?答案是在网络层做保护 —— 这就是 IPsec,也是 VPN 的技术基础。

本章要解决的问题:前面的 TLS 工作在应用层和传输层之间,它保护的是"一个应用的连接"。但如果要让整台机器的所有流量都安全地穿过一个不可信的网络呢?答案是在网络层做保护 —— 这就是 IPsec,也是 VPN 的技术基础。

本章的证据来源:概念讲法参考教材§8.7,纸书427–433页(PDF446–452页),具体出处见章末。旧稿的命令与数值属于历史转述,相关附件未随当前项目提供,本次没有重新采集或运行原实验;模型计算、协议规则与观察不能互相替代。

先从一个例子理解概念

远程办公设备通过公共网络访问内部服务,希望保护某段传输路径。先说清保护从哪里开始、到哪里结束,再理解VPN与隧道。

VPN与隧道

VPN借助共享网络构建受控的逻辑连接;隧道把原数据封装进另一层传送。隧道不天然等于加密,VPN名称也不自动说明所有流量都经过它。

IPsec与安全关联

IPsec在IP层提供相关安全机制;安全关联(SA)记录方向、算法、密钥等状态。实际保护能力取决于选用的协议、模式和配置。

VPN 的两种用途

"VPN"这个词经常被混用,其实它指两种不同的场景:

用途典型场景保护什么
远程接入员工在家连公司内网从公网到企业网络这一段
站点互联把两个办公地点连成一个网两地之间的链路

两者的共同点是:在一条不可信的链路上,建立一条逻辑上的"私有通道" —— 而这就是"虚拟专用网"(Virtual Private Network)这个名字的字面含义。

为什么要在网络层做?

在哪一层做保护效果代价
应用层 / 传输层(HTTPS)只保护那一个应用的连接每个应用都要自己支持
网络层(IPsec)整台机器的所有流量都被保护,对应用完全透明配置复杂,且中间设备看不到内容

"对应用透明"是网络层方案最大的优势:应用不需要任何改动,甚至不知道自己被保护了。

IPsec 的两个协议

IPsec 不是一个协议,是一组协议。 其中最核心的两个:

协议提供什么加密吗
AH(认证头)认证 + 完整性不加密
ESP(封装安全载荷)认证 + 完整性 + 加密加密

实践中几乎只用 ESP —— 因为 AH 不提供机密性,而且它认证整个 IP 包包括可变字段(如 TTL),在中间有 NAT 的环境里会失效。

ESP 的具体做法:在原始 IP 包外面加一个 ESP 头,把内层数据加密,然后再加上一个新的 IP 头(隧道模式)。

传输模式与隧道模式

这是理解 IPsec 和 VPN 的关键区分。

传输模式:保护"载荷",不改变端点

原始:  [ IP 头 ][ TCP 头 ][ 数据 ]
                    ↓ 保护
传输模式:[ IP 头 ][ ESP 头 ][ TCP 头 ][ 数据 ][ ESP 尾 ]
                   └────── 这一段被加密/认证 ──────┘

IP 头没有被保护(因为路由器需要它来转发),被保护的是 TCP/UDP 头和数据。

用途:主机到主机的通信(两端都装了 IPsec)。

隧道模式:把整个包封起来,改变端点

原始:  [ IP头1 ][ TCP 头 ][ 数据 ]
                    ↓ 整个包被当作"载荷"
隧道模式:[ 新IP头 ][ ESP头 ][ IP头1 ][ TCP头 ][ 数据 ][ ESP尾 ]
           └─ 这一层是"公网可见的" ─┘ └─ 这一整块被加密 ─┘

注意这里出现了两个 IP 头:

谁看得见里面写什么
外层 IP 头公网上所有设备都能看到两个 VPN 网关的地址
内层 IP 头只有隧道两端能看到(被加密)真实的源和目的地址

这就是"隧道"这个名字的由来:真实的包被装进另一个包里传输,中间的网络只能看到外层。这就是 VPN 能隐藏内网结构的原因。

用途:网关到网关(站点互联)或主机到网关(远程接入)。

安全关联(SA):隧道的"配置"

IPsec 是双向的,但每条方向上的保护参数是独立协商的。 一组这样的参数叫一个安全关联(SA):

SA 里包含什么例子
用哪个协议ESP
用哪种加密算法AES-256
用哪种认证算法SHA-256
密钥是什么协商出来的会话密钥
有效多久生存期到了就要重新协商

SA 是单向的 —— 所以一条双向的 VPN 隧道需要两个 SA。

SA 由 IKE 协商建立。 IKE 做的事和 TLS 握手很像:双方互相鉴别身份、协商算法、用 Diffie-Hellman 生成密钥。区别是 IKE 跑在 UDP 500/4500 上,而且它协商的是"网络层隧道的参数",不是"某个应用连接的参数"。

实测:本机装了三个 VPN 适配器,但都没连

示例powershell
Get-NetAdapter | Where-Object { $_.InterfaceDescription -match 'VPN|WireGuard|TAP|Wintun|IPsec' }

实测结果:

Name                              InterfaceDescription              Status
----                              --------------------              --------
以太网 3                          iNode VPN Virtual NIC             Disconnected
本地连接                          QMTAP Adapter V9                  Disconnected
Heysocks TAP-Windows Adapter V9   TAP-Windows Adapter V9            Disconnected

另外:Get-NetIPsecRule 返回 0 条规则 —— 本机没有任何 IPsec 配置。

这张表里最值得注意的是一个模式:三个 VPN 都是"虚拟网卡"的形式。

iNode VPN    → 虚拟网卡
QMTAP        → 虚拟网卡(TAP 驱动)
Heysocks     → 虚拟网卡(TAP-Windows)
FlClash      → 虚拟网卡(TUN,见《MAC 地址》那一章)

为什么 VPN 都用虚拟网卡?

做法原理优点
虚拟网卡 + 改路由建一块假网卡,把路由指过去对应用完全透明(和 IPsec 隧道模式同一个思路)
应用层代理每个应用自己配置走代理需要对每个应用配置,且有的应用不支持

"虚拟网卡 + 改路由"正是本教程反复观察到的那个机制:FlClash 就是这样接管了默认路由(《代理与负载均衡》实测),而 IPsec 的隧道模式在原理上也一样 —— 都是"把流量导入一个逻辑通道,对应用透明"。

IPsec VPN 与 TLS VPN 的对比

现代 VPN 有两条技术路线,值得对比:

IPsec VPNTLS VPN
工作在哪一层网络层传输层之上
保护范围整台机器的所有流量通常是特定应用/流量
对应用透明完全透明需要配置(或用一个本地代理)
穿透防火墙难(ESP 不是 TCP/UDP,NAT 后需要额外处理)容易(看起来就是 HTTPS)
客户端通常需要装驱动(虚拟网卡)浏览器或一个普通程序
鉴别方式IKE 里协商(常用证书或预共享密钥)复用 TLS 的证书体系

"穿透防火墙"这一行很关键:ESP 是 IP 协议号 50 的协议,不在 TCP/UDP 之列,很多防火墙和 NAT 设备对它处理不好。而 TLS VPN 的流量看起来就是普通的 HTTPS(TCP 443),几乎无法被简单规则挡住。

常见误解

误解一:「VPN 是一种加密算法」

不是,它是一种用法 —— 在不可信链路上建立逻辑私有通道。底层可以用 IPsec(网络层)也可以用 TLS(传输层之上),两者都能实现 VPN。"VPN"说的是要达到的效果,不是达到它的手段。

误解二:「VPN 和 HTTPS 是一回事」

保护范围不同。 HTTPS 只保护那一个应用的连接;IPsec VPN 保护整台机器的所有流量,而且对应用完全透明(应用不需要改任何东西,甚至不知道自己被保护了)。

误解三:「隧道模式就是加密了数据」

比加密更多。 隧道模式把整个原始 IP 包(含原始 IP 头)当作载荷加密,外面再套一个新的 IP 头。所以中间网络只能看到两个 VPN 网关的地址,看不到真实的源和目的。这就是 VPN 能隐藏内网结构的原因 —— 而传输模式会保留原始 IP 头,隐藏不了。

误解四:「IPsec 和 NAT 可以随便一起用」

它们有冲突。 AH 认证整个 IP 包(包括 TTL、校验和这些会被 NAT 改写的字段),NAT 一改就认证失败。ESP 在 NAT 后也需要额外处理(NAT-T,把 ESP 封装进 UDP 里穿过 NAT)。 根本原因:NAT 破坏了端到端原则,而 IPsec 的设计假设是端到端的 —— 两者对"地址会不会变"的假设正好相反。

误解五:「本机装了三个 VPN 客户端,说明在用 VPN」

不能这么推断。 本机实测:三个适配器全部是 Disconnected,而且 Get-NetIPsecRule 返回 0 条规则。 "装了客户端"和"建立了隧道"是两件事 —— 前者只是软件存在,后者需要真正连接并协商出 SA。

本章小结

结论类型
VPN 有两种用途:远程接入与站点互联标准
网络层做保护的优势是"整机流量都被保护且对应用透明"标准
IPsec 的两个核心协议:AH(只认证不加密)、ESP(认证 + 加密)标准
实践中几乎只用 ESP,因为 AH 不提供机密性且与 NAT 冲突标准
传输模式保护载荷、保留原 IP 头;隧道模式保护整个原包、套新 IP 头标准
隧道模式下中间网络看不到真实的源与目的地址推理
安全关联(SA)是单向的,一条双向隧道需要两个 SA标准
SA 由 IKE 协商,IKE 跑在 UDP 500/4500标准
实测:本机装了三个 VPN 虚拟适配器,全部处于 Disconnected实测
实测:本机 Get-NetIPsecRule 返回 0 条规则,无 IPsec 配置实测
VPN 普遍采用"虚拟网卡 + 改路由",与代理接管路由是同一机制推理
TLS VPN 比 IPsec VPN 更容易穿透防火墙,因为看起来就是 HTTPS标准
本机没有活跃隧道,故观察不到 IPsec 的实际行为实测限制

自测题

7 题 · 先自己答,再展开对照

  1. VPN 有哪两种典型用途?
    远程接入(员工在家连公司内网)和站点互联(把两个办公地点连成一个网)。共同点是在不可信链路上建立逻辑私有通道 —— 这就是"虚拟专用网"的字面含义。
  2. 在网络层做安全保护(IPsec)相比在应用层(HTTPS)有什么优势和代价?
    优势:整台机器的所有流量都被保护,而且对应用完全透明 —— 应用不需要任何改动,甚至不知道自己被保护了。
    代价:配置复杂,而且中间设备看不到内容(这既安全也带来运维困难,还容易与 NAT 冲突)。
  3. AH 和 ESP 的区别是什么?为什么实践中几乎只用 ESP?
    AH 只提供认证和完整性、不加密;ESP 提供认证、完整性,还提供加密。
    几乎只用 ESP 的原因:① AH 不提供机密性(数据还是明文);② AH 认证整个 IP 包,包括 TTL、校验和这些会被 NAT 改写的字段 —— 一旦经过 NAT 就认证失败。
  4. 传输模式和隧道模式的区别是什么?哪种能隐藏真实的源和目的地址?
    传输模式保护的是载荷(TCP/UDP 头和数据),保留原始 IP 头,用于主机到主机。隧道模式把整个原始 IP 包当作载荷加密,外面再套一个新的 IP 头,用于网关到网关或主机到网关。
    隧道模式能隐藏真实的源和目的地址 —— 因为原始 IP 头也在加密范围之内,中间网络只能看到两个 VPN 网关的地址。
  5. 为什么一条双向的 VPN 隧道需要两个安全关联(SA)?
    因为 SA 是单向的。 它描述的是一组"某个方向上的保护参数"(协议、算法、密钥、生存期)。
    一条双向隧道有两个方向,每个方向需要自己的一套参数和密钥,所以需要两个 SA —— 一个管 A→B,一个管 B→A。
  6. 本机实测装了三个 VPN 适配器,能否据此认为在用 VPN?
    不能。 本机实测:三个适配器全部是 Disconnected,而且 Get-NetIPsecRule 返回 0 条规则。
    "装了客户端"和"建立了隧道"是两件事 —— 后者需要真正连接、通过 IKE 协商出 SA 才能工作。
  7. 为什么现代很多 VPN 选择基于 TLS 而不是 IPsec?
    因为穿透防火墙容易得多。 IPsec 的 ESP 是 IP 协议号 50 的协议,不在 TCP/UDP 之列,很多防火墙和 NAT 设备对它处理不好(还需要 NAT-T 之类的变通)。
    而 TLS VPN 的流量看起来就是普通的 HTTPS(TCP 443),几乎无法被简单的规则挡住。
    所以这是"协议僵化"的又一个体现 —— 不是因为 IPsec 技术上不行,而是因为中间设备决定了什么协议能跑得通。

参考资料与适用范围

  • 《计算机网络:自顶向下方法(原书第8版)》§8.7,纸书427–433页(PDF446–452页):本章概念与机制的对应教学章节,引用时需保留模型与版本条件。
  • 教材作者配套教学资源入口:网站目前显示的教材版本与用户提供的第8版可能不同,页码以本章列出的中文第8版为准。

修订核对日期:2026-10-13。本次补充概念入口与教材出处;旧稿的具体数值为历史观察,未重新实测。相关脚本和完整日志未随当前项目提供,不能仅凭转述断言实验已复核,也不据此断言数据造假。

正文源自 m7-05-IPsec与虚拟专用网.md · 共 11 节 · 7 道自测题