知识 Wiki 总览 / VPN
断电保护
“断电保护”不是 VPN 协议术语。本条按 VPN 断线保护(kill switch)解释,指 VPN 隧道断开或重连时阻止未进入隧道的流量从普通网络接口发出。它不表示设备断电后的数据保护。断线保护仍需与 IPv4、IPv6、DNS、局域网例外和客户端行为一起验证。
Windows WireGuard 客户端
在 WireGuard 官方客户端中,为全隧道配置 IPv4 和 IPv6 默认路由,再启用“Block untunneled traffic”选项。该客户端只有在配置满足其要求时才提供相应选项,具体条件以客户端版本说明为准。
[Peer]
AllowedIPs = 0.0.0.0/0, ::/0
macOS Network Extension
macOS VPN 应用可通过 Network Extension 的 includeAllNetworks 请求让系统把大多数网络流量限制在隧道内。系统仍为维持网络和必要服务保留文档规定的例外;应用必须实现并获准使用对应 VPN 能力。
let protocolConfiguration = NEVPNProtocolIKEv2()
protocolConfiguration.includeAllNetworks = true
这是应用开发代码片段,不是 macOS 通用终端命令。使用现成客户端时,应通过应用或组织管理配置启用相应策略。
Linux WireGuard
WireGuard 工具手册给出通过防火墙标记阻止未加密外发报文的 wg-quick 示例。将 IPv4 规则放入隧道配置的 [Interface] 段。IPv6 规则仅在系统已安装并使用 ip6tables 时启用;采用原生 nftables 的系统应按其现有防火墙管理方式添加等效规则。该设置会修改 OUTPUT 防火墙链,可能阻断本地网络访问,部署前应准备恢复方式。
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PostUp = ip6tables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = ip6tables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
验证与限制
在受控环境中断开隧道,再检查 IPv4、IPv6 和 DNS 是否按策略停止。还需测试睡眠唤醒、Wi-Fi 切换、重连和客户端退出。路由型断线保护不一定约束所有应用级代理或独立网络扩展;应以目标客户端和操作系统的实际测试为准。
参考资料
WireGuard for Windows 网络行为说明;Apple:NEVPNProtocol.includeAllNetworks;Apple:VPN 路由和流量丢弃行为;WireGuard wg-quick 手册:kill switch 示例。
