ヘッドレスOpenVPN: 監視付きセッションか管理サービスか
SSH経由でOpenVPNを起動するのは、リモートネットワークの変更です。監視付きセッションか自分が所有するサービスを選び、認証情報と戻る手段を用意してください。
SSH経由でOpenVPNを起動すると、そのマシンの実行コンテキストの中で、リモートマシン上で動き出します。これは遠隔からのボタン操作ではなく、リモートネットワークの変更です。妥当な方法は監視付きのフォアグラウンドセッションと自分が所有するサービスの二つで、準備も認証情報も障害時の挙動も異なります。
二つのモード、一つのプロファイル
どちらのモードも同じプロファイルを使い、どちらもホストのルーティングを変えます。違うのは、起動時に人が同席しているかどうかと、セッション終了後に何が起きるかです。
| Mode | Useful for | What it needs |
|---|---|---|
| Supervised foreground session | A connection with a human watching and able to type | A usable terminal, a reviewed profile and recovery access |
| Managed service | An unattended lifecycle that starts without a login | Owned configuration, supported credential delivery and restart policy |
フォアグラウンドのモードは、人が同席して見守る接続のためのものです。サービスのモードは、誰もログインしていない状態で立ち上がるべき接続のためのものです。両者を混ぜ、フォアグラウンドのプロセスを走らせたまま同じプロファイルでサービスも有効にすると、ここで最もよくある自作の破綻を招きます。
フォアグラウンドセッションの実体
フォアグラウンドのOpenVPNプロセスは、トンネルが上がっている間は動き続けるものです。Initialization Sequence Completedは初期化が終わったという意味で、プロンプトが戻るのを待つという意味ではありません。デスクトップのGUIはその長い処理をウィンドウの裏に隠すので、SSHコマンドも同じように振る舞うと人は期待します。そうはなりません。
アプリケーションのアクセスは別に確認してください。埋まった端末と一行のログは、成功も失敗も証明しません。
無人サービスに必要なもの
サービスは自分のアカウント、作業ディレクトリ、ファイルシステムの制限とともに起動し、どれもシェルとは違います。たまたま立っていた場所に頼らず、明示的なパスと適切な所有権を使ってください。実際に望む再起動ポリシーをユニットに与えてください、なぜなら後退のない接続ループはログを埋め、相手をいら立たせます。そして、次のログイン後ではなく再起動後に上がることを確かめてください。
対話的なMFAは、設計上、無人の場合を壊します。プロファイルが人が入力するコードを要求するなら、それは無人サービスではなく、保存されたワンタイムコードは認証情報の設計ではありません。起動時に気づくのではなく、意図して決めてください。
認証情報は四つの別の入力
OpenVPNのマニュアルは、コンソール入力、認証情報ファイル、秘密鍵のパスフレーズ、管理インターフェース経由の対話を分けています。ユーザー名とパスワードの組は一つ、暗号化された鍵のパスフレーズは別です。要求に応じて認証情報を渡す管理インターフェースは三つ目です。一度たまたま動いたからと全部を一つのファイルに連結せず、認証の設計に合う仕組みを選んでください。
身元や私的な素材を含むプロファイルとログを守ってください。サービスアカウントがそれらを読み、正しいグループ所属を持つ人も読みます。
所有者は一人、そして戻る道
広いトンネル経路を有効にする前に、SSHの管理経路を確保してください。端点が死ぬフルトンネル構成はマシンを到達不能にし得て、その修理には用意していないコンソールが要ります。承認された帯域外コンソールか、意図した管理用の戻りポリシーが保険になります。
日常運用のための構成の所有者を一人に決めてください。自動サービスとフォアグラウンドのプロセスが同じインターフェース、経路、リゾルバの状態を奪い合うと、プロバイダの問題に見える障害が生まれます。監視付きの実行は通常の割り込みで止め、管理された実行はそのマネージャ経由で止め、openvpnという名前のプロセスを全部殺さないでください。
書き留めるべき区別は単純で、監視付きの実行はあなたのセッションに依存してよく、無人サービスは依存してはいけません。