OpenVPN客户端添加错误路由规则导致无法与服务器通信的配置解决方案咨询
Hey,我来帮你捋捋这个问题~你遇到的情况确实挺常见的:OpenVPN客户端连接后自动生成了一条错误的主机路由,把服务器的192.168.140.107指向了10.0.2.2网关,导致本该走本地局域网网卡(enp0s8)的流量被导去了另一个网卡(enp0s3),自然没法和服务器正常通信了。
下面给你几个靠谱的解决办法,你可以根据自己的需求选:
方法一:客户端配置禁用自动路由推送,手动添加必要路由
这个方法最直接,让OpenVPN别乱加路由,只保留我们需要的VPN网段路由。
- 打开你的OpenVPN客户端配置文件(比如
client.ovpn) - 添加以下两行配置:
route-nopull route 10.8.0.0 255.255.255.0
route-nopull:阻止OpenVPN自动加载服务器推送的所有路由规则,包括那条错误的route 10.8.0.0 255.255.255.0:手动添加VPN网段(10.8.0.0/24)的路由,确保VPN内的流量能正常走tun0网卡
配置完后重启客户端,再用ip route show查看路由表,那条错误的192.168.140.107 via 10.0.2.2应该就消失了,访问服务器192.168.140.107会自动走原来的enp0s8网卡路由。
方法二:客户端配置强制覆盖错误路由
如果你不想完全禁用路由推送,只想修正那条错误的主机路由,可以在客户端配置文件里添加一条优先级更高的路由规则:
route 192.168.140.107 255.255.255.255 192.168.140.1
这条规则会强制让访问服务器192.168.140.107的流量走192.168.140.1网关(也就是你需要的正确网关),优先级会比OpenVPN自动添加的路由高,就能覆盖掉错误的规则。
方法三:服务器端统一配置,避免所有客户端出问题
如果你有多个客户端,不想每个都改配置,可以在OpenVPN服务器的server.conf里添加以下推送规则:
push "route-nopull" push "route 10.8.0.0 255.255.255.0"
这样所有客户端连接时都会收到这个指令,效果和方法一一样,自动避免错误路由的生成。
方法四:用连接脚本自动删除错误路由
如果上面的配置方法都不适合你,还可以写个小脚本,在客户端连接成功后自动删掉那条错误的路由:
- 创建一个脚本文件,比如
fix_route.sh,内容如下:
#!/bin/bash # 删除错误的路由规则 ip route del 192.168.140.107 via 10.0.2.2 dev enp0s3
- 给脚本加执行权限:
chmod +x fix_route.sh
- 在客户端配置文件里添加一行,指定连接后执行这个脚本:
up /path/to/fix_route.sh
(注意把/path/to/换成脚本实际存放的路径)
不管用哪种方法,配置完成后记得重启OpenVPN客户端,然后用ip route show验证路由表,确认错误路由已经被移除或者覆盖,之后再测试和服务器的通信应该就正常啦~
备注:内容来源于stack exchange,提问作者neo




