From 761e323c918a1c3f23d6561baf91eda3012bef9c Mon Sep 17 00:00:00 2001 From: snltty <1069410172@qq.com> Date: Mon, 19 Aug 2024 12:00:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B1=80=E5=9F=9F=E7=BD=91IP?= =?UTF-8?q?V6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linker.tun/LinkerWinTunDevice.cs | 9 +++- linker.tunnel/TunnelTransfer.cs | 2 +- linker.tunnel/transport/TransportMsQuic.cs | 12 +++--- .../transport/TransportUdpPortMap.cs | 1 - .../wanport/TunnelWanPortTransfer.cs | 2 +- linker/plugins/capi/ApiClientServer.cs | 2 +- linker/plugins/messenger/MessengerResolver.cs | 4 +- linker/plugins/relay/RelayTransfer.cs | 2 +- linker/plugins/tunnel/TunnelConfigTransfer.cs | 2 +- linker/plugins/tunnel/TunnelStartup.cs | 4 +- .../excludeip/TunnelExcludeIPTransfer.cs | 2 +- linker/plugins/tuntap/proxy/TuntapProxy.cs | 43 +++++++++---------- linker/startup/StartupTransfer.cs | 10 ++--- 13 files changed, 48 insertions(+), 47 deletions(-) diff --git a/linker.tun/LinkerWinTunDevice.cs b/linker.tun/LinkerWinTunDevice.cs index b6a63020..64a1e054 100644 --- a/linker.tun/LinkerWinTunDevice.cs +++ b/linker.tun/LinkerWinTunDevice.cs @@ -142,7 +142,10 @@ namespace linker.tun public void SetMtu(int value) { - CommandHelper.Windows(string.Empty, new string[] { $"netsh interface ipv4 set subinterface {interfaceNumber} mtu={value} store=persistent" }); + CommandHelper.Windows(string.Empty, new string[] { + $"netsh interface ipv4 set subinterface {interfaceNumber} mtu={value} store=persistent" , + $"netsh interface ipv6 set subinterface {interfaceNumber} mtu={value} store=persistent" + }); } public void SetNat(out string error) { @@ -256,7 +259,9 @@ namespace linker.tun } else { - if (Marshal.GetLastWin32Error() == 259L) + int error = Marshal.GetLastWin32Error(); + + if (error == 0 || error == 259L) { WinTun.WaitForSingleObject(waitHandle, 0xFFFFFFFF); } diff --git a/linker.tunnel/TunnelTransfer.cs b/linker.tunnel/TunnelTransfer.cs index 35089f7c..01598ac2 100644 --- a/linker.tunnel/TunnelTransfer.cs +++ b/linker.tunnel/TunnelTransfer.cs @@ -95,7 +95,7 @@ namespace linker.tunnel } tunnelAdapter.SetTunnelTransports(transportItems, true); - LoggerHelper.Instance.Warning($"load tunnel transport:{string.Join(",", transports.Select(c => c.Name))}"); + LoggerHelper.Instance.Info($"load tunnel transport:{string.Join(",", transports.Select(c => c.Name))}"); } diff --git a/linker.tunnel/transport/TransportMsQuic.cs b/linker.tunnel/transport/TransportMsQuic.cs index 0d25d46b..2d38e3bb 100644 --- a/linker.tunnel/transport/TransportMsQuic.cs +++ b/linker.tunnel/transport/TransportMsQuic.cs @@ -77,13 +77,13 @@ namespace linker.tunnel.transport { if (QuicListener.IsSupported == false) { - LoggerHelper.Instance.Error($"msquic not supported, need win11+,or linux"); + LoggerHelper.Instance.Warning($"msquic not supported, need win11+,or linux"); await OnSendConnectFail(tunnelTransportInfo).ConfigureAwait(false); return null; } if (tunnelAdapter.Certificate == null) { - LoggerHelper.Instance.Error($"msquic need ssl"); + LoggerHelper.Instance.Warning($"msquic need ssl"); await OnSendConnectFail(tunnelTransportInfo).ConfigureAwait(false); return null; } @@ -137,13 +137,13 @@ namespace linker.tunnel.transport { if (QuicListener.IsSupported == false) { - LoggerHelper.Instance.Error($"msquic not supported, need win11+,or linux"); + LoggerHelper.Instance.Warning($"msquic not supported, need win11+,or linux"); await OnSendConnectFail(tunnelTransportInfo).ConfigureAwait(false); return; } if (tunnelAdapter.Certificate == null) { - LoggerHelper.Instance.Error($"msquic need ssl"); + LoggerHelper.Instance.Warning($"msquic need ssl"); await OnSendConnectFail(tunnelTransportInfo).ConfigureAwait(false); return; } @@ -665,12 +665,12 @@ namespace linker.tunnel.transport { if (QuicListener.IsSupported == false) { - LoggerHelper.Instance.Error($"msquic not supported, need win11+,or linux, or try to restart linker"); + LoggerHelper.Instance.Warning($"msquic not supported, need win11+,or linux, or try to restart linker"); return; } if (tunnelAdapter.Certificate == null) { - LoggerHelper.Instance.Error($"msquic need ssl"); + LoggerHelper.Instance.Warning($"msquic need ssl"); return; } diff --git a/linker.tunnel/transport/TransportUdpPortMap.cs b/linker.tunnel/transport/TransportUdpPortMap.cs index 28db31a0..9a4af9da 100644 --- a/linker.tunnel/transport/TransportUdpPortMap.cs +++ b/linker.tunnel/transport/TransportUdpPortMap.cs @@ -126,7 +126,6 @@ namespace linker.tunnel.transport } catch (Exception ex) { - Console.WriteLine(ex.ToString()); socket.SafeClose(); break; } diff --git a/linker.tunnel/wanport/TunnelWanPortTransfer.cs b/linker.tunnel/wanport/TunnelWanPortTransfer.cs index 72a97921..48f1afb0 100644 --- a/linker.tunnel/wanport/TunnelWanPortTransfer.cs +++ b/linker.tunnel/wanport/TunnelWanPortTransfer.cs @@ -22,7 +22,7 @@ namespace linker.tunnel.wanport public void Init(List tunnelWanPorts) { this.tunnelWanPorts = tunnelWanPorts; - LoggerHelper.Instance.Warning($"load tunnel wanport compacts:{string.Join(",", tunnelWanPorts.Select(c => c.Name))}"); + LoggerHelper.Instance.Info($"load tunnel wanport compacts:{string.Join(",", tunnelWanPorts.Select(c => c.Name))}"); } public List GetTypes() diff --git a/linker/plugins/capi/ApiClientServer.cs b/linker/plugins/capi/ApiClientServer.cs index c6c71bf7..0751e7b1 100644 --- a/linker/plugins/capi/ApiClientServer.cs +++ b/linker/plugins/capi/ApiClientServer.cs @@ -37,7 +37,7 @@ namespace linker.plugins.capi { continue; } - LoggerHelper.Instance.Warning($"load client api:{item.Name}"); + LoggerHelper.Instance.Info($"load client api:{item.Name}"); string path = item.Name.Replace("ApiController", "").Replace("ApiController", ""); foreach (MethodInfo method in item.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)) diff --git a/linker/plugins/messenger/MessengerResolver.cs b/linker/plugins/messenger/MessengerResolver.cs index 3d4127b8..1d9eaa7f 100644 --- a/linker/plugins/messenger/MessengerResolver.cs +++ b/linker/plugins/messenger/MessengerResolver.cs @@ -170,7 +170,7 @@ namespace linker.plugins.messenger { continue; } - LoggerHelper.Instance.Warning($"load messenger:{type.Name}"); + LoggerHelper.Instance.Info($"load messenger:{type.Name}"); foreach (var method in type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)) { @@ -198,7 +198,7 @@ namespace linker.plugins.messenger } else { - LoggerHelper.Instance.Error($"{type.Name}->{method.Name}->{mid.Id} 消息id已存在"); + LoggerHelper.Instance.Warning($"{type.Name}->{method.Name}->{mid.Id} 消息id已存在"); } } } diff --git a/linker/plugins/relay/RelayTransfer.cs b/linker/plugins/relay/RelayTransfer.cs index 100a3058..029820a1 100644 --- a/linker/plugins/relay/RelayTransfer.cs +++ b/linker/plugins/relay/RelayTransfer.cs @@ -70,7 +70,7 @@ namespace linker.plugins.relay IEnumerable types = ReflectionHelper.GetInterfaceSchieves(assembs, typeof(ITransport)); transports = types.Select(c => (ITransport)serviceProvider.GetService(c)).Where(c => c != null).Where(c => string.IsNullOrWhiteSpace(c.Name) == false).ToList(); - LoggerHelper.Instance.Warning($"load relay transport:{string.Join(",", transports.Select(c => c.Name))}"); + LoggerHelper.Instance.Info($"load relay transport:{string.Join(",", transports.Select(c => c.Name))}"); } /// /// 获取所有中继协议 diff --git a/linker/plugins/tunnel/TunnelConfigTransfer.cs b/linker/plugins/tunnel/TunnelConfigTransfer.cs index e755ab12..3e94f4bc 100644 --- a/linker/plugins/tunnel/TunnelConfigTransfer.cs +++ b/linker/plugins/tunnel/TunnelConfigTransfer.cs @@ -168,7 +168,7 @@ namespace linker.plugins.tunnel File.Move("msquic.dll", "msquic.dll.temp", true); File.Move("msquic-openssl.dll", "msquic.dll", true); - Environment.Exit(1); + //Environment.Exit(1); } } catch (Exception) diff --git a/linker/plugins/tunnel/TunnelStartup.cs b/linker/plugins/tunnel/TunnelStartup.cs index bbbcc0e6..2f801564 100644 --- a/linker/plugins/tunnel/TunnelStartup.cs +++ b/linker/plugins/tunnel/TunnelStartup.cs @@ -69,8 +69,8 @@ namespace linker.plugins.tunnel config.Data.Client.Tunnel.RouteIPs = ips.ToArray(); LoggerHelper.Instance.Warning($"route ips:{string.Join(",", ips.Select(c => c.ToString()))}"); config.Data.Client.Tunnel.LocalIPs = NetworkHelper.GetIPV6().Concat(NetworkHelper.GetIPV4()).ToArray(); - LoggerHelper.Instance.Info($"tunnel local ips :{string.Join(",", config.Data.Client.Tunnel.LocalIPs.Select(c => c.ToString()))}"); - LoggerHelper.Instance.Info($"tunnel route level:{config.Data.Client.Tunnel.RouteLevel}"); + LoggerHelper.Instance.Warning($"tunnel local ips :{string.Join(",", config.Data.Client.Tunnel.LocalIPs.Select(c => c.ToString()))}"); + LoggerHelper.Instance.Warning($"tunnel route level:{config.Data.Client.Tunnel.RouteLevel}"); } diff --git a/linker/plugins/tunnel/excludeip/TunnelExcludeIPTransfer.cs b/linker/plugins/tunnel/excludeip/TunnelExcludeIPTransfer.cs index b6db04c9..799601b1 100644 --- a/linker/plugins/tunnel/excludeip/TunnelExcludeIPTransfer.cs +++ b/linker/plugins/tunnel/excludeip/TunnelExcludeIPTransfer.cs @@ -35,7 +35,7 @@ namespace linker.plugins.tunnel.excludeip IEnumerable types = ReflectionHelper.GetInterfaceSchieves(assembs, typeof(ITunnelExcludeIP)); excludeIPs = types.Select(c => (ITunnelExcludeIP)serviceProvider.GetService(c)).Where(c => c != null).ToList(); - LoggerHelper.Instance.Warning($"load tunnel excludeips :{string.Join(",", types.Select(c => c.Name))}"); + LoggerHelper.Instance.Info($"load tunnel excludeips :{string.Join(",", types.Select(c => c.Name))}"); } public List Get() diff --git a/linker/plugins/tuntap/proxy/TuntapProxy.cs b/linker/plugins/tuntap/proxy/TuntapProxy.cs index 5acd09e3..d303c2fa 100644 --- a/linker/plugins/tuntap/proxy/TuntapProxy.cs +++ b/linker/plugins/tuntap/proxy/TuntapProxy.cs @@ -78,32 +78,14 @@ namespace linker.plugins.tuntap.proxy public async Task Callback(LinkerTunDevicPacket packet) { - //IPV4 - if (packet.Version == 4) + //IPV4广播组播 + if (packet.Version == 4 && packet.DistIPAddress.GetIsBroadcastAddress()) { - // 广播组播 - if (packet.DistIPAddress.GetIsBroadcastAddress()) + if (connections.IsEmpty == false) { - if (connections.IsEmpty == false) - { - await Task.WhenAll(connections.Values.Where(c => c != null && c.Connected).Select(c => c.SendAsync(packet.Packet))); - } - return; - } - - uint ip = BinaryPrimitives.ReadUInt32BigEndian(packet.DistIPAddress.Span); - if (ipConnections.TryGetValue(ip, out ITunnelConnection connection) == false || connection == null || connection.Connected == false) - { - connection = await ConnectTunnel(ip); - if (connection != null) - { - ipConnections.AddOrUpdate(ip, connection, (a, b) => connection); - } - } - if (connection != null) - { - await connection.SendAsync(packet.Packet); + await Task.WhenAll(connections.Values.Where(c => c != null && c.Connected).Select(c => c.SendAsync(packet.Packet))); } + return; } //IPV6 多播 else if (packet.Version == 6 && (packet.DistIPAddress.Span[0] & 0xFF) == 0xFF) @@ -114,6 +96,21 @@ namespace linker.plugins.tuntap.proxy } return; } + + //IPV4+IPV6 单播 + uint ip = BinaryPrimitives.ReadUInt32BigEndian(packet.DistIPAddress.Span[^4..]); + if (ipConnections.TryGetValue(ip, out ITunnelConnection connection) == false || connection == null || connection.Connected == false) + { + connection = await ConnectTunnel(ip); + if (connection != null) + { + ipConnections.AddOrUpdate(ip, connection, (a, b) => connection); + } + } + if (connection != null) + { + await connection.SendAsync(packet.Packet); + } } /// diff --git a/linker/startup/StartupTransfer.cs b/linker/startup/StartupTransfer.cs index 377bcb05..fb86a5f0 100644 --- a/linker/startup/StartupTransfer.cs +++ b/linker/startup/StartupTransfer.cs @@ -59,7 +59,7 @@ namespace linker.startup config.Data.Common.Plugins = startups.Select(c => c.Name).ToArray(); - LoggerHelper.Instance.Warning($"load startup : {string.Join(",", startups.Select(c => c.Name))}"); + LoggerHelper.Instance.Info($"load startup : {string.Join(",", startups.Select(c => c.Name))}"); } /// /// 加载插件依赖 @@ -90,12 +90,12 @@ namespace linker.startup { if (config.Data.Common.Modes.Contains("client")) { - LoggerHelper.Instance.Warning($"add startup {startup.Name} client"); + LoggerHelper.Instance.Info($"add startup {startup.Name} client"); startup.AddClient(serviceCollection, config, assemblies); } if (config.Data.Common.Modes.Contains("server")) { - LoggerHelper.Instance.Warning($"add startup {startup.Name} server"); + LoggerHelper.Instance.Info($"add startup {startup.Name} server"); startup.AddServer(serviceCollection, config, assemblies); } } @@ -113,12 +113,12 @@ namespace linker.startup { if (config.Data.Common.Modes.Contains("client")) { - LoggerHelper.Instance.Warning($"use startup {startup.Name} client"); + LoggerHelper.Instance.Info($"use startup {startup.Name} client"); startup.UseClient(serviceProvider, config, assemblies); } if (config.Data.Common.Modes.Contains("server")) { - LoggerHelper.Instance.Warning($"use startup {startup.Name} server"); + LoggerHelper.Instance.Info($"use startup {startup.Name} server"); startup.UseServer(serviceProvider, config, assemblies); } }