问题现象
应用请求为外网服务时,请求走VPN网络;应用请求为内网时,请求不走VPN网络。
背景知识
- 路由的概念:路由起到请求转发的作用,将应用的请求转发至VPN虚拟网卡转发或者物理网卡。路由在VPN中的位置:

- 默认路由: 所有未匹配到其它路由流量的兜底出口;在VPN网络未配置路由时,所有的流程都会走VPN隧道。IPv4默认路由为0.0.0.0/0;IPv6默认路由为::/0。
- VPN路由的分类:全隧道模式和分流路由。
- 全隧道模式:客户端默认路由(0.0.0.0/0)指向VPN网关,所有流量(包括上网、访问内网)都走VPN。
- 分流路由:仅让特定目标流量走VPN,其余流量走本地默认路由。
- VpnConfig关键配置项:
- isInternal:是否支持内置VPN,默认值为false。设置为true时支持内置VPN,流量将通过tun网卡转发。
- isBlocking:是否阻止非VPN连接,默认值为false。设置为true时,未走VPN的连接将被阻止。
问题定位
1.网络的主要配置信息如下:
名称 | IP地址 |
本地设备IP | 192.xxx.x.9 |
默认网关 | 192.xxx.x.1 |
路由1 | 192.xxx.x.10 |
路由2 | 182.xx.xxx.108 |
虚拟网卡地址 | 10.x.x.5 |
2.WireShark条件搜索ip.src == 182.xx.xxx.108 && ip.dst == 10.x.x.5,表示搜索从182.xx.xxx.108路由到10.x.x.5网卡的流量,说明应用的外网请求通过VPN网络转发。

3.WireShark条件搜索ip.src == 192.xxx.x.10 && ip.dst == 10.x.x.5,表示搜索从192.xxx.x.10路由到10.x.x.5网卡的流量,说明应用的内网请求不通过VPN网络转发,直接走内网的路由规则。

分析结论
内网路由优先级默认高于VPN路由导致内网流量不走VPN网络。
修改建议
方案1:避免网段重叠,内网和VPN网段尽量不重叠,比如内网用192.xxx.x.0/24网段,VPN用10.x.x.0/24网段。
方案2:最长前缀匹配,通过设置某个网段的掩码越长路由优先级越高,比如VPN网段为192.xxx.x.10/32的掩码长度32比内网网段192.xxx.x.0/23的掩码长度23大,能够保证前者的路由优先级比后者大。
方案3:配置VpnConfig参数,确保流量路由至VPN链路:
- 将isInternal设置为true,启用内置VPN,使流量通过tun网卡转发。
- 将isBlocking设置为true,阻止未走VPN的连接。
- routes仅保留默认路由0.0.0.0/0,使所有流量均匹配VPN路由规则。
常见FAQ
Q:HarmonyOS系统如何查看设备路由规则?
A:连接设备后,执行hdc shell netstat -r;其中Destination表示下一跳路由。

总结
VPN网络访问问题通常需要使用网络包工具分析TcpDump包进行定位定界;根据数据包日志可以定位网络请求是否经过VPN网络,达到网络问题定位定界能力。