← 返回首页

向 OpenVPN 客户端配置添加路由

OpenVPN 在客户端配置中支持按子网的 route 指令。NetRoute Pro 从任何网站的域名生成这些指令 — 添加到 .ovpn 中,几分钟内即可实现分流。

命令语法

语法:

route <NETWORK> <NETMASK>

示例:

route 1.1.1.0 255.255.255.0

将这些指令添加到客户端的 .ovpn 文件。配合 route-nopull 仅这些路由通过 VPN。参见 OpenVPN 2.6 手册

准备工作

步骤 1. 在 NetRoute Pro 中生成 route 指令

  1. 在 Chrome 中打开目标网站
  2. 启动 NetRoute Pro,选择 OpenVPN 平台
  3. 点击 Analyze Website
  4. 复制输出 — 格式:每行一个 route 指令
route 104.21.32.0 255.255.255.0
route 172.67.0.0 255.255.0.0
route 198.41.128.0 255.255.128.0
提示:启用 RIPE BGP 优化 获得稳定的 BGP 公告前缀 — CDN IP 轮换时路由不会失效。注意:RIPE BGP 会返回该 AS 公告的所有前缀 — 对于多租户 CDN(Cloudflare AS13335、AWS AS16509、DigitalOcean AS14061)可能是数万个 IP,涵盖无关站点。BGP 优化适合单租户 AS;多租户 CDN 请保持常规 /24 CIDR 聚合。

步骤 2. 编辑 .ovpn

  1. 用文本编辑器打开您的 .ovpn 文件
  2. 删除 redirect-gateway def1(如果存在)— 该指令将所有流量路由到 VPN,会破坏分流
  3. 删除 push "redirect-gateway def1"(如果有)
  4. 粘贴 route 指令到文件末尾 — 在 <cert> / <key> / <ca> 块之前
  5. 保存文件

配置应类似:

client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun

# 选择性路由(由 NetRoute Pro 生成)
route 104.21.32.0 255.255.255.0
route 172.67.0.0 255.255.0.0

<ca>
...
</ca>

步骤 3. 重新连接 VPN

断开并重新连接客户端以应用新路由。OpenVPN 仅在连接时读取 route 指令 — 运行时更改不会生效。

替代方案:服务器端路由(用于管理员)

如果您控制 OpenVPN 服务器,可以将路由推送到所有客户端。在服务器配置中:

push "route 104.21.32.0 255.255.255.0"
push "route 172.67.0.0 255.255.0.0"

客户端连接时自动接收路由 — 无需编辑每个 .ovpn

DNS 泄漏 — 必读

本指南按 IP 路由流量。它不路由 DNS。浏览器仍然向系统解析器(通常是 ISP 的)询问 example.com 的 IP — 只有结果 IP 流量才通过隧道。使用 route-nopull 时情况更糟:服务端推送的 DNS 也被丢弃,所有 DNS 走默认解析器。

根据你的威胁模型,三种选择:

  1. 使用 VPN 解析器对 ISP 隐藏 DNS。用选择性 pull-filter 替代完整的 route-nopull — 仅丢弃 redirect-gateway,保留 DNS 推送:
    pull-filter ignore "redirect-gateway"
    pull-filter accept "dhcp-option DNS"
    在 Windows 上,同时添加 block-outside-dns 防止系统并行向 DHCP 提供的 DNS 发起查询。
  2. 降低 ISP 可见性(公共 DoH/DoT)。在系统级配置公共加密解析器(Cloudflare 1.1.1.1、AdGuard、Quad9)。ISP 不再看到域名查询;公共解析器会看到。
  3. 接受泄漏。如果你的目标是访问内容而非规避监控,这没问题 — 数据路径仍然加密。

dnsleaktest.combrowserleaks.com/dns 验证 — 显示的解析器应与你配置的一致,而非 ISP。

IPv6 双栈绕过

OpenVPN 的 route 指令仅适用于 IPv4。如果目标有 AAAA 记录(大多数热门站点都有),系统按 RFC 6724 优先选择 IPv6 — 该流量绕过隧道,从 ISP 默认 v6 路由出去。

两种解决方案:

验证

连接后检查路由表:

您应该看到子网指向 VPN tun 接口。

常见问题

--route 指令被忽略

常见原因:

注意: route-nopull 不会导致本地 route 指令被忽略 — 它只会丢弃服务端推送的路由。客户端配置中的本地 route 行仍会生效,这正是 split tunneling 所需要的。

DNS 泄漏(Windows)

添加以下指令以防止 DNS 查询绕过 VPN:

block-outside-dns

路由已添加但流量未通过 VPN

通常表示 VPN 接口上没有 NAT — 需在服务器端修复。验证服务器配置中存在 push "route ..." 且 iptables/防火墙上启用了相应子网的 masquerade。

配置文件示例

带注释的可编辑模板。将示例路由替换为 NetRoute Pro 为目标网站生成的输出。


# Example OpenVPN client config snippet for split tunneling.
# Generated by NetRoute Pro: https://alexander2k.github.io/netroute-site/
#
# Append these directives to your existing client .ovpn file. With route-nopull
# the server's pushed routes are ignored — only the explicit `route` lines below
# go through the VPN. Reconnect the client after editing.

route-nopull

# Format: route <NETWORK> <NETMASK>
# Replace these example networks with output from NetRoute Pro.
route 1.1.1.0   255.255.255.0
route 8.8.8.0   255.255.255.0
route 162.159.0.0 255.255.0.0

# Verify after reconnect: openvpn3 sessions-list  (or)  netstat -rn

提示:需要不带注释行的配置?在 NetRoute Pro 选项中取消勾选 「在导出文件中包含注释」,扩展将仅导出路由命令。适用于不支持注释的路由器。

在 GitHub 上查看所有示例 →

官方文档

准备好尝试了吗?

NetRoute Pro — 免费的 Chrome 扩展,可从任何网站生成路由。

安装扩展