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
@@ -611,9 +611,38 @@
"usageOption": "گزینه استفاده",
"buildChain": "ساخت زنجیره",
"echKey": "کلید ECH",
"echConfig": "پیکربندی ECH",
"echSockopt": "Sockopt مربوط به ECH",
"echSockoptTip": "تنظیمات سوکت برای اتصالی که Xray برای دریافت لیست پیکربندی ECH استفاده می‌کند (مثلاً عبور این درخواست از یک dialerProxy). برای استفاده از پیش‌فرض غیرفعال بگذارید.",
"echCdnWarningTitle": "کلیدهای ECH که به‌صورت محلی ساخته می‌شوند فقط برای اتصال مستقیم کار می‌کنند",
"echCdnWarningBody": "جفت‌کلیدی که با «Get New ECH Cert» ساخته می‌شود فقط وقتی معتبر است که کارخواهان مستقیم به همین VPS متصل شوند. اگر این inbound از طریق Cloudflare CDN پروکسی شود (یعنی VLESS + xhttp/WS پشت ابر نارنجی)، Cloudflare با کلیدهای ECH خودش TLS بیرونی را پایان می‌دهد و آن‌ها را می‌چرخاند، بنابراین کلید محلی همیشه در دست‌دهی شکست می‌خورد. به‌جایش از راهنمای ECH پویا استفاده کنید.",
"echDynamicTitle": "ECH پویای Cloudflare (پشت ابر نارنجی هم کار می‌کند)",
"echPresetLabel": "ترکیب آماده",
"echPresetOtherDomains": "دامنه‌های هدف دیگر ECH",
"echPresetAdvanced": "ترکیب سفارشی…",
"echDynamicIntro": "لیست پیکربندی ECH را با یک جست‌وجوی پویا از سمت کارخواه پر می‌کند (دامنهٔ هدف + حل‌کنندهٔ DoH). کارخواه در هر اتصال رکورد HTTPS دامنه را از حل‌کننده می‌پرسد، پس همیشه کلیدهای ECH فعلی را می‌بیند — از جمله کلیدهای چرخیدهٔ Cloudflare.",
"echDynamicDomain": "دامنهٔ هدف ECH",
"echDynamicDoh": "حل‌کنندهٔ DoH",
"echDomainAuto": "خودکار — رکورد ECH را برای SNI گره حل کن",
"echDynamicApply": "اعمال روی لیست پیکربندی ECH",
"echDynamicCustom": "URL سفارشی…",
"echDynamicInvalid": "برای ساختن مقدار، یک دامنهٔ معتبر و یک URL حل‌کننده (https، h2c یا udp) وارد کنید.",
"echDynamicUnsupportedScheme": "Xray پیکربندی ECH را فقط با https://، h2c:// یا udp:// حل می‌کند؛ این نقطهٔ پایانی هرگز پاسخ نمی‌دهد.",
"echDynamicPlaceholder": "cloudflare-ech.com+https://dns.alidns.com/dns-query",
"echDynamicOverwriteTitle": "این inbound یک جفت‌کلید ECH ساخته‌شده به‌صورت محلی دارد",
"echDynamicOverwriteBody": "پشت CDN آن جفت‌کلید هرگز استفاده نمی‌شود؛ زیرا CDN دست‌دهی TLS را پایان می‌دهد. اعمال مقدار پویا لیست پیکربندی ECH را جایگزین می‌کند و کلید ECH محلی را پاک می‌کند.",
"echDynamicOverwriteConfirm": "جایگزین کن و کلید محلی را پاک کن",
"echExistingNotDynamic": "این لیست پیکربندی ECH به شکل پویا نیست؛ پر کردن آن چیزی را که دستی تنظیم کرده‌اید جایگزین می‌کند.",
"echDohGroup": {
"china": "سرزمین اصلی چین (قابل دسترسی از پشت GFW)",
"global": "جهانی",
"europe": "اروپا",
"udp": "DNS ساده (udp://)"
},
"echRecommended": "پیشنهادی",
"echMainlandAdvisory": "حل‌کننده‌های داخل چین به دامنهٔ هدفی نیاز دارند که رکورد HTTPS آن ECH داشته باشد؛ پیش از ذخیره، جفت را خودتان بررسی کنید.",
"echConfigList": "لیست پیکربندی ECH",
"echConfigListHint": "در لینک‌های اشتراک و سابسکریپشن‌ها برای کارخواهان فرستاده می‌شود. یک ECHConfigList محلی (از دکمهٔ زیر) یا شکل پویای domain+DoH URL را می‌پذیرد.",
"echKeyHint": "فقط برای اتصال مستقیم — اگر inbound پشت CDN است خالی بگذارید.",
"curvePreferences": "ترجیح منحنی‌ها",
"curvePreferencesTip": "منحنی‌های تبادل کلید TLS که سرور ارائه می‌دهد را به‌ترتیب اولویت محدود می‌کند (مثلاً X25519MLKEM768، X25519). خالی بگذارید تا پیش‌فرض Xray استفاده شود.",
"masterKeyLog": "لاگ کلید اصلی",
@@ -2361,7 +2390,6 @@
"pins": "SHA-256 پین‌شدهٔ گواهی",
"verifyPeerCertByName": "بررسی گواهی همتا بر اساس نام",
"allowInsecure": "اجازهٔ اتصال ناامن",
"echConfigList": "فهرست پیکربندی ECH",
"muxParams": "Mux",
"sockoptParams": "Sockopt",
"finalMask": "ماسک نهایی",