mirror of
https://github.com/2dust/v2rayN.git
synced 2026-04-18 05:25:46 +00:00
Add sing-box send-through
This commit is contained in:
parent
6c8f22ab86
commit
02a8fe0693
5 changed files with 80 additions and 39 deletions
|
|
@ -57,6 +57,8 @@ public partial class CoreConfigSingboxService(CoreConfigContext context)
|
||||||
|
|
||||||
ConvertGeo2Ruleset();
|
ConvertGeo2Ruleset();
|
||||||
|
|
||||||
|
ApplyOutboundSendThrough();
|
||||||
|
|
||||||
ret.Msg = string.Format(ResUI.SuccessfulConfiguration, "");
|
ret.Msg = string.Format(ResUI.SuccessfulConfiguration, "");
|
||||||
ret.Success = true;
|
ret.Success = true;
|
||||||
|
|
||||||
|
|
@ -221,6 +223,7 @@ public partial class CoreConfigSingboxService(CoreConfigContext context)
|
||||||
_coreConfig.route.rules.Add(rule);
|
_coreConfig.route.rules.Add(rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ApplyOutboundSendThrough();
|
||||||
ret.Success = true;
|
ret.Success = true;
|
||||||
ret.Data = JsonUtils.Serialize(_coreConfig);
|
ret.Data = JsonUtils.Serialize(_coreConfig);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -279,6 +282,7 @@ public partial class CoreConfigSingboxService(CoreConfigContext context)
|
||||||
listen_port = port,
|
listen_port = port,
|
||||||
type = EInboundProtocol.mixed.ToString(),
|
type = EInboundProtocol.mixed.ToString(),
|
||||||
});
|
});
|
||||||
|
ApplyOutboundSendThrough();
|
||||||
|
|
||||||
ret.Msg = string.Format(ResUI.SuccessfulConfiguration, "");
|
ret.Msg = string.Format(ResUI.SuccessfulConfiguration, "");
|
||||||
ret.Success = true;
|
ret.Success = true;
|
||||||
|
|
|
||||||
|
|
@ -58,4 +58,40 @@ public partial class CoreConfigSingboxService
|
||||||
|
|
||||||
return JsonUtils.Serialize(fullConfigTemplateNode);
|
return JsonUtils.Serialize(fullConfigTemplateNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ApplyOutboundSendThrough()
|
||||||
|
{
|
||||||
|
var sendThrough = _config.CoreBasicItem.SendThrough?.TrimEx();
|
||||||
|
foreach (var outbound in _coreConfig.outbounds ?? [])
|
||||||
|
{
|
||||||
|
outbound.inet4_bind_address = ShouldApplySendThrough(outbound, sendThrough) ? sendThrough : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ShouldApplySendThrough(Outbound4Sbox outbound, string? sendThrough)
|
||||||
|
{
|
||||||
|
if (sendThrough.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outbound.type is "direct" or "block" or "dns" or "selector" or "urltest")
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!outbound.detour.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var outboundAddress = outbound.server ?? string.Empty;
|
||||||
|
|
||||||
|
if (outboundAddress.Equals("localhost", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !IPAddress.TryParse(outboundAddress, out var address) || !IPAddress.IsLoopback(address);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -407,43 +407,4 @@ public partial class CoreConfigV2rayService(CoreConfigContext context)
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion public gen function
|
#endregion public gen function
|
||||||
|
|
||||||
private void ApplyOutboundSendThrough()
|
|
||||||
{
|
|
||||||
var sendThrough = _config.CoreBasicItem.SendThrough?.TrimEx();
|
|
||||||
foreach (var outbound in _coreConfig.outbounds ?? [])
|
|
||||||
{
|
|
||||||
outbound.sendThrough = ShouldApplySendThrough(outbound, sendThrough) ? sendThrough : null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool ShouldApplySendThrough(Outbounds4Ray outbound, string? sendThrough)
|
|
||||||
{
|
|
||||||
if (sendThrough.IsNullOrEmpty())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outbound.protocol is "freedom" or "blackhole" or "dns" or "loopback")
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outbound.streamSettings?.sockopt?.dialerProxy.IsNullOrEmpty() == false)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var outboundAddress = outbound.settings?.servers?.FirstOrDefault()?.address
|
|
||||||
?? outbound.settings?.vnext?.FirstOrDefault()?.address
|
|
||||||
?? outbound.settings?.address?.ToString()
|
|
||||||
?? string.Empty;
|
|
||||||
|
|
||||||
if (outboundAddress.Equals("localhost", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return !IPAddress.TryParse(outboundAddress, out var address) || !IPAddress.IsLoopback(address);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -127,4 +127,43 @@ public partial class CoreConfigV2rayService
|
||||||
|
|
||||||
return JsonUtils.Serialize(fullConfigTemplateNode);
|
return JsonUtils.Serialize(fullConfigTemplateNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ApplyOutboundSendThrough()
|
||||||
|
{
|
||||||
|
var sendThrough = _config.CoreBasicItem.SendThrough?.TrimEx();
|
||||||
|
foreach (var outbound in _coreConfig.outbounds ?? [])
|
||||||
|
{
|
||||||
|
outbound.sendThrough = ShouldApplySendThrough(outbound, sendThrough) ? sendThrough : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ShouldApplySendThrough(Outbounds4Ray outbound, string? sendThrough)
|
||||||
|
{
|
||||||
|
if (sendThrough.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outbound.protocol is "freedom" or "blackhole" or "dns" or "loopback")
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outbound.streamSettings?.sockopt?.dialerProxy.IsNullOrEmpty() == false)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var outboundAddress = outbound.settings?.servers?.FirstOrDefault()?.address
|
||||||
|
?? outbound.settings?.vnext?.FirstOrDefault()?.address
|
||||||
|
?? outbound.settings?.address?.ToString()
|
||||||
|
?? string.Empty;
|
||||||
|
|
||||||
|
if (outboundAddress.Equals("localhost", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !IPAddress.TryParse(outboundAddress, out var address) || !IPAddress.IsLoopback(address);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
</Folder>
|
</Folder>
|
||||||
<Project Path="AmazTool/AmazTool.csproj" />
|
<Project Path="AmazTool/AmazTool.csproj" />
|
||||||
<Project Path="GlobalHotKeys/src/GlobalHotKeys/GlobalHotKeys.csproj" />
|
<Project Path="GlobalHotKeys/src/GlobalHotKeys/GlobalHotKeys.csproj" />
|
||||||
|
<Project Path="ServiceLib.Tests/ServiceLib.Tests.csproj" />
|
||||||
<Project Path="ServiceLib/ServiceLib.csproj" />
|
<Project Path="ServiceLib/ServiceLib.csproj" />
|
||||||
<Project Path="v2rayN.Desktop/v2rayN.Desktop.csproj" />
|
<Project Path="v2rayN.Desktop/v2rayN.Desktop.csproj" />
|
||||||
<Project Path="v2rayN/v2rayN.csproj" />
|
<Project Path="v2rayN/v2rayN.csproj" />
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue