概要
システム時刻が不正確な場合、当社が提供する複数のプロトコルで接続できなくなることがあります。理由は 2 つあります。わずかなずれであれば通常は問題ありませんが、以下の許容範囲を超えると接続できなくなります。タイムゾーンの設定は関係なく、重要なのは UTC 基準で時計が正確であることです。
理由 1:プロトコル自体がタイムスタンプを含む場合
- VMess は認証情報に UTC タイムスタンプを含めており、サーバーはこれを用いてリプレイ攻撃を拒否します。お使いの時計がサーバーと約 120 秒以上ずれている場合、そのリクエストは無効と判断されます。
- Shadowsocks 2022 もリプレイ防止のためリクエストヘッダーにタイムスタンプを含みます。許容誤差は約 30 秒で、VMess よりも厳格です。
理由 2:TLS 証明書の有効期限(その他の多くのプロトコルに影響)
TLS を用いるプロトコル(QUIC + TLS 上で動作する Hysteria2、AnyTLS、Trojan、TLS 経由の VLESS など)は通常、端末の時計を基準にサーバー証明書とその有効期限を検証します。証明書の検証が有効な状態で時計のずれが大きく、証明書がまだ有効でないまたはすでに期限切れと判定されると、通信が始まる前にハンドシェイクが失敗します。異なる検証ポリシーを設定している場合はこの限りではありません。
タイムスタンプを持たないプロトコルでも「時刻を修正する」ことで接続の問題が解決するのは、このためです。
主な症状
- クライアント上では設定が成功しているのに、通信がまったく行われない。
- 接続がすぐに失敗する、またはすべてのノードが利用不可と表示される。
- クライアントのログに証明書、ハンドシェイク、または "invalid user" に関するエラーが出る。
対処方法
- Windows:設定 → 時刻と言語 → 日付と時刻 →時刻を自動的に設定するをオンにします。(タイムゾーンを自動的に設定するは便利ですが、時計のずれ自体は修正されません。重要なのは UTC 時刻の正確さです。)強制的に同期するには、管理者としてコマンドプロンプトを開き
w32tm /resyncを実行します。 - macOS:システム設定 → 一般 → 日付と時刻 →日付と時刻を自動的に設定をオンにします。
- Android:設定 → システム → 日付と時刻 →日付と時刻を自動的に設定をオンにします。
- iOS:設定 → 一般 → 日付と時刻 →自動設定をオンにします。
時刻を修正したあと、クライアントを再起動して再接続してください。