web-dev-qa-db-ja.com

特定のwifiを使用しているときにnmcliを使用して常にVPNに接続するにはどうすればよいですか?

したがって、nm-appletを使用すると、VPN接続と接続のユーザー名+パスワードを保存し、特定のWi-Fi接続を使用するときに自動的に接続するのは非常に簡単です。そのため、パスワードを要求せずに常に自動的に接続します。

Nmcliなどを使用して端末でこれを実現するにはどうすればよいですか?より多くの接続を展開して編集しやすくするためにスクリプトを作成しようとしています。

これまでのところ、私は

nmcli connection import type openvpn file ned.ovpn

また、保存された接続が次の場所にあることに気付きました。

 /etc/NetworkManager/system-connections/

同じ設定をラップトップからデスクトップにコピーしようとしましたが、何も変わらないようでした。それらの設定を見たり変更したりしていないようです。

1
speedstern00b

これが私の最初のコメントからの詳細な説明です。目標は、CLIツールnmcliを使用して同等のものを学習することです。設定がわかっている限り、すべてのドキュメントを参照して設定を特定する必要はありません。 GUIツールのユーザー:このGUIツールnm-appletの一時的な助けを借りて、利用可能である必要がありますどこか(同じシステムでもない)と同等の設定。これは、ここで検討した設定以外の設定に使用できる一般的な方法にすぎません。

関係する接続は2つあります。それらをmainと呼び、myVPNと呼びます。 )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 connection id main
nmcli connection show connection uuid cfa5be23-925a-4273-b5de-2f9adaac8782

他の多くの行の中で次のようなものをダンプします:

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

[...]

したがって、最初にそのすべてallをファイルにダンプします。一部の出力はローカライズされているため、前にexport LANG=C.UTF-8を実行することをお勧めします(後で特定の設定名または値をインターネットで検索または比較する必要がある場合は、これが役立ちます)。

nmcli c show id main > /tmp/before

機能がわかっているGUIツールnm-appletを使用すると、VPNmyVPNメインに追加されます:

set VPN autoconnect

それをダンプしますもう一度

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-8db428589866に設定されたことを意味します。 nm-settings(5)接続設定でそれについて説明します:

文字列の2次配列[]

基本接続自体がアクティブ化されたときにアクティブ化する必要がある接続UUIDのリスト。現在、VPN接続のみがサポートされています。

これで、main上の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/のどこかのファイルで追加または削除されますが、これに依存しないでください。

注意:この答えを書く前は、この設定について知りませんでした。私が言ったことをしただけです。

3
A.B