1
0
mirror of https://github.com/proxysu/ProxySU.git synced 2024-11-29 00:26:09 +03:00

bbr and domain validation

This commit is contained in:
next-autumn 2021-03-12 15:59:20 +08:00
parent f6d28efac9
commit 0072c9c99c
5 changed files with 87 additions and 21 deletions

View File

@ -12,14 +12,15 @@ namespace ProxySU_Core.Models
public XraySettings() public XraySettings()
{ {
var guid = Guid.NewGuid().ToString();
Port = 443; Port = 443;
UUID = Guid.NewGuid().ToString(); UUID = guid;
Types = new List<XrayType> { XrayType.VLESS_TCP_XTLS }; Types = new List<XrayType> { XrayType.VLESS_TCP_XTLS };
VLESS_WS_Path = "/vlessws"; VLESS_WS_Path = "/vlessws";
VLESS_TCP_Path = "/vlesstcp"; VLESS_TCP_Path = "/vlesstcp";
VMESS_WS_Path = "/vmessws"; VMESS_WS_Path = "/vmessws";
VMESS_TCP_Path = "/vmesstcp"; VMESS_TCP_Path = "/vmesstcp";
TrojanPassword = Guid.NewGuid().ToString(); TrojanPassword = guid;
} }
/// <summary> /// <summary>

View File

@ -66,7 +66,16 @@ namespace ProxySU_Core.ViewModels.Developers
caddyStr = caddyStr.Replace("##domain##", parameters.Domain); caddyStr = caddyStr.Replace("##domain##", parameters.Domain);
if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain)) if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain))
{ {
caddyStr = caddyStr.Replace("##reverse_proxy##", $"reverse_proxy {parameters.MaskDomain} {{ header_up Host {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 else
{ {

View File

@ -312,9 +312,7 @@ namespace ProxySU_Core.ViewModels.Developers
var cmd = $"dig @resolver1.opendns.com AAAA {Parameters.Domain} +short -6 {cmdFilter}"; var cmd = $"dig @resolver1.opendns.com AAAA {Parameters.Domain} +short -6 {cmdFilter}";
var result = RunCmd(cmd).TrimEnd('\r', '\n'); var result = RunCmd(cmd).TrimEnd('\r', '\n');
if (result != IPv6) if (result == IPv6) return;
{
}
} }
else else
@ -323,11 +321,19 @@ namespace ProxySU_Core.ViewModels.Developers
var cmd = $"dig @resolver1.opendns.com A {Parameters.Domain} +short -4 {cmdFilter}"; var cmd = $"dig @resolver1.opendns.com A {Parameters.Domain} +short -4 {cmdFilter}";
var result = RunCmd(cmd).TrimEnd('\r', '\n'); var result = RunCmd(cmd).TrimEnd('\r', '\n');
if (result != IPv4) if (result == IPv4) return;
{
throw new Exception("域名未能解析到服务器IP请检查域名配置");
}
} }
var btnResult = MessageBox.Show(
$"{Parameters.Domain}未能正常解析到服务器的IP如果您使用了CDN请忽略是否继续安装?", "提示", MessageBoxButton.YesNo);
if (btnResult == MessageBoxResult.No)
{
throw new Exception($"域名解析失败,安装停止!");
}
} }
/// <summary> /// <summary>
@ -447,7 +453,7 @@ namespace ProxySU_Core.ViewModels.Developers
} }
} }
private void SetNat64() protected void SetNat64()
{ {
var dns64List = FilterFastestIP(); var dns64List = FilterFastestIP();
if (dns64List.Count == 0) if (dns64List.Count == 0)
@ -468,7 +474,7 @@ namespace ProxySU_Core.ViewModels.Developers
} }
} }
private void RemoveNat64() protected void RemoveNat64()
{ {
RunCmd("rm /etc/resolv.conf"); RunCmd("rm /etc/resolv.conf");
RunCmd("mv /etc/resolv.conf.proxysu /etc/resolv.conf"); RunCmd("mv /etc/resolv.conf.proxysu /etc/resolv.conf");

View File

@ -51,7 +51,6 @@ namespace ProxySU_Core.ViewModels.Developers
RunCmd("unzip /usr/share/caddy/caddy.zip -d /usr/share/caddy"); RunCmd("unzip /usr/share/caddy/caddy.zip -d /usr/share/caddy");
RunCmd("chmod -R 777 /usr/share/caddy"); RunCmd("chmod -R 777 /usr/share/caddy");
UploadCaddyFile(useCustomWeb: true); UploadCaddyFile(useCustomWeb: true);
RunCmd("systemctl restart caddy");
WriteOutput("************ 上传网站模板完成 ************"); WriteOutput("************ 上传网站模板完成 ************");
} }
@ -76,7 +75,6 @@ namespace ProxySU_Core.ViewModels.Developers
WriteOutput("************ 重装Caddy完成 ************"); WriteOutput("************ 重装Caddy完成 ************");
} }
public override void Install() public override void Install()
{ {
try try
@ -129,6 +127,10 @@ namespace ProxySU_Core.ViewModels.Developers
InstallCaddy(); InstallCaddy();
WriteOutput("Caddy安装完成"); WriteOutput("Caddy安装完成");
WriteOutput("启动BBR");
EnableBBR();
WriteOutput("BBR启动成功");
UploadCaddyFile(); UploadCaddyFile();
WriteOutput("************"); WriteOutput("************");
WriteOutput("安装完成,尽情享用吧......"); WriteOutput("安装完成,尽情享用吧......");
@ -146,7 +148,60 @@ namespace ProxySU_Core.ViewModels.Developers
var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson)); var stream = new MemoryStream(Encoding.UTF8.GetBytes(configJson));
RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back"); RunCmd("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.back");
UploadFile(stream, "/etc/caddy/Caddyfile"); UploadFile(stream, "/etc/caddy/Caddyfile");
RunCmd("systemctl reload caddy"); 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();
}
}
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 InstallXrayWithCert() private void InstallXrayWithCert()

View File

@ -299,12 +299,7 @@
<StackPanel Orientation="Horizontal" Margin="0,10,0,0"> <StackPanel Orientation="Horizontal" Margin="0,10,0,0">
<Label Content="密码" Width="120" /> <Label Content="密码" Width="120" />
<TextBox Text="{Binding Settings.TrojanPassword}" IsReadOnly="True" Width="200" /> <TextBox Text="{Binding Settings.TrojanPassword}" IsReadOnly="True" Width="300" />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
<Label Content="域名" Width="120" />
<TextBox Text="{Binding Settings.Domain}" IsReadOnly="True" Width="200" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</TabItem> </TabItem>