Adds sing-box DomainStrategy support

DHR60 2025-07-01 21:45:01 +08:00
parent 5f4a552a77
commit 53d679221e
1 changed files with 26 additions and 12 deletions

View File

@ -1309,22 +1309,24 @@ public class CoreConfigSingboxService
clash_mode = ERuleMode.Global.ToString() clash_mode = ERuleMode.Global.ToString()
}); });
if (!(_config.Inbound.First().RouteOnly || _config.TunModeItem.EnableTun)) var domainStrategy = _config.RoutingBasicItem.DomainStrategy4Singbox.IsNullOrEmpty() ? null : _config.RoutingBasicItem.DomainStrategy4Singbox;
var defaultRouting = await ConfigHandler.GetDefaultRouting(_config);
if (defaultRouting.DomainStrategy4Singbox.IsNotEmpty())
{ {
var domainStrategy = _config.RoutingBasicItem.DomainStrategy4Singbox.IsNullOrEmpty() ? null : _config.RoutingBasicItem.DomainStrategy4Singbox; domainStrategy = defaultRouting.DomainStrategy4Singbox;
var defaultRouting = await ConfigHandler.GetDefaultRouting(_config); }
if (defaultRouting.DomainStrategy4Singbox.IsNotEmpty()) var resolveRule = new Rule4Sbox
{ {
domainStrategy = defaultRouting.DomainStrategy4Singbox; action = "resolve",
} strategy = domainStrategy
singboxConfig.route.rules.Add(new() };
{ if (_config.RoutingBasicItem.DomainStrategy == "IPOnDemand")
action = "resolve", {
strategy = domainStrategy singboxConfig.route.rules.Add(resolveRule);
});
} }
var routing = await ConfigHandler.GetDefaultRouting(_config); var routing = await ConfigHandler.GetDefaultRouting(_config);
var ipRules = new List<RulesItem>();
if (routing != null) if (routing != null)
{ {
var rules = JsonUtils.Deserialize<List<RulesItem>>(routing.RuleSet); var rules = JsonUtils.Deserialize<List<RulesItem>>(routing.RuleSet);
@ -1333,9 +1335,21 @@ public class CoreConfigSingboxService
if (item.Enabled) if (item.Enabled)
{ {
await GenRoutingUserRule(item, singboxConfig); await GenRoutingUserRule(item, singboxConfig);
if (item.Ip != null && item.Ip.Count > 0)
{
ipRules.Add(item);
}
} }
} }
} }
if (_config.RoutingBasicItem.DomainStrategy == "IPIfNonMatch")
{
singboxConfig.route.rules.Add(resolveRule);
foreach (var item in ipRules)
{
await GenRoutingUserRule(item, singboxConfig);
}
}
} }
catch (Exception ex) catch (Exception ex)
{ {