我有一个 OpenVPN 配置文件,它在终端上运行良好:
sudo openvpn --config openvpn.conf
通过终端连接后,我的路由表如下:
[van@d2:Desktop]$ ip route
0.0.0.0/1 via 255.255.255.0 dev tun0
default via 192.168.0.1 dev wlp3s0 proto static metric 600
10.9.0.1 via 255.255.255.0 dev tun0
<vpn_server_ip_addr> via 192.168.0.1 dev wlp3s0
128.0.0.0/1 via 255.255.255.0 dev tun0
169.254.0.0/16 dev wlp3s0 scope link metric 1000
192.168.0.0/24 dev wlp3s0 proto kernel scope link src 192.168.0.5 metric 600
255.255.255.0 dev tun0 proto kernel scope link src 10.9.0.4
我想尝试从网络管理器中让一切正常工作,因此我安装了network-manager-openvpn
VPN 连接,然后从工作配置文件中导入了该连接。但是,当我使用网络管理器连接时,流量不会通过 OpenVPN 服务器路由。路由表(使用网络管理器条目连接后)如下:
[van@d2:Desktop]$ ip route
default via 192.168.0.1 dev wlp3s0 proto static metric 600
10.9.0.0/24 dev tun0 proto kernel scope link src 10.9.0.4 metric 50
<vpn_server_ip_addr> via 192.168.0.1 dev wlp3s0 proto static metric 600
169.254.0.0/16 dev wlp3s0 scope link metric 1000
192.168.0.0/24 dev wlp3s0 proto kernel scope link src 192.168.0.5 metric 600
192.168.0.1 dev wlp3s0 proto static scope link metric 600
我尝试添加 0.0.0.0 条目(来自工作路由表),但被拒绝:
[van@d2:Desktop]$ sudo ip route add 0.0.0.0/1 via 255.255.255.0 dev tun0
RTNETLINK answers: Network is unreachable
我也尝试过删除:
10.9.0.0/24 dev tun0 proto kernel scope link src 10.9.0.4 metric 50
并将其替换为:
10.9.0.1 via 255.255.255.0 dev tun0
但这也失败并出现类似的错误消息(删除有效)。
我的问题是:如何通过网络管理器连接到 OpenVPN 服务器并强制所有流量通过 VPN 隧道路由?
答案1
我发现了一个“解决方案”(在这里我非常随意地使用这个术语)基于这篇文章:网络管理器未为 OpenVPN 连接设置 IP4.GATEWAY- 尽管我确信这是network-manager-openvpn
模块的一个错误。
出现该问题的原因是没有为OpenVPN隧道设置网关:
[van@d2:~]$ nmcli device show tun0
GENERAL.DEVICE: tun0
GENERAL.TYPE: tun
GENERAL.HWADDR: (unknown)
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: tun0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/15
IP4.ADDRESS[1]: 10.9.0.4/24
IP4.ADDRESS[2]: 192.168.0.7/32
IP4.GATEWAY: --
IP6.ADDRESS[1]: fe80::cd28:e3cf:f9e6:1417/64
IP6.GATEWAY --
可以使用以下方法获取默认网关:
[van@d2:~]$ ip route
default via 192.168.0.1 dev wlp3s0 proto static metric 600
...
现在使用nmcli con show
获取 OpenVPN 隧道的 UUID(在我的情况下是 tun0):
[van@d2:~]$ nmcli con show
NAME UUID TYPE DEVICE
VAN-200-5GHz <SOME-UUID>-9c79da9597a1 802-11-wireless wlp3s0
van <SOME-UUID>-484ee303d901 vpn wlp3s0
tun0 <SOME-UUID>-2a1a14674e78 tun tun0
Wired connection 1 <SOME-UUID>-d3935bcf886b 802-3-ethernet --
获得 UUID 后,使用以下命令设置网关:
nmcli con mod <SOME-UUID>-b717eca7a5a0 ipv4.gateway 192.168.0.1
现在检查以确保您使用的是 VPN 服务器的 IP 地址:
dig @resolver1.opendns.com myip.opendns.com +short
<YOUR-VPN-SERVER-IP>
使用此方法的副作用之一是,每次添加 tun0 网关时,您都会得到“僵尸”连接(并且这些连接在重启后仍会存在):
[van@d2:~]$ nmcli con show
NAME UUID TYPE DEVICE
VAN-200-5GHz <SOME-UUID>-9c79da9597a1 802-11-wireless wlp3s0
Wired connection 1 <SOME-UUID>-d3935bcf886b 802-3-ethernet --
van <SOME-UUID>-484ee303d901 vpn --
tun0 <SOME-UUID>-c4381868f3f3 tun --
tun0 <SOME-UUID>-157870b81351 tun --
tun0 <SOME-UUID>-a1bc29fb7bef tun --
您可以使用以下方法删除它们:
[van@d2:~]$ nmcli con del tun0
Connection 'tun0' (<SOME-UUID>-157870b81351) successfully deleted.
Connection 'tun0' (<SOME-UUID>-c4381868f3f3) successfully deleted.
Connection 'tun0' (<SOME-UUID>-a1bc29fb7bef) successfully deleted.
考虑到使用网络管理器连接到 OpenVPN 解决这些问题有多么复杂,您最好只通过终端进行连接(假设您有一个有效的 OpenVPN 配置文件)。
我不确定如何报告这种性质的错误,所以如果有人知道,请告知。
答案2
这里用更简单的方法解决:
sudo nmcli connection modify vpnu-us-mia ipv4.route-metric 0 solves the issue
默认以太网的度量为 1,因此设置为较低的值
还忽略了密码限制:
sudo nmcli connection modify vpnu-us-mia +vpn.data tls-cipher=DEFAULT:@SECLEVEL=0 ipv4.route-metric 0