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; }