Windows で OpenVPN: トンネルを自動起動し、ルートを保つ
Windows サービスは誰もログインする前にトンネルを立ち上げられ、プッシュされたルートは接続中だけサイトのプレフィックスを保持します。
ここでは二つの要件が絡み合っています。トンネルは誰かがログインする前に立ち上がるべきで、二つ目のサイト宛ての通信はそれに従うべきです。これは別々の仕組みを持つ別々の問題です。サービスの起動が前者を決め、ルートの寿命が後者を決めます。片方を解いても、もう片方は元の場所にそのまま残ります。
第一段階: サービスが探す場所にプロファイルを置く
Windows サービスは固定のディレクトリからプロファイルを読み、GUI も同じ場所から読みます。そのため、インポート時には動くプロファイルでも起動時には見えないことがあります。.ovpn ファイルはインストールの config ディレクトリ(通常は Program Files の下)に置いてください。ユーザーの Downloads フォルダに残したプロファイルは、サービスの対象にまったくなりません。
古い手順は config-auto フォルダを指しています。2.5 時代の一部のビルドはこれを尊重しましたが、後のリリースはそうではありません。そのため、アップグレードで動作していた自動起動が沈黙することがあり、ログには認証情報について何も残りません。ファイルを移す前に、インストールされたビルドが実際にどのディレクトリを読むのか確認してください。
同じマシンに複数のプロファイルがある場合は、dev-node でそれぞれに名前付きアダプターを与えます。そうしないと同じインターフェースを奪い合い、二つ目は認証情報の問題のように見える形で失敗します。
第二段階: トレイアイコンではなくサービスを起動する
OpenVPNサービスを Automatic にすると、ログインなしで起動時に開始します。仕組みはこれであり、トレイアイコンはその一部ではありません。サービスが接続を持つと、GUI はアイコンも状態も表示しないことがあり、これは不具合ではなく想定どおりです。
その結果、切断とはサービスを停止することで、Disconnect をクリックすることではありません。マシンを支える人に伝えてください。さもないと最初のサポート連絡はアイコンが見えない件になります。
サービスアカウントがプロファイルと鍵素材を読めることを確認してください。起動時の権限問題は、ログでは認証失敗とまったく同じに見えます。
第三段階: ルートをトンネルに結びつける
ここでは永続エントリは間違った道具です。-P でルートを追加すると、再起動を生き延び、さらに悪いことにトンネルの切断まで生き延びます。VPN が落ちている間もプレフィックスは存在しないゲートウェイを指し続けるので、誰かがエントリを消すまでホストはその宛先に届きません。
三つの代替案は正しく振る舞います。サーバーからルートをプッシュすれば、接続時に追加され切断時に削除されます。route_vpn_gateway を読む route-up スクリプトで追加すれば、次のホップはネゴシエートされたトンネルから来ます。あるいは、Windows ネイティブの VPN プロファイルと Add-VpnConnectionRoute を使えば、プレフィックスがその接続に結びつきます。
サーバーがこのサイトの必要以上を提示する場合、route-nopull はプッシュされたルートを拒否し、テーブルを完全にローカルに保ちます。これは、利用者に企業のデフォルトルートを受け取らせてはいけない共有プロファイルに適しています。
第四段階: コールドブートを乗り切る
ネットワークスタックが存在する前にサービスを起動すると、失敗が一度だけで再試行されません。Automatic (Delayed Start) に設定するか、ネットワークサービスへの依存を追加すれば、その競合は消えます。その後で起動テストを繰り返し、二度目の試行が不要になったことを確認してください。
ルートとアダプターの変更には管理者権限が必要です。ユーザーごとのスタートアップショートカットにはそれがなく、昇格したシェルで動くスクリプトがログオン時に何もせず終わることがあります。最高権限のタスクとしてスケジュールするか、変更をサービスに任せてください。そのうえで、実際にログインするユーザーとして試してください。
手で起こせる順序ではなく、実際に配備する順序をテストしてください。順序を試す唯一のテストはコールドブートです。
第五段階: GUI なしで確認する
再起動とログインの後、GUI を開かずに三つを確認します。アダプターがアドレスを持ち、ルートテーブルがサイトのプレフィックスをトンネルゲートウェイを次のホップとして示し、遠隔側のアドレスへの ping が応答することです。各確認は上のステップの異なる仕組みに対応します。
アダプターがまったく現れない場合、疑うべきはプロファイルではなくドライバーです。その二つの障害はログでまったく似ておらず、ソフトウェアの再インストールに反応するのは片方だけです。