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
+29 -1
View File
@@ -463,6 +463,27 @@
"moreIssues": "{message} (他 {count} 件)"
},
"form": {
"echSockopt": "ECH Sockopt",
"echSockoptTip": "Xray が ECH config リストを取得するために使用する接続のソケットオプション(例: ルックアップを dialerProxy アウトバウンド経由にする)。既定値を使う場合は無効のままにします。",
"curvePreferences": "曲線の優先設定",
"curvePreferencesTip": "サーバーが提供する TLS 鍵交換の曲線を優先順位順に制限します(例: X25519MLKEM768, X25519)。空欄にすると Xray-core の既定値を使用します。",
"masterKeyLog": "マスターキーログ",
"masterKeyLogTip": "Wireshark でのデバッグ用に TLS マスターキー(SSLKEYLOGFILE 形式)を書き出すパス。本番環境では空欄にしてください — このファイルを持つ者は誰でも通信を復号できます。",
"verifyPeerCertByName": "名前でピア証明書を検証",
"verifyPeerCertByNameTip": "クライアントに対し、SNI ではなくこの名前でサーバー証明書を検証するよう指示します。名前はカンマ区切り。パネル専用 — 共有リンクに含まれます(vcn)。2026-06-01 以降 Xray が削除した allowInsecure の最新の代替手段です。",
"pinFromCert": "このインバウンドの証明書から入力",
"pinFromRemote": "SNI に ping して(xray tls ping)ハッシュを取得",
"pinFromRemoteNoSni": "まず SNI (serverName) を設定してリモート証明書に ping してください。",
"pinFromRemoteFailed": "リモート証明書のハッシュを取得できませんでした。",
"limitFallback": "Fallback を制限",
"limitFallbackUpload": "Fallback アップロードを制限",
"limitFallbackDownload": "Fallback ダウンロードを制限",
"afterBytes": "閾値バイト",
"afterBytesTip": "このバイト数までは fallback を全速で実行し、その後でスロットリングを開始します。0 = 最初のバイトからスロットリングします。",
"bytesPerSec": "バイト/秒",
"bytesPerSecTip": "閾値を超えた fallback トラフィックに適用される速度上限(バイト/秒)。プローブがサーバーを対象先への無料帯域として悪用できないようにします。0 = 無制限(この方向を無効化します)。",
"burstBytesPerSec": "バースト バイト/秒",
"burstBytesPerSecTip": "定常レートを超える短時間のバーストの許容量(token-bucket のサイズ)。バイト/秒より小さい場合は同じ値まで引き上げられます。",
"moveUp": "上へ",
"moveDown": "下へ",
"addAll": "すべて追加",
@@ -591,7 +612,6 @@
"pinnedPeerCertSha256": "ピン留めピア証明書 SHA-256",
"pinnedPeerCertSha256Tip": "ピア証明書の SHA-256 ハッシュ(16進数文字列、例: e8e2d3…)、カンマ区切り。パネルのみ — サーバーの xray 設定には書き込まれませんが、共有リンクには含まれ、クライアントが証明書をピン留めできます。",
"pinnedPeerCertSha256Placeholder": "16進ハッシュ、カンマ区切り",
"generateRandomPin": "ランダムハッシュを生成",
"getNewEchCert": "新しい ECH 証明書を取得",
"show": "表示",
"xver": "Xver",
@@ -1294,6 +1314,14 @@
},
"xray": {
"title": "Xray 設定",
"importRules": "ルールをインポート",
"exportRules": "ルールをエクスポート",
"importOutbounds": "アウトバウンドをインポート",
"exportOutbounds": "アウトバウンドをエクスポート",
"importInvalidJson": "無効な JSON — 配列、または一致するキーを持つオブジェクトが必要です。",
"metricsListen": "メトリクスエンドポイント",
"metricsListenDesc": "この アドレス:ポート で Xray の Prometheus 形式メトリクスを公開します(例: 127.0.0.1:11111)。空欄にすると無効になります。認証されないため、localhost にバインドしてリバースプロキシ経由で公開してください。",
"metricsTag": "メトリクスタグ",
"save": "保存",
"restart": "Xray を再起動",
"restartSuccess": "Xrayの再起動に成功しました",