From cb814e1dacfb266f00a6548f3daee1e4859c1a36 Mon Sep 17 00:00:00 2001 From: DHR60 Date: Sun, 14 Sep 2025 13:23:13 +0800 Subject: [PATCH] Adjust chained proxy, actual outbound is at the top Based on actual network flow instead of data packets --- .../Services/CoreConfig/Singbox/SingboxOutboundService.cs | 8 +++++--- .../Services/CoreConfig/V2ray/V2rayOutboundService.cs | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs index 684bebac..7bfdde9e 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs @@ -682,11 +682,13 @@ public partial class CoreConfigSingboxService private async Task GenChainOutboundsList(List nodes, SingboxConfig singboxConfig, string baseTagName = Global.ProxyTag) { + // Based on actual network flow instead of data packets + var nodesReverse = nodes.AsEnumerable().Reverse().ToList(); var resultOutbounds = new List(); var resultEndpoints = new List(); // For endpoints - for (var i = 0; i < nodes.Count; i++) + for (var i = 0; i < nodesReverse.Count; i++) { - var node = nodes[i]; + var node = nodesReverse[i]; var server = await GenServer(node); if (server is null) @@ -703,7 +705,7 @@ public partial class CoreConfigSingboxService server.tag = baseTagName + i.ToString(); } - if (i != nodes.Count - 1) + if (i != nodesReverse.Count - 1) { server.detour = baseTagName + (i + 1).ToString(); } diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs index d15d2285..b25ec9b2 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs @@ -749,10 +749,12 @@ public partial class CoreConfigV2rayService private async Task GenChainOutboundsList(List nodes, V2rayConfig v2RayConfig, string baseTagName = Global.ProxyTag) { + // Based on actual network flow instead of data packets + var nodesReverse = nodes.AsEnumerable().Reverse().ToList(); var resultOutbounds = new List(); - for (var i = 0; i < nodes.Count; i++) + for (var i = 0; i < nodesReverse.Count; i++) { - var node = nodes[i]; + var node = nodesReverse[i]; var txtOutbound = EmbedUtils.GetEmbedText(Global.V2raySampleOutbound); if (txtOutbound.IsNullOrEmpty()) { @@ -776,7 +778,7 @@ public partial class CoreConfigV2rayService outbound.tag = "chain-" + baseTagName + i.ToString(); } - if (i != nodes.Count - 1) + if (i != nodesReverse.Count - 1) { outbound.streamSettings.sockopt = new() {