Loading... ## 1. 背景介绍 在远程办公或访问公司内网时,很多企业会通过 OpenVPN 提供一个 `.ovpn` 配置文件,供员工连接公司 VPN。 默认情况下,一旦连接 VPN,电脑上**所有的网络流量**都会被强制**通过 VPN 隧道转发**。虽然这可以保障公司内部资源的安全访问,但也带来了如下问题: - 所有网络流量可能会被公司服务器监控; - 上网速度下降,外网访问受限; - 一些敏感应用(网银、邮箱)可能识别 VPN 并限制访问。 因此,我希望仅让访问公司指定的内网 IP(如 `10.*.*.*`)走 VPN,而其他 IP(如外网、私有服务等)**继续通过本地网络连接**,从而既保证公司业务需求,也保护个人隐私和网络自由。 --- ## 2. 需求说明 我的使用场景如下: - 使用公司提供的 `.ovpn` 文件连接 VPN; - VPN 服务地址为 `dev.****.com`; - 公司内部需要访问的服务器 IP 为 `10.12.13.226`; - 希望只有访问 `10.12.13.226` 时才通过 VPN; - 所有其他流量(百度、邮箱、个人服务等)**不经过 VPN**,直接走本地网络。 --- ## 3. 实现方案 ### 3.1 屏蔽全局代理设置 默认的 `.ovpn` 配置文件中,可能存在如下行: ```bash redirect-gateway def1 ``` 这会导致所有网络流量都走 VPN,需要**注释掉或删除**: ```bash # redirect-gateway def1 ``` 为了防止服务端强制推送这个设置,我们还可以添加: ```bash pull-filter ignore "redirect-gateway" ``` 这表示客户端忽略服务端强制下发的全局代理策略。 --- ### 3.2 添加分流路由规则 接下来,只配置我们希望走 VPN 的 IP 地址。 例如: ```bash route 10.12.13.226 255.255.255.255 ``` 这表示**只有访问该 IP 的流量会通过 VPN**,其余流量依然通过本地网络直连。 如果有多个内网 IP 或网段,可以继续添加多条 `route` 语句,例如: ```bash route 10.0.0.0 255.0.0.0 route 172.16.0.0 255.240.0.0 ``` --- ### 3.3 最终配置示例 这是我最终使用的 `.ovpn` 文件关键配置部分(已脱敏处理): ```ovpn client dev tun proto udp remote dev.****.com 11204 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA256 verb 3 # 不使用全局 VPN pull-filter ignore "redirect-gateway" # 指定要通过 VPN 的目标 IP,所有 10.12.13.* 的访问都会走 VPN route 10.12.13.0 255.255.255.0 route 10.xx.xx.xx 255.255.255.0 <ca> ...(证书内容)... </ca> <cert> ...(证书内容)... </cert> <key> ...(私钥内容)... </key> ``` 配置完成后,重新导入 OpenVPN 客户端即可使用。 --- ## 4. 如何验证是否分流成功 可以使用操作系统提供的路由表查看命令: - Windows 用户执行: ```bash route print ``` - macOS / Linux 用户执行: ```bash netstat -rn ``` 检查是否只有访问 `10.12.13.226` 的数据走 VPN 网关,其他如 `114.*.*.*`、`8.8.8.8` 等仍然走默认本地网关即可。 也可以通过浏览器访问 [ip.sb](https://ip.sb/) 等站点,确认访问外网时出口 IP 并未变化。 --- ## 5. 总结 通过修改 `.ovpn` 配置文件,可以实现 OpenVPN 的“分流”功能,仅将特定流量导向 VPN,从而避免因全局代理导致的隐私泄露、访问缓慢等问题。 本方案简单易行,不依赖第三方工具,适用于所有希望在使用 VPN 时同时保护隐私和效率的用户。 最后修改:2025 年 05 月 07 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏