evanfang0054/dsh-tailscale-console1

dsh-tailscale-console

DeepSeek Harness 的 Tailscale 远程访问运营面板:健康检查、HTTPS 入口开关、macOS 代理绕过、中继服务器运维、ACL 片段生成。

AI 分析

核心用途是为 DSH 提供 Tailscale 远程安全访问的管理面板。适合需要跨设备安全访问本地 DSH 实例、配置 HTTPS 访问及进行网络运维的用户。

パッケージ
dsh-tailscale-console
バージョン
0.2.1
ライセンス
MIT
最終更新
2026/08/17

インストール

検証済み bundle がないか、互換性チェックに失敗しています。先にリポジトリの説明を読んでください。 README 全文を読む ↗

ドキュメント

README 全文を読む ↗

3. DSH configuration

3.1 Start command (use this every time)

dsh web --trusted-host :3080 --trusted-host ..ts.net

⚠️ Every change below (cordis.patch.yml, plugin code, better-sidebar patch) requires restarting dsh web, which interrupts the currently running session — save/finish your work first. The web profile has HMR disabled.

3.2 Static trustedHosts (belt & braces)

Append to ~/.dsh/profiles/web/cordis.patch.yml:

- id: connection
  config:
    trustedHosts: [':3080', '..ts.net']

3.3 Known third-party issue: dsh-better-sidebar

If your profile installs dsh-better-sidebar, its /sidebar/api fence has a bug in version 0.10.3 (the latest published): trustedHostsOf() matches entry.options.name against "connection", but name is the package name, so the trust list is always empty and /sidebar/api/* is loopback-only (403 remotely — the sidebar breaks). No fixed upstream version exists yet.

Patch trustedHostsOf() in node_modules/dsh-better-sidebar/lib/index.js (back up the file first) to read the webRuntime service:

function trustedHostsOf(ctx) {
  const hosts = []
  const runtime = ctx.get("webRuntime")
  if (runtime !== void 0 && Array.isArray(runtime.trustedHosts)) hosts.push(...runtime.trustedHosts)
  for (const entry of ctx.loader.entries()) if (entry.options.id === "connection") {
    const cfg = entry.options.config?.trustedHosts
    if (Array.isArray(cfg)) hosts.push(...cfg)
  }
  return [...new Set(hosts)]
}

⚠️ The patch lives in node_modules and is lost on the next pnpm install — re-apply after every reinstall (check with grep -c 'options.id === "connection"').

Configuration

All values come from the plugin Config; the code contains no personal identifiers. MagicDNS URLs and tailnet IPs are auto-derived from tailscale status --json when not configured.

KeyTypeDefaultMeaning
dshPortnumber3080DSH web GUI port
relayPortnumber40000Relay server's Peer Relay UDP port
tailnetUrlstringautoHTTPS base, e.g. https://myhost.tail1234.ts.net
sshAliasstringSSH alias for server-side mutations (install / relay)
serverPeerPatternstringfirst Linux peerRegex to identify the relay server peer
proxyServicesstring[]macOS setNetwork services for the bypass apply