From efe2124274fb8ff1e7d25b4093c60af1a7d72415 Mon Sep 17 00:00:00 2001 From: DHR60 Date: Wed, 9 Apr 2025 12:50:54 +0800 Subject: [PATCH] add xray wireguard support --- v2rayN/ServiceLib/Common/JsonUtils.cs | 4 ++- v2rayN/ServiceLib/Handler/CoreHandler.cs | 2 +- v2rayN/ServiceLib/Models/V2rayConfig.cs | 20 +++++++++++++ .../CoreConfig/CoreConfigV2rayService.cs | 28 +++++++++++++++---- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/v2rayN/ServiceLib/Common/JsonUtils.cs b/v2rayN/ServiceLib/Common/JsonUtils.cs index 9ffa00ca..ea651022 100644 --- a/v2rayN/ServiceLib/Common/JsonUtils.cs +++ b/v2rayN/ServiceLib/Common/JsonUtils.cs @@ -1,3 +1,4 @@ +using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; @@ -86,7 +87,8 @@ public class JsonUtils var options = new JsonSerializerOptions { WriteIndented = indented, - DefaultIgnoreCondition = nullValue ? JsonIgnoreCondition.Never : JsonIgnoreCondition.WhenWritingNull + DefaultIgnoreCondition = nullValue ? JsonIgnoreCondition.Never : JsonIgnoreCondition.WhenWritingNull, + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping // 避免转义加号 }; result = JsonSerializer.Serialize(obj, options); } diff --git a/v2rayN/ServiceLib/Handler/CoreHandler.cs b/v2rayN/ServiceLib/Handler/CoreHandler.cs index c3535a4a..41ea866d 100644 --- a/v2rayN/ServiceLib/Handler/CoreHandler.cs +++ b/v2rayN/ServiceLib/Handler/CoreHandler.cs @@ -101,7 +101,7 @@ public class CoreHandler public async Task LoadCoreConfigSpeedtest(List selecteds) { - var coreType = selecteds.Exists(t => t.ConfigType is EConfigType.Hysteria2 or EConfigType.TUIC or EConfigType.WireGuard) ? ECoreType.sing_box : ECoreType.Xray; + var coreType = selecteds.Exists(t => t.ConfigType is EConfigType.Hysteria2 or EConfigType.TUIC) ? ECoreType.sing_box : ECoreType.Xray; var fileName = string.Format(Global.CoreSpeedtestConfigFileName, Utils.GetGuid(false)); var configPath = Utils.GetBinConfigPath(fileName); var result = await CoreConfigHandler.GenerateClientSpeedtestConfig(_config, configPath, selecteds, coreType); diff --git a/v2rayN/ServiceLib/Models/V2rayConfig.cs b/v2rayN/ServiceLib/Models/V2rayConfig.cs index ca6636b7..d080d14c 100644 --- a/v2rayN/ServiceLib/Models/V2rayConfig.cs +++ b/v2rayN/ServiceLib/Models/V2rayConfig.cs @@ -127,6 +127,26 @@ public class Outboundsettings4Ray public int? userLevel { get; set; } public FragmentItem4Ray? fragment { get; set; } + + public string? secretKey { get; set; } + + public List? address { get; set; } + + public List? peers { get; set; } + + public bool? noKernelTun { get; set; } + + public int? mtu { get; set; } + + public List? reserved { get; set; } + + public int? workers { get; set; } +} + +public class WireguardPeer4Ray +{ + public string endpoint { get; set; } + public string publicKey { get; set; } } public class VnextItem4Ray diff --git a/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs b/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs index c09d325d..4106dc43 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/CoreConfigV2rayService.cs @@ -120,7 +120,7 @@ public class CoreConfigV2rayService { continue; } - if (it.ConfigType is EConfigType.Hysteria2 or EConfigType.TUIC or EConfigType.WireGuard) + if (it.ConfigType is EConfigType.Hysteria2 or EConfigType.TUIC) { continue; } @@ -805,6 +805,26 @@ public class CoreConfigV2rayService outbound.settings.vnext = null; break; } + case EConfigType.WireGuard: + { + var peer = new WireguardPeer4Ray + { + publicKey = node.PublicKey, + endpoint = node.Address + ":" + node.Port.ToString() + }; + var setting = new Outboundsettings4Ray + { + address = Utils.String2List(node.RequestHost), + secretKey = node.Id, + reserved = Utils.String2List(node.Path)?.Select(int.Parse).ToList(), + mtu = node.ShortId.IsNullOrEmpty() ? Global.TunMtus.First() : node.ShortId.ToInt(), + peers = new List { peer } + }; + outbound.settings = setting; + outbound.settings.vnext = null; + outbound.settings.servers = null; + break; + } } outbound.protocol = Global.ProtocolTypes[node.ConfigType]; @@ -1270,8 +1290,7 @@ public class CoreConfigV2rayService if (prevNode is not null && prevNode.ConfigType != EConfigType.Custom && prevNode.ConfigType != EConfigType.Hysteria2 - && prevNode.ConfigType != EConfigType.TUIC - && prevNode.ConfigType != EConfigType.WireGuard) + && prevNode.ConfigType != EConfigType.TUIC) { var prevOutbound = JsonUtils.Deserialize(txtOutbound); await GenOutbound(prevNode, prevOutbound); @@ -1289,8 +1308,7 @@ public class CoreConfigV2rayService if (nextNode is not null && nextNode.ConfigType != EConfigType.Custom && nextNode.ConfigType != EConfigType.Hysteria2 - && nextNode.ConfigType != EConfigType.TUIC - && nextNode.ConfigType != EConfigType.WireGuard) + && nextNode.ConfigType != EConfigType.TUIC) { var nextOutbound = JsonUtils.Deserialize(txtOutbound); await GenOutbound(nextNode, nextOutbound);