feat(tls): add a dynamic DoH helper for echConfigList, with CDN guidance (#6869)

echConfigList already accepted Xray's dynamic form, target domain + DoH URL,
but nothing in the inbound or host forms explained or built it. A helper now
builds that value from presets or a custom domain and resolver, accepts only the
schemes Xray dials (https, h2c, udp; scheme case normalised), warns that a key
generated locally does not work behind a CDN, and asks before overwriting local
ECH keys. The helper's controls carry accessible labels, and the resolver list
holds only identified public resolvers.
This commit is contained in:
55575455
2026-10-24 12:07:11 +08:00
committed by GitHub
parent 41bafb3fd5
commit f43645656c
21 changed files with 1380 additions and 53 deletions
+30 -2
View File
@@ -475,6 +475,36 @@
"form": {
"echSockopt": "ECH Sockopt",
"echSockoptTip": "Xray が ECH config リストを取得するために使用する接続のソケットオプション(例: ルックアップを dialerProxy アウトバウンド経由にする)。既定値を使う場合は無効のままにします。",
"echCdnWarningTitle": "ローカルで生成した ECH 鍵は直接接続でのみ有効です",
"echCdnWarningBody": "「新しい ECH 証明書を取得」で生成した鍵ペアは、クライアントがこの VPS に直接接続する場合にのみ有効です。インバウンドが Cloudflare CDN 経由(オレンジクラウド背後の VLESS + xhttp/WS)でプロキシされている場合、Cloudflare は外側の TLS を自前の ECH 鍵で終端し、それらをローテーションするため、ローカルの鍵ではハンドシェイクが必ず失敗します。代わりに動的 ECH ヘルパーを使用してください。",
"echDynamicTitle": "Cloudflare 動的 ECH(オレンジクラウドの背後でも利用可能)",
"echPresetLabel": "プリセットの組み合わせ",
"echPresetOtherDomains": "その他の ECH 対象ドメイン",
"echPresetAdvanced": "カスタムの組み合わせ…",
"echDynamicIntro": "ECH config リストにクライアント側の動的参照(対象ドメイン + DoH リゾルバー)を設定します。クライアントは接続のたびにリゾルバーへそのドメインの HTTPS レコードを問い合わせるため、常に最新の ECH 鍵(Cloudflare がローテーションしたものを含む)を取得できます。",
"echDynamicDomain": "ECH 対象ドメイン",
"echDynamicDoh": "DoH リゾルバー",
"echDomainAuto": "自動 — ノードの SNI から ECH レコードを解決",
"echDynamicApply": "ECH config リストに適用",
"echDynamicCustom": "カスタム URL…",
"echDynamicInvalid": "値を生成するには、有効なドメインとリゾルバーの URL(https、h2c または udp)を入力してください。",
"echDynamicUnsupportedScheme": "Xray が ECH 設定を解決できるのは https://、h2c://、udp:// のみです。このエンドポイントは応答しません。",
"echDynamicPlaceholder": "cloudflare-ech.com+https://dns.alidns.com/dns-query",
"echDynamicOverwriteTitle": "このインバウンドにはローカルで生成した ECH 鍵ペアがあります",
"echDynamicOverwriteBody": "CDN の背後ではこの鍵ペアは使用されません。CDN が TLS ハンドシェイクを終端するためです。動的な値を適用すると ECH config リストが置き換えられ、ローカルの ECH 鍵は消去されます。",
"echDynamicOverwriteConfirm": "置き換えてローカル鍵を消去",
"echExistingNotDynamic": "この ECH config リストは動的フォームの形式ではありません。値を入力すると手動で設定した内容は上書きされます。",
"echDohGroup": {
"china": "中国本土(GFW の背後から到達可能)",
"global": "グローバル",
"europe": "ヨーロッパ",
"udp": "通常の DNS(udp://)"
},
"echRecommended": "推奨",
"echMainlandAdvisory": "中国本土のリゾルバーでは、HTTPS レコードに ECH を含む対象ドメインが必要です。保存する前にこの組み合わせを確認してください。",
"echConfigList": "ECH config リスト",
"echConfigListHint": "共有リンクとサブスクリプションでクライアントに送信されます。ローカルの ECHConfigList(下のボタンで生成)または動的フォームの domain+DoH URL を受け付けます。",
"echKeyHint": "直接接続専用です — インバウンドが CDN の背後にある場合は空欄にしてください。",
"curvePreferences": "曲線の優先設定",
"curvePreferencesTip": "サーバーが提供する TLS 鍵交換の曲線を優先順位順に制限します(例: X25519MLKEM768, X25519)。空欄にすると Xray-core の既定値を使用します。",
"masterKeyLog": "マスターキーログ",
@@ -632,7 +662,6 @@
"usageOption": "使用オプション",
"buildChain": "Build Chain",
"echKey": "ECH key",
"echConfig": "ECH config",
"pinnedPeerCertSha256": "ピン留めピア証明書 SHA-256",
"pinnedPeerCertSha256Tip": "ピア証明書の SHA-256 ハッシュ(16進数文字列、例: e8e2d3…)、カンマ区切り。パネルのみ — サーバーの xray 設定には書き込まれませんが、共有リンクには含まれ、クライアントが証明書をピン留めできます。",
"pinnedPeerCertSha256Placeholder": "16進ハッシュ、カンマ区切り",
@@ -2361,7 +2390,6 @@
"pins": "ピン留め証明書 SHA-256",
"verifyPeerCertByName": "名前でピア証明書を検証",
"allowInsecure": "安全でない接続を許可",
"echConfigList": "ECH config リスト",
"muxParams": "Mux",
"sockoptParams": "Sockopt",
"finalMask": "Final Mask",