本页课程原文(点开阅读)

VPN 加密隧道

课程(11 节,按顺序学)

第 1 课 · VPN 到底在解决什么问题

入门 · 约 8 分钟

本课目标:先想清楚「在不可信的公网上传私密数据」需要哪几样保障,IPsec 的结构就是照着这个来的。

公网不可信,会出四种事

两个站点之间要通信,中间是公网。不加任何保护的话,会出四种事:

· 被看到 → 需要 机密性(加密)
· 被篡改 → 需要 完整性(校验值)
· 被冒充 → 需要 身份认证
· 被录下来重放 → 需要 防重放(序列号)

IPsec 的每个部件都对应这里的一条 —— 记住这四样,后面看 ESP 报文结构就不用背了。

私网地址还有个现实问题

两个站点的内网都是 192.168.x.x 这类私网地址,这种地址在公网上是不可路由的,运营商会直接丢掉。

所以除了加密,还得解决「怎么让私网地址跨公网通信」—— 答案就是隧道:把原始包整个装进一个新的、用公网地址寻址的包里。

这就是 IPsec 隧道模式存在的理由。

动手:看一条正常的隧道

加载「最简站点到站点」场景,去 ② 隧道配置 页看两端的策略,然后去 ③ 协商过程 页点播放,看 IKEv2 四个包怎么把隧道建起来。

实验重点

  • 公网不可信 → 需要机密性/完整性/身份认证/防重放四样保障
  • 私网地址跨公网 → 需要隧道封装
  • IPsec 的每个部件都对应上面某一条需求

第 2 课 · ESP / AH 和两种封装模式

入门 · 约 12 分钟

本课目标:四个名词,两句话说完,但选错了就不通。

ESP 和 AH:现网只用 ESP

· ESP(协议号 50):又加密又认证。
· AH(协议号 51):只认证不加密,而且它把整个 IP 头都算进完整性校验。

AH 有个致命问题:过 NAT 必坏。因为 NAT 就是要改 IP 头,改完校验值就对不上了。而现网几乎处处有 NAT。

结论很简单:用 ESP,别用 AH。考试会问 AH,工作里不会用。

隧道模式 vs 传输模式

· 隧道模式:加一个新的外层 IP 头(源/目的 = 两端网关的公网地址),原始 IP 包整个被加密当载荷。
· 传输模式:不加新 IP 头,只在原 IP 头后面插一个 ESP 头。

怎么选?看要保护谁:
· 保护两个网络之间的通信(站点到站点)→ 必须隧道模式。因为原始包的地址是私网地址,不换外层头出不了公网。
· 保护两台主机自己之间(比如两台服务器直连加密)→ 可以传输模式。

站点到站点配成传输模式是个典型错误,现象是隧道能协商起来但业务不通。

动手:看封装前后的包

去 ④ 报文与 MTU 页发一个包,左右对比封装前后的结构:隧道模式下你会看到「新 IP 头 + ESP 头 + 被加密的原始包 + ICV」。
然后把封装模式改成传输模式,看提示。

实验重点

  • ESP 又加密又认证;AH 只认证且过不了 NAT,现网不用
  • 站点到站点必须用隧道模式(要换外层 IP 头)
  • 传输模式只适合主机到主机

第 3 课 · IKE 两个阶段在干什么

进阶 · 约 15 分钟

本课目标:搞清两个阶段的分工,排障就有了地图。

为什么要分两个阶段

业务流量的加密密钥必须安全地协商出来。但协商本身也在公网上跑 —— 如果明文协商密钥,中间人全程能听到,加密就没意义了。

所以 IKE 分两步走:
· 阶段 1:先建一条保护协商本身的安全通道(IKE SA)。靠 DH 算出共享密钥,靠 PSK 或证书互相认证身份。
· 阶段 2:在阶段 1 的保护下,协商真正加密业务流量的 SA(IPsec SA),并确定哪些流量要加密。

阶段 1 不加密业务流量,它只保护协商报文。这一点最容易搞混。

DH 的妙处

阶段 1 用 Diffie-Hellman 交换密钥。它的神奇之处是:

双方各自用「自己的私钥 + 对方的公钥」算出同一个共享密钥,而这个共享密钥从来没有在链路上传输过。
中间人把所有报文都截下来,也算不出这个密钥。

DH 组(group2/5/14/19)决定这个运算的强度。group2 是 1024 位,已经被认为不安全(Logjam 攻击),现网最低用 group14(2048 位)。

IKEv2 为什么只要 4 个包

· IKEv1 主模式:阶段 1 要 6 个包(2 个协商算法 + 2 个 DH + 2 个认证),阶段 2 快速模式再 3 个包。
· IKEv1 野蛮模式:阶段 1 压成 3 个包,但身份是明文的。好处是对端地址不固定时只能用它。
· IKEv2:4 个包搞定 —— IKE_SA_INIT 2 个(算法 + DH),IKE_AUTH 2 个(认证 + 顺便把第一对 Child SA 一起建好)。

新建隧道一律用 IKEv2:包少、支持 EAP、NAT 穿越更好、配置更简单。

动手:逐包看

去 ③ 协商过程 页点播放。先看 IKEv2 的 4 个包,再加载「IKEv1 主模式」场景对比 6+3 个包 —— 注意主模式的第 5、6 个包是加密的,所以身份信息受保护。

实验重点

  • 阶段 1 建 IKE SA,只保护协商本身;阶段 2 建 IPsec SA,加密业务流量
  • DH 的共享密钥从未在链路上传输过
  • IKEv1 主模式 6+3 包、野蛮模式 3+3 包;IKEv2 只要 4 包
  • DH 组最低用 group14

第 4 课 · 感兴趣流:必须严格镜像

排障 · 约 14 分钟

本课目标:IPsec 头号故障之一,而且现象很有辨识度。

感兴趣流决定「谁被加密」

配了 IPsec 不等于所有流量都加密。 只有命中感兴趣流 ACL 的流量才进隧道,其余流量按普通路由走。

所以有两种典型错误:
· 写窄了 → 一部分业务不通(漏了某个网段)
· 写宽了 → 连上网流量都被塞进隧道,网关被打爆

必须严格镜像,不是包含

两端各配一份策略,感兴趣流必须互为镜像:

· A 端:本地 192.168.1.0/24 → 对端 192.168.2.0/24
· B 端:本地 192.168.2.0/24 → 对端 192.168.1.0/24

注意:范围写大一点也不行。 很多人以为「我这边写 192.168.0.0/16 把对方的 192.168.2.0/24 包住了应该没问题」,但 IKE 比的是流量选择器是否完全一致,不是包含关系。

这个故障的现象非常有辨识度:阶段 1 成功、阶段 2 失败。真机日志里通常是 no proposal chosen 或 invalid ID information。

动手:制造并修复

加载「协商故障诊断」场景,里面埋了两个坑(密钥不一致 + 感兴趣流不镜像)。
去 ③ 协商过程 页看它卡在哪一步,然后回 ② 隧道配置 页改好,再回来验证。

重点体会:卡在阶段 1 最后 = 密钥问题,卡在阶段 2 = 感兴趣流问题。

实验重点

  • 只有命中感兴趣流的流量才加密
  • 两端感兴趣流必须严格镜像,范围包含不算匹配
  • 阶段 1 成功但阶段 2 失败 → 先查感兴趣流

第 5 课 · MTU:ping 通但网页打不开

排障 · 约 12 分钟

本课目标:最容易被忽略、也最容易被误判成「网络慢」的问题。

IPsec 一定会让包变大

隧道模式下,一个包要多背这些东西:

· 新外层 IP 头 20 字节
· ESP 头(SPI + 序列号)8 字节
· IV 16 字节
· 填充 + ESP 尾 约 10 字节
· ICV(完整性校验值)12~16 字节
· 开了 NAT-T 还要再加 UDP 头 8 字节

合计 60~80 字节。原本 1500 字节刚好的包,封装后就超了。

超了会怎样

超过出接口 MTU 就要分片。分片本身会降性能,但真正致命的是:

很多网络会过滤掉 ICMP「需要分片」报文,导致 PMTUD 黑洞 —— 发送端永远收不到「你的包太大了」的通知,于是一直发大包、一直被丢。

症状特别典型:
· ping 能通(ICMP 包小)
· SSH 能连上,但 ls 一个大目录就卡住
· 网页打开一半、大文件传不动

很多人会误判成「网络慢」或「运营商问题」,其实是 MTU。

标准解法:调小 TCP MSS

在隧道接口上配 tcp adjust-mss(思科 ip tcp adjust-mss)。

原理是网关在转发 TCP 握手的 SYN 包时,把里面的 MSS 值改小,让两端 TCP 一开始就协商出更小的段,从根上避免产生大包。

这是「新建 IPsec 隧道时必做的一件事」,很多故障单其实就差这一条命令。

实验重点

  • IPsec 封装开销约 60~80 字节,隧道模式 + NAT-T 最大
  • ping 通但大包不通 = MTU/分片问题
  • ICMP 被过滤会造成 PMTUD 黑洞
  • 标准解法是在隧道接口配 tcp adjust-mss

第 6 课 · NAT 穿越与排障套路

排障 · 约 12 分钟

本课目标:分支在 NAT 后面是常态,以及一套能照抄的排障顺序。

ESP 没有端口号,所以过不了 NAT

NAT 靠端口号来区分内网的多个会话。但 ESP 是 IP 协议号 50,根本没有端口字段 —— NAT 设备无从下手。

NAT 穿越(NAT-T)的做法:把 ESP 报文再套一层 UDP 4500。这样就有端口可以映射了。

所以只要路径上有 NAT,就必须:
· 两端都开 NAT 穿越
· 防火墙放行 UDP 500(IKE 协商)和 UDP 4500(NAT-T 数据)

NAT 场景的两个连带影响

① AH 彻底不能用。它把整个 IP 头算进校验,NAT 改了地址就必坏。

② 对端地址要配 NAT 之后的地址。分支网关自己接口上是私网地址,但总部看到的是 NAT 之后的公网地址,总部必须配后者。

③ 分支地址不固定时,总部只能用野蛮模式(IKEv1)或策略模板方式,不能写死对端地址。

排障顺序(照这个走,不要跳)

① 隧道起来了吗 display ike sa / display ipsec sa
  起不来 → 看卡在哪一步:
  · 卡阶段 1 前几个包 → 算法提议对不上
  · 卡阶段 1 最后 → 预共享密钥不一致 或对端地址配错
  · 卡阶段 2 → 感兴趣流不镜像 / 封装模式不一致 / PFS 不一致

② 流量进隧道了吗 看感兴趣流 ACL 的匹配计数有没有涨、display ipsec statistics 的加解密计数有没有涨

③ 小包通、大包不通 → MTU / MSS,去配 tcp adjust-mss

④ 单向不通 → 两端感兴趣流不镜像,或者回程路由缺失

⑤ 隔一段时间断一次 → SA 生存周期到点重协商时参数不一致,或者没开 DPD

实验重点

  • ESP 没端口号,过 NAT 必须开 NAT-T(套 UDP 4500)
  • 有 NAT 就放行 UDP 500 和 4500,且不能用 AH
  • 对端在 NAT 后面时要配 NAT 之后的地址
  • 排障顺序:隧道状态 → 流量是否进隧道 → MTU → 方向性 → 稳定性

第 1 课 · 和 site-to-site 的根本差别

入门 · 约 10 分钟

本课目标:一句话:客户端地址不固定,所以整套机制都得换。

差别只有一条,但推出了全部机制

site-to-site 两端都是固定的网关:对端地址固定、要保护的网段固定。所以用「对端地址 + 感兴趣流 ACL」就能把事情说清楚。

client-to-site 的客户端地址不固定 —— 今天在家、明天在酒店、后天在 4G 上。于是:

· 没法认证「站点」→ 改成认证人(用户名密码 / 证书 / 双因子)
· 没法写死感兴趣流 → 改成给客户端分配一个内网地址(地址池),再向它下发路由,让客户端自己决定哪些流量进隧道

记住这条主线,后面四步接入流程就是它的展开。

接入四步

① 建连 —— 客户端连到网关的某个端口
② 认证 —— 验证这个人是谁
③ 分配地址 —— 从地址池给一个虚拟网卡地址
④ 下发路由和 DNS —— 告诉客户端哪些流量走隧道

每一步都有它的典型故障,第 4 课会逐个过。

实验重点

  • 唯一的根本差别:客户端地址不固定
  • 所以改成认证人 + 分配地址 + 下发路由
  • 接入四步:建连 → 认证 → 分地址 → 下发路由

第 2 课 · 四种接入方式怎么选

入门 · 约 12 分钟

本课目标:选型的关键其实是「穿透性」。

SSL VPN:走 443,穿透性最好

跑在 TCP/UDP 443 上,和普通 HTTPS 长得一样。

这是它最大的优势:酒店、咖啡厅、机场、客户现场的访客网络,几乎不可能挡 443。而 IPsec 需要的 UDP 500/4500 经常被挡。

代价是有 TLS 封装开销。不过现代实现用 DTLS/QUIC 已经好很多了。
不确定选什么就选它。

L2TP over IPsec:系统自带客户端

分工很清楚:L2TP 负责建隧道和分配地址(它自己不加密),IPsec 负责加密。所以名字里有个 over。

优势是 Windows / macOS / iOS / Android 都内置客户端,不用装软件。
劣势是要放行 UDP 500 / 4500 / 1701,公共网络经常挡。

注意一个细节:L2TP over IPsec 里 IPsec 用的是传输模式,因为隧道已经由 L2TP 提供了。

IKEv2+EAP 和 WireGuard

· IKEv2 + EAP:现代方案,原生支持 EAP 认证(密码/证书/双因子),配合 MOBIKE 可以在 WiFi 和 4G 之间无缝切换不断线。

· WireGuard:新一代。代码量极小、只用一套固定的现代算法(不协商)、握手一个 RTT。
「不协商」这一点很关键 —— 没有算法协商就没有算法不匹配的故障,这是它配置简单的根本原因。
代价是灵活性低、认证只有公钥,企业级用户管理要靠外围方案。

实验重点

  • SSL VPN 走 443,穿透性最好,默认首选
  • L2TP 只建隧道分地址不加密,靠 IPsec 加密(用传输模式)
  • IKEv2+EAP 支持无缝切换网络
  • WireGuard 不协商算法,所以没有算法不匹配的故障

第 3 课 · 分离隧道 vs 全隧道

进阶 · 约 12 分钟

本课目标:一个安全和体验的取舍,没有标准答案。

两种模式

· 分离隧道(split tunnel):网关只下发内网路由。客户端访问内网走隧道,上网走自己的本地出口。
· 全隧道(full tunnel):网关下发 0.0.0.0/0。客户端所有流量都进隧道,包括刷网页。

取舍在哪

分离隧道
· 好:上网快、不占公司出口带宽
· 风险:客户端同时连着内网和公网,理论上成了一个跳板。如果这台机器中了木马,攻击者就有了进内网的通道。很多安全合规要求明确禁止它。

全隧道
· 好:所有流量都经过企业出口,受策略和审计管控
· 代价:出口带宽压力大,用户上网明显变慢,容易被投诉

实践中的折中:全隧道 + 出口做加速/缓存;或者分离隧道 + 终端强制安全基线检查(EDR、合规检查)。

动手:看流量到底走哪边

去 ③ 接入与测试 页拨号连上,下面会列出访问不同目标时走隧道还是走本地出口。
然后把模式切成全隧道,看 8.8.8.8 的路径怎么变。

实验重点

  • 分离隧道只下发内网路由,上网走本地出口
  • 全隧道下发 0.0.0.0/0,所有流量进隧道
  • 分离隧道的风险是客户端成为内外网之间的跳板

第 4 课 · 连上了却访问不了

排障 · 约 16 分钟

本课目标:远程接入头号故障,而且有个一句话判据。

四步接入,四类故障

① 建不上 → 端口被中间网络挡了。这就是 SSL VPN 走 443 的理由。L2TP/IKEv2 的 UDP 500/4500 经常被挡。

② 认证失败 → 账号密码、证书有效期、双因子、账号被连续失败锁定(看起来像「密码明明对却连不上」)。

③ 拿不到地址 → 地址池耗尽,或者地址池和内网网段冲突(也可能和客户端家里的网段冲突)。

④ 连上了却访问不了 → 下面单独讲,这是最常见的一类。

「连上了却访问不了」的两个根因

这个现象有两个高频根因,而且用抓包方向就能一秒区分:

① 客户端根本没往隧道发包
→ 分离隧道漏下发了那个网段。客户端的路由表里没有那条路由,包走本地出口发到公网、因为是私网地址被丢。
→ 在客户端 route print(Windows)/ netstat -rn(macOS)看有没有那条路由。

② 发出去了但没回来
→ 内网缺到地址池的回程路由。客户端源地址是 10.10.10.x,内网服务器收到请求了,但不知道这个网段怎么回,回包发错方向。

一句话判据:有去无回,几乎总是回程路由问题。

回程路由怎么补

两种做法:

① 在内网核心设备上加静态路由(推荐,干净)

ip route-static 10.10.10.0 255.255.255.0 <VPN网关内网口>

如果内网跑 OSPF,也可以让 VPN 网关把地址池宣告进 OSPF。

② 在 VPN 网关上对进内网的流量做 NAT(省事)
把源地址换成网关内网口地址,内网就不需要知道地址池了。
代价是内网侧看不到真实客户端地址,审计和精细化访问控制会受影响。

动手:修两个故障

加载「连上了却访问不了」场景,里面埋了三个问题:地址池和内网网段冲突、缺回程路由、分离隧道漏下发一个网段。

去 ③ 接入与测试 页拨号,看它卡在哪一步、哪些目标访问不了、原因是什么,然后回 ② 网关配置 页逐个修好。

实验重点

  • 建不上=端口被挡;认证失败=账号/证书/锁定;拿不到地址=地址池耗尽或冲突
  • 连上了访问不了:要么客户端没往隧道发(漏下发路由),要么有去无回(缺回程路由)
  • 有去无回 = 回程路由问题
  • 回程路由用静态路由补,或在网关上做 NAT

第 5 课 · 安全加固与零信任

进阶 · 约 10 分钟

本课目标:远程接入是暴露在公网上的入口,值得多花点心思。

远程接入是攻击面

VPN 网关的端口直接对公网开放。所以它是被扫描、被撞库的头号目标。

最低要做的几件事:
· 开双因子(短信/TOTP/硬件令牌)—— 只有用户名密码是不够的,撞库和弱密码是 VPN 被打穿的头号原因
· 登录失败锁定 + 告警
· 及时清理离职账号(这个漏得最多)
· 网关软件及时打补丁 —— 主流 VPN 产品这几年高危漏洞不少
· 按人/组做最小权限,别让所有人都能访问全部内网

传统 VPN 的模型问题

传统 VPN 的隐含假设是:「进了隧道就是内网人」。

一旦某个终端被攻破,攻击者就拿到了大片内网的横向移动能力 —— 他和坐在办公室里的员工在网络层面是等价的。

这就是为什么现在往零信任 / SDP 走:
不再给「网络层准入」,而是按 人 + 设备 + 应用 逐次授权,每次访问都验证,默认不信任任何位置。

VPN 不会马上消失,但它正从「网络接入方案」退化为「一条加密传输通道」。

实验重点

  • 远程接入是公网暴露面:双因子、失败锁定、清理离职账号、打补丁
  • 传统 VPN 的问题是「进了隧道就是内网人」
  • 零信任按人+设备+应用逐次授权,而不是给网络层准入
冀ICP备2026021556号-2|冀公网安备13068302000206号