From c35d2d543473a2ee9f63a574719aad7d4ab9d87c Mon Sep 17 00:00:00 2001 From: next-autumn Date: Sat, 8 May 2021 11:45:46 +0800 Subject: [PATCH] add trojan-go project --- ProxySU_Core/Models/Developers/IParameters.cs | 10 +- ProxySU_Core/Models/Developers/Project.cs | 165 +++++++++++++++--- .../Developers/TrojanGoConfigBuilder.cs | 62 +++++++ .../Models/Developers/TrojanGoProject.cs | 134 ++++++++++++++ .../Models/Developers/TrojanGoSettings.cs | 29 +++ ...{ConfigBuilder.cs => XrayConfigBuilder.cs} | 5 +- ProxySU_Core/Models/Developers/XrayProject.cs | 141 ++------------- .../Models/{ => Developers}/XraySettings.cs | 13 ++ ProxySU_Core/ProxySU_Core.csproj | 13 +- .../Templates/trojan-go/base.caddyfile | 9 + .../Templates/trojan-go/trojan-go.json | 16 ++ .../RecordEditor/RecordEditorWindow.xaml | 19 +- ProxySU_Core/Views/TerminalWindow.xaml.cs | 2 +- 13 files changed, 442 insertions(+), 176 deletions(-) create mode 100644 ProxySU_Core/Models/Developers/TrojanGoConfigBuilder.cs create mode 100644 ProxySU_Core/Models/Developers/TrojanGoProject.cs create mode 100644 ProxySU_Core/Models/Developers/TrojanGoSettings.cs rename ProxySU_Core/Models/Developers/{ConfigBuilder.cs => XrayConfigBuilder.cs} (98%) rename ProxySU_Core/Models/{ => Developers}/XraySettings.cs (94%) create mode 100644 ProxySU_Core/Templates/trojan-go/base.caddyfile create mode 100644 ProxySU_Core/Templates/trojan-go/trojan-go.json diff --git a/ProxySU_Core/Models/Developers/IParameters.cs b/ProxySU_Core/Models/Developers/IParameters.cs index 194ef7d..f80f33a 100644 --- a/ProxySU_Core/Models/Developers/IParameters.cs +++ b/ProxySU_Core/Models/Developers/IParameters.cs @@ -8,16 +8,8 @@ namespace ProxySU_Core.Models.Developers { int Port { get; set; } - int VLESS_gRPC_Port { get; set; } - - int VLESS_KCP_Port { get; set; } - - int VMESS_KCP_Port { get; set; } - - int ShadowSocksPort { get; set; } - string Domain { get; set; } - List Types { get; set; } + List FreePorts { get; } } } diff --git a/ProxySU_Core/Models/Developers/Project.cs b/ProxySU_Core/Models/Developers/Project.cs index 3075ec8..5aaa233 100644 --- a/ProxySU_Core/Models/Developers/Project.cs +++ b/ProxySU_Core/Models/Developers/Project.cs @@ -305,26 +305,7 @@ namespace ProxySU_Core.Models.Developers var portList = new List(); portList.Add(80); portList.Add(Parameters.Port); - - if (Parameters.Types.Contains(XrayType.ShadowsocksAEAD)) - { - portList.Add(Parameters.ShadowSocksPort); - } - - if (Parameters.Types.Contains(XrayType.VMESS_KCP)) - { - portList.Add(Parameters.VMESS_KCP_Port); - } - - if (Parameters.Types.Contains(XrayType.VLESS_KCP)) - { - portList.Add(Parameters.VLESS_KCP_Port); - } - - if (Parameters.Types.Contains(XrayType.VLESS_gRPC)) - { - portList.Add(Parameters.VLESS_gRPC_Port); - } + portList.AddRange(Parameters.FreePorts); OpenPort(portList.ToArray()); } @@ -413,6 +394,9 @@ namespace ProxySU_Core.Models.Developers RunCmd("systemctl enable caddy.service"); } + /// + /// 卸载 Caddy + /// protected void UninstallCaddy() { RunCmd("rm -rf caddy_install.sh"); @@ -491,9 +475,11 @@ namespace ProxySU_Core.Models.Developers SetPortFree(80); SetPortFree(443); SetPortFree(Parameters.Port); - SetPortFree(Parameters.VLESS_gRPC_Port); - SetPortFree(Parameters.VLESS_KCP_Port); - SetPortFree(Parameters.ShadowSocksPort); + + Parameters.FreePorts.ForEach(port => + { + SetPortFree(port); + }); } } @@ -562,6 +548,139 @@ namespace ProxySU_Core.Models.Developers #endregion + #region BBR + private bool CheckKernelVersionBBR(string kernelVer) + { + string[] linuxKernelCompared = kernelVer.Split('.'); + if (int.Parse(linuxKernelCompared[0]) > 4) + { + return true; + } + else if (int.Parse(linuxKernelCompared[0]) < 4) + { + return false; + } + else if (int.Parse(linuxKernelCompared[0]) == 4) + { + if (int.Parse(linuxKernelCompared[1]) >= 9) + { + return true; + } + else if (int.Parse(linuxKernelCompared[1]) < 9) + { + return false; + } + + } + return false; + + } + + protected void EnableBBR() + { + var osVersion = RunCmd("uname -r"); + var canInstallBBR = CheckKernelVersionBBR(osVersion.Split('-')[0]); + + var bbrInfo = RunCmd("sysctl net.ipv4.tcp_congestion_control | grep bbr"); + var installed = bbrInfo.Contains("bbr"); + if (canInstallBBR && !installed) + { + RunCmd(@"bash -c 'echo ""net.core.default_qdisc=fq"" >> /etc/sysctl.conf'"); + RunCmd(@"bash -c 'echo ""net.ipv4.tcp_congestion_control=bbr"" >> /etc/sysctl.conf'"); + RunCmd(@"sysctl -p"); + + if (OnlyIpv6) + { + RemoveNat64(); + } + WriteOutput("BBR启动成功"); + } + + if (!canInstallBBR) + { + WriteOutput("****** 系统不满足启用BBR条件,启动失败。 ******"); + } + + } + #endregion + + /// + /// 安装证书 + /// + /// + /// + protected void InstallCert(string dirPath, string certName, string keyName) + { + string certPath = Path.Combine(dirPath, certName); + string keyPath = Path.Combine(dirPath, keyName); + + // 安装依赖 + RunCmd(GetInstallCmd("socat")); + + // 解决搬瓦工CentOS缺少问题 + RunCmd(GetInstallCmd("automake autoconf libtool")); + + // 安装Acme + var result = RunCmd($"curl https://get.acme.sh yes | sh"); + if (result.Contains("Install success")) + { + WriteOutput("安装 acme.sh 成功"); + } + else + { + WriteOutput("安装 acme.sh 失败,请联系开发者!"); + throw new Exception("安装 acme.sh 失败,请联系开发者!"); + } + + RunCmd("cd ~/.acme.sh/"); + RunCmd("alias acme.sh=~/.acme.sh/acme.sh"); + + // 申请证书 + if (OnlyIpv6) + { + var cmd = $"/root/.acme.sh/acme.sh --force --debug --issue --standalone -d {Parameters.Domain} --listen-v6"; + result = RunCmd(cmd); + } + else + { + var cmd = $"/root/.acme.sh/acme.sh --force --debug --issue --standalone -d {Parameters.Domain}"; + result = RunCmd(cmd); + } + + if (result.Contains("success")) + { + WriteOutput("申请证书成功"); + } + else + { + WriteOutput("申请证书失败,如果申请次数过多请更换二级域名,或联系开发者!"); + throw new Exception("申请证书失败,如果申请次数过多请更换二级域名,或联系开发者!"); + } + + // 安装证书 + RunCmd($"mkdir -p {dirPath}"); + RunCmd($"/root/.acme.sh/acme.sh --installcert -d {Parameters.Domain} --certpath {certPath} --keypath {keyPath} --capath {certPath}"); + + result = RunCmd($@"if [ ! -f ""{keyPath}"" ]; then echo ""0""; else echo ""1""; fi | head -n 1"); + + if (result.Contains("1")) + { + WriteOutput("安装证书成功"); + } + else + { + WriteOutput("安装证书失败,请联系开发者!"); + throw new Exception("安装证书失败,请联系开发者!"); + } + + RunCmd($"chmod 755 {dirPath}"); + } + + /// + /// 上传文件 + /// + /// + /// protected void UploadFile(Stream stream, string path) { using (var sftp = new SftpClient(_sshClient.ConnectionInfo)) diff --git a/ProxySU_Core/Models/Developers/TrojanGoConfigBuilder.cs b/ProxySU_Core/Models/Developers/TrojanGoConfigBuilder.cs new file mode 100644 index 0000000..6ad81d3 --- /dev/null +++ b/ProxySU_Core/Models/Developers/TrojanGoConfigBuilder.cs @@ -0,0 +1,62 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProxySU_Core.Models.Developers +{ + public class TrojanGoConfigBuilder + { + public static readonly int WebPort = 8088; + + public static readonly string TrojanGoSettingPath = @"Templates\trojan-go\trojan-go.json"; + + public static readonly string CaddyFilePath = @"Templates\trojan-go\base.caddyfile"; + + public static string BuildTrojanGoConfig(TrojanGoSettings parameters) + { + var jsonStr = File.ReadAllText(TrojanGoSettingPath); + var settings = JToken.FromObject(JsonConvert.DeserializeObject(jsonStr)); + + settings["remote_port"] = WebPort; + settings["password"][0] = parameters.Password; + settings["ssl"]["sni"] = parameters.Domain; + + return JsonConvert.SerializeObject(settings, Formatting.Indented, new JsonSerializerSettings() + { + NullValueHandling = NullValueHandling.Ignore + }); + } + + public static string BuildCaddyConfig(TrojanGoSettings parameters, bool useCustomWeb = false) + { + var caddyStr = File.ReadAllText(CaddyFilePath); + caddyStr.Replace("##domain##", parameters.Domain); + caddyStr.Replace("##port##", WebPort.ToString()); + + if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain)) + { + var prefix = "http://"; + if (parameters.MaskDomain.StartsWith("https://")) + { + prefix = "https://"; + } + var domain = parameters.MaskDomain + .TrimStart("http://".ToCharArray()) + .TrimStart("https://".ToCharArray()); + + caddyStr = caddyStr.Replace("##reverse_proxy##", $"reverse_proxy {prefix}{domain} {{ \n header_up Host {domain} \n }}"); + } + else + { + caddyStr = caddyStr.Replace("##reverse_proxy##", ""); + } + + return caddyStr; + } + } +} diff --git a/ProxySU_Core/Models/Developers/TrojanGoProject.cs b/ProxySU_Core/Models/Developers/TrojanGoProject.cs new file mode 100644 index 0000000..ef9bcb2 --- /dev/null +++ b/ProxySU_Core/Models/Developers/TrojanGoProject.cs @@ -0,0 +1,134 @@ +using Renci.SshNet; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace ProxySU_Core.Models.Developers +{ + public class TrojanGoProject : Project + { + public TrojanGoProject(SshClient sshClient, TrojanGoSettings parameters, Action writeOutput) : base(sshClient, parameters, writeOutput) + { + } + + public override void Install() + { + try + { + EnsureRootAuth(); + + if (FileExists("/usr/local/bin/xray")) + { + var btnResult = MessageBox.Show("已经安装Xray,是否需要重装?", "提示", MessageBoxButton.YesNo); + if (btnResult == MessageBoxResult.No) + { + MessageBox.Show("安装终止", "提示"); + return; + } + } + + WriteOutput("检测安装系统环境..."); + EnsureSystemEnv(); + WriteOutput("检测安装系统环境完成"); + + WriteOutput("配置服务器端口..."); + ConfigurePort(); + WriteOutput("端口配置完成"); + + WriteOutput("安装必要的系统工具..."); + ConfigureSoftware(); + WriteOutput("系统工具安装完成"); + + WriteOutput("检测IP6..."); + ConfigureIPv6(); + WriteOutput("检测IP6完成"); + + WriteOutput("配置防火墙..."); + ConfigureFirewall(); + WriteOutput("防火墙配置完成"); + + WriteOutput("同步系统和本地时间..."); + SyncTimeDiff(); + WriteOutput("时间同步完成"); + + WriteOutput("检测域名是否绑定本机IP..."); + ValidateDomain(); + WriteOutput("域名检测完成"); + + WriteOutput("安装Trojan-Go..."); + InstallTrojanGo(); + WriteOutput("Trojan-Go安装完成"); + + WriteOutput("安装Caddy..."); + InstallCaddy(); + WriteOutput("Caddy安装完成"); + + WriteOutput("启动BBR"); + EnableBBR(); + + UploadCaddyFile(); + WriteOutput("************"); + WriteOutput("安装完成,尽情享用吧......"); + WriteOutput("************"); + } + catch (Exception ex) + { + var errorLog = "安装终止," + ex.Message; + WriteOutput(errorLog); + MessageBox.Show(errorLog); + } + } + + private void InstallTrojanGo() + { + WriteOutput("安装Trojan-Go"); + RunCmd(@"curl https://raw.githubusercontent.com/proxysu/shellscript/master/trojan-go.sh yes | bash"); + var success = FileExists("/usr/local/etc/trojan-go"); + if (success == false) + { + throw new Exception("trojan-go 安装失败,请联系开发者!"); + } + + RunCmd($"sed -i 's/User=nobody/User=root/g' /etc/systemd/system/xray.service"); + RunCmd($"sed -i 's/CapabilityBoundingSet=/#CapabilityBoundingSet=/g' /etc/systemd/system/xray.service"); + RunCmd($"sed -i 's/AmbientCapabilities=/#AmbientCapabilities=/g' /etc/systemd/system/xray.service"); + RunCmd($"systemctl daemon-reload"); + + RunCmd("systemctl enable trojan-go"); + RunCmd("systemctl start trojan-go"); + WriteOutput("Trojan-Go 安装完成"); + + InstallCert( + dirPath: "/usr/local/etc/trojan-go", + certName: "trojan-go.crt", + keyName: "trojan-go.key"); + + if (FileExists("/usr/local/etc/trojan-go/config.json")) + { + RunCmd("mv /usr/local/etc/trojan-go/config.json config.json.old"); + } + + // 上传配置 + var settings = TrojanGoConfigBuilder.BuildTrojanGoConfig(Parameters); + var stream = new MemoryStream(Encoding.UTF8.GetBytes(settings)); + UploadFile(stream, "/usr/local/etc/trojan-go/config.json"); + RunCmd("systemctl restart trojan-go"); + } + + private void UploadCaddyFile(bool useCustomWeb = false) + { + var config = TrojanGoConfigBuilder.BuildCaddyConfig(Parameters, useCustomWeb); + var stream = new MemoryStream(Encoding.UTF8.GetBytes(config)); + if (FileExists("/etc/caddy/Caddyfile")) + { + RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back"); + } + UploadFile(stream, "/etc/caddy/Caddyfile"); + RunCmd("systemctl restart caddy"); + } + } +} diff --git a/ProxySU_Core/Models/Developers/TrojanGoSettings.cs b/ProxySU_Core/Models/Developers/TrojanGoSettings.cs new file mode 100644 index 0000000..6dd2102 --- /dev/null +++ b/ProxySU_Core/Models/Developers/TrojanGoSettings.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProxySU_Core.Models.Developers +{ + public class TrojanGoSettings : IParameters + { + public int Port { get; set; } + + public List FreePorts + { + get + { + return new List(); + } + } + + public string Domain { get; set; } + + public List Types { get; set; } + + public string Password { get; set; } + + public string MaskDomain { get; set; } + } +} diff --git a/ProxySU_Core/Models/Developers/ConfigBuilder.cs b/ProxySU_Core/Models/Developers/XrayConfigBuilder.cs similarity index 98% rename from ProxySU_Core/Models/Developers/ConfigBuilder.cs rename to ProxySU_Core/Models/Developers/XrayConfigBuilder.cs index 66e5b6f..d7eb4be 100644 --- a/ProxySU_Core/Models/Developers/ConfigBuilder.cs +++ b/ProxySU_Core/Models/Developers/XrayConfigBuilder.cs @@ -8,11 +8,8 @@ using System.Text; namespace ProxySU_Core.Models.Developers { - public class ConfigBuilder + public class XrayConfigBuilder { - 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"; diff --git a/ProxySU_Core/Models/Developers/XrayProject.cs b/ProxySU_Core/Models/Developers/XrayProject.cs index 482ac4b..f0678af 100644 --- a/ProxySU_Core/Models/Developers/XrayProject.cs +++ b/ProxySU_Core/Models/Developers/XrayProject.cs @@ -136,7 +136,7 @@ namespace ProxySU_Core.Models.Developers EnsureRootAuth(); EnsureSystemEnv(); ConfigureFirewall(); - var configJson = ConfigBuilder.BuildXrayConfig(Parameters); + var configJson = XrayConfigBuilder.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"); @@ -159,11 +159,15 @@ namespace ProxySU_Core.Models.Developers /// /// 安装证书 /// - public void InstallCert() + public void InstallCertToXray() { EnsureRootAuth(); EnsureSystemEnv(); - this.InstallCertToXray(); + InstallCert( + dirPath: "/usr/local/etc/xray/ssl", + certName: "xray_ssl.crt", + keyName: "xray_ssl.key"); + RunCmd("systemctl restart xray"); WriteOutput("************ 安装证书完成 ************"); } @@ -243,66 +247,17 @@ namespace ProxySU_Core.Models.Developers private void UploadCaddyFile(bool useCustomWeb = false) { - var configJson = ConfigBuilder.BuildCaddyConfig(Parameters, useCustomWeb); + var configJson = XrayConfigBuilder.BuildCaddyConfig(Parameters, useCustomWeb); var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson)); - RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back"); + if (FileExists("/etc/caddy/Caddyfile")) + { + RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back"); + } UploadFile(stream, "/etc/caddy/Caddyfile"); RunCmd("systemctl restart caddy"); } - private void EnableBBR() - { - var osVersion = RunCmd("uname -r"); - var canInstallBBR = CheckKernelVersionBBR(osVersion.Split('-')[0]); - var bbrInfo = RunCmd("sysctl net.ipv4.tcp_congestion_control | grep bbr"); - var installed = bbrInfo.Contains("bbr"); - if (canInstallBBR && !installed) - { - RunCmd(@"bash -c 'echo ""net.core.default_qdisc=fq"" >> /etc/sysctl.conf'"); - RunCmd(@"bash -c 'echo ""net.ipv4.tcp_congestion_control=bbr"" >> /etc/sysctl.conf'"); - RunCmd(@"sysctl -p"); - - if (OnlyIpv6) - { - RemoveNat64(); - } - WriteOutput("BBR启动成功"); - } - - if (!canInstallBBR) - { - WriteOutput("****** 系统不满足启用BBR条件,启动失败。 ******"); - } - - } - - private bool CheckKernelVersionBBR(string kernelVer) - { - string[] linuxKernelCompared = kernelVer.Split('.'); - if (int.Parse(linuxKernelCompared[0]) > 4) - { - return true; - } - else if (int.Parse(linuxKernelCompared[0]) < 4) - { - return false; - } - else if (int.Parse(linuxKernelCompared[0]) == 4) - { - if (int.Parse(linuxKernelCompared[1]) >= 9) - { - return true; - } - else if (int.Parse(linuxKernelCompared[1]) < 9) - { - return false; - } - - } - return false; - - } private void UninstallXray() { @@ -340,82 +295,12 @@ namespace ProxySU_Core.Models.Developers WriteOutput("TLS证书安装完成"); - var configJson = ConfigBuilder.BuildXrayConfig(Parameters); + var configJson = XrayConfigBuilder.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"); RunCmd("systemctl restart xray"); } - private void InstallCertToXray() - { - // 安装依赖 - RunCmd(GetInstallCmd("socat")); - - // 解决搬瓦工CentOS缺少问题 - RunCmd(GetInstallCmd("automake autoconf libtool")); - - // 安装Acme - var result = RunCmd($"curl https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online -m {GetRandomEmail()}"); - if (result.Contains("Install success")) - { - WriteOutput("安装 acme.sh 成功"); - } - else - { - WriteOutput("安装 acme.sh 失败,请联系开发者!"); - throw new Exception("安装 acme.sh 失败,请联系开发者!"); - } - - RunCmd("cd ~/.acme.sh/"); - RunCmd("alias acme.sh=~/.acme.sh/acme.sh"); - - // 申请证书 - if (OnlyIpv6) - { - var cmd = $"/root/.acme.sh/acme.sh --force --debug --issue --standalone -d {Parameters.Domain} --listen-v6"; - result = RunCmd(cmd); - } - else - { - var cmd = $"/root/.acme.sh/acme.sh --force --debug --issue --standalone -d {Parameters.Domain}"; - result = RunCmd(cmd); - } - - if (result.Contains("success")) - { - WriteOutput("申请证书成功"); - } - else - { - WriteOutput("申请证书失败,如果申请次数过多请更换二级域名,或联系开发者!"); - throw new Exception("申请证书失败,如果申请次数过多请更换二级域名,或联系开发者!"); - } - - // 安装证书到xray - RunCmd("mkdir -p /usr/local/etc/xray/ssl"); - RunCmd($"/root/.acme.sh/acme.sh --installcert -d {Parameters.Domain} --certpath /usr/local/etc/xray/ssl/xray_ssl.crt --keypath /usr/local/etc/xray/ssl/xray_ssl.key --capath /usr/local/etc/xray/ssl/xray_ssl.crt"); - result = RunCmd(@"if [ ! -f ""/usr/local/etc/xray/ssl/xray_ssl.key"" ]; then echo ""0""; else echo ""1""; fi | head -n 1"); - if (result.Contains("1")) - { - WriteOutput("安装证书成功"); - } - else - { - WriteOutput("安装证书失败,请联系开发者!"); - throw new Exception("安装证书失败,请联系开发者!"); - } - - RunCmd(@"chmod 755 /usr/local/etc/xray/ssl"); - } - - private string GetRandomEmail() - { - Random r = new Random(); - var num = r.Next(200000000, 900000000); - return $"{num}@qq.com"; - } - private int GetRandomPort() { var random = new Random(); diff --git a/ProxySU_Core/Models/XraySettings.cs b/ProxySU_Core/Models/Developers/XraySettings.cs similarity index 94% rename from ProxySU_Core/Models/XraySettings.cs rename to ProxySU_Core/Models/Developers/XraySettings.cs index ed0efba..0b6e274 100644 --- a/ProxySU_Core/Models/XraySettings.cs +++ b/ProxySU_Core/Models/Developers/XraySettings.cs @@ -172,6 +172,19 @@ namespace ProxySU_Core.Models /// public List Types { get; set; } + public List FreePorts + { + get + { + return new List + { + VLESS_gRPC_Port, + VLESS_KCP_Port, + VMESS_KCP_Port, + ShadowSocksPort, + }; + } + } public string GetPath(XrayType type) { diff --git a/ProxySU_Core/ProxySU_Core.csproj b/ProxySU_Core/ProxySU_Core.csproj index 15b6cf7..3dd467a 100644 --- a/ProxySU_Core/ProxySU_Core.csproj +++ b/ProxySU_Core/ProxySU_Core.csproj @@ -128,16 +128,19 @@ + + + - + - + @@ -226,6 +229,12 @@ SettingsSingleFileGenerator Settings.Designer.cs + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/ProxySU_Core/Templates/trojan-go/base.caddyfile b/ProxySU_Core/Templates/trojan-go/base.caddyfile new file mode 100644 index 0000000..7975d73 --- /dev/null +++ b/ProxySU_Core/Templates/trojan-go/base.caddyfile @@ -0,0 +1,9 @@ +:##port## { + root * /usr/share/caddy + file_server + ##reverse_proxy## +} + +##domain##:80 { + redir https://##domain##{uri} +} \ No newline at end of file diff --git a/ProxySU_Core/Templates/trojan-go/trojan-go.json b/ProxySU_Core/Templates/trojan-go/trojan-go.json new file mode 100644 index 0000000..acb0207 --- /dev/null +++ b/ProxySU_Core/Templates/trojan-go/trojan-go.json @@ -0,0 +1,16 @@ +{ + "run_type": "server", + "local_addr": "0.0.0.0", + "local_port": 443, + "remote_addr": "127.0.0.1", + "remote_port": 80, + "password": [ + "" + ], + "ssl": { + "cert": "/usr/local/etc/trojan-go/trojan-go.crt", + "key": "/usr/local/etc/trojan-go/trojan-go.key", + "sni": "" + } + +} diff --git a/ProxySU_Core/Views/RecordEditor/RecordEditorWindow.xaml b/ProxySU_Core/Views/RecordEditor/RecordEditorWindow.xaml index bcdaa41..5ba61f3 100644 --- a/ProxySU_Core/Views/RecordEditor/RecordEditorWindow.xaml +++ b/ProxySU_Core/Views/RecordEditor/RecordEditorWindow.xaml @@ -37,16 +37,15 @@ - - + + BorderBrush="#ddd" + BorderThickness="2" + Width="auto" + Height="450" + HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto" > @@ -56,7 +55,9 @@ Naive Proxy 未完成(Not Implemented) - + + + diff --git a/ProxySU_Core/Views/TerminalWindow.xaml.cs b/ProxySU_Core/Views/TerminalWindow.xaml.cs index e86cbbd..d279ab2 100644 --- a/ProxySU_Core/Views/TerminalWindow.xaml.cs +++ b/ProxySU_Core/Views/TerminalWindow.xaml.cs @@ -165,7 +165,7 @@ namespace ProxySU_Core { Task.Factory.StartNew(() => { - project.InstallCert(); + project.InstallCertToXray(); }); }