From 324f46cdadee7192ea9843c18d7859f973f51530 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:59:39 +0800 Subject: [PATCH] Bug fix https://github.com/2dust/v2rayN/discussions/5268 --- .../Handler/CoreConfig/CoreConfigSingbox.cs | 37 ++++++++++++------- v2rayN/v2rayN/Handler/CoreHandler.cs | 1 + 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs index 8a72c984..2a5ea119 100644 --- a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs +++ b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs @@ -825,7 +825,7 @@ namespace v2rayN.Handler.CoreConfig } singboxConfig.dns = dns4Sbox; - GenDnsDomains(singboxConfig); + GenDnsDomains(node, singboxConfig); } catch (Exception ex) { @@ -834,33 +834,44 @@ namespace v2rayN.Handler.CoreConfig return 0; } - private int GenDnsDomains(SingboxConfig singboxConfig) + private int GenDnsDomains(ProfileItem? node, SingboxConfig singboxConfig) { var dns4Sbox = singboxConfig.dns ?? new(); dns4Sbox.servers ??= []; dns4Sbox.rules ??= []; + var tag = "local_local"; + dns4Sbox.servers.Add(new() + { + tag = tag, + address = "223.5.5.5", + detour = Global.DirectTag, + //strategy = strategy + }); + var lstDomain = singboxConfig.outbounds .Where(t => !Utils.IsNullOrEmpty(t.server) && Utils.IsDomain(t.server)) .Select(t => t.server) .ToList(); if (lstDomain != null && lstDomain.Count > 0) { - //var strategy = dns4Sbox.servers.Where(t => !Utils.IsNullOrEmpty(t.strategy)).Select(t => t.strategy).FirstOrDefault(); - var tag = "local_local"; - dns4Sbox.servers.Add(new() - { - tag = tag, - address = "223.5.5.5", - detour = Global.DirectTag, - //strategy = strategy - }); - dns4Sbox.rules.Add(new() + dns4Sbox.rules.Insert(0, new() { server = tag, domain = lstDomain }); } + + //Tun2SocksAddress + if (_config.tunModeItem.enableTun && node?.configType == EConfigType.Socks && Utils.IsDomain(node?.sni)) + { + dns4Sbox.rules.Insert(0, new() + { + server = tag, + domain = [node?.sni] + }); + } + singboxConfig.dns = dns4Sbox; return 0; } @@ -1120,7 +1131,7 @@ namespace v2rayN.Handler.CoreConfig singboxConfig.route.rules.Add(rule); } - GenDnsDomains(singboxConfig); + GenDnsDomains(null, singboxConfig); //var dnsServer = singboxConfig.dns?.servers.FirstOrDefault(); //if (dnsServer != null) //{ diff --git a/v2rayN/v2rayN/Handler/CoreHandler.cs b/v2rayN/v2rayN/Handler/CoreHandler.cs index e35234a2..2c4b4ae7 100644 --- a/v2rayN/v2rayN/Handler/CoreHandler.cs +++ b/v2rayN/v2rayN/Handler/CoreHandler.cs @@ -218,6 +218,7 @@ namespace v2rayN.Handler coreType = preCoreType, configType = EConfigType.Socks, address = Global.Loopback, + sni = node.address, //Tun2SocksAddress port = LazyConfig.Instance.GetLocalPort(EInboundProtocol.socks) }; }