dsh-lan-access
Who this is for: users who already run a virtual LAN (EasyTier / Tailscale / WireGuard / ZeroTier …), or who only want to reach the dsh Web UI from a trusted LAN (home or office network).
⚠️ Security: enabling LAN access means anyone who can reach that address can operate your Harness — remote code execution exposed to that network segment. Only enable it on a network you control; never on public Wi-Fi, campus or shared lab networks. Never forward the token-bearing URL printed at startup.
🤖 About this repository: every line of code, doc, and commit here was generated by an AI coding agent; the author has not reviewed it line by line. Read
cordis.patch.ymlandlib/client.js(they touch dsh internals) before you rely on it. Issues and PRs welcome.
Open the DeepSeek Harness Web GUI's LAN access fences so other machines on a
(virtual) LAN can reach it directly via LAN-IP:port, with a settings tab to
choose which LAN IP is used.
See README.zh.md (Chinese) for the full guide; the English summary:
- What it changes: binds the webserver to
0.0.0.0when enabled (the host schema only allows127.0.0.1/0.0.0.0), makes the/apibrowser-trust fence accept only your configured authorities (falling back to dsh's automatic LAN trust when you configure none), and prints the token-bearing LAN URL at boot. - Strict fence (0.2.0, breaking): dsh itself trusts every non-internal IPv4
while the server binds
0.0.0.0; 0.1.x unioned that in, so a host you removed stayed trusted. Since 0.2.0 a non-empty configuration is the policy. - Remote (non-loopback) visits: dsh runs its settings layer in memory mode
there, so nothing can be read or persisted. The plugin shadows the shipped
welcome notice and repairs the settings mirror; opt out of the latter with
rescueSettings: falsein thelan-accesssection ofsettings.yaml. - Session lifetime:
sessionDays(default 30, range 1–3650) sets how long a device stays authenticated after one token visit. Cookies are per access address and survive adsh webrestart (the signing secret is persisted); they die on expiry, on deleting.credentials.yaml, or when the browser clears them. Needs a restart to change. - No authentication (0.4.0):
noAuth: trueremoves the browser session gate altogether — no launch token, no cookie, no 401. The Host/Origin trust fence stays (hosts outsideaccessHostsare still403); everything else becomes your network's job. Needs a restart.sessionDayshas no meaning while it is on. - Install:
dsh plugin --profile web add github:longisland-icetea/dsh-lan-access(dsh plugin --profile web update dsh-lan-accessto upgrade), then restartdsh web. ⚠️ Thedsh-lan-accesspackage on npm is a different project by another author — this plugin is only distributed from GitHub, not npm. - Use: Settings → “LAN Access” tab → enable, enter the LAN IP(s) (or pick from the detected list), save, restart.
- How it works (0.6.0): static composition — zero runtime row
ownership. The bundle patch overrides the official
webserver/connectionrows with loader!!jsexpressions that decide the bind and the fence ONCE per boot from two bits composed before activation: thelan-accessentry's disabled state (the very state dshmarket's toggle writes) and the settings-tab toggle (settings.yamllan-access.enabled). Noentry.update, no fiber restarts, no boot rewrites; toggling the plugin — in the settings tab or in the market — only starts/stops its fiber, and the binding changes on the next restart, exactly what the settings tab says. The expressions fail closed: any evaluation error yields the official defaults (loopback bind, the deployment fence) and can never fail the boot. - Upgrades: the overrides are patches by id; a renamed or restructured
official row is skipped by the composer with a warning (dsh still boots,
fully official), and the boot-time self-check reports the drift instead of
pretending. Only brand-new upstream guardrails (e.g. a webserver schema
dropping
0.0.0.0) can defeat it. The one place that touches a dsh internal (a prototype patch to revive already-bound settings scopes, and the noAuth gate swap) is wrapped intry/catchand can be switched off entirely.
License
MIT
No comments yet. Be the first to write one.