From 7545763dae857da1ab58f8978c479d3a470ce10f Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Mon, 8 Jul 2024 18:45:29 +0800 Subject: [PATCH] Default domain strategy for resolving the outbound domain names -- singbox --- v2rayN/v2rayN/Global.cs | 1 + .../v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs | 8 ++++---- v2rayN/v2rayN/Models/ConfigItems.cs | 2 +- v2rayN/v2rayN/Resx/ResUI.Designer.cs | 9 +++++++++ v2rayN/v2rayN/Resx/ResUI.resx | 3 +++ v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx | 3 +++ v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs | 11 +++++++---- v2rayN/v2rayN/Views/DNSSettingWindow.xaml | 13 +++++++++++++ v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs | 6 ++++++ 9 files changed, 47 insertions(+), 9 deletions(-) diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index ec1d0d26..df2d3d98 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -172,6 +172,7 @@ 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 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", "h3,h2", "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 1d5e6442..f7febe88 100644 --- a/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs +++ b/v2rayN/v2rayN/Handler/CoreConfig/CoreConfigSingbox.cs @@ -826,7 +826,7 @@ namespace v2rayN.Handler.CoreConfig } singboxConfig.dns = dns4Sbox; - GenDnsDomains(node, singboxConfig); + GenDnsDomains(node, singboxConfig, item?.domainStrategy4Freedom); } catch (Exception ex) { @@ -835,7 +835,7 @@ namespace v2rayN.Handler.CoreConfig return 0; } - private int GenDnsDomains(ProfileItem? node, SingboxConfig singboxConfig) + private int GenDnsDomains(ProfileItem? node, SingboxConfig singboxConfig, string? strategy) { var dns4Sbox = singboxConfig.dns ?? new(); dns4Sbox.servers ??= []; @@ -847,7 +847,7 @@ namespace v2rayN.Handler.CoreConfig tag = tag, address = "223.5.5.5", detour = Global.DirectTag, - //strategy = strategy + strategy = strategy }); var lstDomain = singboxConfig.outbounds @@ -1144,7 +1144,7 @@ namespace v2rayN.Handler.CoreConfig singboxConfig.route.rules.Add(rule); } - GenDnsDomains(null, singboxConfig); + GenDnsDomains(null, singboxConfig, null); //var dnsServer = singboxConfig.dns?.servers.FirstOrDefault(); //if (dnsServer != null) //{ diff --git a/v2rayN/v2rayN/Models/ConfigItems.cs b/v2rayN/v2rayN/Models/ConfigItems.cs index 5efbd7dc..efbf180e 100644 --- a/v2rayN/v2rayN/Models/ConfigItems.cs +++ b/v2rayN/v2rayN/Models/ConfigItems.cs @@ -169,7 +169,7 @@ namespace v2rayN.Models public string stack { get; set; } public int mtu { get; set; } public bool enableExInbound { get; set; } - public bool enableIPv6Address { get; set; } = true; + public bool enableIPv6Address { get; set; } } [Serializable] diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs index 76436a36..f0a21dcc 100644 --- a/v2rayN/v2rayN/Resx/ResUI.Designer.cs +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -2734,6 +2734,15 @@ namespace v2rayN.Resx { } } + /// + /// 查找类似 Default domain strategy for outbound 的本地化字符串。 + /// + public static string TbSettingsDomainStrategy4Out { + get { + return ResourceManager.GetString("TbSettingsDomainStrategy4Out", resourceCulture); + } + } + /// /// 查找类似 Double-click server make active 的本地化字符串。 /// diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx index 36396987..5c21c5a3 100644 --- a/v2rayN/v2rayN/Resx/ResUI.resx +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -1297,4 +1297,7 @@ Select active node (Enter) + + Default domain strategy for outbound + \ 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 9a2e824a..57a36652 100644 --- a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -1294,4 +1294,7 @@ 设为活动节点 (Enter) + + Outbound默认解析策略 + \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs index fcf5d635..52fd0e2d 100644 --- a/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs +++ b/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs @@ -21,6 +21,7 @@ namespace v2rayN.ViewModels [Reactive] public string normalDNS { 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; } @@ -34,12 +35,13 @@ namespace v2rayN.ViewModels var item = LazyConfig.Instance.GetDNSItem(ECoreType.Xray); useSystemHosts = item.useSystemHosts; - domainStrategy4Freedom = item?.domainStrategy4Freedom!; - normalDNS = item?.normalDNS!; + domainStrategy4Freedom = item?.domainStrategy4Freedom ?? string.Empty; + normalDNS = item?.normalDNS ?? string.Empty; var item2 = LazyConfig.Instance.GetDNSItem(ECoreType.sing_box); - normalDNS2 = item2?.normalDNS!; - tunDNS2 = item2?.tunDNS!; + normalDNS2 = item2?.normalDNS ?? string.Empty; + tunDNS2 = item2?.tunDNS ?? string.Empty; + domainStrategy4Freedom2 = item2?.domainStrategy4Freedom ?? string.Empty; SaveCmd = ReactiveCommand.Create(() => { @@ -105,6 +107,7 @@ namespace v2rayN.ViewModels 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; ConfigHandler.SaveDNSItems(_config, item2); _noticeHandler?.Enqueue(ResUI.OperationSuccess); diff --git a/v2rayN/v2rayN/Views/DNSSettingWindow.xaml b/v2rayN/v2rayN/Views/DNSSettingWindow.xaml index d2b05ea8..a002d3f3 100644 --- a/v2rayN/v2rayN/Views/DNSSettingWindow.xaml +++ b/v2rayN/v2rayN/Views/DNSSettingWindow.xaml @@ -132,6 +132,19 @@ Style="{StaticResource DefButton}" /> + + + + + diff --git a/v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs b/v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs index fc224e96..b2608c14 100644 --- a/v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/DNSSettingWindow.xaml.cs @@ -34,12 +34,18 @@ namespace v2rayN.Views { cmbdomainStrategy4Freedom.Items.Add(it); }); + Global.SingboxDomainStrategy4Out.ForEach(it => + { + cmbdomainStrategy4Out.Items.Add(it); + }); + this.WhenActivated(disposables => { this.Bind(ViewModel, vm => vm.useSystemHosts, v => v.togUseSystemHosts.IsChecked).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.domainStrategy4Freedom, v => v.cmbdomainStrategy4Freedom.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.normalDNS, v => v.txtnormalDNS.Text).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.domainStrategy4Freedom2, v => v.cmbdomainStrategy4Out.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.normalDNS2, v => v.txtnormalDNS2.Text).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.tunDNS2, v => v.txttunDNS2.Text).DisposeWith(disposables);