dsh 局域网访问与端口配置指南

默认端口 3080、--port 改端口、为什么 0.0.0.0 被官方拒绝、防火墙放行,以及用 dsh-LAN 插件把 Web UI 安全开放给同一网络里的手机和同事。

最近更新: 2026-10-03

dsh web 在自己电脑上跑得好好的,然后同一间屋子里的人发现,浏览器输入 http://<你的IP>:3080 打不开——这是 dsh 装完之后的第一问。本页把这件事一次讲透:端口本身、打不开背后的绑定边界,以及把局域网访问正经打开的插件路线。

先划范围:本页只讲同一个 Wi-Fi / 同一办公网内的设备互访;访问者在外网(手机流量、别的网络)时路由不通,需要公网隧道——那是远程访问教程的领域: 手机远程控制 dsh

结论速览

  • ▸dsh web 默认地址 http://127.0.0.1:3080——端口 3080,只听本机回环,启动时命令行会打印访问地址。
  • ▸改端口用 dsh web --port 8080;--port 是 web 应用的旗标,不是启动器的。
  • ▸官方 CLI 有意拒绝 --host 0.0.0.0(直接报参数错误)。今天开局域网要走 dsh-LAN 插件或反向代理,而且只在可信网络里开。
  • ▸同一 Wi-Fi:直接用局域网 IP 访问;不在一个网络:需要隧道——见远程访问教程。

默认端口与本机检查

「dsh 的端口是多少」这类问题,三步就能在现场查清楚,不用翻配置文件。

默认:127.0.0.1 上的 3080

dsh web 默认在 http://127.0.0.1:3080 启动 Web UI 并自动打开浏览器;加 --no-open 可以只起服务不弹浏览器。无论哪种方式,命令都会打印访问地址——启动输出就是端口问题的第一手答案。

$dsh web
$dsh web --no-open

确认进程实际监听的端口

用过非默认旗标启动、或者想拿实证?列出监听中的套接字:Windows 用 netstat,macOS / Linux 用 lsof。输出里的 PID 还能告诉你端口被哪个进程占着——排「端口被占用」时正是它。

$netstat -ano | findstr :3080
$lsof -i :3080

查本机的局域网 IP

其他设备要输入的就是这个地址。Windows:ipconfig 看当前网卡的 IPv4 地址;macOS:ipconfig getifaddr en0;Linux:ip a。192.168.x.x、10.x.x.x 这类是局域网地址;127.x.x.x 是回环地址,只有本机自己能访问。

$ipconfig
$ipconfig getifaddr en0
$ip a
dsh web 在本机 127.0.0.1:3080 起来后的 Web 界面首页:侧栏备好默认工作区与新会话,输入框停在「探索未至之境」预览版占位下方,这就是 dsh 默认端口 3080 在本机提供的页面
确认 dsh 端口先看本机:这个界面打得开,端口和进程就都活着。看原片 4:16

改端口(--port)

3080 被占了,或者单纯想换一个端口——一个旗标的事。

把 --port 传给 web 应用

启动器不认识的旗标会原样交给启动的 profile,所以 --port 能直达 web 应用:下面的简写和显式 profile 两种写法都行。注意边界:--port 属于 web 应用,启动器自己的旗标要放在它前面。

$dsh web --port 8080
$dsh --profile web --port 8080

改了端口却不生效?

旗标之所以能覆盖配置行,是因为配置行在运行时读取旗标——但如果用户补丁把整段 config 换成了字面量,这个运行时读取就不存在了,旗标会被静默忽略。遇到 --port 不生效,先查自己的 cordis.patch.yml 里有没有把 webserver 配置写死成字面量的补丁,改回去再重启 dsh web。

管理员 PowerShell 用 dsh web --port 3081 --no-open 改端口启动 dsh,回显 URL 随之变成 http://127.0.0.1:3081/?token=…,下一行已经敲出 dsh web --host 0.0.0.0 准备改绑定
--port 指到哪个端口,启动行就回显哪个端口;这里是 3081,默认仍是 3080。看原片 0:48

绑定边界:为什么局域网设备连不上

端口错会报「连接被拒绝」;默认绑定则是更隐蔽的一种——页面只存在于启动 dsh 的那台机器上。这是官方刻意设计。

dsh web 只绑 127.0.0.1,且拒绝 0.0.0.0

只听回环是出厂默认,官方 CLI 参考文档明确写着:CLI 有意不支持 --host 0.0.0.0,会以参数错误退出。Web UI 控制的是一个能读文件、能执行命令的 Agent——把这样一个控制面不加认证地绑到所有网卡上,正是这条限制要防住的事。

特权接口的 403 信任栅栏

就算端口通过代理变得可达,设置、凭据、Agent 预设、模型发现这些特权接口对非回环来源一律回 403——这是一道防 DNS 劫持的栅栏,不是认证。主机名 / 反向代理部署可以用可重复的 --trusted-host <host> 旗标向栅栏登记访问名。社区部署实录(官方讨论 #849)把这堵 403 墙记录得很细。

$dsh web --trusted-host <host>

为什么不该硬绕

官方讨论区 #130 的安全实测走通了完整链条:未认证的网络客户端伪造 loopback 的 Host 头、通过特权 RPC 门禁、改写 LLM endpoint——下一次模型调用就把你的 API Key 和对话内容一起发到攻击者服务器。在官方远程认证模型落地之前,正经的局域网开启方式就是下面的插件和代理两条路,而且只在可信网络里用。

上面的卡片是官方 CLI 参考的口径;下面这组画面来自 2026 年 9 月的一段局域网实录:在所录构建上,dsh web --host 0.0.0.0 --port 3080 --no-open 直接启动成功,并在一行里同时回显本地与 LAN 两条带令牌 URL。两个来源在 0.0.0.0 上说法不一致,请以你自己构建的实际启动输出为准;无论落在哪种行为,都请把回显里的令牌当作整个局域网的唯一门禁,并只在可信网络里这样做。

在 dsh web 内嵌终端里执行 dsh web --host 0.0.0.0 --port 3080 --no-open,启动行同时回显本地地址 127.0.0.1:3080/?token=… 与局域网地址 192.168.1.248:3080/?token=…,这是 dsh 原生的局域网访问回显
LAN: 地址由 dsh 自己打印,不用手工拼接,访问令牌也跟在同一行里。看原片 1:36
接入设备上打开开发者工具的应用程序面板:本地存储与 Cookie 列表都出现了 http://192.168.1.24… 这个局域网源,左侧 dsh 的「需要访问令牌」门禁页仍开着
令牌由 dsh 启动时打印,经令牌链接进入后,凭证就存进该局域网源的浏览器存储。看原片 2:12

防火墙:放行入站 3080

绑定解决后,第二道门是操作系统防火墙——不放行入站 3080,手机那边看到的就是超时而不是页面。

Windows

Windows Defender 防火墙默认拦截专用/公用网络的主动入站连接。一条管理员命令放行 TCP 3080,也可以在「Windows 安全中心 > 防火墙和网络保护 > 高级设置」里手动建入站规则。

$netsh advfirewall firewall add rule name="dsh web 3080" dir=in action=allow protocol=TCP localport=3080

macOS

系统防火墙默认关闭;如果你开过,它是按应用拦的——在「系统设置 > 网络 > 防火墙」里放行 node(或你的 dsh 运行时),通常首次联网时系统弹窗就能顺手点允许。

Linux

看你在用哪套防火墙:ufw 一条命令放行;firewalld 加端口后要永久化并重载;iptables 手工加一条 TCP 3080 的 ACCEPT 规则。下面的 dsh-LAN 插件会自动维护这些规则(Windows、firewalld、ufw、iptables 都管)。

$sudo ufw allow 3080/tcp

手机 / 平板访问

最典型的局域网场景:dsh 跑在台式机上,你手上是手机——同一个 Wi-Fi,手机端不装任何东西。

浏览器打开 http://<局域网IP>:3080

同一网络里的任意设备,在浏览器输入第 3 步查到的局域网 IP——带端口的完整地址。绑定和防火墙都通了以后,看到的就是和主机一样的 Web UI:只有一个服务进程,所有会话状态都在服务端,手机和桌面看到同一场对话、实时同步。

打不开时按顺序查

依次过一遍:绑定还在回环(说明插件/代理路径还没上——这个阶段防火墙还轮不到背锅)、主机防火墙、手机和主机是否真的同网段——不少路由器默认开 AP 隔离,同一个 Wi-Fi 下的设备互相也看不见。另外地址要带 http:// 和端口输全,手机浏览器很爱自作主张。

若实例以联网模式启动(启动行里出现 LAN: 字样),设备第一次打开地址时先遇到的不是工作台,而是 dsh 原生的令牌门禁页:

同一 Wi-Fi 里的另一台设备在浏览器打开 http://192.168.1.248:3080,先看到 dsh 原生的「需要访问令牌」门禁页:蓝色令牌框给出带令牌的完整局域网地址,下方附反向代理需转发真实 Host 头的提示
令牌在 dsh 启动时打印,也可从服务端终端日志复制;同网设备点开链接即入。看原片 2:24

想把手机端体验再推进一步(第三方客户端、伴随应用),去远程与移动端集合逛逛: 远程与手机访问合集

dsh-LAN 插件:一个开关的局域网方案

MrMu666/dsh-LAN 是 dsh Web GUI 的专门局域网访问插件——MIT 协议,2026-10-02 实抓时 10 star。一次安装同时解决绑定、防火墙和口令门。

它做什么

装好后 Web GUI 默认绑定 0.0.0.0(所有网卡),主机会自动放行防火墙端口(Windows 放行 Defender 的 Domain + Private 配置文件;Linux 按 firewalld → ufw → iptables 依次尝试)。任何设备打开 http://<本机IP>:3080 都先看到全屏口令门;手机竖屏打开时插件在官方界面上注入触控适配——大触控目标、16px 输入字号、安全区。注意:插件 README 写明支持 DSH 0.1.2-rc.1 及更新、已验证至 0.1.5-rc.1,没有覆盖当前的 0.2.0-rc.2,安装前先去仓库确认兼容性。

怎么装

README 自己给的「最简单安装方式」:直接告诉 dsh「安装 dsh-LAN 插件」,由 Agent 完成安装。脚本路线是克隆仓库后每个平台跑一个脚本——属于补丁路径安装:对运行中的 profile 热加载,无需重启立即生效。bundle 路径则像普通插件一样从本地目录添加,需要重启 dsh web 生效。

$powershell -ExecutionPolicy Bypass -File install.ps1
$./install.sh
$dsh plugin --profile web add link:<repo-path>

怎么用

在本机打开「设置 > General > 局域网访问」卡片:开开关、设口令(至少 4 位)、看防火墙状态行。其他设备在登录门输入口令即可;勾「记住口令」后该设备免输。被官方锁在本机的设置/凭据等特权方法,通过插件的 /lanapi 口令代理通道重新可用。关掉开关绑定立刻回退 127.0.0.1——这是最根本的总开关。

认清它的安全边界

README 说得很直白:登录门是界面级防护,特权操作在服务端强制校验;但非特权 API(会话读写)在 API 层对局域网仍然开放。家庭/办公室可信内网这是合理取舍,公共网络就是坏主意——只在可信 Wi-Fi 开,离开就关。它不能替代真正的认证。

另一条插件路线:多人共用一台 dsh

dsh-LAN 之外,社区里还有面向「多人共用一台 dsh」的第三方插件:linyupark/dsh-multi-tenant(查证时为新仓,Release 0.3.0)在单个 dsh 实例上实现「项目 + 用户」多租户——把真实工作区目录绑定为项目,为每个用户生成软链式独立工作区,Web 界面用密码登录把关。README 的威胁模型一节说得很直白:这是「防君子」的软边界,面向公网请在 dsh 前面加真正的边界(反向代理认证 / ngrok basic auth / VPN)。下面四张画面来自同一段局域网实录,展示装上插件后从登录到多人工作区的完整链路:

linyupark/dsh-multi-tenant 的 README.zh-CN.md(Release 0.3.0):定位段写明在单个 dsh 实例上实现「项目 + 用户」多租户、Web 界面用密码登录把关,下方威胁模型警示框直言这是「防君子」的软边界,公网要在 dsh 前面加反向代理认证、ngrok basic auth 或 VPN
作者自述的威胁模型:cwd 过滤是查询投影而非门禁,公网部署请给 dsh 加真正的边界。看原片 4:24
装上多租户插件后,局域网设备打开 dsh 看到的不再是令牌页,而是这张「登录 DSH」表单:项目工作区访问副标题下排列着用户名、密码输入框与登录按钮
同一台 dsh,门禁从一枚共享令牌换成每用户一套账号密码。看原片 2:36
多租户登录后的 dsh 局域网会话全景:侧栏工作区列出 rtk、kehang/qa、hello、pi-agent、qm 与未分组,左下角是 admin 账号和退出登录按钮,主区运行 KEHANG 专属智能助手会话,权限为工作区内修改,模型 deepseek-ai/DeepSeek-V4.1-Flash
一台 dsh 服务多人:各账号只进自己的工作区,彼此的会话与文件互不可见。看原片 3:48
以 KEHANG 账号登录后的专属视图:侧栏「项目」下只挂着自己的 kehang 工作区与 hello 会话,主区仍是 KEHANG 专属智能助手和 deepseek-ai/DeepSeek-V4.1-Flash
每个用户眼里只有自己的项目:这是插件按账号投影出的工作区边界。看原片 2:48

装插件的前提是会装插件——不熟悉 dsh 插件命令的话,先看插件安装指南: 安全地安装插件

另外两条路:反向代理与 SSH 转发

不想动 dsh 自身的绑定?这两条路完全不碰 dsh 进程。

dsh-proxy:在 :3081 加一道 Basic Auth 前门

smanx/dsh-proxy(24 star)是 HTTP + WebSocket 反向代理插件:装进 web profile,随 dsh web 启停,把请求转发到 127.0.0.1:3080,并在前面加浏览器 Basic Auth。安装并重启 dsh web 后,访问 http://<局域网IP>:3081 会弹出认证框;用户名和密码同时设置才启用口令登录。它的 Host 改写与 Origin 对齐还能让 WebSocket 不触发上文那道 403 栅栏。同类的还有 GDWhisper/dsh-web-startup-auth(50 star),按作者在讨论区 #3132 的说法,提供认证模块让 0.0.0.0 启动不被拦截。

$dsh plugin --profile web add github:smanx/dsh-proxy#master

SSH 本地转发:零插件、全程加密

在要访问的设备上把本地端口转发到主机的回环:在访问方设备执行下面的命令,然后在那台设备打开 http://localhost:3080。dsh 侧什么都不用改,流量全程加密——适合给一位可信同事的笔记本用。手机装 SSH 客户端也能做,但那就接近隧道玩法了:出了这个网络,请直接看远程访问教程。

$ssh -L 3080:127.0.0.1:3080 user@<host-ip>

一个 flag 管对外地址:--public-url

0.2.1-alpha.1 直接回答了反向代理的命名难题。CLI 参考原话:--public-url <url> 对外宣告一个 HTTP(S) 应用根地址——可带转发前缀——取代监听器的回环 URL。

告诉 dsh 外面看到的地址

按发布说明,这个值同时是展示给用户的 Web 地址、浏览器打开的地址、提供给模型的地址——包括带路径前缀的反向代理 URL。实际形态:把 dsh 放到 nginx 或 Caddy 的子路径后面,对外根地址只传一次,打印的 URL、浏览器接管和模型拿到的链接就不再各说各话。版本诚实:flag 随 0.2.1-alpha.1 发布——2026-10-03 当天 npm latest 还停在 0.2.0-rc.2,要用就得主动钉住 alpha 标签。

$dsh web --public-url <url>

要的不是改名而是从外网回到控制台?远程访问指南讲穿透路线。 手机远程控制 dsh

常见报错,逐个对号

这个主题真实出现的四种失败,以及每种背后的原因。

启动失败 / 端口被占用

3080 被别的进程占着。用第一节「确认监听端口」的命令按 PID 找到占用者——结束那个进程,或者用 --port 换一个空闲端口启动 dsh web。

局域网设备访问设置/预设返回 403

这是预期行为,不是配置错了:/api 信任栅栏拒绝非回环来源调用特权方法(设置、凭据、Agent 预设、模型发现)。dsh-LAN 插件通过口令通道重新暴露这些方法;代理路线则让未认证的局域网设备停留在普通页面上。不要把源码里的检查删掉绕过——原因见「绑定边界」一节。

改了端口,旧端口还在响应

两个常见原因:配置补丁把 webserver 配置写成了字面量,--port 的运行时读取失效(见「改端口」);或者浏览器标签页还是旧缓存。改完配置重启 dsh web,浏览器强制刷新。

手机完全连不上

按「手机 / 平板访问」的清单从头过:绑定是否还锁回环(先上插件/代理)、防火墙入站规则、手机与主机是否同网段(AP 隔离)、地址是否带端口输全。全部排查过仍不通,去排错手册继续。

这些都没对上你的症状?去排错手册接着查: 故障排查与报错百科

dsh 局域网访问常见问题

端口与绑定的高频问题,答案逐条对照官方文档与公开讨论。

dsh 的默认端口是多少?

3080。dsh web 默认在 http://127.0.0.1:3080 提供 Web UI,启动时会打印地址。该地址只绑回环:端口只在启动 dsh 的那台机器上应答,局域网访问不到。改端口用 dsh web --port <端口>。

为什么手机或其他电脑打不开 http://<我的IP>:3080?

因为 dsh web 默认只绑 127.0.0.1,且官方 CLI 有意拒绝 --host 0.0.0.0(参数错误退出)——Web UI 控制的是能读写文件、执行命令的 Agent,默认就按规定不暴露到网络。今天要把局域网打开,用 dsh-LAN 插件或 dsh-proxy 这类反向代理,并且只在可信网络使用。

怎么改 dsh web 的端口?

给 web 应用传 --port:dsh web --port 8080,或 dsh --profile web --port 8080。如果旗标像没生效一样,检查是否有用户补丁把整段配置写成了字面量——那会让旗标的运行时读取失效——然后重启 dsh web。

局域网访问安全吗?API Key 会不会泄露?

要把 Web UI 当控制面看,不是普通网站。官方讨论区有完整攻击链实测:未认证的局域网客户端伪造 Host 头通过特权门禁后改写 LLM endpoint,下一次模型调用就会把 API Key 和提示词一起送出去。dsh-LAN 的口令门是界面级防护,其 README 自己注明非特权 API 对局域网仍然开放。实用守则:只用可信的家庭/办公 Wi-Fi、设好口令、离开就关、绝不把端口暴露到公网。

dsh-LAN 是什么插件?怎么安装?

专门的社区局域网访问插件(MrMu666/dsh-LAN,MIT 协议):把 Web GUI 绑到所有网卡、自动放行防火墙、加全屏口令门,并给官方界面注入手机触控适配。按它 README 的说法最简单的装法是直接告诉 dsh「安装 dsh-LAN 插件」;脚本装法是克隆仓库后跑 install.ps1(Windows)或 ./install.sh(macOS/Linux),属热加载补丁安装。README 验证至 DSH 0.1.5-rc.1,装前先确认与当前版本的兼容性。

局域网直连和内网穿透,我需要哪个?

同一个 Wi-Fi 或办公网:直连——设备能路由到主机的局域网 IP,不需要隧道,本页各节就是完整配置。出了这个网络(手机流量、外地网络):路由不通,必须走 ngrok 这类公网隧道——那是远程访问教程的领域。

相关教程

访问三部曲的另外两环,以及本页依赖的入门页。

画面来源与署名

本页全部截图取自 B 站 UP 主「是属鼠我」的 dsh 局域网访问实录,每张图都带时间戳深链回原片;画面右下角的 UP 摄像头气泡与烧录字幕带经裁修去除。其中局域网 URL 回显与令牌门禁页为 dsh 原生行为;多用户登录、项目工作区与威胁模型画面来自第三方插件 linyupark/dsh-multi-tenant(新仓,引用时请注意其成熟度);局域网插件路线另有 MrMu666/dsh-LAN。两个仓库均以其 GitHub README 为准,页面文字结论为本站原创。

DSH Plugins 是独立的 DeepSeek Harness 插件市场,与 DeepSeek 官方无关,也不代表官方背书。第三方插件未经安全审计,安装前请审查源码。

每周获取最新的 DeepSeek Harness 插件,绝不滥发。