From 4f1f41aa5dccfc0dd68b914bb346cd22a802f55f Mon Sep 17 00:00:00 2001 From: xboard Date: Mon, 23 Mar 2026 00:14:16 +0800 Subject: [PATCH] fix: fix Trojan compatibility in xray kernel --- internal/kernel/xray/config.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/internal/kernel/xray/config.go b/internal/kernel/xray/config.go index d0712fd..a64aa00 100644 --- a/internal/kernel/xray/config.go +++ b/internal/kernel/xray/config.go @@ -273,16 +273,27 @@ func buildVLESS(base M, nc *panel.NodeConfig, users []panel.User, certFile, keyF } func buildTrojan(base M, nc *panel.NodeConfig, users []panel.User, certFile, keyFile string) M { - clients := make([]M, 0, len(users)) - for _, u := range users { - clients = append(clients, M{ + clients := make([]M, len(users)) + for i := range users { + u := &users[i] + clients[i] = M{ "password": u.UUID, "email": userEmail(u.ID), - }) + } } base["settings"] = M{"clients": clients} applyStreamSettings(base, nc, certFile, keyFile) + + // Trojan requires TLS or Reality to be enabled. + // If the panel didn't explicitly set TLS=1 or TLS=2, but we have certs, + // we should enable a default TLS config to ensure the inbound can start. + ss, _ := base["streamSettings"].(M) + if security, ok := ss["security"].(string); !ok || (security != "tls" && security != "reality") { + nc.TLS = 1 // Force internal state to trigger TLS build in applyStreamSettings + applyStreamSettings(base, nc, certFile, keyFile) + } + return base }