# VPN接入状态下，应用访问内网资源的流量未路由至VPN链路

#### 问题现象

应用请求为外网服务时，请求走VPN网络；应用请求为内网时，请求不走VPN网络。

#### 背景知识

*   路由的概念：路由起到请求转发的作用，将应用的请求转发至VPN虚拟网卡转发或者物理网卡。
    
    路由在VPN中的位置：
    
*   默认路由: 所有未匹配到其它路由流量的兜底出口；在VPN网络未配置路由时，所有的流程都会走VPN隧道。IPv4默认路由为0.0.0.0/0；IPv6默认路由为::/0。
*   VPN路由的分类：全隧道模式和分流路由。
    1.  全隧道模式：客户端默认路由（0.0.0.0/0）指向VPN网关，所有流量（包括上网、访问内网）都走VPN。
    2.  分流路由：仅让特定目标流量走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大，能够保证前者的路由优先级比后者大。

#### 常见FAQ

Q：HarmonyOS系统如何查看设备路由规则？

A：连接设备后，执行hdc shell netstat -r；其中Destination表示下一跳路由。

#### 总结

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