DHR60 2025-07-23 09:32:11 +08:00
parent e43fb5be70
commit 4f560e86ab
3 changed files with 25 additions and 4 deletions

View File

@ -1402,7 +1402,7 @@
<value>直连 DNS</value>
</data>
<data name="TbSBOutboundsResolverDNS" xml:space="preserve">
<value>出站 DNS 解析</value>
<value>出站 DNS 解析sing-box</value>
</data>
<data name="TbSBOutboundDomainResolve" xml:space="preserve">
<value>解析出站域名</value>

View File

@ -1603,7 +1603,20 @@ public class CoreConfigSingboxService
singboxConfig.dns ??= new Dns4Sbox();
singboxConfig.dns.independent_cache = true;
singboxConfig.dns.final = "dns_remote"; // TODO: Select fallback DNS server based on routing rules
var routing = await ConfigHandler.GetDefaultRouting(_config);
var useDirectDns = false;
if (routing != null)
{
var rules = JsonUtils.Deserialize<List<RulesItem>>(routing.RuleSet) ?? [];
useDirectDns = rules?.LastOrDefault() is { } lastRule &&
lastRule.OutboundTag == Global.DirectTag &&
(lastRule.Port == "0-65535" ||
lastRule.Network == "tcp,udp" ||
lastRule.Ip?.Contains("0.0.0.0/0") == true);
}
singboxConfig.dns.final = useDirectDns ? "dns_direct" : "dns_remote";
}
catch (Exception ex)
{

View File

@ -1232,9 +1232,10 @@ public class CoreConfigV2rayService
}
var routing = await ConfigHandler.GetDefaultRouting(_config);
List<RulesItem>? rules = null;
if (routing != null)
{
var rules = JsonUtils.Deserialize<List<RulesItem>>(routing.RuleSet) ?? [];
rules = JsonUtils.Deserialize<List<RulesItem>>(routing.RuleSet) ?? [];
foreach (var item in rules)
{
if (!item.Enabled || item.Domain is null || item.Domain.Count == 0)
@ -1317,7 +1318,14 @@ public class CoreConfigV2rayService
AddDnsServers(directDNSAddress, directGeositeList);
AddDnsServers(directDNSAddress, expectedDomainList, expectedIPs);
v2rayConfig.dns.servers.AddRange(remoteDNSAddress);
var useDirectDns = rules?.LastOrDefault() is { } lastRule &&
lastRule.OutboundTag == Global.DirectTag &&
(lastRule.Port == "0-65535" ||
lastRule.Network == "tcp,udp" ||
lastRule.Ip?.Contains("0.0.0.0/0") == true);
var defaultDnsServers = useDirectDns ? directDNSAddress : remoteDNSAddress;
v2rayConfig.dns.servers.AddRange(defaultDnsServers);
return 0;
}