From 2a01734f58c37b4b17f438e884fea53f96942f33 Mon Sep 17 00:00:00 2001 From: snltty <1069410172@qq.com> Date: Sat, 5 Jul 2025 15:47:10 +0800 Subject: [PATCH] 186 --- .../2、安装运行/2.7、初始化配置2(服务端).md | 23 ++----- .../2、安装运行/2.8、初始化配置3(客户端).md | 31 ++++----- .../docs/3、打洞和中继/3.2、中继.md | 4 +- .../docs/3、打洞和中继/img/relay.jpg | Bin 111434 -> 0 bytes .../docs/4、通信功能/4.4、服务器穿透.md | 4 +- src/linker.doc.web/docs/6、自定义验证.md | 4 ++ .../IActionServerStore.cs | 5 ++ .../SignInArgsAction.cs | 62 ++++++++++++++++++ src/linker.messenger.cdkey/CdkeyMessenger.cs | 2 +- .../messenger/FlowMessenger.cs | 2 +- .../messenger/RelayMessenger.cs | 12 ++-- .../server/validator/IRelayServerValidator.cs | 8 +++ .../validator/RelayServerValidatorTransfer.cs | 12 ++++ .../server/validator/SForwardValidator.cs | 2 +- .../action/ActionServerStore.cs | 9 ++- .../action/Config.cs | 2 + .../relay/Config.cs | 1 - .../UpdaterMessenger.cs | 2 +- .../src/views/full/server/Updater.vue | 2 +- version.txt | 2 +- 20 files changed, 136 insertions(+), 53 deletions(-) delete mode 100644 src/linker.doc.web/docs/3、打洞和中继/img/relay.jpg diff --git a/src/linker.doc.web/docs/2、安装运行/2.7、初始化配置2(服务端).md b/src/linker.doc.web/docs/2、安装运行/2.7、初始化配置2(服务端).md index 6c0eb1c3..f1264db5 100644 --- a/src/linker.doc.web/docs/2、安装运行/2.7、初始化配置2(服务端).md +++ b/src/linker.doc.web/docs/2、安装运行/2.7、初始化配置2(服务端).md @@ -22,30 +22,21 @@ server.json //cdkey 加密密钥 "SecretKey": "snltty" }, - //中继 - "Relay": { - //中继密钥,客户端密钥不准确时无法使用本中继 - "SecretKey": "", - - }, //信标服务器端口 "ServicePort": 1802, //内网穿透配置 "SForward": { - //内网穿透密钥 - "SecretKey": "", "BufferSize": 3, //web端口,用于按域名穿透 "WebPort": 0, //隧道端口范围,用于按端口穿透 - "TunnelPortRange": [ - 10000, - 60000 - ] + "TunnelPortRange": [ 10000,60000] }, //登入信标密钥,默认为空,即为所有客户端均可登入本信标服务器 "SignIn": { - "SecretKey": "", + "Anonymous": true, //允许匿名登录 + "SuperKey": "snltty", //超级密钥 + "SuperPassword": "snltty",//超级密码 "CleanDays": 7 //当一组内的所有设备都超过7天未上线则清理 }, //虚拟网卡 @@ -56,11 +47,10 @@ server.json "NetworkDays": 30 //网络租期 } }, - - //更新密钥,客户端密钥不正确时,只能更新自己本身 "Updater": { - "SecretKey": "" + "Sync2Server": false //客户端自动同步到服务器版本 } + } ``` action.json,这个可以不管,等用得上自定义验证的时候就知道了 @@ -68,6 +58,7 @@ action.json,这个可以不管,等用得上自定义验证的时候就知道 { "SignInActionUrl": "", //登入信标的验证接口 "RelayActionUrl": "", //中继验证接口 + "RelayNodeUrl": "", //中继节点验证接口 "SForwardActionUrl": ""//服务器穿透的验证接口 } ``` diff --git a/src/linker.doc.web/docs/2、安装运行/2.8、初始化配置3(客户端).md b/src/linker.doc.web/docs/2、安装运行/2.8、初始化配置3(客户端).md index 033c2a1f..e228bd6a 100644 --- a/src/linker.doc.web/docs/2、安装运行/2.8、初始化配置3(客户端).md +++ b/src/linker.doc.web/docs/2、安装运行/2.8、初始化配置3(客户端).md @@ -20,6 +20,10 @@ sidebar_position: 8 对应配置文件 client.json ``` { + //自定义验证 + "Action": { + "Args": {} //自定义验证的参数 + }, "Name": "A", //客户端名 //顶级满权限 "FullAccess": true, @@ -31,17 +35,16 @@ sidebar_position: 8 "WebPort": 1804, //web端口 "WebRoot": "./web/" //web根目录 }, - //cdkey - "Cdkey": { - "SecretKey": "snltty" - }, //服务器 "Servers": [ { "Name": "Linker", //信标服务器名称 "Host": "127.0.0.1:1802", //信标服务器地址 - "SecretKey": null, //信标密钥 - "UserId": "8225e9d4-0ac7-4d76-9946-c4fe04ad4696" //用户标识,多个客户端可相同 + "Host1": "127.0.0.1:1802", //信标服务器地址1 + "UserId": "8225e9d4-0ac7-4d76-9946-c4fe04ad4696", //用户标识,多个客户端可相同 + "SuperKey": "", //服务器密钥 + "SuperPassword": "" //服务器密码 + } ], //分组 @@ -56,23 +59,17 @@ sidebar_position: 8 "Relay": { "Servers": [ { - "SecretKey": "snltty", //中继密钥 "Disabled": false, //是否禁用 - "SSL": true //启用ssl + "SSL": true, //启用ssl + "RelayType": 0, //默认0 + "UseCdkey": true //使用cdkey + } ] }, - //内网穿透 - "SForward": { - "SecretKey": "snltty" //服务器穿透密钥 - }, //更新 "Updater": { - "SecretKey": "snltty" //更新密钥 - }, - //自定义验证 - "Action": { - "Args": {} //自定义验证的参数 + "Sync2Server": true //自动同步到服务器版本 } } ``` diff --git a/src/linker.doc.web/docs/3、打洞和中继/3.2、中继.md b/src/linker.doc.web/docs/3、打洞和中继/3.2、中继.md index cec90a27..bb893762 100644 --- a/src/linker.doc.web/docs/3、打洞和中继/3.2、中继.md +++ b/src/linker.doc.web/docs/3、打洞和中继/3.2、中继.md @@ -8,11 +8,9 @@ sidebar_position: 2 :::tip[说明] -1. 如果你自建信标服务器,在服务端 `configs/server.json` 复制中继密钥(`Relay->SecretKey`),在客户端中填写,如果密钥正确,则可以管理服务器的中继cdkey,发布cdkey给别人使用 +1. 如果你自建信标服务器,填写你服务器的管理密钥和管理密码,则可以管理服务器的中继cdkey,发布cdkey给别人使用 2. 如果你使用别人的服务器,你没有密钥可以不填写,则需要使用别人服务器的公开中继节点,或使用他提供的cdkey 3. `按喜好调整好即可,往后的所有通信都是自动的,无需其它操作` - -![Docusaurus Plushie](./img/relay.jpg) ::: diff --git a/src/linker.doc.web/docs/3、打洞和中继/img/relay.jpg b/src/linker.doc.web/docs/3、打洞和中继/img/relay.jpg deleted file mode 100644 index 401eee3b82f9acd8726a1326e04a66883a75acf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111434 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 public string GroupId { get; set; } = string.Empty; + /// + /// 是否超级管理员 + /// + public bool Super { get; set; } } public sealed class JsonArgRelayInfo { diff --git a/src/linker.messenger.action/IActionServerStore.cs b/src/linker.messenger.action/IActionServerStore.cs index aa07316f..e26c8170 100644 --- a/src/linker.messenger.action/IActionServerStore.cs +++ b/src/linker.messenger.action/IActionServerStore.cs @@ -11,6 +11,10 @@ /// public string RelayActionUrl { get; } /// + /// 中继节点验证地址 + /// + public string RelayNodeUrl { get; } + /// /// 内网穿透验证地址 /// public string SForwardActionUrl { get; } @@ -27,6 +31,7 @@ /// /// public bool SetRelayActionUrl(string url); + public bool SetRelayNodeUrl(string url); /// /// 登录验证地址 /// diff --git a/src/linker.messenger.action/SignInArgsAction.cs b/src/linker.messenger.action/SignInArgsAction.cs index 4df5fc32..27e4ff52 100644 --- a/src/linker.messenger.action/SignInArgsAction.cs +++ b/src/linker.messenger.action/SignInArgsAction.cs @@ -1,4 +1,6 @@ using linker.libs.extends; +using linker.messenger.relay.client.transport; +using linker.messenger.relay.server; using linker.messenger.relay.server.validator; using linker.messenger.sforward; using linker.messenger.sforward.server.validator; @@ -20,6 +22,10 @@ namespace linker.messenger.action /// public JsonArgRelayInfo Relay { get; set; } /// + /// 中继节点验证, + /// + public JsonArgRelayNodeInfo RelayNode { get; set; } + /// /// 穿透信息,非穿透验证时为null /// public JsonArgSForwardInfo SForward { get; set; } @@ -82,6 +88,24 @@ namespace linker.messenger.action /// public ulong FlowingId { get; set; } } + public sealed class JsonArgRelayNodeInfo + { + /// + /// 来源设备id + /// + public string FromMachineId { get; set; } + /// + /// 来源设备名 + /// + public string FromMachineName { get; set; } + public List Nodes { get; set; } = []; + } + public sealed class JsonArgRelayNodeItemInfo + { + public string Id { get; set; } + public string Name { get; set; } + public bool Public { get; set; } + } public sealed class JsonArgSForwardInfo { /// @@ -204,6 +228,44 @@ namespace linker.messenger.action } return string.Empty; } + public async Task> Validate(string userid, SignCacheInfo fromMachine, List nodes) + { + if (string.IsNullOrWhiteSpace(actionServerStore.RelayNodeUrl) == false) + { + if (actionServerStore.TryGetActionArg(fromMachine.Args, out string str, out string machineKey) == false) + { + return []; + } + JsonArgInfo replace = new JsonArgInfo + { + RelayNode = new JsonArgRelayNodeInfo + { + FromMachineId = fromMachine.Id, + FromMachineName = fromMachine.MachineName, + Nodes = nodes.Select(c => new JsonArgRelayNodeItemInfo + { + Id = c.Id, + Name = c.Name, + Public = c.Public + }).ToList() ?? [] + }, + Signin = new JsonArgSignInInfo + { + GroupId = fromMachine.GroupId, + MachineId = fromMachine.MachineId, + MachineName = fromMachine.MachineName, + MachineKey = machineKey, + IPAddress = fromMachine.Connection.Address.Address, + Super = fromMachine.Super + } + }; + string ids = await actionTransfer.ExcuteActions(Replace(replace, str), actionServerStore.RelayNodeUrl).ConfigureAwait(false); + if (string.IsNullOrWhiteSpace(ids)) return []; + + return nodes.Where(c => ids.Split(',').Contains(c.Id)).ToList(); + } + return nodes; + } } public sealed class SForwardValidatorAction : JsonArgReplace, ISForwardValidator diff --git a/src/linker.messenger.cdkey/CdkeyMessenger.cs b/src/linker.messenger.cdkey/CdkeyMessenger.cs index f4e8dd89..d896beea 100644 --- a/src/linker.messenger.cdkey/CdkeyMessenger.cs +++ b/src/linker.messenger.cdkey/CdkeyMessenger.cs @@ -52,7 +52,7 @@ namespace linker.messenger.cdkey connection.Write(Helper.FalseArray); return; } - if (cache.Super == false) + if (cache.Super) { await cdkeyStore.Del(info.Id).ConfigureAwait(false); } diff --git a/src/linker.messenger.flow/messenger/FlowMessenger.cs b/src/linker.messenger.flow/messenger/FlowMessenger.cs index 278bc024..71545711 100644 --- a/src/linker.messenger.flow/messenger/FlowMessenger.cs +++ b/src/linker.messenger.flow/messenger/FlowMessenger.cs @@ -103,7 +103,7 @@ namespace linker.messenger.flow.messenger return; } - if (cache.Super == false) + if (cache.Super) { info.GroupId = string.Empty; } diff --git a/src/linker.messenger.relay/messenger/RelayMessenger.cs b/src/linker.messenger.relay/messenger/RelayMessenger.cs index 5404f40c..5fa4ee66 100644 --- a/src/linker.messenger.relay/messenger/RelayMessenger.cs +++ b/src/linker.messenger.relay/messenger/RelayMessenger.cs @@ -79,7 +79,7 @@ namespace linker.messenger.relay.messenger connection.Write(serializer.Serialize(new List { })); return; } - (List nodes, bool validated) = await GetNodes(cache.Super, info.UserId); + List nodes = await GetNodes(info.UserId, cache); connection.Write(serializer.Serialize(nodes)); } @@ -103,18 +103,18 @@ namespace linker.messenger.relay.messenger } RelayAskResultInfo170 result = new RelayAskResultInfo170(); - (result.Nodes, bool validated) = await GetNodes(from.Super, info.UserId).ConfigureAwait(false); + result.Nodes = await GetNodes(info.UserId, from).ConfigureAwait(false); if (result.Nodes.Count > 0) { - result.FlowingId = relayServerTransfer.AddRelay(from.MachineId, from.MachineName, to.MachineId, to.MachineName, from.GroupId, info.UserId, validated, info.UseCdkey); + result.FlowingId = relayServerTransfer.AddRelay(from.MachineId, from.MachineName, to.MachineId, to.MachineName, from.GroupId, info.UserId, from.Super, info.UseCdkey); } connection.Write(serializer.Serialize(result)); } - private async Task<(List, bool)> GetNodes(bool super, string userid) + private async Task> GetNodes(string userid, SignCacheInfo from) { - return (await relayServerTransfer.GetNodes(super, userid), super); + return await relayServerTransfer.GetNodes(from.Super, userid); } @@ -248,7 +248,7 @@ namespace linker.messenger.relay.messenger public async Task UpdateNodeForward(IConnection connection) { RelayServerNodeUpdateWrapInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span); - if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) && cache.Super) + if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) && cache.Super) { await relayServerTransfer.UpdateNodeReport(info.Info).ConfigureAwait(false); connection.Write(Helper.TrueArray); diff --git a/src/linker.messenger.relay/server/validator/IRelayServerValidator.cs b/src/linker.messenger.relay/server/validator/IRelayServerValidator.cs index 522006d7..52be0715 100644 --- a/src/linker.messenger.relay/server/validator/IRelayServerValidator.cs +++ b/src/linker.messenger.relay/server/validator/IRelayServerValidator.cs @@ -17,5 +17,13 @@ namespace linker.messenger.relay.server.validator /// 目标客户端,可能为null /// public Task Validate(RelayInfo170 relayInfo, SignCacheInfo fromMachine, SignCacheInfo toMachine); + /// + /// 验证节点 + /// + /// + /// + /// + /// + public Task> Validate(string userid, SignCacheInfo fromMachine, List nodes); } } diff --git a/src/linker.messenger.relay/server/validator/RelayServerValidatorTransfer.cs b/src/linker.messenger.relay/server/validator/RelayServerValidatorTransfer.cs index c0120d70..4536041d 100644 --- a/src/linker.messenger.relay/server/validator/RelayServerValidatorTransfer.cs +++ b/src/linker.messenger.relay/server/validator/RelayServerValidatorTransfer.cs @@ -60,6 +60,18 @@ namespace linker.messenger.relay.server.validator } return string.Empty; } + public async Task> Validate(string userid, SignCacheInfo fromMachine, List nodes) + { + foreach (var item in validators) + { + nodes = await item.Validate(userid, fromMachine, nodes).ConfigureAwait(false); + if (nodes == null || nodes.Count == 0) + { + return []; + } + } + return nodes; + } public sealed class RelayServerValidatorEqualityComparer : IEqualityComparer { diff --git a/src/linker.messenger.sforward/server/validator/SForwardValidator.cs b/src/linker.messenger.sforward/server/validator/SForwardValidator.cs index 1593cfc8..7eda9c4f 100644 --- a/src/linker.messenger.sforward/server/validator/SForwardValidator.cs +++ b/src/linker.messenger.sforward/server/validator/SForwardValidator.cs @@ -17,7 +17,7 @@ namespace linker.messenger.sforward.server.validator public async Task Validate(SignCacheInfo signCacheInfo, SForwardAddInfo sForwardAddInfo) { - if (signCacheInfo.Super) + if (signCacheInfo.Super == false) { return $"need super key and password"; } diff --git a/src/linker.messenger.store.file/action/ActionServerStore.cs b/src/linker.messenger.store.file/action/ActionServerStore.cs index 244de2bd..f7290c52 100644 --- a/src/linker.messenger.store.file/action/ActionServerStore.cs +++ b/src/linker.messenger.store.file/action/ActionServerStore.cs @@ -7,7 +7,9 @@ namespace linker.messenger.store.file.action public string SignInActionUrl => config.Data.Action.SignInActionUrl; public string RelayActionUrl => config.Data.Action.RelayActionUrl; + public string RelayNodeUrl => config.Data.Action.RelayNodeUrl; public string SForwardActionUrl => config.Data.Action.SForwardActionUrl; + private readonly FileConfig config; public ActionServerStore(FileConfig config) @@ -26,6 +28,11 @@ namespace linker.messenger.store.file.action config.Data.Action.RelayActionUrl = url; return true; } + public bool SetRelayNodeUrl(string url) + { + config.Data.Action.RelayNodeUrl = url; + return true; + } public bool SetSForwardActionUrl(string url) { @@ -47,7 +54,7 @@ namespace linker.messenger.store.file.action return true; } - + } } \ No newline at end of file diff --git a/src/linker.messenger.store.file/action/Config.cs b/src/linker.messenger.store.file/action/Config.cs index 5e3929a9..0c8978b0 100644 --- a/src/linker.messenger.store.file/action/Config.cs +++ b/src/linker.messenger.store.file/action/Config.cs @@ -12,7 +12,9 @@ namespace linker.messenger.store.file public ConfigActionInfo() { } public string SignInActionUrl { get; set; } = string.Empty; public string RelayActionUrl { get; set; } = string.Empty; + public string RelayNodeUrl { get; set; } = string.Empty; public string SForwardActionUrl { get; set; } = string.Empty; + public object Deserialize(string text) { diff --git a/src/linker.messenger.store.file/relay/Config.cs b/src/linker.messenger.store.file/relay/Config.cs index 982f42f2..98e9147b 100644 --- a/src/linker.messenger.store.file/relay/Config.cs +++ b/src/linker.messenger.store.file/relay/Config.cs @@ -58,7 +58,6 @@ namespace linker.messenger.store.file public string SecretKey { get; set; } = Helper.GlobalString; #else public string SecretKey { get; set; } = Guid.NewGuid().ToString().ToUpper(); - public string SuperPassword { get; set; } = Guid.NewGuid().ToString().ToUpper(); #endif } } diff --git a/src/linker.messenger.updater/UpdaterMessenger.cs b/src/linker.messenger.updater/UpdaterMessenger.cs index 67087d73..cd0916fb 100644 --- a/src/linker.messenger.updater/UpdaterMessenger.cs +++ b/src/linker.messenger.updater/UpdaterMessenger.cs @@ -229,7 +229,7 @@ namespace linker.messenger.updater } //需要密钥 - if (confirm.All && cache.Super) + if (confirm.All && cache.Super == false) { connection.Write(Helper.FalseArray); return; diff --git a/src/linker.web/src/views/full/server/Updater.vue b/src/linker.web/src/views/full/server/Updater.vue index 4ff17d2b..0cd34707 100644 --- a/src/linker.web/src/views/full/server/Updater.vue +++ b/src/linker.web/src/views/full/server/Updater.vue @@ -19,7 +19,7 @@ export default { const {t} = useI18n(); const globalData = injectGlobalData(); const state = reactive({ - sync2Server:false + sync2Server:globalData.value.config.Client.Updater.Sync2Server, }); const handleSync2ServerChange = ()=>{ setSync2Server(state.sync2Server).then(()=>{ diff --git a/version.txt b/version.txt index 0f20e1e3..f693546d 100644 --- a/version.txt +++ b/version.txt @@ -1,5 +1,5 @@ v1.8.6 -2025-07-05 13:23:49 +2025-07-05 15:47:10 1. 一些累计更新 2. 白名单 3. 优化防火墙