如何避免OpenVPN Client充当默认网关并仅访问指定子网
解决OpenVPN仅路由特定子网且不覆盖本地DNS的配置方案
嘿,我之前也碰到过一模一样的问题——OpenVPN连上去就把所有流量和DNS都切去客户网络,结果连不上网关、没法正常上网,只能访问指定的白名单服务器。下面是针对Windows最新版OpenVPN GUI的具体解决步骤,直接修改你的.ovpn配置文件就行:
一、禁用全局路由,只让特定子网走VPN
很多默认的OpenVPN配置会加redirect-gateway def1这类参数,把所有流量都导向VPN,我们得把这个改掉:
- 先打开你的.ovpn文件,找有没有
redirect-gateway开头的行,有的话在行前面加个#注释掉,或者直接删掉 - 然后手动添加你需要访问的目标子网路由,格式是:
举个例子,如果你只需要访问route [目标子网IP] [子网掩码]192.168.10.0/24和10.0.5.0/24这两个子网,就加两行:
这样设置后,只有这两个子网的流量会走VPN,其他所有流量还是用你本地的网络。route 192.168.10.0 255.255.255.0 route 10.0.5.0 255.255.255.0
二、阻止OpenVPN替换你的本地DNS
默认配置会推送客户网络的DNS服务器,导致你没法解析非白名单的域名,我们可以强制保留自己的DNS设置:
- 在.ovpn文件里加这两行:
pull-filter ignore "dhcp-option DNS" dhcp-option DNS [你的本地DNS服务器IP]- 第一行
pull-filter ignore "dhcp-option DNS"是告诉OpenVPN别管服务器推送的DNS配置 - 第二行填你自己想用的DNS,比如本地路由器的IP(一般是
192.168.1.1或者192.168.0.1),或者公共DNS比如8.8.8.8都行
- 第一行
- 要是担心DNS设置残留,还可以再加一行:
这会让Windows重新注册本地DNS,确保不会用VPN的DNS。register-dns
三、验证配置是否生效
改完保存后,重启OpenVPN GUI并连接VPN,然后做两个检查:
- 打开命令提示符(按Win+R输
cmd),输入route print,看路由表里是不是只有你指定的子网路由指向VPN的网关 - 输入
nslookup google.com,看返回的DNS服务器是不是你刚才设置的那个,而不是客户网络的DNS
额外小技巧
如果有些服务器会强制推送路由或DNS,上面的设置可能不够,那就在配置文件最顶部加一行:
route-nopull
这个参数会完全忽略服务器推送的所有路由和DNS,然后你再手动加需要的子网路由和DNS,这种方式更彻底。
内容的提问来源于stack exchange,提问作者Steve B
相关产品推荐
相关产品推荐

