紙の上では、二つのエンドポイントは冗長に見えます。実際に二つ目のアドレスが役立つのは、クライアントがそこへ到達でき、想定している障害を避けられる場合だけです。同じアクセス回線、同じアカウント、同じ対象ネットワークの背後にある二台のサーバーは、一緒に停止します。有用な問いは、二つ目のエンドポイントが取り除く単一の障害は何か、という点です。

両方のエンドポイントが共有しているものを比較する

二つのエンドポイントが何を重複させているかを数える前に、何を共有しているかを列挙します。ホスティングの場所、プロバイダーのアカウント、上流のトランジット、DNS のホスティング、ID の供給元、トンネルの先にあるプライベートリソースは、それぞれ共有された依存関係か独立した依存関係です。同じリージョンの二台の仮想マシンは、プロバイダーの障害を共有します。一つのアカウント下の二つのリージョンも、請求関係とそれらを作るコントロールプレーンを依然として共有しています。

対象ネットワークにも同じ扱いが必要です。健全なバックアップゲートウェイでも、オフラインの NAS を復旧することはできず、上流リンクが落ちているオフィスネットワークには到達できません。両方のエンドポイントが同じプライベートサブネットに終端するなら、二つ目はすでに単一障害点である宛先への経路を増やすだけです。

忘れられがちな依存関係が ID です。証明書と設定を二台目のホストに複製すると、同じ資格情報をコピーできる場所が二か所になり、失効が両方にどう届くかについては何も示しません。

クライアントの切り替え方法を決める

二つ目のエンドポイントが役立つのは、クライアントがそれを知っていて、サポートに電話せずに選べる場合だけです。OpenVPN の接続プロファイルは選択ポリシー付きの複数の remote 行を持てますし、ほとんどのクライアントはメニューに代替プロファイルを用意しています。仕組みが何であれ、見つけられないプロファイルはフェイルオーバーではないため、利用者がどれを持っているかを書き留めてください。

セッション中のアドレス変更について、クライアントのドキュメントを読んでください。実装によっては、トンネルの寿命の間ずっと元のピアを保持し、代替は再接続時にだけ参照します。この違いが、死んだエンドポイントが短い中断で済むのか、決して回復しないセッションになるのかを決めます。起こるはずだと仮定せず、再接続の経路を試してください。

出口アドレスが変わると、アプリケーションの状態も壊れます。フェイルオーバーは復旧であり、途切れない継続性として説明すると、トランスポートが満たせない期待を作ってしまいます。

実際の障害を一つ試す

設計書を信じるのではなく、制御された停止を一つ選んで最初から最後まで実行します。プライマリのエンドポイントを止め、認可されたクライアントが代替経由で目的のアプリケーションに到達し、認可されていないクライアントは依然として到達できないことを確認します。切り替えにかかった時間と、アプリケーションが何を見たかを記録します。

dig +short vpn2.example.net
ip route get 10.20.30.41
journalctl -u openvpn@backup --since '-10 min'

最初のコマンドは、バックアップ名が経路のある何かに解決されることを必要になる前に確認するもので、ここでは最も安価なテストです。二つ目は、代替が上がったときにカーネルがプライベート宛先にどのインターフェースを使うかを示します。三つ目は、実際に接続したピアの名前を含むクライアントログを与え、切り替えが起きた唯一の証拠になります。切り替え中にトラフィックが漏れるポリシーは短い停止より悪いので、切替中のブロック挙動も見てください。

そのあと元のエンドポイントを戻し、クライアントが戻るかどうかを確認します。偶然に起きるフェイルバックは、誰も計画していない挙動です。

二つ目のアドレスが何をもたらすかを書き留める

カバレッジは、二つ目のエンドポイントが取り除く障害、一つ目と共有する障害、切り替えが前提とする仮定の三点を一つの段落にまとめてください。クライアント側の仕組みに加えて、両方の拠点に必要なプライベートルートと DNS の挙動を明記してください。公衆インターネットの出口はプライベートゲートウェイの代わりにはならず、両者を交換可能として扱う文書は信じられてしまいます。実行した復旧テストを、日付と結果とともに追加します。

一台のサーバーからの独立は、共有アカウントや対象ネットワークからの独立ではありません。これを声に出して書いた段落が、二つ目のアドレスを社内で高可用性として売り込まれるのを止めます。また、ペアが同時に落ちたときに次の運用者が最初に何を確認すべきかも示します。

関連記事