diff --git a/Netch/Resources/zh-CN b/Netch/Resources/zh-CN
index 42b828fa..7e97dce7 100644
--- a/Netch/Resources/zh-CN
+++ b/Netch/Resources/zh-CN
@@ -48,9 +48,11 @@
"Transfer Protocol": "传输协议",
"Fake Type": "伪装类型",
"Host": "主机",
- "Path": "路径",
+ "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..dd7827cd 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,11 @@ namespace Netch.Servers.Models
public Header header { get; set; }
}
+
+ public class GrpcSettings
+ {
+ public string serviceName { get; set; }
+
+ public bool multiMode { get; set; }
+ }
}
\ No newline at end of file
diff --git a/Netch/Servers/V2ray/Models/V2rayNSharing.cs b/Netch/Servers/V2ray/Models/V2rayNSharing.cs
index 8a162e4f..a5af695a 100644
--- a/Netch/Servers/V2ray/Models/V2rayNSharing.cs
+++ b/Netch/Servers/V2ray/Models/V2rayNSharing.cs
@@ -31,7 +31,7 @@
public string net { get; set; } = string.Empty;
///
- /// 伪装路径
+ /// 伪装路径/服务名称
///
public string? path { get; set; } = string.Empty;
diff --git a/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs b/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs
index 5ec34dfc..c668a42c 100644
--- a/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs
+++ b/Netch/Servers/V2ray/Utils/V2rayConfigUtils.cs
@@ -310,6 +310,20 @@ namespace Netch.Servers.Utils
streamSettings.quicSettings = quicSettings;
break;
+ case "grpc":
+ var grpcSettings = new GrpcSettings
+ {
+ serviceName = server.Path,
+ multiMode = false
+ };
+
+ if (server.FakeType == "multi")
+ {
+ grpcSettings.multiMode = true;
+ }
+
+ streamSettings.grpcSettings = grpcSettings;
+ break;
default:
if (server.FakeType == "http")
{
diff --git a/Netch/Servers/V2ray/V2rayUtils.cs b/Netch/Servers/V2ray/V2rayUtils.cs
index 4f2962b6..4f8b6636 100644
--- a/Netch/Servers/V2ray/V2rayUtils.cs
+++ b/Netch/Servers/V2ray/V2rayUtils.cs
@@ -47,6 +47,10 @@ namespace Netch.Servers
server.QUICSecret = parameter.Get("key") ?? "";
server.FakeType = parameter.Get("headerType") ?? "none";
break;
+ case "grpc":
+ server.FakeType = parameter.Get("mode") ?? "gun";
+ server.Path = parameter.Get("serviceName") ?? "";
+ break;
}
server.TLSSecureType = parameter.Get("security") ?? "none";
@@ -115,6 +119,14 @@ namespace Netch.Servers
if (server.FakeType != "none")
parameter.Add("headerType", server.FakeType);
+ break;
+ case "grpc":
+ if (!string.IsNullOrEmpty(server.Path))
+ parameter.Add("serviceName", server.Path);
+
+ if (server.FakeType == "gun" || server.FakeType == "multi")
+ parameter.Add("mode", server.FakeType);
+
break;
}
diff --git a/Netch/Servers/VMess/VMess.cs b/Netch/Servers/VMess/VMess.cs
index 9e9f2743..1e88f53b 100644
--- a/Netch/Servers/VMess/VMess.cs
+++ b/Netch/Servers/VMess/VMess.cs
@@ -101,7 +101,8 @@ namespace Netch.Servers.VMess
"kcp",
"ws",
"h2",
- "quic"
+ "quic",
+ "grpc"
};
///
@@ -115,7 +116,9 @@ namespace Netch.Servers.VMess
"utp",
"wechat-video",
"dtls",
- "wireguard"
+ "wireguard",
+ "gun",
+ "multi"
};
///