feat(tls,reality): port xray TLS/REALITY fields, cert-hash helpers, fallback UX

TLS: add verifyPeerCertByName (vcn) to inbound settings + emit in both share-link generators (frontend + Go sub) and outbound parser; the allowInsecure replacement xray removed after 2026-06-01. Add server-side curvePreferences, masterKeyLog, echSockopt (passthrough + form) at tlsSettings top-level so they survive the panel-only settings strip.

REALITY: add limitFallbackUpload/Download (afterBytes/bytesPerSec/burstBytesPerSec) with per-field tooltips, plus masterKeyLog. Verified field names/semantics against pinned xray v1.260327.1 (bytesPerSec=0 disables).

Hosts: fix verify_peer_cert_by_name column bool->string (xray expects comma-separated names) with an idempotent, history-gate-free migration (SQLite typeof blank; Postgres ALTER once); emit vcn for hosts/external proxies.

Server: add getCertHash (local cert DER SHA-256) and getRemoteCertHash (xray tls ping) endpoints + api-docs; wire pinned-cert field buttons. Drop the meaningless random-hash button.

Xray UI: metrics endpoint (listen/tag) config in Basics; import/export for routing rules and outbounds.

Fallbacks card: compact empty state, header-aligned actions, responsive labeled grid rows.

i18n: add all new keys to every locale; drop unused generateRandomPin.
This commit is contained in:
MHSanaei
2026-06-21 15:51:50 +02:00
parent 315ecc2588
commit 7c8889466b
48 changed files with 1316 additions and 173 deletions
+33 -5
View File
@@ -591,7 +591,6 @@
"pinnedPeerCertSha256": "Sabitlenmiş Peer Sertifikası SHA-256",
"pinnedPeerCertSha256Tip": "Peer sertifikasının SHA-256 hash'leri onaltılık (hex) dizge olarak (örn. e8e2d3…), virgülle ayrılmış. Sadece panel — sunucunun Xray yapılandırmasına yazılmaz, ancak kullanıcıların sertifikayı sabitleyebilmesi için paylaşım bağlantılarına eklenir.",
"pinnedPeerCertSha256Placeholder": "onaltılık (hex) hash(ler), virgülle ayrılmış",
"generateRandomPin": "Rastgele Hash Üret",
"getNewEchCert": "Yeni ECH Sertifikası Al",
"show": "Göster",
"xver": "Xver",
@@ -620,7 +619,28 @@
"node": "Düğüm adresi",
"listen": "Inbound dinleme adresi",
"custom": "Özel"
}
},
"echSockopt": "ECH Sockopt",
"echSockoptTip": "Xray'in ECH yapılandırma listesini almak için kullandığı bağlantının soket seçenekleri (ör. aramayı bir dialerProxy giden bağlantısı üzerinden yönlendirme). Varsayılanları kullanmak için devre dışı bırakın.",
"curvePreferences": "Eğri Tercihleri",
"curvePreferencesTip": "Sunucunun sunduğu TLS anahtar değişim eğrilerini tercih sırasına göre kısıtlayın (ör. X25519MLKEM768, X25519). Xray-core varsayılanlarını kullanmak için boş bırakın.",
"masterKeyLog": "Ana Anahtar Günlüğü",
"masterKeyLogTip": "Wireshark ile hata ayıklama için TLS ana anahtarlarının yazılacağı yol (SSLKEYLOGFILE biçimi). Üretimde boş bırakın — dosyaya erişimi olan herkesin trafiği çözmesine olanak tanır.",
"verifyPeerCertByName": "Peer sertifikasını ada göre doğrula",
"verifyPeerCertByNameTip": "İstemcilere sunucu sertifikasını SNI yerine bu ada göre doğrulamalarını söyler. Adları virgülle ayırın. Yalnızca panele özgü — paylaşım bağlantılarına eklenir (vcn). Xray'in 2026-06-01 sonrası kaldırdığı allowInsecure'un modern karşılığıdır.",
"pinFromCert": "Bu gelen bağlantının sertifikasından doldur",
"pinFromRemote": "SNI'ye ping atarak hash'i al (xray tls ping)",
"pinFromRemoteNoSni": "Uzak sertifikaya ping atmak için önce SNI'yi (serverName) ayarlayın.",
"pinFromRemoteFailed": "Uzak sertifika hash'i alınamadı.",
"limitFallback": "Fallback Sınırı",
"limitFallbackUpload": "Fallback Yükleme Sınırı",
"limitFallbackDownload": "Fallback İndirme Sınırı",
"afterBytes": "Bayttan Sonra",
"afterBytesTip": "Fallback'in bu kadar bayt boyunca tam hızda çalışmasına izin verin, ardından kısıtlamaya başlayın. 0 = ilk bayttan itibaren kısıtla.",
"bytesPerSec": "Saniye Başına Bayt",
"bytesPerSecTip": "Eşik aşıldıktan sonra fallback trafiğine uygulanan hız sınırı (bayt/sn); böylece sondalar sunucunuzu hedefe ücretsiz bant genişliği olarak kullanamaz. 0 = sınır yok (bu yönü devre dışı bırakır).",
"burstBytesPerSec": "Saniye Başına Patlama Baytı",
"burstBytesPerSecTip": "Sabit hızın üzerindeki kısa patlamalar için pay (token-bucket boyutu). Saniye Başına Bayt değerinden düşükse ona eşitlenecek şekilde yükseltilir."
},
"info": {
"mode": "Mod",
@@ -1334,6 +1354,14 @@
"RoutingStrategyDesc": "Tüm istekleri çözmek için genel trafik yönlendirme stratejisini ayarlayın.",
"outboundTestUrl": "Giden Bağlantı Test URL'si",
"outboundTestUrlDesc": "Giden bağlantı bağlantı testinde kullanılan URL.",
"importRules": "Kuralları İçe Aktar",
"exportRules": "Kuralları Dışa Aktar",
"importOutbounds": "Giden Bağlantıları İçe Aktar",
"exportOutbounds": "Giden Bağlantıları Dışa Aktar",
"importInvalidJson": "Geçersiz JSON — bir dizi veya eşleşen anahtara sahip bir nesne bekleniyordu.",
"metricsListen": "Metrik Uç Noktası",
"metricsListenDesc": "Xray'in Prometheus tarzı metriklerini bu adres:port üzerinde sunar (ör. 127.0.0.1:11111). Devre dışı bırakmak için boş bırakın. localhost'a bağlayın ve ters proxy ile sunun — kimlik doğrulaması yoktur.",
"metricsTag": "Metrik Etiketi",
"Torrent": "BitTorrent Protokolünü Engelle",
"Inbounds": "Gelen Bağlantılar",
"InboundsDesc": "Belirtilen istemcileri (clients) kabul eder.",
@@ -1729,7 +1757,6 @@
"alpn": "ALPN",
"fingerprint": "Fingerprint",
"pins": "Sabitlenmiş sertifika SHA-256",
"verifyPeerCertByName": "Peer sertifikasını ada göre doğrula",
"allowInsecure": "Güvensize izin ver",
"echConfigList": "ECH yapılandırma listesi",
"muxParams": "Mux",
@@ -1741,7 +1768,8 @@
"shuffleHost": "Host'u karıştır",
"tags": "Etiketler",
"nodeGuids": "Düğümler",
"excludeFromSubTypes": "Formatlardan hariç tut"
"excludeFromSubTypes": "Formatlardan hariç tut",
"verifyPeerCertByName": "Peer sertifikasını ada göre doğrula"
},
"hints": {
"address": "Gelen bağlantının kendi adresini devralmak için boş bırakın.",
@@ -2015,4 +2043,4 @@
"statusDown": "ÇEVRİMDIŞI",
"statusUp": "ÇEVRİMİÇİ"
}
}
}