一个通用 P2P 隧道方案:DSH 的 loopback 同源限制在远程访问下的处理 #2452
birdmanmandbir
started this conversation in
General
Replies: 1 comment
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment


Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
DeepSeek Harness(DSH)将配置面板限制为 loopback 同源,用于防范 DNS rebinding,这一设计是合理的。但该限制对远程访问提出了额外要求:通过局域网 IP 直连时 /api 返回 403,通过域名或隧道访问时设置面板为空(设置仅存在于进程内存),--trusted-host 需要逐一枚举 IP 且不支持通配符,网络变更后需要重新配置。
此前常用的替代方案各有权衡。SSH 端口转发可用,但需要在每台设备上维护隧道及其保活;反向代理需要额外引入认证层。二者均未从根本上解决"服务只信任 loopback"这一约束。
kepos 是我开发的一个通用 P2P 隧道(Apache-2.0),其核心设计是:发布端分享任意 TCP 服务,订阅端以 *.localhost 域名或本地端口的形式访问,使浏览器、SSH、CLI 等客户端始终认为自己在访问本机。由于 DSH 的 browser-trust 围栏仅校验 Host 头,kepos 将服务挂载于 *.localhost 网关后,Host 即为 loopback,围栏原样放行。无需修改 --trusted-host,无需引入认证层,设置项正常持久化,刷新后不丢失。kepos 并未针对 DSH 做任何特殊适配,该能力是其通用设计的结果。
传输层方面,kepos 基于分布式哈希表(DHT)建立对等连接,并在此基础上实现端到端加密与多路复用。具体而言:HyperDHT 与 UDX 提供经过认证的对等连接、NAT 穿透、路径迁移、可靠有序的数据流;对等密钥对外层连接进行端到端加密认证。多路复用由 Protomux 承载——服务注册表、心跳控制、配对过程以及每个服务各自的独立通道,全部复用同一条持久化的外层连接;隧道本身是 UDX之上的分裂 TCP 字节流代理,OPEN、数据、半关闭、重置与背压均经由多路复用通道传递,而非传输原始 TCP 报文。
实际配置如下(订阅端):
通过 http://127.0.0.1:13080 访问,语言与主题设置均可正常修改并持久化。SSH、Dagger 等 raw TCP 服务可复用同一条隧道,各自绑定独立本地端口。
访问控制方面:未知设备仍无法连接,发布端每个服务可独立配置 allowlist。
项目当前状态为 developer preview:Android 需侧载安装,macOS 也需要
xattr -d com.apple.quarantine,UDP 不承载。仓库:github.com/LamplitIsles/kepos
官网:https://kepos.guion.io/
集成文档:docs/integrations/deepseek-harness.md
All reactions