Arch-Linux

使用某些wifi時如何使用nmcli始終連接到vpn?

  • November 14, 2021

使用 nm-applet,很容易保存 VPN 連接和連接的使用者名+密碼,然後在使用某個 Wi-Fi 連接時自動連接到它。它將始終自動連接到它而無需輸入密碼。

如何在終端使用nmcli和其他命令實現這一點?我正在嘗試編寫腳本,以便更輕鬆地部署更多連接並對其進行編輯。

到目前為止,我只設法

nmcli connection import type openvpn file ned.ovpn

我還注意到保存的連接可以在

/etc/NetworkManager/system-connections/

我試圖將相同的設置從我的筆記型電腦復製到我的桌面,但似乎沒有任何改變——它似乎沒有看到/更改這些設置。

這是我最初評論的詳細解釋。目標是了解使用 CLI 工具nmcli的等效項,而無需瀏覽所有文件以查明使用者在 GUI 工具上知道的設置:借助此 GUI 工具nm-applet的臨時幫助,它必須在某個地方(甚至不是同一個系統)具有等效設置。這只是一種通用方法,可用於除此處考慮的設置之外的任何其他設置。

涉及到兩個連接:我將它們稱為mainmyVPN,它在使用main時會自動連接。此處更改將在main上完成,這是必須檢查的。

$ 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

使用已知功能的 GUI 工具nm-applet,將 VPN myVPN添加到 main:

設置 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被設置為myVPN的 UUID: 0d9e60ef-6b5e-4f65-8312-8db428589866nm-settings(5)在連接設置中講述它:

字元串的輔助數組

$$ $$ 啟動基本連接本身時應啟動的連接 UUID 列表。目前僅支持 VPN 連接。

您現在可以使用以下命令再次清除與 VPN 的任何自動連接

nmcli c modify id main connection.secondaries ''

並再次添加myVPN(它是一個數組,因此+):

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

使用一些膠水程式碼(從​​ id 等檢索 uuid),現在可以自動化。

當然,相應的行是在某個文件中的某處添加或刪除的/etc/NetworkManager/,但這不應該被依賴。

注意:在寫這個答案之前我不知道這個設置,我只是按照我說的去做。

引用自:https://unix.stackexchange.com/questions/516811