二つのショートカットは、単一の VPN 切り替えキーが処理しなければならない推測を取り除きます:一方は常に接続し、もう一方は常に切断します。二つのショートカットは曖昧さを取り除きます:一方は常に接続を求め、もう一方は常に切断を求めます。どちらも UUID を通じて同じ保存済みプロファイルを指します。

以下の順序で設定を進めます。見えないプロンプトを発見する場所としてはショートカットは不適切なので、ショートカットに割り当てる前に各コマンドをターミナルで試してください。

プロファイル名ではなく UUID を探す

通常のデスクトップセッションで保存済みの接続を一覧し、目的の VPN の UUID をコピーします。名前は人間のためのもので、二つの保存済みプロファイルが同じ名前を共有することもあり、削除して再インポートしたプロファイルは新しい識別子を取得します。

nmcli connection show
nmcli connection show "Office VPN" | grep -i uuid

UUID は表示名ではなくショートカットの定義に保持します。後でプロファイルが置き換えられた場合は、古い識別子のままだと接続アクションは失敗し、切断は古いオブジェクトを対象にし続けるため、両方のショートカットを一度に更新します。だからこそ両方のアクションが同じ値を使います。UUID をプロファイルの身元として扱ってください。

プロファイルが NetworkManager の VPN であり、独自のサービスを持つベンダーのデーモンではないことを確認します。ベンダーのクライアントには独自の対応制御インターフェースが必要で、nmcli は自分が所有しないトンネルを管理しません。名前が曖昧な場合は接続の種類を確認します。別のデーモンが所有するトンネルは同じ一覧には現れません。

まず両方のコマンドをターミナルで試す

接続を対話的に要求し、承認済みのログインを完了して、本当に必要なプライベートリソースに到達します。次に対応するコマンドで切断し、下層の Wi-Fi や Ethernet リンクを巻き込まずに VPN が停止することを確認します。

nmcli --ask connection up uuid 11111111-2222-4333-8444-555555555555
nmcli connection down uuid 11111111-2222-4333-8444-555555555555

二つの別個のアクションとして実行します。これらは接続状態を変えるだけで、プロファイルを削除したり設定を編集したりはしません。初回のターミナル出力を保存して、通常のプロンプトの流れを把握しておきます。その記録がショートカットの挙動を予測可能にします。

唯一のリモート管理経路で切断を試さないでください。VPN がセッションを運んでいる場合、切断に成功するとアクセスも終わり、復旧にはトンネルに依存しない経路が必要です。ローカルコンソールか第二のリンクを用意しておきます。

二つの名前付きショートカットを同じ UUID に割り当てる

デスクトップのキーボード設定で、明確な名前の二つのアクション(たとえば「オフィス VPN に接続」と「オフィス VPN から切断」)を作成します。異なるキーの組み合わせを割り当て、確認済みの UUID を両方のコマンドに貼り付けます。

状態ではなく意図で命名します。「切り替え」というショートカットは次の押下を予測不能にしますが、「接続」と「切断」は何が要求されるかを正確に示します。これによりショートカット一覧は自己説明的になります。押し間違えても予測可能な動作になります。

デスクトップが desktop-entry ランチャーを使う場合は、 ランチャーは自動的に端末を割り当てない。対話的な入力が必要なコマンドは、誰も答えられない場所で待ち続けます。

認証プロンプトを自分に見える場所に置く

ただし --askを指定しないと、nmcli は動作中のシークレットエージェントに不足している認証情報を問い合わせます。これはデスクトップがすでにこの VPN の認証を処理し、エージェントが独自のプロンプトを表示できる場合に正しい経路です。動作すると決めつける前に、ショートカットから直接、単純な接続コマンドを試してください。

VPN がターミナルでの対話を必要とする場合は、ショートカットがデスクトップのターミナルアプリケーションを開き、そこで対話的なコマンドを実行するよう設定します。起動引数はターミナルアプリケーションごとに異なるため、インストールされているものの文書化された形式を使います。

デスクトップエントリでは、 Terminal=true はターミナルウィンドウを要求し、 Terminal=false は要求しません。どちらの設定も、コマンドラインにパスワードを書いたり、パスワードなしの sudo を許可したり、組織の認証ポリシーを回避したりする理由にはなりません。

キーを押した後に準備状態を確認する

キーを押したということは、有効化を要求したということです。認証が完了したこと、ルートが設定されたこと、プライベート DNS が応答していることを証明するものではありません。接続状態を確認し、その後に実際のプライベートリソースを確認します。

翻訳された文章を照合するのではなく、所有するクライアントを通じて状態を読み取ります。人間が読むテキストは言語によって変わり、一つのマシンに複数の VPN があることもあるため、文字列の照合では誤ったプロファイルを報告したり、過渡状態を見逃したりします。

別の自動化が VPN を再接続する場合は、切断ショートカットと整合させます。互いに打ち消し合う二つの所有者は、キー押下を無視しているように見える接続を生みますが、本当の問題は競合するポリシーです。

UUID、両方のコマンド、準備状態の確認をメモに残します。次にプロファイルを置き換えたりデスクトップを更新したりするとき、識別子と想定されるプロンプトの経路がすでに書かれていれば、診断はずっと楽になります。

関連記事