静的鍵モードはちょうど二つのピアを接続しますが、これは設計上の性質であり、誰かが解除し忘れた制限ではありません。client-to-client はサーバーモードの転送オプションなので、--secret の設定に加えても接続できるクライアントの数は変わりません。判断すべきはどのフラグを足すかではなく、配備にポイントツーポイントのリンクが必要か、マルチクライアントのサービスが必要かという点です。複数のデバイスが独立して接続する必要があるなら、保護モードが変わり、各デバイスに識別情報が与えられます。

二つのピア、一つの鍵、そしてクライアントごとの状態はなしという形が、このモードのすべてです。

静的鍵モードの用途

秘密鍵モードでは両方のピアが一つの鍵ファイルを共有し、その鍵が通信を直接保護します。ハンドシェイクも証明書交換もクライアントごとのセッションもなく、サーバーとしてのクライアントは存在せず二つの端点だけです。

このモードは、鍵の更新手順が文書化された固定のマシン対には今も有用であり、OpenVPN 2.6 が非推奨としているのは、TLS モードがそうした用途をより良い性質で覆うからにほかなりません。できないのは、接続してくるデバイスを別のデバイスと区別することで、ファイルの所持が認証のすべてだからです。三つ目のデバイスを加えることは同じ鍵を共有することであり、その後は最初の二つがそれを自分たちと区別できなくなります。

だからこそ二つのピアという限界は構造的なもので、設定を変えれば済む話ではありません。

client-to-client が欠けた部品でない理由

client-to-client は、接続済みのクライアント同士がサーバーを経由して通信を交換できるかを制御します。クライアントを参加させたり、識別情報を割り当てたり、設定されていないサーバーモードを作ったりはしませんし、静的鍵の設定には管理対象のクライアント一覧がありません。

もう一つのよくある混同は tls-crypt や tls-auth の素材についてです。TLS サーバーはそうした鍵の一つを全クライアントで共有できますが、それは各クライアントが誰かを証明するのではなく制御チャネルを保護するからです。TLS モードの共有制御チャネル鍵は共有の静的データ鍵とは別のオブジェクトであり、どちらも似た見た目のファイルとして届くだけです。

モードの選択は二つの問いに帰着します。複数のデバイスが独立して接続する必要があるか、配備にデバイスごとの失効が必要か。どちらも不要なら静的鍵モードは成り立ち、どちらかが必要なら TLS を選びます。固有の識別情報なしで二台目のクライアントを受け入れる第三の選択肢はありません。

マルチクライアントサーバーの構築

マルチクライアントのサーバーには TLS モード、サーバー側の証明書、クライアントごとの識別情報が必要です。サーバーの補助ツールはアドレスプールとマルチクライアントモードを用意しますが、TLS 設定や信頼の基点、受け入れを意味あるものにするクライアント証明書は提供しません。

一台のクライアントの資格情報をコピーするのではなく、既存の認証局を通じて各デバイスを登録してください。別々の識別情報があってこそ、失効、クライアントごとの経路制御、有用なログが可能になり、共有のクライアント証明書一つでその三つはすべて崩れます。

配備が外部ディレクトリや第二要素で利用者を認証しているなら、その設計はそのままにします。TLS サーバーモードへの移行は、ピアがトンネル層でどう身元を示すかを決めるものであり、アカウントの基盤を決めるものではありません。二つの決定を分けておけば、一方の変更が他方を黙って変えることはありません。

次に転送ポリシーを意図的に決めます。client-to-client はユーザー空間のサーバー経路でクライアント間通信を有効にし、多くの配備が望み、一部の配備では許されません。これはポリシーのスイッチであり識別の仕組みではないので、チュートリアルに載っていたからではなく、設計が求めるから有効にすべきです。

クライアントが本当に独立しているかの確認

二つのクライアントを接続し、それぞれが異なるアドレスを受け取り、サーバーのログに異なる識別情報で現れることを確認します。次に一方を失効させ、もう一方が動作し続けることを確認しますが、これが識別情報が共有されていなかったことの実用的な試験です。

許可されたピア間サービスと、遮断されたままであるべきサービスを試します。ログインの成功二件は受け入れを示すだけで分離は示しませんが、配備が利用者のグループを分けるべき場合、この違いは重要です。

最後に、サーバーモードは記憶ではなく稼働中の設定から読み取ります。追加オプション付きの静的鍵設定も依然としてポイントツーポイントのリンクであり、複数のクライアントが本当に別々のピアになるのは正しい TLS サーバーだけです。

ログがどのデバイスにも同じコモンネームを示すなら、問題はモードではありません。登録の手順が問題です。

関連記事