二台の端末と一つのOpenVPN証明書:再接続ループ
半分ごとに再起動するトンネルは、たいてい同じクライアント証明書を持つ二台の端末が原因です。ログ、分割、そして古い身元の廃止手順を確認します。
半分ごとに立ち上がっては再起動するトンネルは、たいてい暗号や MTU の問題ではありません。一つの身元が二度使われているのです。サーバーは見慣れたコモンネームを見て、新しいセッションを最新のものとして受け入れ、古い端末は自分が置き換えられたことに気づきます。クライアント側からは無通信タイムアウトと再起動に見えるため、調査はあまりにも頻繁に間違った場所から始まります。
再起動の間隔から始める
間隔は何よりもまず手がかりです。ping-restart の窓と一致する一定の周期は、経路の故障がこれほど規則正しいことはまれなので、経路の故障ではなくセッションの置き換えを示します。再起動の間隔の正確な値と、クライアントログの理由の行を控えます。タイムアウトの後の再起動は、失敗したハンドシェイクとは別の物語を語ります。
再起動が始まった時点を二台目の端末との関係で確認します。新しいノートパソコン、電話、予備のマシンにコピーしたプロファイルがよくある引き金で、時刻はたいてい誰かがそれを設定した日と一致します。
間隔と理由を書き留めます。どちらも証拠であり、どちらも安く集められます。
サーバーが二度目のログインについて何と言ったかを読む
自分で管理するサーバーでは、ログがコモンネームを示し、二つ目の接続が届くのを表示します。duplicate-cn がなければ、その到着は同じ名前の既存セッションを置き換え、メッセージはたいていそれを率直に告げます。duplicate-cn があれば二つのセッションが併存し、症状は変わります:クライアントは接続を保ちますが、クライアントごとの設定一式と一つの失効判断を共有します。置き換えは並びでしか見えないので、二つの記録を一緒に読みます。
ホスティングサービスでは、サーバーログがまったくないこともあります。その場合の手がかりは時刻です:別のマシンが接続するたびに落ちる安定したトンネルで、クライアントログにはタイムアウト以外に何もありません。
遠隔のホスト名だけでなく、両方のプロファイルの証明書と鍵のブロックを比べます。コピーしたプロファイルはたいていファイル名だけが違います。
サーバー側で身元を分割する
このサーバーに署名する CA を通じて、端末ごとに一つの証明書を発行します。Easy-RSA では端末ごとに別のクライアント名が必要で、プロファイルはその証明書と鍵から作られます。コモンネームが端末の身元になり、それこそがサーバーに欠けていたものでした。人ではなく端末の名前を付ければ、交換のときに新しい名前が生まれます。
共有の制御チャネル鍵は別のものです。tls-crypt や tls-auth はすべてのクライアントの制御チャネルを守るもので、共有される前提です。これはクライアントの身元ではありませんし、交換しても重複した証明書は直りません。
証明書、鍵、クライアントごとの設定ファイルを同じコモンネームの下に保たないと、次の接続で対応が崩れます。そこが食い違うと、認証は通るのに何も受け取れないクライアントになります。
分割の後もアドレスと設定をそろえておく
固定アドレスは二つ目の衝突経路を生みます。サーバーが ifconfig-pool-persist やクライアントごとのファイルで割り当てているなら、その記録はまだ古い名前を指しています。証明書を分けた後でも二台の端末が同じトンネルアドレスになることがあり、その故障は元のループとは違って見えます。
証明書と同じときに割り当てを更新し、そのうえで両方の端末を再接続して割り当てられたアドレスを比べます。重複したアドレスは、きれいな再接続ではなく断続的な損失として現れます。
端末ごとに変えるべき設定は、共有のテンプレートではなくその端末自身のファイルで配ります。共有のテンプレートは次の重複を見つけにくくもします。
古い身元をきちんと廃止する
ハードウェアを廃棄したり紛失したりしたら、古いマシンからプロファイルを消すのではなく証明書を失効させます。失効は新しい CRL を生み、サーバーは crl-verify が指す場所にそのファイルを必要とします。その指示がある状態で CRL が欠けていたり読めなかったりすると、サーバーはすべてのクライアントを拒否するので、更新のたびに既知のアカウントを一つ試します。
各証明書を人や端末に結びつける台帳を、発行日と失効日とともに保ちます。その台帳はファイル名を読まずに誰がまだアクセスできるかに答え、次にコピーされたプロファイルがループを再開するのを防ぎます。