取消
@@ -51,6 +64,8 @@ export default {
ruleForm: {
RouteLevel: tunnel.value.current.RouteLevel,
RouteLevelPlus: tunnel.value.current.RouteLevelPlus,
+ PortMapWan: tunnel.value.current.PortMapWan,
+ PortMapLan: tunnel.value.current.PortMapLan,
},
rules: {}
});
@@ -66,6 +81,8 @@ export default {
const json = JSON.parse(JSON.stringify(tunnel.value.current));
json.RouteLevel = +state.ruleForm.RouteLevel;
json.RouteLevelPlus = +state.ruleForm.RouteLevelPlus;
+ json.PortMapWan = +state.ruleForm.PortMapWan;
+ json.PortMapLan = +state.ruleForm.PortMapLan;
setTunnelRouteLevel(json).then(() => {
state.show = false;
ElMessage.success('已操作!');
diff --git a/linker/plugins/tunnel/TunnelAdapter.cs b/linker/plugins/tunnel/TunnelAdapter.cs
index d3b2dac8..08b3fcf3 100644
--- a/linker/plugins/tunnel/TunnelAdapter.cs
+++ b/linker/plugins/tunnel/TunnelAdapter.cs
@@ -19,7 +19,7 @@ namespace linker.plugins.tunnel
{
public IPAddress LocalIP => clientSignInState.Connection?.LocalAddress.Address ?? IPAddress.Any;
public X509Certificate2 Certificate { get; private set; }
-
+ public PortMapInfo PortMap => new PortMapInfo { WanPort = running.Data.Tunnel.PortMapWan, LanPort = running.Data.Tunnel.PortMapLan };
private readonly ClientSignInState clientSignInState;
private readonly MessengerSender messengerSender;
@@ -104,7 +104,6 @@ namespace linker.plugins.tunnel
}
-
public NetworkInfo GetLocalConfig()
{
var excludeips = excludeIPTransfer.Get();
@@ -180,6 +179,5 @@ namespace linker.plugins.tunnel
return true;
}
-
}
}
diff --git a/linker/plugins/tunnel/TunnelApiController.cs b/linker/plugins/tunnel/TunnelApiController.cs
index d050e426..e3aab9b8 100644
--- a/linker/plugins/tunnel/TunnelApiController.cs
+++ b/linker/plugins/tunnel/TunnelApiController.cs
@@ -9,7 +9,6 @@ using System.Collections.Concurrent;
using linker.tunnel.wanport;
using linker.client.config;
using linker.plugins.client;
-using linker.plugins.server;
using linker.plugins.capi;
using linker.plugins.messenger;
using linker.plugins.tunnel.excludeip;
@@ -87,7 +86,6 @@ namespace linker.plugins.tunnel
List info = param.Content.DeJson>();
tunnelMessengerAdapter.SetTunnelWanPortProtocols(info,true);
return true;
-
}
///
/// 设置网关层级
@@ -144,7 +142,6 @@ namespace linker.plugins.tunnel
ExcludeIPItem[] info = param.Content.DeJson();
excludeIPTransfer.SettExcludeIPs(info);
}
-
public sealed class TunnelListInfo
{
public ConcurrentDictionary List { get; set; }
diff --git a/linker/plugins/tunnel/TunnelConfigTransfer.cs b/linker/plugins/tunnel/TunnelConfigTransfer.cs
index e3dd5a21..ed2896f0 100644
--- a/linker/plugins/tunnel/TunnelConfigTransfer.cs
+++ b/linker/plugins/tunnel/TunnelConfigTransfer.cs
@@ -5,6 +5,7 @@ using linker.plugins.client;
using linker.plugins.messenger;
using linker.plugins.tunnel.messenger;
using linker.tunnel.adapter;
+using linker.tunnel.transport;
using linker.tunnel.wanport;
using MemoryPack;
using System.Collections.Concurrent;
@@ -20,15 +21,15 @@ namespace linker.plugins.tunnel
private readonly MessengerSender messengerSender;
private readonly RunningConfigTransfer runningConfigTransfer;
private readonly ITunnelAdapter tunnelAdapter;
+ private readonly TransportTcpPortMap transportTcpPortMap;
-
private uint version = 0;
public uint ConfigVersion => version;
private ConcurrentDictionary configs = new ConcurrentDictionary();
public ConcurrentDictionary Config => configs;
- public TunnelConfigTransfer(FileConfig config, RunningConfig running, ClientSignInState clientSignInState, MessengerSender messengerSender, RunningConfigTransfer runningConfigTransfer, ITunnelAdapter tunnelAdapter)
+ public TunnelConfigTransfer(FileConfig config, RunningConfig running, ClientSignInState clientSignInState, MessengerSender messengerSender, RunningConfigTransfer runningConfigTransfer, ITunnelAdapter tunnelAdapter, TransportTcpPortMap transportTcpPortMap)
{
this.config = config;
this.running = running;
@@ -36,12 +37,15 @@ namespace linker.plugins.tunnel
this.messengerSender = messengerSender;
this.runningConfigTransfer = runningConfigTransfer;
this.tunnelAdapter = tunnelAdapter;
+ this.transportTcpPortMap = transportTcpPortMap;
InitRouteLevel();
-
+
InitConfig();
TestQuic();
+
+ RefreshPortMap();
}
private void InitConfig()
@@ -89,8 +93,11 @@ namespace linker.plugins.tunnel
public void OnLocalRouteLevel(TunnelTransportRouteLevelInfo tunnelTransportFileConfigInfo)
{
running.Data.Tunnel.RouteLevelPlus = tunnelTransportFileConfigInfo.RouteLevelPlus;
+ running.Data.Tunnel.PortMapWan = tunnelTransportFileConfigInfo.PortMapWan;
+ running.Data.Tunnel.PortMapLan = tunnelTransportFileConfigInfo.PortMapLan;
running.Data.Update();
GetRemoteRouteLevel();
+ RefreshPortMap();
}
///
/// 收到别人发给我的修改我的信息
@@ -134,6 +141,8 @@ namespace linker.plugins.tunnel
MachineId = config.Data.Client.Id,
RouteLevel = config.Data.Client.Tunnel.RouteLevel,
RouteLevelPlus = running.Data.Tunnel.RouteLevelPlus,
+ PortMapWan = running.Data.Tunnel.PortMapWan,
+ PortMapLan = running.Data.Tunnel.PortMapLan,
NeedReboot = reboot
};
}
@@ -175,5 +184,11 @@ namespace linker.plugins.tunnel
}
}
}
+
+
+ private void RefreshPortMap()
+ {
+ _ = transportTcpPortMap.Listen(running.Data.Tunnel.PortMapLan);
+ }
}
}
diff --git a/linker/plugins/tunnel/TunnelStartup.cs b/linker/plugins/tunnel/TunnelStartup.cs
index 8d818790..04f119f3 100644
--- a/linker/plugins/tunnel/TunnelStartup.cs
+++ b/linker/plugins/tunnel/TunnelStartup.cs
@@ -48,13 +48,15 @@ namespace linker.plugins.tunnel
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
+
//打洞协议
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
-
+ serviceCollection.AddSingleton();
+
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
@@ -101,6 +103,7 @@ namespace linker.plugins.tunnel
TunnelExcludeIPTransfer excludeIPTransfer = serviceProvider.GetService();
excludeIPTransfer.Load(assemblies);
+
}
public void UseServer(ServiceProvider serviceProvider, FileConfig config, Assembly[] assemblies)
diff --git a/linker/plugins/tunnel/config/Config.cs b/linker/plugins/tunnel/config/Config.cs
index 5082daa2..f51054af 100644
--- a/linker/plugins/tunnel/config/Config.cs
+++ b/linker/plugins/tunnel/config/Config.cs
@@ -28,7 +28,7 @@ namespace linker.client.config
///
/// 附加的网关层级
///
- public int RouteLevelPlus { get; set; } = 0;
+ public int RouteLevelPlus { get; set; }
///
/// 打洞排除IP列表
///
@@ -38,6 +38,9 @@ namespace linker.client.config
/// 打洞协议列表
///
public List Transports { get; set; } = new List();
+
+ public int PortMapWan { get; set; }
+ public int PortMapLan { get; set; }
}
[MemoryPackable]
@@ -73,10 +76,13 @@ namespace linker.config
public sealed partial class TunnelTransportRouteLevelInfo
{
public string MachineId { get; set; }
- public int RouteLevel { get; set; } = 0;
- public int RouteLevelPlus { get; set; } = 0;
+ public int RouteLevel { get; set; }
+ public int RouteLevelPlus { get; set; }
public bool NeedReboot { get; set; }
+
+ public int PortMapWan { get; set; }
+ public int PortMapLan { get; set; }
}
@@ -219,10 +225,26 @@ namespace linker.config
[MemoryPackInclude]
string MachineName => tunnelTransportWanPortInfo.MachineName;
+ [MemoryPackInclude]
+ int PortMapWan => tunnelTransportWanPortInfo.PortMapWan;
+
+ [MemoryPackInclude]
+ int PortMapLan => tunnelTransportWanPortInfo.PortMapLan;
+
[MemoryPackConstructor]
- SerializableTunnelTransportWanPortInfo(IPEndPoint local, IPEndPoint remote, IPAddress[] localIps, int routeLevel, string machineId, string machineName)
+ SerializableTunnelTransportWanPortInfo(IPEndPoint local, IPEndPoint remote, IPAddress[] localIps, int routeLevel, string machineId, string machineName, int portMapWan, int portMapLan)
{
- var tunnelTransportWanPortInfo = new TunnelTransportWanPortInfo { Local = local, Remote = remote, LocalIps = localIps, RouteLevel = routeLevel, MachineId = machineId, MachineName = machineName };
+ var tunnelTransportWanPortInfo = new TunnelTransportWanPortInfo
+ {
+ Local = local,
+ Remote = remote,
+ LocalIps = localIps,
+ RouteLevel = routeLevel,
+ MachineId = machineId,
+ MachineName = machineName,
+ PortMapWan = portMapWan,
+ PortMapLan = portMapLan
+ };
this.tunnelTransportWanPortInfo = tunnelTransportWanPortInfo;
}
@@ -259,7 +281,6 @@ namespace linker.config
}
-
[MemoryPackable]
public readonly partial struct SerializableTunnelTransportItemInfo
{
@@ -357,9 +378,12 @@ namespace linker.config
[MemoryPackInclude]
byte BufferSize => tunnelTransportInfo.BufferSize;
+ [MemoryPackInclude]
+ uint FlowId => tunnelTransportInfo.FlowId;
+
[MemoryPackConstructor]
- SerializableTunnelTransportInfo(TunnelTransportWanPortInfo local, TunnelTransportWanPortInfo remote, string transactionId, TunnelProtocolType transportType, string transportName, TunnelDirection direction, bool ssl, byte bufferSize)
+ SerializableTunnelTransportInfo(TunnelTransportWanPortInfo local, TunnelTransportWanPortInfo remote, string transactionId, TunnelProtocolType transportType, string transportName, TunnelDirection direction, bool ssl, byte bufferSize, uint flowid)
{
var tunnelTransportInfo = new TunnelTransportInfo
{
@@ -371,6 +395,7 @@ namespace linker.config
Direction = direction,
SSL = ssl,
BufferSize = bufferSize,
+ FlowId = flowid
};
this.tunnelTransportInfo = tunnelTransportInfo;
}
diff --git a/linker/plugins/tunnel/messenger/TunnelMessenger.cs b/linker/plugins/tunnel/messenger/TunnelMessenger.cs
index ec9744a2..e36a37fd 100644
--- a/linker/plugins/tunnel/messenger/TunnelMessenger.cs
+++ b/linker/plugins/tunnel/messenger/TunnelMessenger.cs
@@ -150,11 +150,14 @@ namespace linker.plugins.tunnel.messenger
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
{
+ tunnelTransportInfo.Local.MachineName = cache1.MachineName;
+ tunnelTransportInfo.Remote.MachineName = cache.MachineName;
+
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = cache.Connection,
MessengerId = (ushort)TunnelMessengerIds.Begin,
- Payload = connection.ReceiveRequestWrap.Payload
+ Payload = MemoryPackSerializer.Serialize(tunnelTransportInfo)
}).ConfigureAwait(false);
connection.Write(Helper.TrueArray);
}
@@ -167,11 +170,13 @@ namespace linker.plugins.tunnel.messenger
TunnelTransportInfo tunnelTransportInfo = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
{
+ tunnelTransportInfo.Local.MachineName = cache1.MachineName;
+ tunnelTransportInfo.Remote.MachineName = cache.MachineName;
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = cache.Connection,
MessengerId = (ushort)TunnelMessengerIds.Fail,
- Payload = connection.ReceiveRequestWrap.Payload
+ Payload = MemoryPackSerializer.Serialize(tunnelTransportInfo)
}).ConfigureAwait(false);
}
}
@@ -183,11 +188,13 @@ namespace linker.plugins.tunnel.messenger
TunnelTransportInfo tunnelTransportInfo = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
{
+ tunnelTransportInfo.Local.MachineName = cache1.MachineName;
+ tunnelTransportInfo.Remote.MachineName = cache.MachineName;
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = cache.Connection,
MessengerId = (ushort)TunnelMessengerIds.Success,
- Payload = connection.ReceiveRequestWrap.Payload
+ Payload = MemoryPackSerializer.Serialize(tunnelTransportInfo)
}).ConfigureAwait(false);
}
}