ほとんどの人は、.ovpnファイルがVPNを設定すると思っています。そうではありません。設定するのは一つのクライアントであり、要求するものはすべて相手側にすでに存在している必要があります。ファイルの行を変えれば、自分のマシンが試すことは変えられますが、サーバーが提供するものは決して変わりません。この区別が、インポートや接続に失敗するプロファイルに関する混乱のほとんどを説明します。

このファイルを、クライアント宛ての要求リストとして読めば、ほとんどの行は明白になります。

ファイルが説明するのはクライアントであり、サーバーではない

プロファイルは、remoteのエンドポイント、トランスポート、インターフェース種別、識別情報、そして運用者が望むあらゆるクライアント側の挙動をまとめたものです。各行は起動時にクライアントが実行します。そのどれもが設定変更としてサーバーに届くことはなく、すでに動いていないリスナーを作ることもできません。UDP 1194だけで待ち受けるサーバーに対してTCP 443を指定するプロファイルは最初のパケットで失敗します。

同じファイルが二つのクライアントで違う振る舞いをするのも同じ理由です。ファイルは要求し、クライアントは要求のどこまで応えられるかを決めます。

トランスポートの行は、すでに存在するリスナーと一致していなければならない

protoとremoteの行は、サーバーが実際にバインドしている内容と一致する必要があります。UDPが通常の選択なのは、失われたデータグラムがトンネルを止めないからです。一方TCPは、トンネル内でのヘッドオブラインブロッキングという代償を払って、制限の厳しいネットワークを生き延びられます。プロファイルをUDPからTCPに変えても、サーバーがTCPを受け入れるようにはなりません。誰も読まないポートにクライアントが送るようになるだけです。

ポート443が人気なのは、ほかにほとんど何も許さないネットワークを通り抜けられるからであり、HTTPS要求ではなくOpenVPNのセッションのままです。運用者が複数のremote行を公開している場合、クライアントは順番に試します。これはロードバランシングの判断ではなくフェイルオーバーのリストです。あるエントリのホストと別のエントリのポートを混ぜず、運用者が配布した組み合わせを保ってください。

埋め込まれた鍵はファイルの扱い方を変える

証明書と鍵は<ca>、<cert>、<key>タグの間にインラインで置くことも、別ファイルとして参照することもできます。インラインの素材はプロファイルを自己完結させ、同時に秘密にもします。クライアントの秘密鍵がその中を移動するからです。CA証明書は公開の信頼素材であり共有しても安全ですが、秘密鍵はそうではありません。読めないテキストの塊に見えても同じです。

鍵を保護するパスフレーズはアカウントのパスワードとは別の秘密であり、両者を混同すると、誤った資格情報のように見える認証失敗を生みます。

ルートとDNSはファイルからまったく来ないこともある

ルーティングはサーバーが押し付けることも、プロファイルがredirect-gatewayで設定することも、クライアント自身の既定値に任せることもできます。そのため、ダウンロードしたファイルは、トンネルが上がった後に通信がどこへ行くかを完全には決めません。内部名は解決できて公開サイトは解決できないとき、分割トンネルのポリシーは設計どおりに働いており、失敗しているのではありません。

DNSも同じパターンです。押し付けられたdhcp-option DNSはクライアントが適用することも、無視することも、ローカルのリゾルバ管理ツールが上書きすることもあります。プロファイルを読み直すのではなく、接続後にリゾルバの状態を確認してください。

サポートされないオプションはクライアントのバージョンの問題

インポート時の警告は通常、クライアントがそのディレクティブを実装していないという意味で、ファイルが壊れているわけではありません。デスクトップのクライアントは文書化された制御の下でスクリプトやプラグインを実行できますが、モバイルのクライアントはより狭い範囲しか受け付けず、理解できない行を黙って捨てることがあります。古いクライアントが拒否する暗号やTLSの設定はバージョンの問題であり、運用者と解決する必要があります。見慣れない権限を有効にしてインポートを強行するのは、警告をより広い攻撃面と引き換えることになります。

比較のために元のファイルを保管し、要求の中にサポートされないディレクティブを正確に書き、実際に使っているクライアント向けに作られたプロファイルを依頼してください。

置き換えた後は、アプリがどのプロファイルエントリを使っているかを確認してください。新しいファイルをインポートしても、古いものが常に上書きされるとは限りません。

関連記事