Ubuntu 18.04下OpenVPN拆分隧道配置失效问题求助
看起来你遇到的问题确实挺闹心的——明明同事用Windows/Mac都能正常用拆分隧道(同时访问办公网和本地互联网),唯独你的Ubuntu 18.04不行,连Google DNS都ping不通,只能访问办公网段。我来帮你一步步排查可能的原因和解决办法:
1. 先确认路由表是否符合预期
连接VPN后,先运行这条命令查看当前路由规则:
ip route show
重点检查两个关键点:
- 有没有出现
default via <VPN网关IP>这类默认路由?如果有,说明你配置里的pull-filter ignore "redirect gateway"可能没生效,服务器端还是推送了强制走VPN的默认路由。 - 本地的默认路由(比如
default via <你的家用路由器IP> dev wlan0/eth0)是否还存在?如果它被覆盖或删除,本地互联网流量会被强制导去VPN,而服务器又没允许外部访问,自然会超时。
如果发现有额外的VPN默认路由,可以试试把配置里的过滤规则改成更严格的写法(有些版本的OpenVPN对引号处理敏感):
pull-filter ignore redirect-gateway
2. 检查DNS配置是否被VPN接管
你说ping Google DNS超时,大概率是DNS解析出了问题。Ubuntu 18.04用systemd-resolved管理DNS,用这条命令查看当前DNS配置:
resolvectl status
如果连接VPN后,DNS服务器变成了办公网的VPN DNS,而这个DNS不允许解析外部公共域名,就会导致无法访问互联网。解决办法有两种:
- 在OpenVPN配置文件里添加一行,强制使用本地DNS:
dhcp-option DNS <你的本地DNS,比如192.168.1.1或8.8.8.8> - 或者忽略服务器推送的DNS配置,保留本地设置:
pull-filter ignore "dhcp-option DNS"
3. 排查Ubuntu防火墙(UFW)的干扰
Ubuntu默认的UFW防火墙可能在连接VPN后,阻止了本地网卡的出站流量。你可以临时关闭UFW测试:
sudo ufw disable
如果关闭后能正常访问互联网,那就是UFW规则的问题。你需要添加允许本地流量的规则,比如:
sudo ufw allow out on <本地网卡名,比如wlan0> to any sudo ufw enable
或者确保UFW的默认出站规则是允许的(默认就是允许,但如果被修改过需要调整)。
4. 检查OpenVPN的DNS脚本是否有问题
Ubuntu的OpenVPN客户端默认会用update-resolv-conf脚本自动更新DNS配置,这个脚本可能会覆盖你的本地DNS设置。你可以调整它的行为:
- 想保留脚本但手动指定DNS,添加:
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf dhcp-option DNS <你的本地DNS> - 不想用脚本的话,直接禁用:
script-security 2 up /bin/true down /bin/true
5. 手动测试路由规则(临时验证)
如果上面的方法都没效果,你可以手动添加本地默认路由试试:
sudo ip route add default via <你的本地路由器IP> dev <本地网卡名> metric 100
(metric值设得比VPN路由的metric低,让本地路由优先级更高)
如果添加后能访问互联网,说明你的OpenVPN配置没有保留本地路由,你可以把这条路由加到OpenVPN的up脚本里,每次连接VPN时自动添加。
另外,你的route "my workstation ip" 255.255.255.255只指定了单个工作站IP,如果你需要访问整个办公网段,应该改成对应网段的路由(比如route 192.168.10.0 255.255.255.0,替换成实际办公网段)。同事能用可能是因为服务器端给他们推送了整个网段的路由,而你用route-nopull没拿到,这点也可以和管理员确认下。
备注:内容来源于stack exchange,提问作者anand.0976

