内网穿透
2025-12-14 20:30:50 0 举报
内网穿透
作者其他创作
大纲/内容
云网 服务端
生成AES秘钥C,通过公钥B加密
7、生成sessionId,请求转发
使用私钥B解密,得到秘钥C
生成sessionId
APP内打开链接或复制链接到浏览器打开
AC
根据隧道路由到特定设备
确认AC序列号、configId、authCode三者的所有权关系
获取隧道建立结果
客户端
用户主动关闭隧道or到期(有效期1小时)
业务服务器
海康云网
鉴权
云网 客户端
6、鉴权(authCode、configId)
转发流量给AC
使用私钥A建立SSH隧道
局域网
使用秘钥C加密私钥A,发送秘钥索引、加密的私钥A、穿透服务ip&port、内网设备ip&port、有效期
返回加密的AES秘钥
AC设备
生成设备访问token,根据有效期,到期后自动销毁
对应关系:AC序列号、公网port、configId、authCode、访问token、有效期、公钥(索引)
token有效期内,每20秒调用心跳接口(带上访问token,多个token以|分隔)如果心跳连续失败3次就使用私钥再次重连
session鉴权通过,根据当前转发类型,执行转发
3、下发穿透服务ip&port、内网设备ip&port、动态私钥、隧道有效期
穿透服务配置:ClientAlivelnterval 20ClientAliveCountMax 3;即每20秒给客户端发送一次保活信息,失败3次就关闭连接
4、建立隧道
记录秘钥索引和秘钥的关系
端口释放
如果隧道断开,告知业务服务
返回鉴权成功,并设置Cookie,其中sessionld的Key需要避免冲突,暂时定义为:hik_trans_sessionId
从密钥对池A获取穿透秘钥,密钥对池提前导入,建议1000个
限制端口带宽(tc、iptables)
返回轮询结果及URL
加载URL:https://server-host/path?app=ssh/http&deviceSerial=xxx&configId=xxx&authCode=xxxdeviceSerial:AC序列号。configId:16位及以上,通过链接访问内网设备时,用于验证AC和configId的所有权关系。authCode:32位及以上,序列号防暴力破解(1分钟内同一序列号authCode验证连续失败5次,禁止该序列号的请求5分钟),1小时有效期。
穿透服务
返回可用端口&访问token
开启隧道
8、请求转发
调用关闭隧道协议
发送公钥A、有效期,并获取可用端口
保存公钥到/.ssh,到期后自动销毁
访问设备
穿透服务器
浏览器
路由转发
发起建立隧道的请求,携带穿透服务ip&port、内网设备ip&port、隧道有效期
1、客户端发起建立隧道请求,携带AC信息、内网设备ip&port
从密钥对池B获取加密秘钥,密钥对池提前导入,建议1000个
返回鉴权结果
端口监测
密钥对管理
为该序列号创建本次配置的configId和authCode
命令行杀掉端口进程,废弃公钥、访问token
端口关系管理
确认端口有没有在使用中(业务服务维护端口使用情况)
5、HTTP(S)
请求访问内网设备,带上AC序列号、configId、authCode
Web判断app为HTTP,则加载内嵌的iFrame发起同域的请求:https:/server-host
转发HTTP到本地的隧道端口
将公钥B、秘钥索引传给设备,获取AES秘钥
IPC
返回结果(表示接收到请求)
使用普通用户非root用户
用户主动关闭隧道
2、获取可用端口、传递公钥,隧道创建完成,通知启用端口监测,服务间通讯需要鉴权(jwt)
穿透权限时效管理
返回配置结果
https://server-host/path?app=ssh/http&deviceSerial=xxx&configId=xxx&authCode=xxx
AC下挂内网设备
1、服务器ssh配置GatewayPorts要设置为yes;2、端口监测:提供接口给业务服务获取可用端口;3、端口释放:时间到或用户主动关闭隧道,释放端口,隧道关闭后删除公钥;4、业务服务与穿透服务间需要设计鉴权;5、私钥为每个穿透连接单独创建;
0 条评论
下一页