diff --git a/Netch/Resources/zh-CN b/Netch/Resources/zh-CN index 42b828fa..12a0eb6c 100644 --- a/Netch/Resources/zh-CN +++ b/Netch/Resources/zh-CN @@ -51,6 +51,8 @@ "Path": "路径", "QUIC Security": "QUIC 加密方式", "QUIC Secret": "QUIC 加密密钥", + "GRPC Mode": "QUIC 模式", + "GRPC ServiceName": "QUIC 服务名称", "TLS Secure": "TLS 底层传输安全", "Use Mux": "Mux 多路复用", "Encrypt Method": "加密方式", diff --git a/Netch/Servers/V2ray/Models/V2rayConfig.cs b/Netch/Servers/V2ray/Models/V2rayConfig.cs index 09659933..e0c813c5 100644 --- a/Netch/Servers/V2ray/Models/V2rayConfig.cs +++ b/Netch/Servers/V2ray/Models/V2rayConfig.cs @@ -183,6 +183,8 @@ namespace Netch.Servers.Models public QuicSettings quicSettings { get; set; } public TlsSettings xtlsSettings { get; set; } + + public GrpcSettings grpcSettings { get; set; } } public class TlsSettings @@ -278,4 +280,9 @@ namespace Netch.Servers.Models public Header header { get; set; } } + + public class GrpcSettings + { + public string serviceName { get; set; } + } } \ No newline at end of file diff --git a/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs b/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs index 5ec34dfc..790cda26 100644 --- a/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs +++ b/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs @@ -310,6 +310,14 @@ namespace Netch.Servers.Utils streamSettings.quicSettings = quicSettings; break; + case "grpc": + var grpcSettings = new GrpcSettings + { + serviceName = server.GRPCServiceName + }; + + streamSettings.grpcSettings = grpcSettings; + break; default: if (server.FakeType == "http") { diff --git a/Netch/Servers/VLESS/VLESS.cs b/Netch/Servers/VLESS/VLESS.cs index 5464e826..8cb4468d 100644 --- a/Netch/Servers/VLESS/VLESS.cs +++ b/Netch/Servers/VLESS/VLESS.cs @@ -41,5 +41,7 @@ namespace Netch.Servers public static List TransferProtocols => VMessGlobal.TransferProtocols; public static List QUIC => VMessGlobal.QUIC; + + public static List GRPCModes => VMessGlobal.GRPCModes; } } \ No newline at end of file diff --git a/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs index f2f05d38..e82c1cd8 100644 --- a/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs +++ b/Netch/Servers/VLESS/VLESSForm/VLESSForm.cs @@ -28,6 +28,8 @@ namespace Netch.Servers.VLESSForm CreateTextBox("Path", "Path", s => true, s => server.Path = s, server.Path); CreateComboBox("QUICSecurity", "QUIC Security", VLESSGlobal.QUIC, s => server.QUICSecure = s, server.QUICSecure); CreateTextBox("QUICSecret", "QUIC Secret", s => true, s => server.QUICSecret = s, server.QUICSecret); + CreateComboBox("GRPCMode", "GRPC Mode", VLESSGlobal.GRPCModes, s => server.GRPCMode = s, server.GRPCMode); + CreateTextBox("GRPCServiceName", "GRPC ServiceName", s => true, s => server.GRPCServiceName = s, server.GRPCServiceName); CreateComboBox("UseMux", "Use Mux", new List { "", "true", "false" }, diff --git a/Netch/Servers/VMess/Form/VMessForm.cs b/Netch/Servers/VMess/Form/VMessForm.cs index 9e133d97..041a0b27 100644 --- a/Netch/Servers/VMess/Form/VMessForm.cs +++ b/Netch/Servers/VMess/Form/VMessForm.cs @@ -23,6 +23,8 @@ namespace Netch.Servers.VMess.Form CreateTextBox("Path", "Path", s => true, s => server.Path = s, server.Path); CreateComboBox("QUICSecurity", "QUIC Security", VMessGlobal.QUIC, s => server.QUICSecure = s, server.QUICSecure); CreateTextBox("QUICSecret", "QUIC Secret", s => true, s => server.QUICSecret = s, server.QUICSecret); + CreateComboBox("GRPCMode", "GRPC Mode", VMessGlobal.GRPCModes, s => server.GRPCMode = s, server.GRPCMode); + CreateTextBox("GRPCServiceName", "GRPC ServiceName", s => true, s => server.GRPCServiceName = s, server.GRPCServiceName); CreateComboBox("UseMux", "Use Mux", new List { "", "true", "false" }, diff --git a/Netch/Servers/VMess/VMess.cs b/Netch/Servers/VMess/VMess.cs index 9e9f2743..76e2cbce 100644 --- a/Netch/Servers/VMess/VMess.cs +++ b/Netch/Servers/VMess/VMess.cs @@ -54,6 +54,16 @@ namespace Netch.Servers.VMess /// public string? QUICSecret { get; set; } = string.Empty; + /// + /// GRPC 服务名称 + /// + public string? GRPCServiceName { get; set; } + + /// + /// GRPC 模式 + /// + public string? GRPCMode { get; set; } = VMessGlobal.GRPCModes[0]; + /// /// TLS 底层传输安全 /// @@ -92,6 +102,12 @@ namespace Netch.Servers.VMess "chacha20-poly1305" }; + public static readonly List GRPCModes = new List() + { + "gun", + "multi" + }; + /// /// V2Ray 传输协议 /// @@ -101,7 +117,8 @@ namespace Netch.Servers.VMess "kcp", "ws", "h2", - "quic" + "quic", + "grpc" }; ///