手当たり次第に書くんだ

飽きっぽいのは本能

VyOS OpenVPN の WARNING – 証明書・TLS・replay ログの切り分け

VyOS で OpenVPN を運用していると、トンネルは接続しているのに WARNING が残ることがあります。ただし、証明書検証の不足、TLS 交渉の失敗、期限切れの CRL、UDP パケットの順序入れ替わり、AEAD の復号失敗、MTU による通信停止は、同じ原因ではありません。

この記事では VyOS 1.5 を前提に、OpenVPN の状態と対象インターフェイスのログを確認し、表示されたメッセージを証明書、TLS、replay、データチャネル、経路品質へ分けて判断します。

最初に状態と対象ログを確認する

OpenVPN 全体のログだけで判断せず、動作モードと対象インターフェイスを特定します。VyOS 1.5 では、client、server、site-to-site の状態確認コマンドが分かれています。

show openvpn client
show openvpn server
show openvpn site-to-site
show log openvpn interface vtun0
show configuration commands | match 'interfaces openvpn vtun0'

表示されない動作モードのコマンドは、構成しているモードに合わせて省略します。発生時刻、接続元、インターフェイス名、再接続の前後、同じメッセージの増加頻度を記録します。

ログの系統主に示すこと最初の確認先
VERIFY ERROR / certificate証明書チェーン、期限、用途、名前、失効CA、leaf 証明書、CRL、接続先検証
TLS Error / TLS key negotiation制御チャネルの到達性または TLS 条件UDP / TCP ポート、Firewall、鍵、TLS 設定
AUTH_FAILEDユーザー認証または外部認証の拒否認証情報、認証サーバー、許可ポリシー
PID_ERR replay-windowUDP パケットの重複または許容範囲を超える順序入れ替わり発生頻度、経路変更、遅延、パケット複製
AEAD Decrypt errorデータチャネルの認証または復号に失敗鍵・暗号条件、古いセッション、破損、replay 表示
通信だけ停止トンネル確立後の経路、Firewall、MTU / MSSroute、往復経路、PMTUD、パケットサイズ

証明書検証の WARNING を確認する

No server certificate verification method has been enabled は、クライアントが接続先をサーバー証明書として確認する方法を有効にしていない時に表示されます。CA による署名確認だけでは、同じ CA が発行した別のクライアント証明書をサーバーとして誤認する余地が残ります。

OpenVPN 2.6 では、remote-cert-tlsverify-x509-namepeer-fingerprinttls-verify などが接続先検証の方法です。どれを使うかは client / server と site-to-site の構成で分けます。

検証項目確認する内容失敗時の判断
CA chain信頼する CA と中間 CA正しい CA を参照しているか確認する
有効期間CA、サーバー、クライアント証明書の開始・終了日時更新後の証明書を両端へ反映する
用途Server Authentication / Client Authentication証明書の EKU と役割を一致させる
接続先識別名前または SHA-256 fingerprint期待する peer だけを許可する
CRL失効状態と CRL の期限最新 CRL を PKI へ反映する
show pki ca
show pki certificate
show pki crl
show log openvpn interface vtun0 | match 'VERIFY'
show log openvpn interface vtun0 | match 'certificate'

VyOS の native TLS 設定を優先する

VyOS 1.5 では、OpenVPN インターフェイスから PKI の CA と証明書を参照できます。site-to-site では、対向証明書の SHA-256 fingerprint を native 設定で固定できます。

configure
set interfaces openvpn vtun0 tls ca-certificate 'openvpn-ca'
set interfaces openvpn vtun0 tls certificate 'openvpn-local'
set interfaces openvpn vtun0 tls peer-fingerprint 'SHA256_FINGERPRINT_OF_REMOTE_CERTIFICATE'
set interfaces openvpn vtun0 tls tls-version-min '1.2'
commit-confirm 5

fingerprint は、対向側で show pki certificate <name> fingerprint sha256 を実行して確認します。接続とログに問題がなければ、confirmsave を実行します。

confirm
save

必要な OpenVPN オプションが VyOS CLI にない場合は openvpn-option を使えますが、公式ドキュメントでは最後の手段として扱われています。誤ったオプションや構文は OpenVPN の起動を妨げるため、native 設定で表現できないことを確認してから使用します。

CRL は証明書と別に期限を確認する

証明書が有効でも、OpenVPN が参照する CRL が期限切れなら検証に失敗します。VyOS 1.5 では CRL を PKI の CA へ保存でき、show pki crl で導入状態を確認できます。

  • CA、サーバー証明書、クライアント証明書、CRL を別々に確認する
  • 更新した CRL が設定へ反映され、OpenVPN が参照する CA と一致しているか確認する
  • 複数拠点では全拠点の CRL 配布状況を確認する
  • 失効させた証明書で実際に接続が拒否されることを試験する

replay-window の警告を切り分ける

OpenVPN の replay protection は、UDP データチャネルの packet ID を sliding window で追跡します。OpenVPN 2.6 の既定値は 64 パケット、15 秒で、重複パケットや許容範囲を超えて遅れて届いたパケットを拒否します。

一度の経路切り替えで少数発生した場合と、通常時にも継続して増える場合を分けます。継続する場合は、複数経路による大きな順序入れ替わり、パケット複製、遅延の急増、古いセッションからのパケットを確認します。

show log openvpn interface vtun0 | match 'replay'
show log openvpn interface vtun0 | match 'PID_ERR'
show ip route
show interfaces openvpn

警告を消すために no-replay を設定すると、replay protection 自体を無効化します。最初の対応にはせず、経路品質とログ頻度を確認します。大きな bandwidth-delay product を持つ回線では replay-window の調整余地がありますが、実測と OpenVPN の仕様を根拠に判断します。

AEAD Decrypt error を replay と同一視しない

AEAD は暗号化と認証を同時に行うため、AEAD Decrypt error は受信したデータチャネルパケットの認証または復号に失敗したことを示します。ログに bad packet ID や replay の説明が続く場合は replay-window と合わせて確認しますが、MTU 不足だけを直接の原因と決め付けません。

  • 両端で cipher または data-ciphers の条件が一致しているか
  • 再起動や再接続の直後に古いセッションのパケットが届いていないか
  • 同じ送信元から継続的に不正なパケットが届いていないか
  • DCO を有効にした直後なら、対応 cipher と機能制約を満たしているか
  • 少数の一時ログか、通信不能を伴って増加し続けるログか
show configuration commands | match 'encryption'
show configuration commands | match 'offload dco'
show log openvpn interface vtun0 | match 'AEAD'
show log openvpn interface vtun0 | match 'cipher'

MTU / MSS はトンネル確立後の通信障害として確認する

MTU / MSS の問題では、OpenVPN の TLS 接続は成立していても、大きな TCP 通信だけ停止することがあります。この症状は replay や AEAD の警告とは分け、Path MTU Discovery、往復経路、Firewall の ICMP 処理を確認します。

show interfaces openvpn
show configuration commands | match 'adjust-mss'
ping 8.8.8.8 count 4
ping 8.8.8.8 count 4 size 1414 do-not-fragment

VyOS 1.5 では OpenVPN インターフェイスに ip adjust-mss clamp-mss-to-pmtu を設定できます。固定値を先に決めるのではなく、実際のトンネル MTU と通過できるパケットサイズを確認します。

ログからの判断順序

順番確認すること次へ進む条件
1動作モード、vtun、接続状態対象インターフェイスを特定する
2最初に出た ERROR / WARNING後続ログではなく起点を確認する
3証明書、CA、CRL、peer 検証TLS 認証の前提を確定する
4ポート、Firewall、到達性、TLS 条件制御チャネルが成立することを確認する
5replay、AEAD、cipher、再接続データチャネルの問題を分ける
6route、Firewall、MTU / MSS確立後の実通信を確認する

まとめ

VyOS OpenVPN の WARNING は、証明書検証、TLS 交渉、CRL、replay protection、AEAD、MTU / MSS のどこで発生したかを分けて読みます。トンネルが up でも、接続先サーバーの検証が不足している警告は放置しません。

replay 系ログは UDP パケットの重複と順序入れ替わり、AEAD はデータチャネルの認証・復号、MTU / MSS は主に確立後の大きな通信として確認します。最初のログ、発生頻度、対象インターフェイス、設定差分を記録し、原因を一つずつ除外します。

関連する記事
VyOS OpenVPN の WARNING – 証明書・TLS・replay ログの切り分け

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る