From 72fecb2b9a9cdd8244f5408d7b20335d1b03df66 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:17:48 +0800 Subject: [PATCH] Add clash_mode to rule --- .../Handler/CoreConfig/CoreConfigSingbox.cs | 21 +++++++++++++++++++ v2rayN/v2rayN/Models/SingboxConfig.cs | 1 + 2 files changed, 22 insertions(+) diff --git a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs index 0184f34a..911d7d3f 100644 --- a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs +++ b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs @@ -903,6 +903,17 @@ namespace v2rayN.Handler.CoreConfig }); } + singboxConfig.route.rules.Insert(0, new() + { + outbound = Global.DirectTag, + clash_mode = ERuleMode.Direct.ToString() + }); + singboxConfig.route.rules.Insert(0, new() + { + outbound = Global.ProxyTag, + clash_mode = ERuleMode.Global.ToString() + }); + if (_config.tunModeItem.enableTun) { singboxConfig.route.auto_detect_interface = true; @@ -1192,6 +1203,16 @@ namespace v2rayN.Handler.CoreConfig detour = Global.DirectTag, strategy = Utils.IsNullOrEmpty(strategy) ? null : strategy, }); + dns4Sbox.rules.Insert(0, new() + { + server = tag, + clash_mode = ERuleMode.Direct.ToString() + }); + dns4Sbox.rules.Insert(0, new() + { + server = dns4Sbox.servers.Where(t => t.detour == Global.ProxyTag).Select(t => t.tag).FirstOrDefault() ?? "remote", + clash_mode = ERuleMode.Global.ToString() + }); var lstDomain = singboxConfig.outbounds .Where(t => !Utils.IsNullOrEmpty(t.server) && Utils.IsDomain(t.server)) diff --git a/v2rayN/v2rayN/Models/SingboxConfig.cs b/v2rayN/v2rayN/Models/SingboxConfig.cs index e712f74d..c0dd2b5f 100644 --- a/v2rayN/v2rayN/Models/SingboxConfig.cs +++ b/v2rayN/v2rayN/Models/SingboxConfig.cs @@ -50,6 +50,7 @@ public bool? ip_is_private { get; set; } public string? client_subnet { get; set; } public bool? invert { get; set; } + public string? clash_mode { get; set; } public List? inbound { get; set; } public List? protocol { get; set; } public List? network { get; set; }