dsh-one-gateway:爲 DSH Web 加一層迴環零信任網關

前言

DeepSeek Harness(DSH)的 Web profile 默認跑在本機迴環地址上,適合本地開發和自用。若要把 DSH Web 分享給少數可信的人,常見做法是配反向代理、內網穿透,或在 DSH 前面掛一層門控。這些方案往往把「能連上私有網絡」和「被允許訪問」混在一起,或者需要給 DSH 核心打補丁才能在升級後保持門控覆蓋。

下面介紹社區插件 dsh-one-gateway(維護者 TiantianFlow,GitHub 倉庫 TiantianFlow/dsh-one-gateway)。它在 DSH Web 前面放一層僅監聽迴環的網關,用精確的主體允許名單做身份校驗,DSH 本身始終不離開 127.0.0.1

這是什麼

dsh-one-gateway 是 DSH 的 web profile 插件,定位爲「私有、零信任的 DSH Web 入口」。一句話概括:在 DSH Web 前面加一層迴環代理和身份校驗,只放行允許名單中的主體,不把 DSH 直接暴露到局域網或入口網絡。

插件當前版本爲 v0.1.0,許可證 MIT,要求 Node.js 20+(通常由 DSH 自帶)。在 SkillHub 社區目錄中歸類爲安全管理(admin-security)。它不是內網穿透工具,也不替代 Tailscale 或 Cloudflare,而是在你已有的私有入口之上補上身份層。

核心功能

經過上面的定位,可以把插件能力拆成下面幾部分。

迴環代理與失效關閉

網關監聽 127.0.0.1:3088,上游 DSH Web 保持在 127.0.0.1:3080。入口提供商(Tailscale Serve、帶 Cloudflare Access 的 Cloudflare Tunnel、Headscale 上的 Tailscale TCP Serve)只負責把 HTTPS 流量送到本機網關,加入私有網絡本身不構成授權

請求在轉發到 DSH 之前,必須解析出一個明確的、在允許名單中的主體;不匹配則返回 403。DSH 升級不會悄悄增加可從網外到達的路由,因爲 DSH 從一開始就不在迴環之外監聽。

三種已支持的入口與認證模式

入口 認證方式 身份來源
Tailscale Serve trusted-header Serve 注入的 Tailscale-User-Login
Cloudflare Tunnel + Access signed-jwt 本地校驗的 Cloudflare Access JWT
Headscale TCP Serve gateway-credential 系統生成的每主體網關憑證

Tailscale Serve 和 Cloudflare Access 模式下,身份來自入口提供商,不需要用戶自選密碼。Headscale TCP Serve 沒有原生 HTTP 身份頭,插件用 gateway-credential 模式:CLI 簽發高熵憑證,網關只存校驗哈希,支持單獨吊銷和限速。

一條引導命令、一份允許名單

三種入口共用同一個迴環網關實例和一份 trustedPrincipals 允許名單。setup 會預覽計劃、拒絕公開或匿名的默認值,確認後才寫入 profile。完整命令爲 dsh-one-gateway,別名 dsh-gateway

明確不做的事

插件文檔列出的邊界值得留意:每個被允許的主體都是完整的 DSH 管理員;不支持公開匿名隧道、Funnel 或 Cloudflare quick tunnel;不管理入口級 ACL 或 DNS;卸載時不會自動刪除 Tailscale Serve 路由、Cloudflare tunnel 或憑證文件;也不防禦本機已能直連 DSH 迴環端口的進程。

安裝與啓用

安裝前請自行審閱 GitHub 源碼 與 MIT 許可證。插件隨 dsh 進程權限運行,安裝即表示信任維護者代碼。

需要已可用的本地 DSH Web profile。只安裝插件、不運行 setup 時,什麼都不會暴露。

1、安裝插件

dsh plugin --profile web add github:TiantianFlow/dsh-one-gateway

從本地目錄安裝時:

dsh plugin --profile web add -w /path/to/dsh-one-gateway

2、運行 setup

dsh plugin --profile web exec dsh-gateway -- setup

setup 打開菜單、預覽計劃,等待確認後寫入。它會拒絕公開或匿名的默認值;在 Tailscale.com 上的操作員會被引導到有身份的 Tailscale Serve。

3、重啓 DSH Web

重啓你已在使用的 DSH Web 進程,以允許名單中的主體打開配置的 HTTPS origin。3088 端口本身從局域網和入口網絡都不可達。

典型用法

交互式 setup(默認)

省略 --provider 時,setup 從菜單選擇入口。檢測到本地恰好有一個入口可執行文件時,會作爲默認提示,但不是配置校驗。

Tailscale Serve

dsh plugin --profile web exec dsh-gateway -- setup --provider tailscale-serve

Cloudflare Access

你需要事先配置好只轉發到 127.0.0.1:3088 的 Access 應用;setup 不會創建隧道、DNS 記錄或 Access 應用本身。

dsh plugin --profile web exec dsh-gateway -- setup --provider cloudflare-access \
  --external-origin 'https://dsh.example.invalid' \
  --team-origin 'https://team.example.invalid' \
  --application-audience 'replace-with-access-application-audience' \
  --trusted-principal 'email:operator@example.invalid'

Headscale TCP Serve

證書和私鑰由操作員提供;setup 在 Tailscale.com 上不會把它當作與 Tailscale Serve 同等權重的菜單項。

dsh plugin --profile web exec dsh-gateway -- setup --provider headscale-tcp-serve \
  --tls-cert /path/to/dsh-one-gateway/cert.pem \
  --tls-key /path/to/dsh-one-gateway/key.pem \
  --credential-store /path/to/dsh-one-gateway/credentials.json \
  --trusted-principal operator-1

安裝後的運維命令

dsh-gateway doctor
dsh-gateway credential issue --store /path/to/dsh-one-gateway/credentials.json --name operator-1
dsh-gateway credential list --store /path/to/dsh-one-gateway/credentials.json
dsh-gateway credential revoke --store /path/to/dsh-one-gateway/credentials.json --name operator-1

--print 可只預覽計劃、不寫入 profile。非交互場景加 --yes 時,所有安全敏感參數須顯式提供。

適用場景與注意

適合誰: 已在用 DSH Web profile,想把實例分享給少數指定的人(同事、家人),且願意自建 Tailscale Serve、Cloudflare Access 或 Headscale TCP Serve 作爲私有入口的開發者或家庭實驗室操作員。

和同類網關的差別: 其他 DSH 網關可能在迴環之外監聽、或給 DSH 核心打補丁以保持升級後門控覆蓋。本插件選擇另一條路——DSH 從不離開回環,網關是獨立外部進程,不改 DSH 源碼。漏掉一條代理路徑只會讓該路徑不可用,不會把 DSH 靜默暴露出去。

使用前務必確認:

  1. 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與 MIT 許可證。
  2. 每個允許名單主體擁有完整 DSH 管理員權限,不是多租戶或細粒度 RBAC。
  3. 本機已能連接 127.0.0.1:3080127.0.0.1:3088 的進程不在威脅模型範圍內。
  4. SkillHub(目錄頁)是 DSH 社區插件目錄,與 DeepSeek / 幻方無官方從屬關係。

DSH 生態的理念是「一切皆插件」;dsh-one-gateway 把「能連上」和「被允許」拆開,用迴環網關加精確允許名單,給需要遠程訪問 DSH Web 的自託管場景一條可覈對的安裝路徑。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜