Ubuntu 22.04 Network Manager连接OpenVPN时所有流量走VPN(命令行连接正常)
Ubuntu 22.04 Network Manager连接OpenVPN时所有流量走VPN(命令行连接正常)
看起来你遇到的是Network Manager导入OpenVPN配置时的路由规则自动覆盖问题,毕竟命令行用openvpn命令连接是正常的,说明服务器端配置没问题,问题出在NM的客户端配置上。我来帮你一步步排查解决:
1. 检查Network Manager的VPN路由核心设置
这是最常见的触发原因,NM默认可能会强制把所有流量导向VPN,哪怕服务器没推送redirect-gateway:
- 点击Ubuntu右上角的网络图标,找到你的OpenVPN连接,选择「编辑连接」
- 在弹出窗口切换到IPv4设置标签页
- 找到「路由」区域,勾选仅将此连接用于其网络上的资源(这个选项就是告诉NM:只有VPN对应的内部网络流量走这条连接,其他流量继续用原来的默认网关)
- 同时检查下方的路由列表,应该只有服务器推送的
192.168.0.0/24这条路由,如果有0.0.0.0/0的默认路由,手动删除它
2. 检查高级选项里的「重定向网关」开关
有时候NM导入.ovpn文件时会误开启这个选项,和服务器端的配置冲突:
- 在刚才的编辑窗口里,点击右下角的高级按钮
- 切换到路由标签页,确保「重定向网关」的选项没有被勾选(服务器端已经注释了
redirect-gateway,这里也应该保持关闭)
3. 排查virbr0虚拟网卡的干扰
你提到NM连接时多了个virbr0设备,这是libvirt(比如KVM/QEMU虚拟化服务)默认创建的虚拟网桥,它自带的路由规则可能会和VPN路由冲突:
- 先临时禁用libvirt服务测试:
sudo systemctl stop libvirtd - 然后重新连接VPN,看看是不是所有流量不再走VPN了
- 如果有效,你可以选择:
- 永久禁用libvirt服务(如果不需要虚拟化):
sudo systemctl disable --now libvirtd - 或者修改libvirt的网络配置,让它的路由规则不会干扰VPN的正常路由
- 永久禁用libvirt服务(如果不需要虚拟化):
4. 手动对比路由表(临时调试用)
如果上面的设置都没生效,你可以对比两种连接方式的路由表,定位差异点:
- 命令行连接后,执行
ip route show,记录下默认路由(比如default via 192.168.18.1 dev enxzzzz)和VPN专属路由(192.168.0.0/24 via 10.8.0.1 dev tun0) - NM连接后,同样执行
ip route show,如果发现默认路由变成了default via 10.8.0.1 dev tun0,手动删除这条错误的默认路由:sudo ip route del default via 10.8.0.1 - 这个操作是临时的,重启连接会失效,但可以帮你确认是不是路由规则被错误覆盖导致的问题
按照上面的步骤一步步来,应该就能解决NM强制把所有流量走VPN的问题了。
备注:内容来源于stack exchange,提问作者Gonzalo Cao
相关产品推荐
相关产品推荐

