95、VPN基础:VPN类型、隧道协议、IPSec与OpenVPN
说实话,VPN 这个词在圈内已经被聊烂了。但真正动手搭过、踩过坑的人,其实不多。
我记得刚入行那会儿,给一家分公司搭站点到站点的 VPN,折腾了一整天连不上。后来发现是两边的 NAT 策略没对齐。嗯,从那以后我就养成了一个习惯——先画隧道拓扑,再动手配。
这一讲,咱们就把 VPN 的底裤扒干净。从类型到协议,再到 IPSec 和 OpenVPN 的实战对比,一次说透。
1. VPN 到底在解决什么问题?
说白了,VPN 就是在不安全的公共网络上,拉一条“虚拟的专用线路”。
你想想看,公司内网的服务器和数据库,总不能直接暴露在公网上吧?但员工出差、远程办公,又必须访问内网资源。怎么办?
VPN 就是干这个的——它帮你把远程的机器“拉”进内网,就像插了一根超长的网线。
核心三要素:
- 身份认证:确认你是谁(证书、密码、令牌)
- 数据加密:传输的内容不能被偷看
- 完整性校验:数据在途中没有被篡改
2. VPN 的三大类型
我在项目中遇到过不少新手,一上来就问“哪种 VPN 最好”。其实没有最好,只有最合适。咱们按使用场景分三类:
| 类型 | 典型场景 | 我个人的看法 |
|---|---|---|
| 远程访问 VPN | 员工从家里连公司内网 | 最常用,OpenVPN 是首选 |
| 站点到站点 VPN | 分公司与总部互联 | IPSec 是工业标准,稳 |
| SSL VPN | 浏览器直接访问,无需客户端 | 方便,但性能一般 |
你可能会问:那 PPTP 和 L2TP 呢?
嗯,PPTP 早就被证明不安全了,我建议直接放弃。L2TP 本身不加密,必须搭配 IPSec 使用,配置起来比较啰嗦。我个人现在基本只用 OpenVPN 和 IPSec。
3. 隧道协议:VPN 的“管道”是怎么建的?
隧道协议,说白了就是把一个数据包整个塞进另一个数据包里,然后发出去。接收方再拆开,取出原始包。
为什么会这样?因为原始包的目标地址是内网 IP,公网路由器不认识。你得给它套个“公网马甲”。
常见的隧道协议有:
- GRE:最原始的隧道,只封装,不加密。我早期踩过坑,裸 GRE 跑业务,数据被中间人抓了个精光。
- IPSec:既封装又加密,是目前最主流的方案。
- OpenVPN 的 TUN/TAP:基于 SSL/TLS,灵活且安全。
小提示:如果你只需要加密,选 IPSec。如果你需要穿越复杂的 NAT 和防火墙,OpenVPN 更友好。
4. IPSec 深度解析
IPSec 其实不是一个协议,而是一套协议族。它工作在 IP 层,对上层应用完全透明。
我建议你记住两个核心协议:
- AH(认证头):只做完整性校验,不加密。现在用得少了。
- ESP(封装安全载荷):既加密又校验,是主力。
IPSec 有两种模式:
- 传输模式:只加密 IP 载荷,不改动 IP 头。适合端到端通信。
- 隧道模式:整个 IP 包都被封装,加一个新 IP 头。适合站点到站点。
我曾经帮一个客户排查 IPSec 连接问题,发现两边配置的 IKE 版本不一致——一边是 IKEv1,另一边是 IKEv2。折腾了两小时才找到原因。嗯,从那以后我配置 IPSec 时,第一件事就是确认 IKE 版本。
IPSec 工作流程(简化版)
- IKE 阶段 1:建立安全通道,协商加密算法和密钥。
- IKE 阶段 2:在安全通道内,协商具体的 IPSec SA。
- 数据传输:用协商好的 SA 加密传输数据。
- SA 删除:会话结束或超时,清理安全关联。
注意:IPSec 的 NAT 穿越是个老大难。如果两端都在 NAT 后面,记得启用 NAT-T(NAT 穿越),否则包会被丢弃。
5. OpenVPN 实战对比
OpenVPN 是我个人最喜欢的 VPN 方案。它基于 SSL/TLS,配置灵活,社区活跃。
和 IPSec 相比,OpenVPN 有几个明显的优势:
- 穿越防火墙容易:默认用 443 端口,长得像 HTTPS,防火墙一般不会拦。
- 配置简单:一个配置文件搞定,不像 IPSec 那样要配一堆参数。
- 支持多种认证:证书、用户名密码、甚至双因素认证。
当然,它也有短板:
- 性能不如 IPSec:因为 OpenVPN 在用户态运行,IPSec 在内核态。
- 大规模部署时管理成本高:证书分发是个麻烦事。
我建议这样选:
- 如果你要连几十个移动端,选 OpenVPN。
- 如果你要连两个数据中心,选 IPSec。
- 如果你两者都要,那就都上,各司其职。
6. 核心知识体系图
下面这张图,是我梳理的 VPN 核心知识脉络。你可以把它当作一张“地图”,学完这一章后对照着回顾。
7. 避坑指南
最后,分享几个我亲身踩过的坑:
- MTU 问题:VPN 隧道会增加包头,导致 MTU 超过链路限制。我曾经遇到过视频会议卡顿,查了半天发现是 MTU 没调。解决方案:在 OpenVPN 配置里加
mssfix 1400。 - 证书过期:OpenVPN 的客户端证书过期后,连接会静默失败。我建议在配置里加一个证书到期前的告警脚本。
- DNS 泄漏:VPN 连接后,DNS 请求可能仍然走本地网络,暴露你的访问记录。记得在 OpenVPN 配置里加上
redirect-gateway def1和dhcp-option DNS 10.8.0.1。 - 日志太多:IPSec 的日志默认很详细,容易撑爆磁盘。我习惯把日志级别调到
informational,并做日志轮转。
一句话总结:VPN 不难,难的是把细节想周全。多画图、多测试、多留日志,能省掉你 80% 的排障时间。
公众号:蓝海资料掘金营,微信 deep3321