DD-WRT の OpenVPN 2.5 リスナーが死んだ?生成された設定を読もう
OpenVPN 2.5 は古いビルドが受け付けていた設定を拒否します。DD-WRT では、ファイアウォールに触る前に生成ファイルとデーモンのログを読みましょう。
DD-WRT でリスナーが死んでいる場合、多くはデーモンが設定の解析中に終了したのであって、ファイアウォール規則がポートを塞いだわけではありません。OpenVPN 2.5 は古い設定が前提にしていた既定値のいくつかを厳格にし、古いビルドで動いていた生成設定でも、ソケットが開く前に拒否されることがあります。理由はルーター自身のログに、入力は生成ファイルにあります。この順で両方を読むのが、どんなパケットキャプチャより速い方法です。
デーモンはファイアウォールではない
この区別が重要なのは、外から見ると二つの障害が同じに見えるからです。クライアントがハンドシェイクを送り、何も返ってきません。片方は動いていないプロセス、もう片方は動いていて絞り込んでいるプロセスです。
何かを変える前に二つの確認で切り分けてください。死んだデーモンにファイアウォールを編集しても、変数が一つ増えるだけです。
DD-WRT が生成した設定を読む
DD-WRT は、Web 画面に入力したテキストをそのまま OpenVPN に渡しません。生成した設定を /tmp/openvpn/openvpn.conf に書き、そのファイルでデーモンを起動します。つまり画面の項目と Additional Config のテキストは、OpenVPN が見る前に統合されています。生成ファイルではなくフォームをデバッグしているなら、読んでいるのは意図であって実際の入力ではありません。再起動で /tmp が消える前に、そのファイルを永続的な場所へコピーしてください。
生成ファイルを、意図した内容と比べてください。とくに画面が、あなたが選んだことのないディレクティブを書き出している箇所です。廃止されたオプションを出すドロップダウンは、フォームでは見えず、デーモンには致命的です。
生成ファイルが空か存在しなければ、デーモンは起動まで到達しておらず、問題は OpenVPN より上流にあります。
OpenVPN 2.5 が受け付けなくなったもの
OpenVPN 2.5 は ncp-ciphers を data-ciphers に置き換え、TLS の既定の最低バージョンを 1.2 に引き上げました。圧縮の扱いも変わり、圧縮を提示するピアは、設定が明示的に許可しない限り拒否されます。また ns-cert-type のような古いオプション名を、remote-cert-tls に代えて非推奨にしました。これらの変更はそれぞれ、以前は動いていた設定を解析またはネゴシエーションの失敗に変えます。
失敗の仕方はディレクティブによって異なります。未知の、あるいは削除されたオプションは起動時にデーモンを止めます。これが死んだリスナーです。ネゴシエーションの不一致はデーモンを動かしたままクライアントを拒否し、クライアント側からはファイアウォールの問題に見えます。
ログは最後のエラーではなく最初のエラーを読んでください。解析は最初の不正なディレクティブで止まり、その後の出力は終了時のノイズです。
Broadcom 固有の前提条件
Broadcom ビルドでは、デーモンが使う前にトンネルデバイスが存在している必要があります。tun モジュールが読み込まれ、/dev/net/tun が存在することを確認してください。デバイスがなければ、証明書とは無関係な起動失敗が起きます。DD-WRT がルートと DNS 用に生成する補助スクリプトも同じです。欠けているか実行可能でなければ、デーモンは起動しても設定を完了できません。
本当のメッセージが必要なときは、生成設定に対して詳細度を上げてデーモンを前面で実行してください。前面実行なら、init スクリプトが飲み込んだ解析エラーが表示されます。
その後は通常のサービスに戻してください。前面のデーモンと init スクリプトはポートを奪い合います。
クライアントをデバッグする前に、リスナーが存在することを証明する
プロセスとソケットを別々に確認してください。一つは動作中のデーモン用、もう一つは想定アドレスに束縛された UDP ポート用です。ソケットのないプロセスは、まだ設定中か、誤ったインターフェースに束縛されていることを意味します。この二つ組が有用なのは、片方が成り立たなければもう片方も成り立たないからです。
クライアント側のデバッグは、リスナーが存在してから初めて意味を持ちます。そのうえで、クライアントの暗号と TLS 設定がサーバーの data-ciphers 一覧と最低バージョンに合っているか、ポートが実際にルーターへ転送されているかを確認します。
生成設定と、修正を証明したログ行を残してください。次のファームウェア更新で既定値がまた変わり得ます。その記録が、再発を五分の確認に変えます。