如何使用 nmcli 在使用某些 wifi 时始终连接到 vpn?

如何使用 nmcli 在使用某些 wifi 时始终连接到 vpn?

使用nm-applet,可以很容易地保存VPN连接和连接的用户名+密码,然后在使用某个Wi-Fi连接时自动连接到它。它总是会自动连接到它,而不要求输入密码。

如何在终端使用nmcli其他命令来实现这一点?我正在尝试编写脚本,以便更轻松地部署更多连接并编辑它们。

到目前为止我只设法

nmcli connection import type openvpn file ned.ovpn

我还注意到,已保存的连接可以在以下位置找到

 /etc/NetworkManager/system-connections/

我尝试将相同的设置从笔记本电脑复制到台式机,但似乎没有任何变化 - 它似乎没有看到/更改这些设置。

答案1

以下是我最初评论的详细解释。目标是了解使用 CLI 工具的等效功能纳米克利无需浏览所有文档即可查明设置,只要用户在 GUI 工具上知道该设置即可:借助此 GUI 工具的临时帮助nm-小程序,必须可用某处(甚至不是同一个系统)具有等效的设置。这只是一种通用方法,可用于除此处考虑的设置之外的任何其他设置。

涉及两个连接:我将调用它们主要的, 和我的VPN使用时会自动连接主要的。此处的更改将在主要的,这是必须检查的。

$ nmcli connection show
NAME                UUID                                  TYPE       DEVICE 
main                cfa5be23-925a-4273-b5de-2f9adaac8782  wifi       --
myVPN               0d9e60ef-6b5e-4f65-8312-8db428589866  vpn        --

要显示 main 的配置,请执行以下任一操作:

nmcli connection show id main
nmcli connection show uuid cfa5be23-925a-4273-b5de-2f9adaac8782

将转储许多其他行,例如:

connection.id:                          main
connection.uuid:                        cfa5be23-925a-4273-b5de-2f9adaac8782
connection.type:                        802-11-wireless

[...]

所以首先转储全部它在一个文件中。一些输出是本地化的,所以最好export LANG=C.UTF-8之前做(如果稍后应该在互联网上搜索或比较特定的设置名称或值,这会有所帮助):

nmcli c show id main > /tmp/before

使用图形用户界面工具nm-小程序当该功能已知时,VPN我的VPN添加到主要:

设置 VPN 自动连接

转储它再次:

nmcli c show id main > /tmp/after

现在diff可以比较并显示发生了什么变化:

$ diff -u /tmp/before /tmp/after
--- /tmp/before 2019-05-04 10:47:43.410149358 +0200
+++ /tmp/after  2019-05-04 10:47:58.798252044 +0200
@@ -15,7 +15,7 @@
 connection.master:                      --
 connection.slave-type:                  --
 connection.autoconnect-slaves:          -1 (default)
-connection.secondaries:                 --
+connection.secondaries:                 0d9e60ef-6b5e-4f65-8312-8db428589866
 connection.gateway-ping-timeout:        0
 connection.metered:                     unknown
 connection.lldp:                        default

那么这就意味着之前不起眼的设定connection.secondaries已被设置,无需太多猜测,即可我的VPN的 UUID:0d9e60ef-6b5e-4f65-8312-8db428589866.nm-设置(5)讲述了它在连接设置:

字符串 [] 的辅助数组

激活基本连接本身时应激活的连接 UUID 列表。目前仅支持 VPN 连接。

您现在可以再次清除与 VPN 的任何自动连接主要的和:

nmcli c modify id main connection.secondaries ''

并再次添加我的VPN与(它是一个数组,因此+):

nmcli c modify id main +connection.secondaries 0d9e60ef-6b5e-4f65-8312-8db428589866

通过一些粘合代码(从 id 等检索 uuid),现在可以实现自动化。

当然,相应的行会在文件中的某个位置添加或删除/etc/NetworkManager/,但不应依赖于此。

注意:在写这个答案之前我并不知道这个设置,我只是按照我所说的去做。

相关内容