From 9866d436da6f59366878d80de0b8f9a5371a636b Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 26 Jul 2024 11:00:07 +0800 Subject: [PATCH] Add Outbound DNS address https://github.com/2dust/v2rayN/issues/5387 --- v2rayN/v2rayN/Global.cs | 2 + .../Handler/CoreConfig/CoreConfigSingbox.cs | 8 +- .../Handler/CoreConfig/CoreConfigV2ray.cs | 6 +- v2rayN/v2rayN/Models/DNSItem.cs | 1 + v2rayN/v2rayN/Resx/ResUI.Designer.cs | 9 ++ v2rayN/v2rayN/Resx/ResUI.resx | 3 + v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx | 3 + .../v2rayN/ViewModels/DNSSettingViewModel.cs | 15 ++- v2rayN/v2rayN/Views/DNSSettingWindow.xaml | 116 +++++++++++------- v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs | 11 ++ 10 files changed, 120 insertions(+), 54 deletions(-) diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index 0c03e2e0..3b79aabc 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -176,6 +176,8 @@ namespace v2rayN public static readonly List AllowInsecure = new() { "true", "false", "" }; public static readonly List DomainStrategy4Freedoms = new() { "AsIs", "UseIP", "UseIPv4", "UseIPv6", "" }; public static readonly List SingboxDomainStrategy4Out = new() { "ipv4_only", "prefer_ipv4", "prefer_ipv6", "ipv6_only", "" }; + public static readonly List DomainDNSAddress = ["223.5.5.5", "223.6.6.6", "localhost"]; + public static readonly List SingboxDomainDNSAddress = ["223.5.5.5", "223.6.6.6", "dhcp://auto"]; public static readonly List Languages = new() { "zh-Hans", "zh-Hant", "en", "fa-Ir", "ru" }; public static readonly List Alpns = new() { "h3", "h2", "http/1.1", "h3,h2,http/1.1", "h2,h3", "h2,http/1.1", "" }; public static readonly List LogLevels = new() { "debug", "info", "warning", "error", "none" }; diff --git a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs index 911d7d3f..d43a07f0 100644 --- a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs +++ b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs @@ -1180,7 +1180,7 @@ namespace v2rayN.Handler.CoreConfig } singboxConfig.dns = dns4Sbox; - GenDnsDomains(node, singboxConfig, item?.domainStrategy4Freedom); + GenDnsDomains(node, singboxConfig, item); } catch (Exception ex) { @@ -1189,7 +1189,7 @@ namespace v2rayN.Handler.CoreConfig return 0; } - private int GenDnsDomains(ProfileItem? node, SingboxConfig singboxConfig, string? strategy) + private int GenDnsDomains(ProfileItem? node, SingboxConfig singboxConfig, DNSItem? dNSItem) { var dns4Sbox = singboxConfig.dns ?? new(); dns4Sbox.servers ??= []; @@ -1199,9 +1199,9 @@ namespace v2rayN.Handler.CoreConfig dns4Sbox.servers.Add(new() { tag = tag, - address = "223.5.5.5", + address = Utils.IsNullOrEmpty(dNSItem?.domainDNSAddress) ? Global.SingboxDomainDNSAddress.FirstOrDefault() : dNSItem?.domainDNSAddress, detour = Global.DirectTag, - strategy = Utils.IsNullOrEmpty(strategy) ? null : strategy, + strategy = Utils.IsNullOrEmpty(dNSItem?.domainStrategy4Freedom) ? null : dNSItem?.domainStrategy4Freedom, }); dns4Sbox.rules.Insert(0, new() { diff --git a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigV2ray.cs b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigV2ray.cs index 1ab89542..7a9a578f 100644 --- a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigV2ray.cs +++ b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigV2ray.cs @@ -1073,7 +1073,7 @@ namespace v2rayN.Handler.CoreConfig } } - GenDnsDomains(node, obj); + GenDnsDomains(node, obj, item); v2rayConfig.dns = obj; } @@ -1084,7 +1084,7 @@ namespace v2rayN.Handler.CoreConfig return 0; } - private int GenDnsDomains(ProfileItem? node, JsonNode dns) + private int GenDnsDomains(ProfileItem? node, JsonNode dns, DNSItem? dNSItem) { if (node == null) { return 0; } @@ -1095,7 +1095,7 @@ namespace v2rayN.Handler.CoreConfig { var dnsServer = new DnsServer4Ray() { - address = "223.5.5.5", + address = Utils.IsNullOrEmpty(dNSItem?.domainDNSAddress) ? Global.DomainDNSAddress.FirstOrDefault() : dNSItem?.domainDNSAddress, domains = [node.address] }; servers.AsArray().Insert(0, JsonUtils.SerializeToNode(dnsServer)); diff --git a/v2rayN/v2rayN/Models/DNSItem.cs b/v2rayN/v2rayN/Models/DNSItem.cs index c8c27738..944eea95 100644 --- a/v2rayN/v2rayN/Models/DNSItem.cs +++ b/v2rayN/v2rayN/Models/DNSItem.cs @@ -16,5 +16,6 @@ namespace v2rayN.Models public string? normalDNS { get; set; } public string? tunDNS { get; set; } public string? domainStrategy4Freedom { get; set; } + public string? domainDNSAddress { get; set; } } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs index 862cca6e..697ebb69 100644 --- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -2662,6 +2662,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Outbound DNS address 的本地化字符串。 + /// + public static string TbSettingsDomainDNSAddress { + get { + return ResourceManager.GetString("TbSettingsDomainDNSAddress", resourceCulture); + } + } + /// /// 查找类似 Outbound Freedom domainStrategy 的本地化字符串。 /// diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx index abcaa97e..6159aa68 100644 --- a/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -1258,4 +1258,7 @@ Multi-server load balancing + + Outbound DNS address + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx index fccaab29..20879c75 100644 --- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -1255,4 +1255,7 @@ 多服务器负载均衡 (多选) + + Outbound域名解析地址 + \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs index 52fd0e2d..ac42a508 100644 --- a/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs +++ b/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs @@ -18,10 +18,13 @@ namespace v2rayN.ViewModels [Reactive] public bool useSystemHosts { get; set; } [Reactive] public string domainStrategy4Freedom { get; set; } + [Reactive] public string domainDNSAddress { get; set; } [Reactive] public string normalDNS { get; set; } + + [Reactive] public string domainStrategy4Freedom2 { get; set; } + [Reactive] public string domainDNSAddress2 { get; set; } [Reactive] public string normalDNS2 { get; set; } [Reactive] public string tunDNS2 { get; set; } - [Reactive] public string domainStrategy4Freedom2 { get; set; } public ReactiveCommand SaveCmd { get; } public ReactiveCommand ImportDefConfig4V2rayCmd { get; } @@ -36,12 +39,14 @@ namespace v2rayN.ViewModels var item = LazyConfig.Instance.GetDNSItem(ECoreType.Xray); useSystemHosts = item.useSystemHosts; domainStrategy4Freedom = item?.domainStrategy4Freedom ?? string.Empty; + domainDNSAddress = item?.domainDNSAddress ?? string.Empty; normalDNS = item?.normalDNS ?? string.Empty; var item2 = LazyConfig.Instance.GetDNSItem(ECoreType.sing_box); + domainStrategy4Freedom2 = item2?.domainStrategy4Freedom ?? string.Empty; + domainDNSAddress2 = item2?.domainDNSAddress ?? string.Empty; normalDNS2 = item2?.normalDNS ?? string.Empty; tunDNS2 = item2?.tunDNS ?? string.Empty; - domainStrategy4Freedom2 = item2?.domainStrategy4Freedom ?? string.Empty; SaveCmd = ReactiveCommand.Create(() => { @@ -100,14 +105,16 @@ namespace v2rayN.ViewModels var item = LazyConfig.Instance.GetDNSItem(ECoreType.Xray); item.domainStrategy4Freedom = domainStrategy4Freedom; + item.domainDNSAddress = domainDNSAddress; item.useSystemHosts = useSystemHosts; item.normalDNS = normalDNS; ConfigHandler.SaveDNSItems(_config, item); var item2 = LazyConfig.Instance.GetDNSItem(ECoreType.sing_box); - item2.normalDNS = JsonUtils.Serialize(JsonUtils.ParseJson(normalDNS2)); - item2.tunDNS = JsonUtils.Serialize(JsonUtils.ParseJson(tunDNS2)); item2.domainStrategy4Freedom = domainStrategy4Freedom2; + item2.domainDNSAddress = domainDNSAddress2; + item2.normalDNS = JsonUtils.Serialize(JsonUtils.ParseJson(normalDNS2)); + item2.tunDNS = JsonUtils.Serialize(JsonUtils.ParseJson(tunDNS2));; ConfigHandler.SaveDNSItems(_config, item2); _noticeHandler?.Enqueue(ResUI.OperationSuccess); diff --git a/v2rayN/v2rayN/Views/DNSSettingWindow.xaml b/v2rayN/v2rayN/Views/DNSSettingWindow.xaml index a002d3f3..2e6c015a 100644 --- a/v2rayN/v2rayN/Views/DNSSettingWindow.xaml +++ b/v2rayN/v2rayN/Views/DNSSettingWindow.xaml @@ -49,33 +49,6 @@ - - - - - - - - - - @@ -93,12 +66,53 @@