前言¶
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 靜默暴露出去。
使用前務必確認:
- 插件以當前
dsh進程權限運行,安裝前應檢查源碼與 MIT 許可證。 - 每個允許名單主體擁有完整 DSH 管理員權限,不是多租戶或細粒度 RBAC。
- 本機已能連接
127.0.0.1:3080或127.0.0.1:3088的進程不在威脅模型範圍內。 - SkillHub(目錄頁)是 DSH 社區插件目錄,與 DeepSeek / 幻方無官方從屬關係。
DSH 生態的理念是「一切皆插件」;dsh-one-gateway 把「能連上」和「被允許」拆開,用迴環網關加精確允許名單,給需要遠程訪問 DSH Web 的自託管場景一條可覈對的安裝路徑。