正しい OpenVPN 接続を停止する:フォアグラウンド、systemd、NM の違い
トンネルを切断するコマンドは、誰が接続を開始したかによって変わります。シグナルを送る前に、フォアグラウンド、systemd、NetworkManager、OpenVPN 3 の所有者を比較してください。
端末ウィンドウを閉じることはトンネルを閉じることと同じではなく、プロセスを kill することはサービスを停止することと同じではありません。Linux では、実際に切断するコマンドはどのコンポーネントが接続を開始し、そのライフサイクルを所有しているかによって決まります。以下の比較では、もっとも遭遇しやすい四つの構成と、それぞれに必要な識別子を扱います。
フォアグラウンドとデーモン化したクライアント
端末で手動で起動したクライアントはその端末に属します。Ctrl+C が割り込みを送り、クライアントがインターフェースを畳み、トンネルは終了します。ほかに通知する必要はありません。
シェルのラッパー経由で起動してバックグラウンドに残したクライアントは誰のものでもなく、これが killall に手を伸ばす場面です。まずプロセスを見つけ、コマンドラインに目的のプロファイルが書かれていることを確認してから、通常の終了シグナルを送ります。監視下のプロセスを監視者ごと kill しても単に再起動されるだけなので、シグナルの選択よりも所有者の特定が重要です。プロセスグループにシグナルを送るのは、ほかのトンネルが共有していないと確認できたときだけにしてください。
SIGUSR1 は切断ではなく、クライアントにトンネルの再起動を要求するものです。
systemd のインスタンス
unit が接続を所有している場合、停止すべき対象は unit です。openvpn-client@office のようなテンプレートインスタンスはプロファイル名を担っており、インスタンスではなくテンプレートのターゲットを停止すると、ホスト上のすべてのクライアントに影響する可能性があります。
systemctl list-units 'openvpn-client@*'
systemctl stop [email protected]
インスタンスがどのプロファイルを読み込んだか分からないときは、unit の ExecStart を読んでください。
有効化された unit は次回の起動で戻ってきますが、これは今すぐ停止するかどうかとは別の判断です。接続を戻すべきでないと決めた後でのみ無効化し、その判断を次の管理者が見つけられる場所に記録してください。
NetworkManager のプロファイル
NetworkManager が管理するプロファイルは、シグナルを送れるプロセスではありません。管理側がライフサイクルを所有しており、操作すべき対象は表示名ではなく UUID で識別されるアクティブな接続です。アクティブ一覧を先に読むと、想定していない名前で別のトンネルが動いていないかも分かります。
nmcli connection show --active
nmcli connection down uuid actual-uuid
表示名は重複し、プロファイルファイルの名前は識別子ではないので、一覧から UUID をコピーしてください。接続がすぐ戻ってくるなら、ベース接続の secondaries エントリ、dispatcher スクリプト、自動接続フラグのいずれかがそれを有効化しています。管理側の接続を止めるのが正しい第一歩であり、再有効化は次の問いです。再有効化を止めるためにプロファイルを削除しないでください、明日必要になるかもしれない認証情報も消えてしまうからです。
管理側のコマンドリファレンスには、down の対象がどう選ばれるかが書かれています。
OpenVPN 3 のセッション
OpenVPN 3 Linux はトンネルごとのプロセスではなくセッションモデルを使います。サービスが把握しているセッションを調べ、そのうえで一つのセッションパスに対して操作します。パスが識別子であり、設定名とは置き換えられません。
openvpn3 sessions-list
openvpn3 session-manage --path /net/openvpn/v3/sessions/... --disconnect
すべてのセッションを切断するのは別の操作であり、意図して行うべきものです。
同じホストが複数ユーザーのセッションを持つことがあるので、操作の前に一覧を出し、終了しようとしているセッションの所有者を確認してください。
後で確認すること
これらの停止のあと、アクティブな接続一覧にトンネルがなくなっていること、インターフェースが消えていること、内部アドレスへの経路検索がトンネルデバイスを選ばなくなっていることの三つを確認してください。そのうえで次回起動時の扱いを決めてください。
ip -brief address
ip route get 10.8.0.1
手作業でインターフェースを削除しても所有者は止まらず、後片付けが中途半端に残ります。
今切断すること、次回の自動起動を防ぐこと、その後に VPN 以外の通信を許可することは、三つの別々の選択です。それぞれを明示的に行ってください。