Windows 下 PPTP VPN 与代理路由冲突排查记录
记录时间:2026-06-14
说明:本文中的 VPN 名称、域名、服务器 IP、局域网 IP 均为脱敏后的示例占位,不对应真实环境。
1. 问题现象
本机同时存在代理/TUN、局域网、ZeroTier、PPTP VPN 等多种网络路径。
遇到的问题包括:
- 开着 v2ray/singbox 代理后,
示例PPTPVPN 连接失败。 - 连接 VPN 后,本机访问部分局域网服务器失败。
- 希望只有指定 IP
192.168.99.55走示例PPTPVPN。 - 希望局域网服务器和反向代理链路仍然走本地以太网。
2. 本机关键网络信息
示例PPTP VPN 信息:
1 | 名称: 示例PPTP |
本地以太网:
1 | 接口: 以太网 |
singbox TUN:
1 | 接口: singbox_tun |
3. 根因分析
3.1 为什么开代理后 PPTP 连接失败
PPTP 不只是普通 TCP 连接,它通常需要:
1 | TCP 1723 |
代理/TUN 很容易接管默认路由,但 GRE 这类流量通常不能像普通 HTTP/SOCKS 流量一样被代理。
排查时发现:
1 | vpn.example.invalid -> 203.0.113.20 |
这会导致 PPTP 初始连接可能碰到服务器,但后续认证/PPP/GRE 阶段失败。日志中曾出现:
1 | RasClient error 619 |
后来给 VPN 服务器 IP 添加本地直连路由后,PPTP 不再被 singbox_tun 接管。
3.2 为什么连接 VPN 后局域网服务器访问失败
原始 VPN 配置中:
1 | SplitTunneling: False |
这表示 VPN 会抢默认路由,让很多本来应该走本地网卡的流量进入 VPN。
因此连接 VPN 后,访问局域网服务器可能失败。
解决方式是开启分流:
1 | Set-VpnConnection -Name "示例PPTP" -SplitTunneling $True |
开启后,只有明确添加到 VPN 的路由才走 VPN,其他流量继续按本地路由表走。
4. 最终路由方案
4.1 VPN 服务器本身必须走本地以太网
目的:保证 PPTP 连接过程不被 singbox_tun 或其他代理接管。
1 | 203.0.113.20/32 -> 10.0.255.254 -> 以太网 |
持久路由命令:
1 | route -p add 203.0.113.20 mask 255.255.255.255 10.0.255.254 metric 1 if 10 |
4.2 局域网服务器固定走本地以太网
目的:保证本机与局域网服务器、反向代理链路不被 VPN 或 TUN 带偏。
1 | 10.10.250.12/32 -> 10.0.255.254 -> 以太网 |
持久路由命令:
1 | route -p add 10.10.250.12 mask 255.255.255.255 10.0.255.254 metric 1 if 10 |
4.3 只有指定目标走示例PPTP
目标:
1 | 192.168.99.55/32 -> 示例PPTP |
命令:
1 | Set-VpnConnection -Name "示例PPTP" -SplitTunneling $True -Force |
说明:
- 这条路由属于 VPN 配置。
- 它只在
示例PPTP连接后生效。 - 它不会让全部流量走 VPN,只让
192.168.99.55这个 IP 走 VPN。
5. 常用排查命令
5.1 查看 VPN 配置
1 | Get-VpnConnection -Name "示例PPTP" | |
5.2 查看当前 IPv4 路由表
1 | Get-NetRoute -AddressFamily IPv4 | |
5.3 查看某个目标 IP 实际会走哪条路由
1 | Find-NetRoute -RemoteIPAddress 203.0.113.20 |
重点看:
1 | InterfaceAlias |
5.4 查看持久路由
1 | route print -4 |
也可以只看相关目标:
1 | route print -4 203.0.113.20 |
5.5 查看 VPN 连接错误日志
1 | Get-WinEvent -LogName Application -MaxEvents 80 | |
常见错误码:
1 | 619: PPTP 链路/PPP/GRE 阶段失败,常见于代理/TUN/防火墙/服务端断开 |
5.6 手动拨号测试
1 | rasdial "示例PPTP" |
如果已经连接,可查看:
1 | rasdial |
6. 本次验证过的结论
最终确认的稳定状态:
1 | 示例PPTP: |
这种方案的效果:
- singbox_tun 可以继续存在。
- PPTP 连接服务器本身不再走 singbox_tun。
- 连接 PPTP 后不会抢走全部默认路由。
- 局域网服务器和反向代理链路继续走本地网络。
- 只有指定的
192.168.99.55进入示例PPTP。
7. 下次快速处理流程
如果以后又遇到类似问题,按下面顺序查:
- 先看 VPN 服务器 IP 是否被代理/TUN 接管。
1 | Resolve-DnsName vpn.example.invalid -Type A |
如果走 singbox_tun,加或修复本地直连路由:
1 | route -p add 203.0.113.20 mask 255.255.255.255 10.0.255.254 metric 1 if 10 |
- 再看 VPN 是否开启分流。
1 | Get-VpnConnection -Name "示例PPTP" | Select-Object Name,SplitTunneling,ConnectionStatus |
如果是 False:
1 | Set-VpnConnection -Name "示例PPTP" -SplitTunneling $True -Force |
- 确认局域网服务器走本地以太网。
1 | Find-NetRoute -RemoteIPAddress 10.10.250.12 |
需要时重新添加:
1 | route -p add 10.10.250.12 mask 255.255.255.255 10.0.255.254 metric 1 if 10 |
- 确认 VPN 内部目标走 VPN。
1 | Add-VpnConnectionRoute -ConnectionName "示例PPTP" -DestinationPrefix "192.168.99.55/32" -RouteMetric 1 |
- 如果连接失败,查 RasClient 错误码。
1 | Get-WinEvent -LogName Application -MaxEvents 80 | |
8. 注意事项
route -p add写持久路由通常需要管理员权限。- 如果命令行提示
The requested operation requires elevation,需要用管理员 PowerShell 执行。 - 不要把所有
192.168.0.0/16都直接加到 VPN,除非确定不会和本地网络冲突。 - PPTP 比较老,对代理/TUN/防火墙/NAT 更敏感。如果服务端支持,后续可考虑换成 IKEv2、WireGuard、OpenVPN 等更稳的方案。