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,7 +611,6 @@
"usageOption": "Opsi penggunaan",
"buildChain": "Bangun rantai",
"echKey": "ECH key",
"echConfig": "Konfig ECH",
"pinnedPeerCertSha256": "SHA-256 Sertifikat Peer Tersemat",
"pinnedPeerCertSha256Tip": "Hash SHA-256 dari sertifikat peer sebagai string heksadesimal (mis. e8e2d3…), dipisah koma. Hanya panel — tidak ditulis ke konfig xray server, tetapi disertakan dalam link berbagi agar klien dapat menyematkan sertifikat.",
"pinnedPeerCertSha256Placeholder": "hash heksadesimal, dipisah koma",
@@ -679,6 +678,36 @@
},
"echSockopt": "ECH Sockopt",
"echSockoptTip": "Opsi socket untuk koneksi yang dipakai Xray guna mengambil daftar konfig ECH (mis. mengarahkan pencarian melalui outbound dialerProxy). Biarkan nonaktif untuk memakai bawaan.",
"echCdnWarningTitle": "Kunci ECH yang dibuat secara lokal hanya berfungsi untuk koneksi langsung",
"echCdnWarningBody": "Pasangan kunci yang dibuat dengan «Get New ECH Cert» hanya valid saat klien terhubung langsung ke VPS ini. Jika inbound diproksikan melalui Cloudflare CDN (VLESS + xhttp/WS di balik awan oranye), Cloudflare mengakhiri TLS luar dengan kunci ECH miliknya sendiri dan merotasinya, sehingga kunci lokal selalu gagal handshake. Gunakan pembantu ECH dinamis sebagai gantinya.",
"echDynamicTitle": "ECH dinamis Cloudflare (berfungsi di balik awan oranye)",
"echPresetLabel": "Kombinasi preset",
"echPresetOtherDomains": "Domain target ECH lainnya",
"echPresetAdvanced": "Kombinasi khusus…",
"echDynamicIntro": "Mengisi daftar konfig ECH dengan pencarian dinamis di sisi klien (domain target + resolver DoH). Klien menanyakan rekaman HTTPS domain tersebut ke resolver pada setiap koneksi, jadi selalu melihat kunci ECH terkini — termasuk kunci Cloudflare yang sudah dirotasi.",
"echDynamicDomain": "Domain target ECH",
"echDynamicDoh": "Resolver DoH",
"echDomainAuto": "Otomatis — resolve rekaman ECH untuk SNI node",
"echDynamicApply": "Terapkan ke daftar konfig ECH",
"echDynamicCustom": "URL kustom…",
"echDynamicInvalid": "Masukkan domain yang valid dan URL resolver (https, h2c, atau udp) untuk menyusun nilai.",
"echDynamicUnsupportedScheme": "Xray hanya me-resolve konfigurasi ECH lewat https://, h2c://, atau udp://. Titik akhir ini tidak akan pernah menjawab.",
"echDynamicPlaceholder": "cloudflare-ech.com+https://dns.alidns.com/dns-query",
"echDynamicOverwriteTitle": "Inbound ini memiliki pasangan kunci ECH yang dibuat secara lokal",
"echDynamicOverwriteBody": "Di balik CDN, pasangan kunci itu tidak pernah dipakai: CDN-lah yang mengakhiri handshake TLS. Menerapkan nilai dinamis akan mengganti daftar konfig ECH dan menghapus kunci ECH lokal.",
"echDynamicOverwriteConfirm": "Ganti dan hapus kunci lokal",
"echExistingNotDynamic": "Daftar konfig ECH ini tidak dalam bentuk dinamis; mengisinya akan mengganti apa yang Anda atur secara manual.",
"echDohGroup": {
"china": "Tiongkok daratan (dapat diakses dari balik GFW)",
"global": "Mancanegara",
"europe": "Eropa",
"udp": "DNS biasa (udp://)"
},
"echRecommended": "disarankan",
"echMainlandAdvisory": "Resolver di Tiongkok daratan memerlukan domain target yang rekaman HTTPS-nya membawa ECH; verifikasi pasangannya sebelum menyimpan.",
"echConfigList": "Daftar konfig ECH",
"echConfigListHint": "Dikirim ke klien dalam tautan bagikan dan langganan. Menerima ECHConfigList lokal (dari tombol di bawah) atau bentuk dinamis domain+DoH URL.",
"echKeyHint": "Hanya untuk koneksi langsung — biarkan kosong saat inbound berada di balik CDN.",
"curvePreferences": "Preferensi kurva",
"curvePreferencesTip": "Batasi kurva pertukaran kunci TLS yang ditawarkan server, sesuai urutan preferensi (mis. X25519MLKEM768, X25519). Biarkan kosong untuk memakai bawaan Xray-core.",
"masterKeyLog": "Log master key",
@@ -2360,7 +2389,6 @@
"fingerprint": "Fingerprint",
"pins": "SHA-256 sertifikat tersemat",
"allowInsecure": "Izinkan tidak aman",
"echConfigList": "Daftar konfig ECH",
"muxParams": "Mux",
"sockoptParams": "Sockopt",
"finalMask": "Final Mask",