修正路由添加错误

This commit is contained in:
snltty
2024-06-29 17:54:55 +08:00
parent 1522aed693
commit 90b77c11c5
10 changed files with 30 additions and 29 deletions

Binary file not shown.

View File

@@ -81,7 +81,7 @@ namespace linker.tunnel.connection
}
private async Task ProcessWrite()
{
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
try
{
while (cancellationTokenSource.IsCancellationRequested == false)

View File

@@ -73,7 +73,7 @@ namespace linker.tunnel.connection
private async Task ProcessWrite()
{
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
try
{
int length = 0;

View File

@@ -271,7 +271,6 @@ namespace linker.tunnel.proxy
if (state.Data.Length > 0)
{
LoggerHelper.Instance.Warning($"connect {token.Proxy.ConnectId} {token.Proxy.TargetEP} success {state.Data.Length}");
await token.Socket.SendAsync(state.Data.AsMemory(0, state.Length), SocketFlags.None);
}
tcpConnections.TryAdd(new ConnectId(token.Proxy.ConnectId, token.Connection.GetHashCode(), (byte)ProxyDirection.Forward), token);
@@ -302,17 +301,9 @@ namespace linker.tunnel.proxy
{
if (tunnelToken.Proxy.Protocol == ProxyProtocol.Tcp)
{
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
LoggerHelper.Instance.Warning($"receive {tunnelToken.Proxy.ConnectId}");
}
ConnectId connectId = new ConnectId(tunnelToken.Proxy.ConnectId, tunnelToken.Connection.GetHashCode(), (byte)tunnelToken.Proxy.Direction);
if (tcpConnections.TryGetValue(connectId, out AsyncUserToken token))
{
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
LoggerHelper.Instance.Warning($"receive1 {tunnelToken.Proxy.ConnectId}");
}
_ = ProcessReceive(token);
}
}

View File

@@ -346,7 +346,7 @@ namespace linker.tunnel.transport
Task.Run(async () =>
{
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
try
{
IPEndPoint tempEp = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
@@ -397,7 +397,7 @@ namespace linker.tunnel.transport
/// <returns></returns>
private async Task WaitQuicConnect(Socket remoteUdp, IPEndPoint remoteEP, Socket localUdp)
{
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
IPEndPoint tempEp = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
try
{
@@ -466,7 +466,7 @@ namespace linker.tunnel.transport
/// <returns></returns>
private async Task WaitAuth(ListenAsyncToken token, TaskCompletionSource<AddressFamily> tcs)
{
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
IPEndPoint tempEp = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
try
{
@@ -512,7 +512,7 @@ namespace linker.tunnel.transport
/// <returns></returns>
private async Task Connect2Quic(ListenAsyncToken token)
{
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
IPEndPoint tempEp = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
try
{

View File

@@ -249,6 +249,7 @@ namespace linker.tunnel.transport
{
try
{
socket.KeepAlive();
SslStream sslStream = null;
if (_state.SSL)
{
@@ -302,7 +303,7 @@ namespace linker.tunnel.transport
{
IPAddress localIP = NetworkHelper.IPv6Support ? IPAddress.IPv6Any : IPAddress.Any;
Socket socket = new Socket(localIP.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
//socket.ReceiveBufferSize = 128 * 1024;
//socket.ReceiveBufferSize = 5 * 1024 * 1024;
socket.IPv6Only(localIP.AddressFamily, false);
socket.ReuseBind(new IPEndPoint(localIP, local.Port));
socket.Listen(int.MaxValue);

View File

@@ -48,10 +48,8 @@ namespace linker.plugins.forward.proxy
/// <returns></returns>
protected override async ValueTask<bool> ConnectTunnelConnection(AsyncUserToken token)
{
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {token.Proxy.ConnectId} {token.ListenPort} ");
if (caches.TryGetValue(token.ListenPort, out ForwardProxyCacheInfo cache))
{
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {token.Proxy.ConnectId} {token.ListenPort}->{cache.TargetEP} ");
token.Proxy.TargetEP = cache.TargetEP;
cache.Connection = await ConnectTunnel(cache.MachineId);
token.Connection = cache.Connection;
@@ -85,13 +83,10 @@ namespace linker.plugins.forward.proxy
//之前这个客户端已经连接过
if (connections.TryGetValue(machineId, out ITunnelConnection connection) && connection.Connected)
{
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {machineId} connection ");
return connection;
}
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward begin {machineId} connection ");
//不要同时去连太多,锁以下
await slimGlobal.WaitAsync();
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {machineId} slim global ");
if (locks.TryGetValue(machineId, out SemaphoreSlim slim) == false)
{
slim = new SemaphoreSlim(1);
@@ -99,7 +94,6 @@ namespace linker.plugins.forward.proxy
}
slimGlobal.Release();
await slim.WaitAsync();
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {machineId} slim ");
try
{
//获得锁之前再次看看之前有没有连接成功

View File

@@ -46,7 +46,7 @@ namespace linker.plugins.tuntap.vea
Error = CommandHelper.Execute("./plugins/tuntap/tun2socks", command, Array.Empty<string>());
LoggerHelper.Instance.Error(Error);
}
await Task.Delay(10);
}
catch (Exception ex)
@@ -101,7 +101,9 @@ namespace linker.plugins.tuntap.vea
{
string[] commands = ips.Where(c => c.IPAddress > 0).Select(item =>
{
return $"ip route add {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}/{item.MaskLength} via {ip} dev {InterfaceName} metric 1 ";
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
ips[3] = 0;
return $"ip route add {string.Join(".", ips)}/{item.MaskLength} via {ip} dev {InterfaceName} metric 1 ";
}).ToArray();
if (commands.Length > 0)
{
@@ -116,7 +118,9 @@ namespace linker.plugins.tuntap.vea
{
string[] commands = ip.Select(item =>
{
return $"ip route del {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}/{item.MaskLength}";
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
ips[3] = 0;
return $"ip route del {string.Join(".", ips)}/{item.MaskLength}";
}).ToArray();
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)

View File

@@ -107,7 +107,9 @@ namespace linker.plugins.tuntap.vea
{
string[] commands = ips.Where(c => c.IPAddress > 0).Select(item =>
{
return $"route add -net {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}/{item.MaskLength} {ip}";
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
ips[3] = 0;
return $"route add -net {string.Join(".", ips)}/{item.MaskLength} {ip}";
}).ToArray();
if (commands.Length > 0)
{
@@ -118,7 +120,9 @@ namespace linker.plugins.tuntap.vea
{
string[] commands = ip.Select(item =>
{
return $"route delete -net {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}/{item.MaskLength}";
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
ips[3] = 0;
return $"route delete -net {string.Join(".", ips)}/{item.MaskLength}";
}).ToArray();
if (commands.Length > 0)
{

View File

@@ -134,7 +134,9 @@ namespace linker.plugins.tuntap.vea
string[] commands = ips.Where(c => c.IPAddress > 0).Select(item =>
{
byte[] maskArr = BitConverter.GetBytes(BinaryPrimitives.ReverseEndianness(item.MaskValue));
return $"route add {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())} mask {string.Join(".", maskArr)} {ip} metric 5 if {interfaceNumber}";
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
ips[3] = 0;
return $"route add {string.Join(".", ips)} mask {string.Join(".", maskArr)} {ip} metric 5 if {interfaceNumber}";
}).ToArray();
if (commands.Length > 0)
{
@@ -150,7 +152,12 @@ namespace linker.plugins.tuntap.vea
{
if (interfaceNumber > 0)
{
string[] commands = ip.Where(c => c.IPAddress > 0).Select(item => $"route delete {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}").ToArray();
string[] commands = ip.Where(c => c.IPAddress > 0).Select(item =>
{
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
ips[3] = 0;
return $"route delete {string.Join(".", ips)}";
}).ToArray();
if (commands.Length > 0)
{
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)