openvpn如何实现智能分流及特定域名走vpn通道

你描述的是典型的 “智能分流”(Smart Split Tunneling) 需求:

国内网站(百度、网易等)直连(不走 VPN)
国外网站(Google、YouTube 等)走 VPN

这在 OpenVPN 中无法直接通过路由实现(因为路由基于 IP,而你给的是域名),但可以通过以下 组合方案 实现。


核心思路

  1. 获取国外网站的 IP 段列表(如 Google、AWS、Cloudflare 等)
  2. 只将这些 IP 段加入 OpenVPN 路由
  3. 国内流量默认走本地网络(不进 VPN)

由于 DNS 解析结果可能是国内外混合 IP,最可靠的方式是按目标 IP 路由,而非域名


推荐方案:使用 chnroutes + OpenVPN 分流

这是中文用户最成熟的方案,基于 chnroutes 项目。

步骤 1:生成“仅国外 IP”的路由表

# 在你的电脑或服务器上执行
git clone https://github.com/misakaio/chnroutes.git
cd chnroutes

# 生成 OpenVPN 路由配置(排除中国 IP,只推国外 IP)
python3 chnroutes.py -p openvpn -o vpn-routes.txt

输出文件 vpn-routes.txt 包含数千条 route X.X.X.X 255.255.255.255,覆盖所有非中国 IP 段


步骤 2:修改 OpenVPN 客户端配置

编辑你的 .ovpn 文件,在末尾追加这些路由:

# client.ovpn
client
dev tun
proto udp
remote your-vpn-server.com 1194
...
#  删除 redirect-gateway
# push "redirect-gateway def1"  # 必须去掉!

#  加载国外 IP 路由(从 chnroutes 生成)
<file>
# 这里粘贴 vpn-routes.txt 的全部内容
route 1.0.0.0 255.255.255.0
route 1.0.1.0 255.255.255.0
route 1.0.2.0 255.255.255.0
...
route 223.255.255.0 255.255.255.0
</file>

原理:

  • 所有不在中国 IP 列表中的地址 → 走 VPN
  • 所有中国 IP(包括百度、网易、腾讯等)→ 走本地网络

步骤 3:确保 DNS 不泄漏(关键!)

如果 DNS 请求走本地运营商,可能被污染或返回错误 IP。建议:

方案 A:使用 DoH/DoT(推荐)

  • 浏览器用 Cloudflare WARPAdGuard HomeFirefox 内置 DoH
  • 系统级用 dnscrypt-proxy + 1.1.1.18.8.8.8

方案 B:强制 DNS 走 VPN(简单)

.ovpn 中加:

dhcp-option DNS 8.8.8.8
dhcp-option DNS 1.1.1.1

缺点:所有 DNS 都走 VPN,可能变慢。


验证是否生效

1. 访问国内网站(应直连)

# 查看出口 IP(应为你的本地公网 IP)
curl ifconfig.me

# 测试百度(应快速打开,无延迟)
ping www.baidu.com

2. 访问国外网站(应走 VPN)

# 出口 IP 应变为 VPN 服务器 IP
curl --interface tun0 ifconfig.me

# 测试 Google(应可访问)
curl -I https://www.google.com

3. 检查路由表

# Linux/macOS
ip route show table all | grep tun0 | wc -l
# 应显示 ~6000 条(国外 IP 路由)

# Windows
route print | findstr "你的_VPN网关"

注意事项

问题解决方案
新网站 IP 未覆盖定期更新 chnroutes(每月一次)
CDN 混合 IP(如 Cloudflare 有国内节点)可能部分资源直连,属正常现象
某些 App 强制全流量在系统设置中关闭该 App 的 VPN 权限
IPv6 泄漏在 OpenVPN 中禁用 IPv6:
pull-filter ignore "route-ipv6"

替代方案(更简单)

如果你不想维护路由表,可用以下工具自动分流:

工具说明
Clash / Clash Meta支持规则分流(DOMAIN-SUFFIX, GEOIP),需配合 TUN 模式
Surge / Quantumult X(iOS)商业软件,内置 GEOIP 规则
V2Ray / Xray + routing支持 geoip.dat 智能路由
WireGuard + gfwlist2dnsmasq轻量级方案

但如果你坚持用 OpenVPNchnroutes 是最稳定的选择。


总结:OpenVPN 智能分流配置要点

  1. 禁用 redirect-gateway
  2. chnroutes 生成国外 IP 路由
  3. 将路由追加到 .ovpn 文件
  4. 配置安全 DNS(防污染)
  5. 定期更新 IP 列表

这样,你就能实现:

  • 百度、淘宝、B站 → 高速直连
  • Google、GitHub、Netflix → 走 VPN

Comments

No comments yet. Why don’t you start the discussion?

发表回复