This commit is contained in:
snltty
2025-09-11 22:00:45 +08:00
parent d033217995
commit 80690f2a83
4 changed files with 43 additions and 49 deletions

View File

@@ -68,7 +68,8 @@ namespace linker.messenger.relay.server
{ {
Connection = connection, Connection = connection,
MessengerId = (ushort)RelayMessengerIds.NodeGetCache186, MessengerId = (ushort)RelayMessengerIds.NodeGetCache186,
Payload = serializer.Serialize(new ValueTuple<string, string>(key, node.Id)) Payload = serializer.Serialize(new ValueTuple<string, string>(key, node.Id)),
Timeout = 1000
}).ConfigureAwait(false); }).ConfigureAwait(false);
if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0) if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0)
{ {

View File

@@ -49,12 +49,10 @@ namespace linker.messenger.relay.server
public async Task Resolve(Socket socket, IPEndPoint ep, Memory<byte> memory) public async Task Resolve(Socket socket, IPEndPoint ep, Memory<byte> memory)
{ {
LoggerHelper.Instance.Debug($"udp from {ep},1");
if (relayServerNodeTransfer.Validate(tunnel.connection.TunnelProtocolType.Udp) == false) if (relayServerNodeTransfer.Validate(tunnel.connection.TunnelProtocolType.Udp) == false)
{ {
return; return;
} }
LoggerHelper.Instance.Debug($"udp from {ep},2");
RelayUdpStep step = (RelayUdpStep)memory.Span[0]; RelayUdpStep step = (RelayUdpStep)memory.Span[0];
memory = memory.Slice(1); memory = memory.Slice(1);
@@ -67,7 +65,6 @@ namespace linker.messenger.relay.server
} }
return; return;
} }
LoggerHelper.Instance.Debug($"udp from {ep},3");
byte flagLength = memory.Span[0]; byte flagLength = memory.Span[0];
if (memory.Length < flagLength + 1 || memory.Slice(1, flagLength).Span.SequenceEqual(relayFlag) == false) if (memory.Length < flagLength + 1 || memory.Slice(1, flagLength).Span.SequenceEqual(relayFlag) == false)
{ {
@@ -75,59 +72,55 @@ namespace linker.messenger.relay.server
return; return;
} }
memory = memory.Slice(1 + flagLength); memory = memory.Slice(1 + flagLength);
LoggerHelper.Instance.Debug($"udp from {ep},4");
RelayMessageInfo relayMessage = serializer.Deserialize<RelayMessageInfo>(memory.Span); RelayMessageInfo relayMessage = serializer.Deserialize<RelayMessageInfo>(memory.Span);
//ask 是发起端来的那key就是 发起端->目标端, answer的目标和来源会交换所以转换一下 //ask 是发起端来的那key就是 发起端->目标端, answer的目标和来源会交换所以转换一下
string key = relayMessage.Type == RelayMessengerType.Ask ? $"{relayMessage.FromId}->{relayMessage.ToId}->{relayMessage.FlowId}" : $"{relayMessage.ToId}->{relayMessage.FromId}->{relayMessage.FlowId}"; string key = relayMessage.Type == RelayMessengerType.Ask ? $"{relayMessage.FromId}->{relayMessage.ToId}->{relayMessage.FlowId}" : $"{relayMessage.ToId}->{relayMessage.FromId}->{relayMessage.FlowId}";
string flowKey = relayMessage.Type == RelayMessengerType.Ask ? $"{relayMessage.FromId}->{relayMessage.ToId}" : $"{relayMessage.ToId}->{relayMessage.FromId}"; string flowKey = relayMessage.Type == RelayMessengerType.Ask ? $"{relayMessage.FromId}->{relayMessage.ToId}" : $"{relayMessage.ToId}->{relayMessage.FromId}";
LoggerHelper.Instance.Debug($"udp from {ep},5");
//获取缓存 //获取缓存
RelayCacheInfo relayCache = await relayServerNodeTransfer.TryGetRelayCache(key).ConfigureAwait(false); _ = relayServerNodeTransfer.TryGetRelayCache(key).ContinueWith(async (result) =>
if (relayCache == null) {
{ RelayCacheInfo relayCache = result.Result;
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (relayCache == null)
LoggerHelper.Instance.Error($"relay {relayMessage.Type} get cache fail,flowid:{relayMessage.FlowId}"); {
await socket.SendToAsync(new byte[] { 1 }, ep).ConfigureAwait(false); if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
return; LoggerHelper.Instance.Error($"relay {relayMessage.Type} get cache fail,flowid:{relayMessage.FlowId}");
} await socket.SendToAsync(new byte[] { 1 }, ep).ConfigureAwait(false);
LoggerHelper.Instance.Debug($"udp from {ep},6"); return;
if (relayMessage.Type == RelayMessengerType.Ask && relayServerNodeTransfer.Validate(relayCache) == false) }
{ if (relayMessage.Type == RelayMessengerType.Ask && relayServerNodeTransfer.Validate(relayCache) == false)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) {
LoggerHelper.Instance.Error($"relay {relayMessage.Type} Validate false,flowid:{relayMessage.FlowId}"); if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
await socket.SendToAsync(new byte[] { 1 }, ep).ConfigureAwait(false); LoggerHelper.Instance.Error($"relay {relayMessage.Type} Validate false,flowid:{relayMessage.FlowId}");
return; await socket.SendToAsync(new byte[] { 1 }, ep).ConfigureAwait(false);
} return;
LoggerHelper.Instance.Debug($"udp from {ep},7"); }
//流量统计 //流量统计
Add(flowKey, relayCache.FromName, relayCache.ToName, relayCache.GroupId, memory.Length, 0); Add(flowKey, relayCache.FromName, relayCache.ToName, relayCache.GroupId, memory.Length, 0);
//回应 //回应
if (relayMessage.Type == RelayMessengerType.Answer) if (relayMessage.Type == RelayMessengerType.Answer)
{ {
if (relayUdpDic.TryRemove(relayCache.FlowId, out RelayUdpNatInfo natAsk)) if (relayUdpDic.TryRemove(relayCache.FlowId, out RelayUdpNatInfo natAsk))
{ {
natAsk.Target = ep; natAsk.Target = ep;
RelayUdpNatInfo natAnswer = new RelayUdpNatInfo { Target = natAsk.Source, Traffic = natAsk.Traffic, Source = ep }; RelayUdpNatInfo natAnswer = new RelayUdpNatInfo { Target = natAsk.Source, Traffic = natAsk.Traffic, Source = ep };
udpNat.AddOrUpdate(ep, natAnswer, (a, b) => natAnswer); udpNat.AddOrUpdate(ep, natAnswer, (a, b) => natAnswer);
} }
return; return;
} }
LoggerHelper.Instance.Debug($"udp from {ep},8");
//请求 //请求
RelayTrafficCacheInfo trafficCacheInfo = new RelayTrafficCacheInfo { Cache = relayCache, Sendt = 0, Limit = new RelaySpeedLimit(), Key = flowKey }; RelayTrafficCacheInfo trafficCacheInfo = new RelayTrafficCacheInfo { Cache = relayCache, Sendt = 0, Limit = new RelaySpeedLimit(), Key = flowKey };
RelayUdpNatInfo nat = new RelayUdpNatInfo { Ask = true, Source = ep, Traffic = trafficCacheInfo, Key = flowKey }; RelayUdpNatInfo nat = new RelayUdpNatInfo { Ask = true, Source = ep, Traffic = trafficCacheInfo, Key = flowKey };
udpNat.AddOrUpdate(ep, nat, (a, b) => nat); udpNat.AddOrUpdate(ep, nat, (a, b) => nat);
relayUdpDic.TryAdd(relayCache.FlowId, nat); relayUdpDic.TryAdd(relayCache.FlowId, nat);
relayServerNodeTransfer.AddTrafficCache(trafficCacheInfo); relayServerNodeTransfer.AddTrafficCache(trafficCacheInfo);
relayServerNodeTransfer.IncrementConnectionNum(); relayServerNodeTransfer.IncrementConnectionNum();
LoggerHelper.Instance.Debug($"udp from {ep},9"); await socket.SendToAsync(new byte[] { 0 }, ep).ConfigureAwait(false);
await socket.SendToAsync(new byte[] { 0 }, ep).ConfigureAwait(false); }).ConfigureAwait(false);
LoggerHelper.Instance.Debug($"udp from {ep},10");
} }
private async Task CopyToAsync(RelayUdpNatInfo nat, Socket socket, IPEndPoint ep, Memory<byte> memory) private async Task CopyToAsync(RelayUdpNatInfo nat, Socket socket, IPEndPoint ep, Memory<byte> memory)
{ {

View File

@@ -21,7 +21,7 @@
<el-checkbox class="mgr-1" v-model="state.ruleForm.DisableNat" label="禁用NAT" size="large" /> <el-checkbox class="mgr-1" v-model="state.ruleForm.DisableNat" label="禁用NAT" size="large" />
<el-checkbox class="mgr-1" v-model="state.ruleForm.TcpMerge" label="TCP包合并" size="large" /> <el-checkbox class="mgr-1" v-model="state.ruleForm.TcpMerge" label="TCP包合并" size="large" />
<el-checkbox class="mgr-1" v-model="state.ruleForm.InterfaceOrder" label="网卡顺序" size="large" /> <el-checkbox class="mgr-1" v-model="state.ruleForm.InterfaceOrder" label="网卡顺序" size="large" />
<el-checkbox v-model="state.ruleForm.FakeAck" label="伪ACK" size="large" /> <!-- <el-checkbox v-model="state.ruleForm.FakeAck" label="伪ACK" size="large" /> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>

View File

@@ -1,5 +1,5 @@
v1.9.1 v1.9.1
2025-09-11 21:15:46 2025-09-11 22:00:45
1. 一些累计更新 1. 一些累计更新
2. 服务器转发多节点 2. 服务器转发多节点
3. 虚拟网卡下伪造ACK为TCP-in-TCP隧道提速 3. 虚拟网卡下伪造ACK为TCP-in-TCP隧道提速