diff --git a/ProxySU_Core/ProxySU_Core.csproj b/ProxySU_Core/ProxySU_Core.csproj
index d88a0b8..f54fa71 100644
--- a/ProxySU_Core/ProxySU_Core.csproj
+++ b/ProxySU_Core/ProxySU_Core.csproj
@@ -185,7 +185,7 @@
-
+
@@ -235,9 +235,7 @@
Settings.Designer.cs
-
-
-
+
@@ -250,14 +248,16 @@
-
-
-
+
+
+
+
+
diff --git a/ProxySU_Core/Templates/xray/caddy/Http2Web.caddyfile b/ProxySU_Core/Templates/xray/caddy/Http2Web.caddyfile
deleted file mode 100644
index 7e62dbc..0000000
--- a/ProxySU_Core/Templates/xray/caddy/Http2Web.caddyfile
+++ /dev/null
@@ -1,18 +0,0 @@
-##domain## {
- root * /usr/share/caddy
- file_server
- tls {
- protocols tls1.2 tls1.3
- ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
- curves x25519
- }
-
- reverse_proxy ##path## http://localhost:10000 {
- transport http {
- versions h2c 2
- }
- }
- ##reverse_Proxy1##
- ##reverse_Proxy2##
- ##reverse_Proxy3##
-}
\ No newline at end of file
diff --git a/ProxySU_Core/Templates/xray/caddy/WebSocketTLSWeb.caddyfile b/ProxySU_Core/Templates/xray/caddy/WebSocketTLSWeb.caddyfile
deleted file mode 100644
index bddb8f6..0000000
--- a/ProxySU_Core/Templates/xray/caddy/WebSocketTLSWeb.caddyfile
+++ /dev/null
@@ -1,18 +0,0 @@
-##domain## {
- root * /usr/share/caddy
- file_server
- tls {
- protocols tls1.2 tls1.3
- ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
- curves x25519
- }
- @xray_websocket {
- path ##path##
- header Connection *Upgrade*
- header Upgrade websocket
- }
- reverse_proxy @xray_websocket localhost:10000
- ##reverse_Proxy1##
- ##reverse_Proxy2##
- ##reverse_Proxy3##
-}
\ No newline at end of file
diff --git a/ProxySU_Core/Templates/xray/caddy/base.caddyfile b/ProxySU_Core/Templates/xray/caddy/base.caddyfile
new file mode 100644
index 0000000..537fbdc
--- /dev/null
+++ b/ProxySU_Core/Templates/xray/caddy/base.caddyfile
@@ -0,0 +1,5 @@
+##domain##:80 {
+ root * /usr/share/caddy
+ file_server
+ ##reverse_proxy##
+}
\ No newline at end of file
diff --git a/ProxySU_Core/Templates/xray/caddy/vlessTcpTlsWeb.caddyfile b/ProxySU_Core/Templates/xray/caddy/vlessTcpTlsWeb.caddyfile
deleted file mode 100644
index 0e9f3d2..0000000
--- a/ProxySU_Core/Templates/xray/caddy/vlessTcpTlsWeb.caddyfile
+++ /dev/null
@@ -1,10 +0,0 @@
-:8800 {
- root * /usr/share/caddy
- file_server
- ##reverse_Proxy1##
- ##reverse_Proxy2##
- ##reverse_Proxy3##
-}
-##domain##:80 {
- redir https://##domain##{uri}
-}
\ No newline at end of file
diff --git a/ProxySU_Core/Templates/xray/server/00_log/00_log.json b/ProxySU_Core/Templates/xray/server/00_log/00_log.json
deleted file mode 100644
index 6a4cf00..0000000
--- a/ProxySU_Core/Templates/xray/server/00_log/00_log.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "log": {
- "loglevel": "warning"
- }
-}
\ No newline at end of file
diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/05_inbounds.json b/ProxySU_Core/Templates/xray/server/05_inbounds/05_inbounds.json
index 9a8d634..24465ae 100644
--- a/ProxySU_Core/Templates/xray/server/05_inbounds/05_inbounds.json
+++ b/ProxySU_Core/Templates/xray/server/05_inbounds/05_inbounds.json
@@ -1,3 +1,3 @@
{
- "inbounds": []
+ "inbounds": []
}
diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/Trojan_TCP_TLS.json b/ProxySU_Core/Templates/xray/server/05_inbounds/Trojan_TCP_TLS.json
new file mode 100644
index 0000000..0aca4d2
--- /dev/null
+++ b/ProxySU_Core/Templates/xray/server/05_inbounds/Trojan_TCP_TLS.json
@@ -0,0 +1,26 @@
+{
+ "port": 1310,
+ "listen": "127.0.0.1",
+ "protocol": "trojan",
+ "settings": {
+ "clients": [
+ {
+ "password": "",
+ "level": 0,
+ "email": "love@example.com"
+ }
+ ],
+ "fallbacks": [
+ {
+ "dest": 80
+ }
+ ]
+ },
+ "streamSettings": {
+ "network": "tcp",
+ "security": "none",
+ "tcpSettings": {
+ "acceptProxyProtocol": true
+ }
+ }
+}
diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_HTTP2_TLS.json b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_HTTP2_TLS.json
deleted file mode 100644
index a9e1b2f..0000000
--- a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_HTTP2_TLS.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "inbounds": [
- {
- "port": 10000,
- "listen": "127.0.0.1",
- "protocol": "vless",
- "settings": {
- "clients": [
- {
- "id": ""
- }
- ],
- "decryption": "none"
- },
- "streamSettings": {
- "security": "none",
- "network": "h2",
- "httpSettings": {
- "path": "",
- "host": [
- ""
- ]
- }
- }
- }
- ]
-}
diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_TCP_TLS_WS.json b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_TCP_TLS_WS.json
deleted file mode 100644
index fa16dbf..0000000
--- a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_TCP_TLS_WS.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "inbounds": [
- {
- "port": 443,
- "listen": "127.0.0.1",
- "protocol": "vless",
- "settings": {
- "clients": [
- {
- "id": ""
- }
- ],
- "decryption": "none"
- },
- "streamSettings": {
- "network": "ws",
- "security": "none",
- "wsSettings": {
- "path": ""
- }
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_TCP_XTLS.json b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_TCP_XTLS.json
new file mode 100644
index 0000000..07a491a
--- /dev/null
+++ b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_TCP_XTLS.json
@@ -0,0 +1,31 @@
+{
+ "port": 443,
+ "protocol": "vless",
+ "settings": {
+ "clients": [
+ {
+ "id": "",
+ "flow": "xtls-rprx-direct",
+ "level": 0,
+ "email": "love@example.com"
+ }
+ ],
+ "decryption": "none",
+ "fallbacks": []
+ },
+ "streamSettings": {
+ "network": "tcp",
+ "security": "xtls",
+ "xtlsSettings": {
+ "alpn": [
+ "http/1.1"
+ ],
+ "certificates": [
+ {
+ "certificateFile": "/usr/local/etc/xray/ssl/xray_ssl.crt",
+ "keyFile": "/usr/local/etc/xray/ssl/xray_ssl.key"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_WS_TLS.json b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_WS_TLS.json
new file mode 100644
index 0000000..1b7d25c
--- /dev/null
+++ b/ProxySU_Core/Templates/xray/server/05_inbounds/VLESS_WS_TLS.json
@@ -0,0 +1,23 @@
+{
+ "port": 1234,
+ "listen": "127.0.0.1",
+ "protocol": "vless",
+ "settings": {
+ "clients": [
+ {
+ "id": "",
+ "level": 0,
+ "email": "love@example.com"
+ }
+ ],
+ "decryption": "none"
+ },
+ "streamSettings": {
+ "network": "ws",
+ "security": "none",
+ "wsSettings": {
+ "acceptProxyProtocol": true,
+ "path": "/websocket"
+ }
+ }
+}
diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/VMESS_TCP_TLS.json b/ProxySU_Core/Templates/xray/server/05_inbounds/VMESS_TCP_TLS.json
new file mode 100644
index 0000000..015d566
--- /dev/null
+++ b/ProxySU_Core/Templates/xray/server/05_inbounds/VMESS_TCP_TLS.json
@@ -0,0 +1,29 @@
+{
+ "port": 443,
+ "listen": "127.0.0.1",
+ "protocol": "vmess",
+ "settings": {
+ "clients": [
+ {
+ "id": "",
+ "level": 0,
+ "email": "love@example.com"
+ }
+ ]
+ },
+ "streamSettings": {
+ "network": "tcp",
+ "security": "none",
+ "tcpSettings": {
+ "acceptProxyProtocol": true,
+ "header": {
+ "type": "http",
+ "request": {
+ "path": [
+ "/vmesstcp"
+ ]
+ }
+ }
+ }
+ }
+},
diff --git a/ProxySU_Core/Templates/xray/server/05_inbounds/VMESS_WS_TLS.json b/ProxySU_Core/Templates/xray/server/05_inbounds/VMESS_WS_TLS.json
new file mode 100644
index 0000000..bbf6dbb
--- /dev/null
+++ b/ProxySU_Core/Templates/xray/server/05_inbounds/VMESS_WS_TLS.json
@@ -0,0 +1,22 @@
+{
+ "port": 3456,
+ "listen": "127.0.0.1",
+ "protocol": "vmess",
+ "settings": {
+ "clients": [
+ {
+ "id": "",
+ "level": 0,
+ "email": "love@example.com"
+ }
+ ]
+ },
+ "streamSettings": {
+ "network": "ws",
+ "security": "none",
+ "wsSettings": {
+ "acceptProxyProtocol": true,
+ "path": "/vmessws"
+ }
+ }
+}
diff --git a/ProxySU_Core/ViewModels/Developers/ConfigBuilder.cs b/ProxySU_Core/ViewModels/Developers/ConfigBuilder.cs
new file mode 100644
index 0000000..6bc02f8
--- /dev/null
+++ b/ProxySU_Core/ViewModels/Developers/ConfigBuilder.cs
@@ -0,0 +1,167 @@
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace ProxySU_Core.ViewModels.Developers
+{
+ public class ConfigBuilder
+ {
+ public dynamic xrayConfig { get; set; }
+ public string CaddyConfig { get; set; }
+
+ private const string ServerLogDir = @"Templates\xray\server\00_log";
+ private const string ServerApiDir = @"Templates\xray\server\01_api";
+ private const string ServerDnsDir = @"Templates\xray\server\02_dns";
+ private const string ServerRoutingDir = @"Templates\xray\server\03_routing";
+ private const string ServerPolicyDir = @"Templates\xray\server\04_policy";
+ private const string ServerInboundsDir = @"Templates\xray\server\05_inbounds";
+ private const string ServerOutboundsDir = @"Templates\xray\server\06_outbounds";
+ private const string ServerTransportDir = @"Templates\xray\server\07_transport";
+ private const string ServerStatsDir = @"Templates\xray\server\08_stats";
+ private const string ServerReverseDir = @"Templates\xray\server\09_reverse";
+ private const string CaddyFileDir = @"Templates\xray\caddy";
+
+ public const int VLESS_TCP_Port = 1110;
+ public const int VLESS_WS_Port = 1111;
+ public const int VMESS_TCP_Port = 2110;
+ public const int VMESS_WS_Port = 2111;
+ public const int Trojan_TCP_Port = 3110;
+
+
+ public static dynamic LoadXrayConfig()
+ {
+ dynamic logObj = LoadJsonObj(Path.Combine(ServerLogDir, "00_log.json"));
+ dynamic apiObj = LoadJsonObj(Path.Combine(ServerApiDir, "01_api.json"));
+ dynamic dnsObj = LoadJsonObj(Path.Combine(ServerDnsDir, "02_dns.json"));
+ dynamic routingObj = LoadJsonObj(Path.Combine(ServerRoutingDir, "03_routing.json"));
+ dynamic policyObj = LoadJsonObj(Path.Combine(ServerPolicyDir, "04_policy.json"));
+ dynamic inboundsObj = LoadJsonObj(Path.Combine(ServerInboundsDir, "05_inbounds.json"));
+ dynamic outboundsObj = LoadJsonObj(Path.Combine(ServerOutboundsDir, "06_outbounds.json"));
+ dynamic transportObj = LoadJsonObj(Path.Combine(ServerTransportDir, "07_transport.json"));
+ dynamic statsObj = LoadJsonObj(Path.Combine(ServerStatsDir, "08_stats.json"));
+ dynamic reverseObj = LoadJsonObj(Path.Combine(ServerReverseDir, "09_reverse.json"));
+
+ return new
+ {
+ log = logObj["log"],
+ api = apiObj["api"],
+ dns = dnsObj["dns"],
+ routing = routingObj["routing"],
+ policy = policyObj["policy"],
+ inbounds = inboundsObj["inbounds"],
+ outbounds = outboundsObj["outbounds"],
+ transport = transportObj["transport"],
+ stats = statsObj["stats"],
+ reverse = reverseObj["reverse"]
+ };
+
+
+ }
+
+ public static string BuildCaddyConfig(XrayParameters parameters)
+ {
+ var caddyStr = File.ReadAllText(Path.Combine(CaddyFileDir, "base.caddyfile"));
+ caddyStr.Replace("##domain##", parameters.Domain);
+ if (!string.IsNullOrEmpty(parameters.MaskDomain))
+ {
+ caddyStr.Replace("##server_proxy##", $"reverse_proxy http://{parameters.MaskDomain} {{ header_up Host {parameters.MaskDomain} }}");
+ }
+ else
+ {
+ caddyStr.Replace("##server_proxy##", "");
+ }
+
+ return caddyStr;
+ }
+
+ public static string BuildXrayConfig(XrayParameters parameters)
+ {
+ var xrayConfig = LoadXrayConfig();
+ var baseBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VLESS_TCP_XTLS.json"));
+ baseBound["port"] = VLESS_TCP_Port;
+ baseBound["settings"]["fallbacks"].Add(new
+ {
+ dest = 80,
+ xver = 1,
+ });
+ xrayConfig["inbounds"].Add(baseBound);
+
+ switch (parameters.Type)
+ {
+ case XrayType.VLESS_TCP_TLS:
+ case XrayType.VLESS_TCP_XTLS:
+ baseBound["settings"]["clients"][0]["id"] = parameters.UUID;
+ break;
+ case XrayType.VLESS_WS_TLS:
+ var wsInbound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VLESS_WS_TLS.json"));
+ wsInbound["port"] = VLESS_WS_Port;
+ wsInbound["settings"]["clients"][0]["id"] = parameters.UUID;
+ wsInbound["streamSettings"]["wsSettings"]["path"] = parameters.VlessWsPath;
+ baseBound["settings"]["fallbacks"].Add(new
+ {
+ dest = VLESS_WS_Port,
+ path = parameters.VlessWsPath,
+ xver = 1,
+ });
+ xrayConfig["inbounds"].Add(wsInbound);
+ break;
+ case XrayType.VMESS_TCP_TLS:
+ var mtcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_TCP_TLS.json"));
+ mtcpBound["port"] = VMESS_TCP_Port;
+ mtcpBound["settings"]["clients"][0]["id"] = parameters.UUID;
+ mtcpBound["streamSettings"]["tcpSettings"]["header"]["request"]["path"] = parameters.VmessTcpPath;
+ baseBound["settings"]["fallbacks"].Add(new
+ {
+ dest = VMESS_TCP_Port,
+ path = parameters.VmessTcpPath,
+ xver = 1,
+ });
+ xrayConfig["inbounds"].Add(mtcpBound);
+ break;
+ case XrayType.VMESS_WS_TLS:
+ var mwsBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_WS_TLS.json"));
+ mwsBound["port"] = VMESS_WS_Port;
+ mwsBound["settings"]["clients"][0]["id"] = parameters.UUID;
+ mwsBound["streamSettings"]["wsSettings"]["path"] = parameters.VmessWsPath;
+ baseBound["settings"]["fallbacks"].Add(new
+ {
+ dest = VMESS_WS_Port,
+ path = parameters.VmessWsPath,
+ xver = 1,
+ });
+ xrayConfig["inbounds"].Add(mwsBound);
+ break;
+ case XrayType.Trojan_TCP_TLS:
+ var trojanTcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "Trojan_TCP_TLS.json"));
+ trojanTcpBound["port"] = Trojan_TCP_Port;
+ trojanTcpBound["settings"]["clients"][0]["password"] = parameters.TrojanPassword;
+ baseBound["settings"]["fallbacks"][0] = new
+ {
+ dest = Trojan_TCP_Port,
+ xver = 1,
+ };
+ xrayConfig["inbounds"].Add(trojanTcpBound);
+ break;
+ default:
+ break;
+ }
+
+ return JsonConvert.SerializeObject(xrayConfig, Formatting.Indented);
+ }
+
+ private static dynamic LoadJsonObj(string path)
+ {
+ if (File.Exists(path))
+ {
+ var jsonStr = File.ReadAllText(path, Encoding.UTF8);
+ return JsonConvert.DeserializeObject(jsonStr);
+ }
+ return null;
+ }
+
+ }
+
+}
diff --git a/ProxySU_Core/ViewModels/Developers/Developer.cs b/ProxySU_Core/ViewModels/Developers/Developer.cs
deleted file mode 100644
index 9488632..0000000
--- a/ProxySU_Core/ViewModels/Developers/Developer.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace ProxySU_Core.ViewModels.Developers
-{
- public class Developer
- {
- public string Name { get; set; }
-
- public string TemplateName { get; set; }
-
- public string Description { get; set; }
- }
-}
diff --git a/ProxySU_Core/ViewModels/Developers/Project.cs b/ProxySU_Core/ViewModels/Developers/Project.cs
index bef77c6..de90a6a 100644
--- a/ProxySU_Core/ViewModels/Developers/Project.cs
+++ b/ProxySU_Core/ViewModels/Developers/Project.cs
@@ -336,6 +336,32 @@ namespace ProxySU_Core.ViewModels.Developers
return cmd.Trim() == "1";
}
+ ///
+ /// 安装 Caddy
+ ///
+ protected void InstallCaddy()
+ {
+ if (CmdType == CmdType.Apt)
+ {
+ RunCmd("sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https");
+ RunCmd("curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo apt-key add -");
+ RunCmd("curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee -a /etc/apt/sources.list.d/caddy-stable.list");
+ RunCmd("sudo apt update");
+ RunCmd("sudo apt install caddy");
+ }
+ else if (CmdType == CmdType.Dnf)
+ {
+ RunCmd("dnf install 'dnf-command(copr)'");
+ RunCmd("dnf copr enable @caddy/caddy");
+ RunCmd("dnf install caddy");
+ }
+ else if (CmdType == CmdType.Yum)
+ {
+ RunCmd("yum install yum-plugin-copr");
+ RunCmd("yum copr enable @caddy/caddy");
+ RunCmd("yum install caddy");
+ }
+ }
#region 检测系统环境
diff --git a/ProxySU_Core/ViewModels/Developers/XrayParameters.cs b/ProxySU_Core/ViewModels/Developers/XrayParameters.cs
index cb612bb..4c47c32 100644
--- a/ProxySU_Core/ViewModels/Developers/XrayParameters.cs
+++ b/ProxySU_Core/ViewModels/Developers/XrayParameters.cs
@@ -25,11 +25,6 @@ namespace ProxySU_Core.ViewModels.Developers
/// vless tcp路径
///
public string VlessTcpPath { get; set; }
-
- ///
- /// vless http路径
- ///
- public string VlessHttpPath { get; set; }
///
/// vmess ws路径
@@ -42,9 +37,14 @@ namespace ProxySU_Core.ViewModels.Developers
public string VmessTcpPath { get; set; }
///
- /// vmess http路径
+ /// trojan tcp路径
///
- public string VmessHttpPath { get; set; }
+ public string TrojanTcpPath { get; set; }
+
+ ///
+ /// trojan密码
+ ///
+ public string TrojanPassword { get; set; }
///
/// 域名
@@ -60,25 +60,39 @@ namespace ProxySU_Core.ViewModels.Developers
/// 安装类型
///
public XrayType Type { get; set; }
+
+
+ public string GetPath()
+ {
+ switch (Type)
+ {
+ case XrayType.VLESS_TCP_TLS:
+ return VlessTcpPath;
+ case XrayType.VLESS_TCP_XTLS:
+ return VlessTcpPath;
+ case XrayType.VLESS_WS_TLS:
+ return VlessWsPath;
+ case XrayType.VMESS_TCP_TLS:
+ return VmessTcpPath;
+ case XrayType.VMESS_WS_TLS:
+ return VmessWsPath;
+ case XrayType.Trojan_TCP_TLS:
+ return TrojanTcpPath;
+ default:
+ return string.Empty;
+ }
+ }
}
public enum XrayType
{
- Shadowsocks_AEAD,
- Shadowsocks_TCP,
- Sockets5_TLS,
- Trojan_TCP_TLS,
+ VLESS_TCP_TLS,
+ VLESS_TCP_XTLS,
+ VLESS_WS_TLS,
- // vless
- VLESS_H2C_Caddy2,
- VLESS_TCP_TLS_WS,
- VLESS_TCP_XTLS_WHATEVER,
- VLESS_mKCPSeed,
+ VMESS_TCP_TLS,
+ VMESS_WS_TLS,
- // vmess
- VMess_HTTP2,
- VMess_TCP_TLS,
- VMess_WebSocket_TLS,
- VMess_mKCPSeed,
+ Trojan_TCP_TLS
}
}
diff --git a/ProxySU_Core/ViewModels/Developers/XrayProject.cs b/ProxySU_Core/ViewModels/Developers/XrayProject.cs
index 7ef84d3..70c2e7a 100644
--- a/ProxySU_Core/ViewModels/Developers/XrayProject.cs
+++ b/ProxySU_Core/ViewModels/Developers/XrayProject.cs
@@ -12,16 +12,19 @@ namespace ProxySU_Core.ViewModels.Developers
public class XrayProject : Project
{
- private const string ServerLogPath = "/Templates/xray/server/00_log/00_log.json";
- private const string ServerApiPath = "/Templates/xray/server/01_api/01_api.json";
- private const string ServerDnsPath = "/Templates/xray/server/02_dns/02_dns.json";
- private const string ServerRoutingPath = "/Templates/xray/server/03_routing/03_routing.json";
- private const string ServerPolicyPath = "/Templates/xray/server/04_policy/04_policy.json";
- private const string ServerInboundsPath = "/Templates/xray/server/05_inbounds/05_inbounds.json";
- private const string ServerOutboundsPath = "/Templates/xray/server/06_outbounds/06_outbounds.json";
- private const string ServerTransportPath = "/Templates/xray/server/07_transport/07_transport.json";
- private const string ServerStatsPath = "/Templates/xray/server/08_stats/08_stats.json";
- private const string ServerReversePath = "/Templates/xray/server/09_reverse/09_reverse.json";
+ private const string ServerLogDir = @"Templates\xray\server\00_log";
+ private const string ServerApiDir = @"Templates\xray\server\01_api";
+ private const string ServerDnsDir = @"Templates\xray\server\02_dns";
+ private const string ServerRoutingDir = @"Templates\xray\server\03_routing";
+ private const string ServerPolicyDir = @"Templates\xray\server\04_policy";
+ private const string ServerInboundsDir = @"Templates\xray\server\05_inbounds";
+ private const string ServerOutboundsDir = @"Templates\xray\server\06_outbounds";
+ private const string ServerTransportDir = @"Templates\xray\server\07_transport";
+ private const string ServerStatsDir = @"Templates\xray\server\08_stats";
+ private const string ServerReverseDir = @"Templates\xray\server\09_reverse";
+ private const string CaddyFileDir = @"Templates\xray\caddy";
+
+ private int randomCaddyListenPort = 8800;
public XrayProject(SshClient sshClient, XrayParameters parameters, Action writeOutput) : base(sshClient, parameters, writeOutput)
{
@@ -55,7 +58,11 @@ namespace ProxySU_Core.ViewModels.Developers
ValidateDomain();
- InstallXray();
+ InstallXrayWithCert();
+
+ InstallCaddy();
+
+ UploadCaddyFile();
}
catch (Exception ex)
{
@@ -63,7 +70,16 @@ namespace ProxySU_Core.ViewModels.Developers
}
}
- private void InstallXray()
+ private void UploadCaddyFile()
+ {
+ var configJson = ConfigBuilder.BuildCaddyConfig(Parameters);
+ var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson));
+ RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back");
+ UploadFile(stream, "/etc/caddy/Caddyfile");
+ RunCmd("systemctl reload caddy");
+ }
+
+ private void InstallXrayWithCert()
{
RunCmd("bash -c \"$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)\" @ install");
@@ -82,88 +98,16 @@ namespace ProxySU_Core.ViewModels.Developers
RunCmd(@"mv /usr/local/etc/xray/config.json /usr/local/etc/xray/config.json.1");
}
- UploadXrayConfig();
+ InstallCertToXray();
+
+
+ var configJson = ConfigBuilder.BuildXrayConfig(Parameters);
+ var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson));
+ RunCmd("rm -rf /usr/local/etc/xray/config.json");
+ UploadFile(stream, "/usr/local/etc/xray/config.json");
}
- private int GetRandomPort()
- {
- var random = new Random();
- return random.Next(10001, 60000);
- }
-
- private void UploadXrayConfig()
- {
- dynamic logObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerLogPath));
- dynamic apiObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerApiPath));
- dynamic dnsObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerDnsPath));
- dynamic routingObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerRoutingPath));
- dynamic policyObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerPolicyPath));
- dynamic inboundsObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerInboundsPath));
- dynamic outboundsObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerOutboundsPath));
- dynamic transportObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerTransportPath));
- dynamic statsObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerStatsPath));
- dynamic reverseObj = JsonConvert.DeserializeObject(File.ReadAllText(ServerReversePath));
-
- switch (Parameters.Type)
- {
- case XrayType.Shadowsocks_AEAD:
- break;
- case XrayType.Shadowsocks_TCP:
- break;
- case XrayType.Sockets5_TLS:
- break;
- case XrayType.Trojan_TCP_TLS:
- break;
- case XrayType.VLESS_H2C_Caddy2:
- inboundsObj = JsonConvert.DeserializeObject(File.ReadAllText("/Templates/xray/server/05_inbounds/VLESS_HTTP2_TLS.json"));
- inboundsObj[0]["port"] = GetRandomPort();
- inboundsObj[0]["settings"]["clients"][0]["id"] = Parameters.UUID;
- inboundsObj[0]["streamSettings"]["httpSettings"]["path"] = Parameters.VlessHttpPath;
- inboundsObj[0]["streamSettings"]["httpSettings"]["host"][0] = Parameters.Domain;
- break;
- case XrayType.VLESS_TCP_TLS_WS:
- inboundsObj = JsonConvert.DeserializeObject(File.ReadAllText("/Templates/xray/server/05_inbounds/VLESS_TCP_TLS_WS.json"));
- inboundsObj[0]["port"] = GetRandomPort();
- inboundsObj[0]["settings"]["clients"][0]["id"] = Parameters.UUID;
- inboundsObj[0]["streamSettings"]["httpSettings"]["path"] = Parameters.VlessWsPath;
- break;
- case XrayType.VLESS_TCP_XTLS_WHATEVER:
- break;
- case XrayType.VLESS_mKCPSeed:
- break;
- case XrayType.VMess_HTTP2:
- break;
- case XrayType.VMess_TCP_TLS:
- break;
- case XrayType.VMess_WebSocket_TLS:
- break;
- case XrayType.VMess_mKCPSeed:
- break;
- default:
- break;
- }
-
- var serverConfig = new
- {
- log = logObj["log"],
- api = apiObj["api"],
- dns = dnsObj["dns"],
- routing = routingObj["routing"],
- policy = policyObj["policy"],
- inbounds = inboundsObj["inbounds"],
- outbounds = outboundsObj["outbounds"],
- transport = transportObj["transport"],
- stats = statsObj["stats"],
- reverse = reverseObj["reverse"]
- };
-
- var json = JsonConvert.SerializeObject(serverConfig);
- var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(json));
- UploadFile(jsonStream, "/usr/local/etc/xray/config.json");
- jsonStream.Dispose();
- }
-
- private void InstallCert()
+ private void InstallCertToXray()
{
// 安装依赖
RunCmd(GetInstallCmd("socat"));
@@ -223,16 +167,28 @@ namespace ProxySU_Core.ViewModels.Developers
RunCmd(@"chmod 644 /usr/local/etc/xray/ssl/xray_ssl.key");
}
- private void InstallCaddy()
- {
-
- }
-
private string GetRandomEmail()
{
Random r = new Random();
var num = r.Next(200000000, 900000000);
return $"{num}@qq.com";
}
+
+ private int GetRandomPort()
+ {
+ var random = new Random();
+ return random.Next(10001, 60000);
+ }
+
+ private dynamic LoadJsonObj(string path)
+ {
+ if (File.Exists(path))
+ {
+ var jsonStr = File.ReadAllText(path, Encoding.UTF8);
+ return JsonConvert.DeserializeObject(jsonStr);
+ }
+ return null;
+ }
+
}
}