mirror of
https://github.com/2dust/v2rayN.git
synced 2026-10-27 15:45:06 +03:00
Xray Route Exclude Address (#9469)
* Add IPNetwork2 package * Xray Route Exclude Address --------- Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
This commit is contained in:
@@ -30,14 +30,19 @@ public partial class CoreConfigV2rayService
|
||||
inbound3.listen = listen;
|
||||
_coreConfig.inbounds.Add(inbound3);
|
||||
|
||||
//auth
|
||||
// auth
|
||||
if (_config.Inbound.First().User.IsNotEmpty() && _config.Inbound.First().Pass.IsNotEmpty())
|
||||
{
|
||||
inbound3.settings.auth = "password";
|
||||
inbound3.settings.accounts = new List<AccountsItem4Ray>
|
||||
{
|
||||
new() { user = _config.Inbound.First().User, pass = _config.Inbound.First().Pass }
|
||||
};
|
||||
inbound3.settings.accounts =
|
||||
[
|
||||
new()
|
||||
{
|
||||
user = _config.Inbound.First().User,
|
||||
pass = _config.Inbound.First().Pass,
|
||||
},
|
||||
|
||||
];
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -53,12 +58,15 @@ public partial class CoreConfigV2rayService
|
||||
{
|
||||
_config.TunModeItem.Mtu = Global.TunMtus.First();
|
||||
}
|
||||
var tunInbound = JsonUtils.Deserialize<Inbounds4Ray>(EmbedUtils.GetEmbedText(Global.V2raySampleTunInbound)) ?? new Inbounds4Ray { };
|
||||
var tunInbound =
|
||||
JsonUtils.Deserialize<Inbounds4Ray>(EmbedUtils.GetEmbedText(Global.V2raySampleTunInbound)) ??
|
||||
new Inbounds4Ray();
|
||||
tunInbound.settings.name = context.IsMacOS ? $"utun{new Random().Next(99)}" : "xray_tun";
|
||||
tunInbound.settings.MTU = _config.TunModeItem.Mtu;
|
||||
if (_config.TunModeItem.EnableIPv6Address == false)
|
||||
if (!_config.TunModeItem.EnableIPv6Address)
|
||||
{
|
||||
tunInbound.settings.gateway = ["172.18.0.1/30"];
|
||||
tunInbound.settings.autoSystemRoutingTable = ["0.0.0.0/0"];
|
||||
}
|
||||
var bindInterface = _config.CoreBasicItem.BindInterface?.TrimEx();
|
||||
if (!bindInterface.IsNullOrEmpty())
|
||||
@@ -66,6 +74,53 @@ public partial class CoreConfigV2rayService
|
||||
tunInbound.settings.autoOutboundsInterface = bindInterface;
|
||||
}
|
||||
tunInbound.sniffing = inbound.sniffing;
|
||||
|
||||
if (_config.TunModeItem.RouteExcludeAddress is { Count: > 0 })
|
||||
{
|
||||
var wholeInternet = IPNetwork2.Parse("0.0.0.0/0");
|
||||
var wholeInternetV6 = IPNetwork2.Parse("::/0");
|
||||
|
||||
var excludeList = _config.TunModeItem.RouteExcludeAddress.Select(IPNetwork2.Parse)
|
||||
.Where(x => x != null).ToList();
|
||||
|
||||
var includeList = new List<IPNetwork2> { wholeInternet };
|
||||
var includeListV6 = new List<IPNetwork2> { wholeInternetV6 };
|
||||
|
||||
foreach (var exclude in excludeList)
|
||||
{
|
||||
var temp = new List<IPNetwork2>();
|
||||
if (exclude.AddressFamily == AddressFamily.InterNetwork)
|
||||
{
|
||||
foreach (var net in includeList)
|
||||
{
|
||||
temp.AddRange(net.Subtract(exclude));
|
||||
}
|
||||
includeList = temp;
|
||||
}
|
||||
else if (exclude.AddressFamily == AddressFamily.InterNetworkV6)
|
||||
{
|
||||
foreach (var net in includeListV6)
|
||||
{
|
||||
temp.AddRange(net.Subtract(exclude));
|
||||
}
|
||||
includeListV6 = temp;
|
||||
}
|
||||
}
|
||||
|
||||
includeList = IPNetwork2.Supernet(includeList.ToArray()).ToList();
|
||||
includeListV6 = IPNetwork2.Supernet(includeListV6.ToArray()).ToList();
|
||||
|
||||
if (_config.TunModeItem.EnableIPv6Address)
|
||||
{
|
||||
tunInbound.settings.autoSystemRoutingTable = includeList.Select(x => x.ToString())
|
||||
.Concat(includeListV6.Select(x => x.ToString())).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
tunInbound.settings.autoSystemRoutingTable = includeList.Select(x => x.ToString()).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
_coreConfig.inbounds.Add(tunInbound);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user