This commit is contained in:
snltty
2024-07-24 16:26:33 +08:00
parent 1814fea1b9
commit 5bb4bb31ba
15 changed files with 174 additions and 66 deletions

View File

@@ -48,13 +48,14 @@ jobs:
env: env:
GITHUB_TOKEN: '${{ secrets.ACTIONS_TOKEN }}' GITHUB_TOKEN: '${{ secrets.ACTIONS_TOKEN }}'
with: with:
tag_name: v1.1.2.6 tag_name: v1.1.3.1
release_name: v1.1.2.6.${{ steps.date.outputs.today }} release_name: v1.1.3.1.${{ steps.date.outputs.today }}
draft: false draft: false
prerelease: false prerelease: false
body: | body: |
1. 托盘检查 1. 托盘检查
2. 停止服务清理网卡 2. 停止服务清理网卡
3. 打洞错误
- name: upload win x64 - name: upload win x64
id: upload-win-x64 id: upload-win-x64

View File

@@ -36,5 +36,5 @@ jobs:
- name: Push - name: Push
run: | run: |
nuget push ./linker.tunnel/bin/release/linker.tunnel.1.1.2.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol nuget push ./linker.tunnel/bin/release/linker.tunnel.1.1.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.libs/bin/release/linker.libs.1.1.2.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol nuget push ./linker.libs/bin/release/linker.libs.1.1.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol

View File

@@ -14,9 +14,9 @@
<Copyright>snltty</Copyright> <Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl> <PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl> <RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<Version>1.1.2</Version> <Version>1.1.3</Version>
<AssemblyVersion>1.1.2.6</AssemblyVersion> <AssemblyVersion>1.1.3.1</AssemblyVersion>
<FileVersion>1.1.2.6</FileVersion> <FileVersion>1.1.3.1</FileVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType> <DebugType>full</DebugType>

View File

@@ -14,7 +14,7 @@
<PublishAot>false</PublishAot> <PublishAot>false</PublishAot>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault> <JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
<EnablePreviewFeatures>true</EnablePreviewFeatures> <EnablePreviewFeatures>true</EnablePreviewFeatures>
<Version>1.1.2</Version> <Version>1.1.3</Version>
<Authors>snltty</Authors> <Authors>snltty</Authors>
<Company>snltty</Company> <Company>snltty</Company>
<Description>snltty</Description> <Description>snltty</Description>
@@ -22,8 +22,8 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl> <PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl> <RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>snltty service</PackageReleaseNotes> <PackageReleaseNotes>snltty service</PackageReleaseNotes>
<AssemblyVersion>1.1.2.6</AssemblyVersion> <AssemblyVersion>1.1.3.1</AssemblyVersion>
<FileVersion>1.1.2.6</FileVersion> <FileVersion>1.1.3.1</FileVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -352,15 +352,17 @@ namespace linker.tunnel
private void ParseRemoteEndPoint(TunnelTransportInfo tunnelTransportInfo) private void ParseRemoteEndPoint(TunnelTransportInfo tunnelTransportInfo)
{ {
//要连接哪些IP //要连接哪些IP
IPAddress[] localIps = tunnelTransportInfo.Remote.LocalIps.Where(c => c.Equals(tunnelTransportInfo.Remote.Local.Address) == false).ToArray();
List<IPEndPoint> eps = new List<IPEndPoint>(); List<IPEndPoint> eps = new List<IPEndPoint>();
//先尝试内网ipv4 //先尝试内网ipv4
foreach (IPAddress item in localIps.Where(c => c.AddressFamily == AddressFamily.InterNetwork)) //if (tunnelTransportInfo.Local.Remote.Address.Equals(tunnelTransportInfo.Remote.Remote.Address))
{ {
eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Local.Port)); foreach (IPAddress item in tunnelTransportInfo.Remote.LocalIps.Where(c => c.AddressFamily == AddressFamily.InterNetwork))
eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Remote.Port)); {
eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Remote.Port + 1)); eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Local.Port));
eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Remote.Port));
eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Remote.Port + 1));
}
} }
//在尝试外网 //在尝试外网
eps.AddRange(new List<IPEndPoint>{ eps.AddRange(new List<IPEndPoint>{
@@ -368,7 +370,7 @@ namespace linker.tunnel
new IPEndPoint(tunnelTransportInfo.Remote.Remote.Address,tunnelTransportInfo.Remote.Remote.Port+1), new IPEndPoint(tunnelTransportInfo.Remote.Remote.Address,tunnelTransportInfo.Remote.Remote.Port+1),
}); });
//再尝试IPV6 //再尝试IPV6
foreach (IPAddress item in localIps.Where(c => c.AddressFamily == AddressFamily.InterNetworkV6)) foreach (IPAddress item in tunnelTransportInfo.Remote.LocalIps.Where(c => c.AddressFamily == AddressFamily.InterNetworkV6))
{ {
eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Local.Port)); eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Local.Port));
eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Remote.Port)); eps.Add(new IPEndPoint(item, tunnelTransportInfo.Remote.Remote.Port));
@@ -398,7 +400,7 @@ namespace linker.tunnel
/// </summary> /// </summary>
/// <param name="remoteMachineId"></param> /// <param name="remoteMachineId"></param>
/// <param name="transactionId"></param> /// <param name="transactionId"></param>
public void StartBackground(string remoteMachineId, string transactionId,int times = 10) public void StartBackground(string remoteMachineId, string transactionId, int times = 10)
{ {
if (AddBackground(remoteMachineId, transactionId) == false) if (AddBackground(remoteMachineId, transactionId) == false)
{ {
@@ -432,7 +434,7 @@ namespace linker.tunnel
} }
private bool AddBackground(string remoteMachineId, string transactionId) private bool AddBackground(string remoteMachineId, string transactionId)
{ {
return backgroundDic.TryAdd(GetBackgroundKey(remoteMachineId, transactionId), true); return backgroundDic.TryAdd(GetBackgroundKey(remoteMachineId, transactionId), true);
} }
private void RemoveBackground(string remoteMachineId, string transactionId) private void RemoveBackground(string remoteMachineId, string transactionId)
{ {

View File

@@ -9,7 +9,7 @@
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault> <JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
<EnablePreviewFeatures>true</EnablePreviewFeatures> <EnablePreviewFeatures>true</EnablePreviewFeatures>
<Title>linker tunnel</Title> <Title>linker tunnel</Title>
<Version>1.1.2</Version> <Version>1.1.3</Version>
<Authors>snltty</Authors> <Authors>snltty</Authors>
<Company>snltty</Company> <Company>snltty</Company>
<Description>linker tunnel</Description> <Description>linker tunnel</Description>
@@ -17,8 +17,8 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl> <PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl> <RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker tunnel</PackageReleaseNotes> <PackageReleaseNotes>linker tunnel</PackageReleaseNotes>
<AssemblyVersion>1.1.2.6</AssemblyVersion> <AssemblyVersion>1.1.3.1</AssemblyVersion>
<FileVersion>1.1.2.6</FileVersion> <FileVersion>1.1.3.1</FileVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -17,7 +17,7 @@
<EnablePreviewFeatures>true</EnablePreviewFeatures> <EnablePreviewFeatures>true</EnablePreviewFeatures>
<ServerGarbageCollection>false</ServerGarbageCollection> <ServerGarbageCollection>false</ServerGarbageCollection>
<Title>linker</Title> <Title>linker</Title>
<Version>1.1.2</Version> <Version>1.1.3</Version>
<Authors>snltty</Authors> <Authors>snltty</Authors>
<Company>snltty</Company> <Company>snltty</Company>
<Description>linker</Description> <Description>linker</Description>
@@ -25,8 +25,8 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl> <PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl> <RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker</PackageReleaseNotes> <PackageReleaseNotes>linker</PackageReleaseNotes>
<AssemblyVersion>1.1.2.6</AssemblyVersion> <AssemblyVersion>1.1.3.1</AssemblyVersion>
<FileVersion>1.1.2.6</FileVersion> <FileVersion>1.1.3.1</FileVersion>
</PropertyGroup> </PropertyGroup>

View File

@@ -11,6 +11,7 @@ using linker.tunnel.wanport;
using System.Buffers.Binary; using System.Buffers.Binary;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.tunnel.excludeip;
namespace linker.plugins.tunnel namespace linker.plugins.tunnel
{ {
@@ -25,17 +26,19 @@ namespace linker.plugins.tunnel
private readonly FileConfig config; private readonly FileConfig config;
private readonly RunningConfig running; private readonly RunningConfig running;
private readonly RunningConfigTransfer runningConfigTransfer; private readonly RunningConfigTransfer runningConfigTransfer;
private readonly ExcludeIPTransfer excludeIPTransfer;
private string wanPortConfigKey = "tunnelWanPortProtocols"; private string wanPortConfigKey = "tunnelWanPortProtocols";
private string transportConfigKey = "tunnelTransports"; private string transportConfigKey = "tunnelTransports";
public TunnelAdapter(ClientSignInState clientSignInState, MessengerSender messengerSender, FileConfig config, RunningConfig running, RunningConfigTransfer runningConfigTransfer) public TunnelAdapter(ClientSignInState clientSignInState, MessengerSender messengerSender, FileConfig config, RunningConfig running, RunningConfigTransfer runningConfigTransfer, ExcludeIPTransfer excludeIPTransfer)
{ {
this.clientSignInState = clientSignInState; this.clientSignInState = clientSignInState;
this.messengerSender = messengerSender; this.messengerSender = messengerSender;
this.config = config; this.config = config;
this.running = running; this.running = running;
this.runningConfigTransfer = runningConfigTransfer; this.runningConfigTransfer = runningConfigTransfer;
this.excludeIPTransfer = excludeIPTransfer;
string path = Path.GetFullPath(config.Data.Client.Certificate); string path = Path.GetFullPath(config.Data.Client.Certificate);
if (File.Exists(path)) if (File.Exists(path))
@@ -104,16 +107,15 @@ namespace linker.plugins.tunnel
public NetworkInfo GetLocalConfig() public NetworkInfo GetLocalConfig()
{ {
var excludeips = excludeIPTransfer.Get();
return new NetworkInfo return new NetworkInfo
{ {
LocalIps = config.Data.Client.Tunnel.LocalIPs LocalIps = config.Data.Client.Tunnel.LocalIPs.Where(c =>
.Where(c => c.Equals(running.Data.Tuntap.IP) == false)
.Where(c =>
{ {
if (c.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) if (c.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{ {
uint ip = BinaryPrimitives.ReadUInt32BigEndian(c.GetAddressBytes()); uint ip = BinaryPrimitives.ReadUInt32BigEndian(c.GetAddressBytes());
foreach (var item in running.Data.Tunnel.ExcludeIPs) foreach (var item in excludeips)
{ {
uint maskValue = NetworkHelper.MaskValue(item.Mask); uint maskValue = NetworkHelper.MaskValue(item.Mask);
uint ip1 = BinaryPrimitives.ReadUInt32BigEndian(item.IPAddress.GetAddressBytes()); uint ip1 = BinaryPrimitives.ReadUInt32BigEndian(item.IPAddress.GetAddressBytes());

View File

@@ -12,6 +12,7 @@ using linker.plugins.client;
using linker.plugins.server; using linker.plugins.server;
using linker.plugins.capi; using linker.plugins.capi;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.tunnel.excludeip;
namespace linker.plugins.tunnel namespace linker.plugins.tunnel
{ {
@@ -26,8 +27,9 @@ namespace linker.plugins.tunnel
private readonly MessengerSender messengerSender; private readonly MessengerSender messengerSender;
private readonly TunnelConfigTransfer tunnelConfigTransfer; private readonly TunnelConfigTransfer tunnelConfigTransfer;
private readonly ITunnelAdapter tunnelMessengerAdapter; private readonly ITunnelAdapter tunnelMessengerAdapter;
private readonly ExcludeIPTransfer excludeIPTransfer;
public TunnelApiController(FileConfig config, TunnelWanPortTransfer compactTransfer, ClientSignInState clientSignInState, MessengerSender messengerSender, TunnelConfigTransfer tunnelConfigTransfer, ITunnelAdapter tunnelMessengerAdapter) public TunnelApiController(FileConfig config, TunnelWanPortTransfer compactTransfer, ClientSignInState clientSignInState, MessengerSender messengerSender, TunnelConfigTransfer tunnelConfigTransfer, ITunnelAdapter tunnelMessengerAdapter, ExcludeIPTransfer excludeIPTransfer)
{ {
this.config = config; this.config = config;
this.compactTransfer = compactTransfer; this.compactTransfer = compactTransfer;
@@ -35,6 +37,7 @@ namespace linker.plugins.tunnel
this.messengerSender = messengerSender; this.messengerSender = messengerSender;
this.tunnelConfigTransfer = tunnelConfigTransfer; this.tunnelConfigTransfer = tunnelConfigTransfer;
this.tunnelMessengerAdapter = tunnelMessengerAdapter; this.tunnelMessengerAdapter = tunnelMessengerAdapter;
this.excludeIPTransfer = excludeIPTransfer;
} }
/// <summary> /// <summary>
@@ -134,12 +137,12 @@ namespace linker.plugins.tunnel
public ExcludeIPItem[] GetExcludeIPs(ApiControllerParamsInfo param) public ExcludeIPItem[] GetExcludeIPs(ApiControllerParamsInfo param)
{ {
return tunnelConfigTransfer.GetExcludeIPs(); return excludeIPTransfer.GetExcludeIPs();
} }
public void SetExcludeIPs(ApiControllerParamsInfo param) public void SetExcludeIPs(ApiControllerParamsInfo param)
{ {
ExcludeIPItem[] info = param.Content.DeJson<ExcludeIPItem[]>(); ExcludeIPItem[] info = param.Content.DeJson<ExcludeIPItem[]>();
tunnelConfigTransfer.SettExcludeIPs(info); excludeIPTransfer.SettExcludeIPs(info);
} }
public sealed class TunnelListInfo public sealed class TunnelListInfo

View File

@@ -21,7 +21,7 @@ namespace linker.plugins.tunnel
private readonly RunningConfigTransfer runningConfigTransfer; private readonly RunningConfigTransfer runningConfigTransfer;
private readonly ITunnelAdapter tunnelAdapter; private readonly ITunnelAdapter tunnelAdapter;
private string exipConfigKey = "excludeIPConfig";
private uint version = 0; private uint version = 0;
public uint ConfigVersion => version; public uint ConfigVersion => version;
@@ -39,7 +39,7 @@ namespace linker.plugins.tunnel
InitRouteLevel(); InitRouteLevel();
InitExcludeIP();
InitConfig(); InitConfig();
TestQuic(); TestQuic();
@@ -147,37 +147,6 @@ namespace linker.plugins.tunnel
} }
private void InitExcludeIP()
{
clientSignInState.NetworkFirstEnabledHandle += () =>
{
SyncExcludeIP();
};
runningConfigTransfer.Setter(exipConfigKey, SettExcludeIPs);
runningConfigTransfer.Getter(exipConfigKey, () => MemoryPackSerializer.Serialize(GetExcludeIPs()));
}
private void SyncExcludeIP()
{
runningConfigTransfer.Sync(exipConfigKey, MemoryPackSerializer.Serialize(running.Data.Tunnel.ExcludeIPs));
}
public ExcludeIPItem[] GetExcludeIPs()
{
return running.Data.Tunnel.ExcludeIPs;
}
public void SettExcludeIPs(ExcludeIPItem[] ips)
{
running.Data.Tunnel.ExcludeIPs = ips;
running.Data.Update();
runningConfigTransfer.IncrementVersion(exipConfigKey);
SyncExcludeIP();
}
private void SettExcludeIPs(Memory<byte> data)
{
running.Data.Tunnel.ExcludeIPs = MemoryPackSerializer.Deserialize<ExcludeIPItem[]>(data.Span);
running.Data.Update();
}
bool reboot = false; bool reboot = false;
private void TestQuic() private void TestQuic()
{ {

View File

@@ -10,6 +10,7 @@ using Microsoft.Extensions.DependencyInjection;
using System.Net; using System.Net;
using System.Reflection; using System.Reflection;
using linker.tunnel.wanport; using linker.tunnel.wanport;
using linker.plugins.tunnel.excludeip;
namespace linker.plugins.tunnel namespace linker.plugins.tunnel
{ {
@@ -54,6 +55,8 @@ namespace linker.plugins.tunnel
serviceCollection.AddSingleton<TransportMsQuic>(); serviceCollection.AddSingleton<TransportMsQuic>();
serviceCollection.AddSingleton<TransportTcpP2PNAT>(); serviceCollection.AddSingleton<TransportTcpP2PNAT>();
serviceCollection.AddSingleton<ExcludeIPTransfer>();
serviceCollection.AddSingleton<TunnelConfigTransfer>(); serviceCollection.AddSingleton<TunnelConfigTransfer>();
serviceCollection.AddSingleton<ITunnelAdapter, TunnelAdapter>(); serviceCollection.AddSingleton<ITunnelAdapter, TunnelAdapter>();
@@ -93,6 +96,10 @@ namespace linker.plugins.tunnel
tunnel.Init(compack, tunnelAdapter, transports); tunnel.Init(compack, tunnelAdapter, transports);
TunnelConfigTransfer tunnelConfigTransfer = serviceProvider.GetService<TunnelConfigTransfer>(); TunnelConfigTransfer tunnelConfigTransfer = serviceProvider.GetService<TunnelConfigTransfer>();
ExcludeIPTransfer excludeIPTransfer = serviceProvider.GetService<ExcludeIPTransfer>();
excludeIPTransfer.Load(assemblies);
} }
public void UseServer(ServiceProvider serviceProvider, FileConfig config, Assembly[] assemblies) public void UseServer(ServiceProvider serviceProvider, FileConfig config, Assembly[] assemblies)

View File

@@ -0,0 +1,85 @@
using linker.client.config;
using linker.libs;
using linker.plugins.client;
using MemoryPack;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace linker.plugins.tunnel.excludeip
{
public sealed class ExcludeIPTransfer
{
private List<IExcludeIP> excludeIPs;
private string exipConfigKey = "excludeIPConfig";
private readonly RunningConfig running;
private readonly ClientSignInState clientSignInState;
private readonly RunningConfigTransfer runningConfigTransfer;
private readonly ServiceProvider serviceProvider;
public ExcludeIPTransfer(RunningConfig running, ClientSignInState clientSignInState, RunningConfigTransfer runningConfigTransfer, ServiceProvider serviceProvider)
{
this.running = running;
this.clientSignInState = clientSignInState;
this.runningConfigTransfer = runningConfigTransfer;
this.serviceProvider = serviceProvider;
InitExcludeIP();
}
public void Load(Assembly[] assembs)
{
IEnumerable<Type> types = ReflectionHelper.GetInterfaceSchieves(assembs, typeof(IExcludeIP));
excludeIPs = types.Select(c => (IExcludeIP)serviceProvider.GetService(c)).Where(c => c != null).ToList();
LoggerHelper.Instance.Warning($"load tunnel excludeips :{string.Join(",", types.Select(c => c.Name))}");
}
public List<ExcludeIPItem> Get()
{
List<ExcludeIPItem> result = new List<ExcludeIPItem>();
foreach (var item in excludeIPs)
{
var ips = item.Get();
if (ips != null && ips.Length > 0)
{
result.AddRange(ips);
}
}
if (running.Data.Tunnel.ExcludeIPs.Length > 0)
{
result.AddRange(running.Data.Tunnel.ExcludeIPs);
}
return result;
}
private void InitExcludeIP()
{
clientSignInState.NetworkFirstEnabledHandle += () =>
{
SyncExcludeIP();
};
runningConfigTransfer.Setter(exipConfigKey, SettExcludeIPs);
runningConfigTransfer.Getter(exipConfigKey, () => MemoryPackSerializer.Serialize(GetExcludeIPs()));
}
private void SyncExcludeIP()
{
runningConfigTransfer.Sync(exipConfigKey, MemoryPackSerializer.Serialize(running.Data.Tunnel.ExcludeIPs));
}
public ExcludeIPItem[] GetExcludeIPs()
{
return running.Data.Tunnel.ExcludeIPs;
}
public void SettExcludeIPs(ExcludeIPItem[] ips)
{
running.Data.Tunnel.ExcludeIPs = ips;
running.Data.Update();
runningConfigTransfer.IncrementVersion(exipConfigKey);
SyncExcludeIP();
}
private void SettExcludeIPs(Memory<byte> data)
{
running.Data.Tunnel.ExcludeIPs = MemoryPackSerializer.Deserialize<ExcludeIPItem[]>(data.Span);
running.Data.Update();
}
}
}

View File

@@ -0,0 +1,15 @@
using linker.client.config;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace linker.plugins.tunnel.excludeip
{
public interface IExcludeIP
{
public ExcludeIPItem[] Get();
}
}

View File

@@ -0,0 +1,21 @@
using linker.client.config;
using linker.plugins.tunnel.excludeip;
namespace linker.plugins.tuntap
{
public sealed class ExcludeIP : IExcludeIP
{
private readonly RunningConfig runningConfig;
public ExcludeIP(RunningConfig runningConfig)
{
this.runningConfig = runningConfig;
}
public ExcludeIPItem[] Get()
{
//网卡IP和局域网IP。不参与打洞
return new ExcludeIPItem[] { new ExcludeIPItem { IPAddress = runningConfig.Data.Tuntap.IP, Mask = 32 } }
.Concat(runningConfig.Data.Tuntap.LanIPs.Select((c, index) => new ExcludeIPItem { IPAddress = c, Mask = (byte)runningConfig.Data.Tuntap.Masks[index] }))
.ToArray();
}
}
}

View File

@@ -16,7 +16,7 @@ namespace linker.plugins.tuntap
public StartupLevel Level => StartupLevel.Normal; public StartupLevel Level => StartupLevel.Normal;
public string Name => "tuntap"; public string Name => "tuntap";
public bool Required => false; public bool Required => false;
public string[] Dependent => new string[] {"messenger", "relay", "tunnel", "signin", "serialize", "config" }; public string[] Dependent => new string[] { "messenger", "relay", "tunnel", "signin", "serialize", "config" };
public StartupLoadType LoadType => StartupLoadType.Normal; public StartupLoadType LoadType => StartupLoadType.Normal;
@@ -33,6 +33,9 @@ namespace linker.plugins.tuntap
serviceCollection.AddSingleton<TuntapProxy>(); serviceCollection.AddSingleton<TuntapProxy>();
serviceCollection.AddSingleton<TuntapClientMessenger>(); serviceCollection.AddSingleton<TuntapClientMessenger>();
serviceCollection.AddSingleton<ExcludeIP>();
} }
public void AddServer(ServiceCollection serviceCollection, FileConfig config, Assembly[] assemblies) public void AddServer(ServiceCollection serviceCollection, FileConfig config, Assembly[] assemblies)