SIFT / KNOWLEDGE BASE

知识 Wiki 总览 / VPN

全隧道与分流

更新于 2026-11-07条目链接

全隧道与分流描述 VPN 的流量选择范围。全隧道将大多数默认 IP 流量送入 VPN;分流只将指定网段、域名或应用流量送入 VPN,其余流量继续使用本地网络。实际行为受操作系统、VPN 客户端、路由和服务器策略共同影响。

全隧道

全隧道通常包含 IPv4 默认前缀 0.0.0.0/0,并应明确配置 IPv6 默认流量 ::/0 或采用有验证的阻断策略。服务端还必须负责转发、回程路由、DNS、出口访问和访问控制。若只覆盖 IPv4,设备的 IPv6 流量仍可能走本地网络。

分流

分流只选择必要的内网前缀或应用,降低不相关流量对 VPN 的占用,并保留本地网络访问。组织可用分流 DNS 只把内部域名查询发往内网解析器。分流扩大了本地网络和 VPN 同时可达的范围,因此需要明确内外网边界与访问策略。

配置示例

WireGuard 通用配置片段

# 分流:仅访问组织网段
AllowedIPs = 10.20.0.0/16, 10.8.0.0/24

# 全隧道:覆盖 IPv4 与 IPv6 默认流量
AllowedIPs = 0.0.0.0/0, ::/0

WireGuard Windows、macOS 和 Linux 客户端均使用各自受支持的客户端加载服务端签发的配置。配置中的地址段必须与网关分配保持一致。

Windows 原生 VPN

Set-VpnConnection -Name "Corp-IKEv2" -SplitTunneling $true
Add-VpnConnectionRoute -ConnectionName "Corp-IKEv2" -DestinationPrefix "10.20.0.0/16"

macOS Network Extension 开发片段

let ipv4 = NEIPv4Settings(
    addresses: ["10.8.0.2"],
    subnetMasks: ["255.255.255.255"]
)
// 分流配置
ipv4.includedRoutes = [
    NEIPv4Route(destinationAddress: "10.20.0.0", subnetMask: "255.255.0.0")
]
// 全隧道配置,用下一行替换上面的分流配置
ipv4.includedRoutes = [NEIPv4Route.default()]

上段为 API 配置片段,前两行路由表示分流;最后一行表示 IPv4 默认路由。IPv6 必须另行配置。应用还需创建并提交完整的 Network Extension 隧道设置。

Linux WireGuard

[Peer]
AllowedIPs = 10.20.0.0/16, 10.8.0.0/24
# 全隧道改为:AllowedIPs = 0.0.0.0/0, ::/0

验证

分别检查 IPv4 与 IPv6 路由、DNS 解析器和目标地址的实际出口。不要仅凭客户端界面的“已连接”状态判断策略已生效。详见DNS 与 IPv6 泄露和路由与默认网关。

参考资料

OpenVPN:通过 VPN 路由全部客户端流量;WireGuard 官方快速入门;Apple:VPN 路由;Microsoft Learn:Add-VpnConnection。