Kubuntu的network-manager-openvpn无法通过VPN服务器路由流量。

我有一个在终端中运行良好的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隧道路由?

你在网络管理器连接中检查了“IPv4设置选项卡 > 路由 > 仅用于本网络资源”吗? - Alfonso Nishikawa
我有一段时间没有重新审视这个问题了,但可能很快会这样做。我发现通过终端连接要简单得多(即 sudo openvpn --config client.ovpn)。 - Vanessa Deagan
2个回答

我发现了一个所谓的“解决方案”(虽然这个术语在这里用得很宽泛)基于这篇文章:Network Manager does not set IP4.GATEWAY for OpenVPN connection - 虽然我相信这是与network-manager-openvpn模块有关的一个bug。
问题出现是因为没有为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配置文件)。 我不确定如何报告这种性质的错误,请问是否有人知道。

这里用一种更简单的方法解决了:
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