パブリックなサイトとVPNで同じホストを共有すると、何がどこで待ち受けるのか、そして誰が誰を認証するのかという、ひとつではなくふたつの問いを引き継ぐことになります。既定値は負荷がかかって初めて現れる形で間違っているため、構成ファイルに触れる前に両方へ答えてください。HTTPSで読み込めるページは、ウェブ側のリスナーが応答していることを示すだけで、ピア側のリスナーについては何も示しません。以下に示すのは、両者が互いを食い合わないようにするための決定順序です。

どのアドレスとトランスポートで何が待ち受けるかを決める

アドレス、トランスポート、ポートの三列に、管理用インターフェースを含むサービスごとの行を加えた表を書きます。サイトのTCP 443とVPNのUDP 443は、番号が同じでもトランスポートが違うため衝突ではありません。同じアドレス、トランスポート、ポートでふたつのサービスを動かすには、実装が文書化している取り決めが必要で、障害の最中に発明するものではありません。その表は、次の変更をレビュー可能にする成果物でもあります。

アドレスを分けるか、ふたつ目のポートを使うパケットキャプチャで所有関係が見えるようになり、これは優雅さより価値があります。一部のVPN実装はウェブサーバーとのポート共有をサポートしますが、仕組みは限定的で、デーモンが先頭のバイトを検査し、自分のプロトコルではない通信を転送します。汎用のHTTPリバースプロキシはそれを行わず、ヘッダーを書き換えても暗号化されたトンネルのハンドシェイクを理解させることはできません。プロトコルの配備に関する注意書き、たとえばOpenVPNリスナーのドキュメントを読み、それが示す取り決めに従ってください。

どのアイデンティティがどのサービスに属するかを決める

ブラウザーの証明書とVPNピアの資格情報は、異なる信頼モデルを持つ別のオブジェクトです。ウェブの証明書は公的機関によって検証されホスト名を示しますが、ピアの資格情報はデバイスや利用者をコンセントレーターに対して認証し、自己署名でも内部発行でもかまいません。片方をもう片方として再利用することは狭い場合にしか通用せず、その結合に見合うことはほとんどありません。共用証明書を合わせるために検証を無効にすることは分離の計画ではなく、資格情報に意味を与えていた検査を取り除くだけです。

ふたつの保管庫を独立させたまま、どちらの機関がどちらを発行するのかを書き留めます。片方を更新するとき、もう片方は変わらずに済むはずで、済まないなら結合こそ直すべき対象です。

管理をどこに置くかを決める

VPNの管理インターフェースは管理用の経路に置くもので、ホストがすでにインターネットを提供していても、公開リスナーに置くことは決してありません。443のウェブサーバーは、ピアのコンソールがあらゆる場所から到達できるべきだという意味ではなく、コンソールは通常より価値の高い標的です。ループバックか管理用アドレスに束縛し、送信元で制限し、トンネルが上がっていることに依存しない復旧経路を確保します。復旧経路が重要なのは、よくある失敗が、ロックを直している最中に自分を締め出すことだからです。

リスナーごとに狭いファイアウォール規則を書き、プラットフォームが対応する場合はインターフェースやサービスアカウントを明示します。サイトに443が必要だからとホストを開ける広い規則は、管理インターフェースがスキャナーの索引に載る経路です。

サービスを追加するたびに、その規則をリスナーの表と突き合わせて見直します。見直しは安く、深夜に誰かが足した規則を捕まえます。

両者が競合したときにどうするかを決める

ホストを共有するということは、CPU、メモリ、ファイル記述子、帯域を共有するということで、競合する資源がいつも明白とは限りません。混雑したサイトは接続テーブルを埋め、ワーカーの枠を使い切り、ディスクの待ち行列を押し込んでVPNの記録を止めてしまうことがあります。平均はどのプロセスが飢えているかを隠すため、ホスト全体の合計ではなくサービスごとの使用量を見ます。ひとつの処理がもう一方を繰り返し妨げるなら、症状の周りで調整するのではなく、両者を分離します。

分離はコンテナ、cgroupの制限、別の待ち行列、あるいは二台目のホストで実現でき、正しい選択はどの資源が競合しているかで決まります。ポートの変更はここでは何も直さず、制限が飽和した待ち行列ひとつなら大きなインスタンスでも何も直りません。資源を名指しし、負荷をかけ、競合を取り除く最小の分離を選ぶ、という測定で決めます。

外側から検証し、再起動のあとでまた検証する

ホスト自身のネットワークにない端末から、サイトを開き、トンネルを上げ、それを必要とする資源にひとつ到達します。そのあと各サービスを個別に再起動してもう一方の試験を繰り返しますが、再起動は共用リスナーの取り決めが順序を失う瞬間だからです。VPNが共用ポートを持つウェブサーバーより先に起動すると、共有の仕組みが結び付かないことがあり、症状は昨日まで動いていたトンネルです。依存関係をユニットの順序で明示します。

そのうえで、サイトは自分のポートで、VPNは自分のポートで、管理インターフェースは管理経路からだけ応答するという境界を確認します。結果を日付とともにリスナーの表のそばに記録します。再起動のあとに三つの検査をすべて通るホストは、引き継ぎの説明なしに他人へ渡せるホストです。

関連記事