dsh-mobile 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/IROH.md CHANGED
@@ -10,16 +10,20 @@ iroh 用加密直连(打不通时走中继)代替公网域名和隧道账号
10
10
  - Windows x64 或 Linux x64(sidecar 只发布这两个目标)。
11
11
  - Android 10+,安装含 iroh 的完整版 `-iroh.apk`,支持 arm64-v8a 和 x86_64。普通 `.apk` 是无原生库的兼容版,保留原有 HTTPS 连接并供旧版自动更新使用;不支持 iroh,也不支持手机浏览器直接接入。两个 APK 使用相同包名和正式签名,只需安装一个。
12
12
  - 点 **安装官方组件** 一次下好 sidecar:插件从固定的 `dsh-mobile-iroh 0.1.0-alpha.1` 发行版按平台下载(Windows x64 约 15 MB,Linux x64 约 24 MB),校验 SHA-256 后放进插件私有目录;已装配套插件且副本校验通过时会直接复用,不再下载。Rust 源码随主仓在 `native/iroh-host`(公共 core 在 `native/iroh-core`)维护,CI 按平台构建校验。
13
- - DSH Mobile 保持启用;iroh 通道默认关闭,不影响局域网和其他远程通道。
13
+ - DSH Mobile 保持启用;iroh 默认关闭。局域网独立运行,远程通道为单选,切换到 iroh 会停止之前的远程通道。
14
14
 
15
15
  ## 使用
16
16
 
17
- 1. 在 **移动访问 → 远程** 选择 `iroh(实验性)`。
18
- 2. 点 **准备 iroh → 安装官方组件**(带下载大小):首次下载并校验 sidecar,通过才算就绪;再次点击会复用已校验的副本。哈希不对、平台不支持都会直接给出原因,不会启动半截通道。注意只是点开通道开关不会触发下载。
17
+ 1. 在 **移动访问** 选择 `iroh(实验性)`。
18
+ 2. 点 **安装官方组件**(带下载大小):首次下载并校验 sidecar,通过才算就绪;再次点击会复用已校验的副本。哈希不对、平台不支持都会直接给出原因,不会启动半截通道。注意只是点开通道开关不会触发下载。
19
19
  3. 打开远程开关:插件依次解析端点身份、签发端点专属网关证书(自有 CA,90 天叶子、30 天提前续)、起专用网关、拉起 sidecar 进程并等待 `ready`。`ready` 表示 sidecar 已连接且网关在回环监听。
20
20
  4. 点 **生成 iroh 配对二维码**,用完整版 App 扫描。描述符绑定 sidecar 的 6 位码、网关的一次性 token 和固定 CA;再次生成会替换旧配对窗口,手机通过 iroh 上的普通 pair 接口核销网关 token。
21
21
  5. 关闭或切换通道会停止自有进程与网关,不删除已保存的配对。独立实验 App 的包名不同,其 Keystore 凭据不会自动迁移到本 App。
22
22
 
23
+ 未安装组件时不显示主操作按钮;安装后,开关、生成二维码和复制配对链接三个按钮保持同排。复制按钮在没有有效配对内容时置灰,生成后才可用,重复复制不会重新生成配对码。
24
+
25
+ 需要回收组件占用空间时,先关闭 iroh 远程访问,再展开组件详情,选择 **移除已下载的 iroh 组件**。它只删除本插件下载的固定版本程序,不删除身份、配对或外部伴随包;再次使用时可重新安装或复用已校验的外部副本。运行中不允许清理,直接调用管理 API 也会被拒绝。
26
+
23
27
  ## 安全边界
24
28
 
25
29
  - sidecar 只允许代理到 `127.0.0.1`/`::1` 的回环网关,TLS 仍端到端;命令与事件都是版本化、定长、未知字段直接拒绝。
@@ -41,4 +45,21 @@ iroh 身份和证书必须存放在仅当前用户或受信系统账户可写的
41
45
  | `iroh_start_timeout` | 查看 DSH 日志中的 iroh 错误及网络连接,确认固定组件可运行;不要反复重新配对来替代进程排查 |
42
46
  | 通道 `ready` 但手机连不上 | 检查 App 是否为完整版、设备是否支持打包的 ABI,以及描述符是否有效;电脑就绪不等于手机已连通,连接中继服务也不等于数据一定经过中继 |
43
47
 
48
+ ## VPN/代理与网络环境
49
+
50
+ iroh 直连优先、中继兜底。直连使用 QUIC/UDP,发现和中继还要求相应网络服务可达。以下环境因素**可能**干扰连接,属于排查方向,并非每一种 VPN 或网络都已确认存在的故障机制:
51
+
52
+ - **全局 VPN/TUN**(系统级虚拟网卡)可能接管 UDP 与 DNS,使直连和中继握手都无法完成。有用户在 Win11 + WSL2 镜像网络、手机移动数据下反馈:关闭全局 VPN 后约 6 秒可用,把 DSH Mobile 加入 VPN 分应用排除后同样恢复。这是社区实测,不代表所有 VPN/网络组合或两种 ABI。
53
+ - **DNS 策略**(fake-IP、过滤规则):域名发现依赖 DNS 解析,fake-IP 模式可能把发现域名解析到代理虚拟 IP。
54
+ - **回环入口**:App 通过 `*.iroh.localhost` 访问本机网关,本机回环地址不应交给远程代理/DNS 处理。
55
+
56
+ 可尝试的排查(自愿进行,以本机安全策略为准):
57
+
58
+ 1. 在 VPN/代理客户端把 DSH Mobile(包名 `io.github.sayach.dshmobile`)加入分应用绕过/排除列表;调试包与独立实验 App 的包名不同。这指社区 Android App,不是官方 DSH Desktop,请按实际安装的包配置。
59
+ 2. 若客户端支持按域名规则,可将发现/中继相关域名设为直连。以 Clash Meta 为例(仅示意,语法以你的客户端为准):`DOMAIN-SUFFIX,iroh.link,DIRECT`;使用 fake-ip 时可在 `fake-ip-filter` 中加入 `+.iroh.link`。域名规则只能覆盖客户端解析相关的部分,**不能**保证覆盖全部直连 peer IP、中继服务与回环路径,也不能概括为“必须有 UDP 否则一定不可用”。
60
+ 3. `*.iroh.localhost` 是 App 的本机入口,不应送往远程代理/DNS。
61
+ 4. Always-on/锁定类 VPN 策略可能不允许分应用绕过;本插件不会绕过系统安全策略、关闭证书校验或强制切换网络。
62
+
63
+ 原生“检测 VPN 并提示”只是可选后续,当前版本不含该功能;是否开关 VPN 由用户自行决定。
64
+
44
65
  英文版见 [IROH.en.md](IROH.en.md)。
package/docs/README.md CHANGED
@@ -18,7 +18,7 @@
18
18
  | 了解输入栏换行、附加控件与触摸目标 | [移动输入栏](MOBILE_COMPOSER_TOOLBAR.md) | [Mobile composer](MOBILE_COMPOSER_TOOLBAR.en.md) |
19
19
  | 保留电脑皮肤,排查移动页面的背景与可读性 | [皮肤与移动布局](SKIN_COMPATIBILITY.md) | [Skins and mobile layout](SKIN_COMPATIBILITY.en.md) |
20
20
 
21
- 在 Android App 中连接公开隧道或自建入口时请选择 **远程访问**。公开受信任证书也可用手机浏览器配对;既有 frps 的自签入口需要 **0.4.6 或更高版本 App** 固定远程 CA。各通道仍要求 DSH Mobile 配对,不能直接暴露普通 DSH 或私有 HTTP 后端。
21
+ 在 Android App 中连接公开隧道或自建入口时请选择 **远程访问**。公开受信任证书也可用手机浏览器配对;既有 frps 的自签入口需要 **0.4.6 或更高版本 App** 固定远程 CA。**iroh 则使用完整版 App 0.7.0 的独立配对流程**,不支持兼容版 APK 或手机浏览器。各通道仍要求 DSH Mobile 配对,不能直接暴露普通 DSH 或私有 HTTP 后端。
22
22
 
23
23
  ## 页面与网络设置 / Page and network settings
24
24
 
@@ -8,7 +8,7 @@ This guide covers the default **external proxy** mode, where you manage public H
8
8
 
9
9
  ## When to use it
10
10
 
11
- Use an existing Lucky, Nginx or Caddy HTTPS proxy rather than a tunnel. Under **Mobile Access → Remote → Self-hosted connection → Own reverse proxy**, DSH Mobile creates a separate private HTTP backend with device authentication:
11
+ Use an existing Lucky, Nginx or Caddy HTTPS proxy rather than a tunnel. Under **Mobile Access → Own reverse proxy**, DSH Mobile creates a separate private HTTP backend with device authentication:
12
12
 
13
13
  ```text
14
14
  phone → https://phone.example.com:8815 (your proxy terminates TLS)
@@ -57,7 +57,7 @@ For a separate proxy host, configure routing and a firewall rule limited to its
57
57
 
58
58
  If you already configured a named tunnel the official way (`cloudflared tunnel`, possibly as a systemd unit, a launchd job or a Windows service), **you do not need the plugin to install a second copy, and you do not need to store a tunnel Token in it**. Use the own-reverse-proxy provider above and point your existing tunnel at the plugin's HTTP backend:
59
59
 
60
- 1. In **Mobile access → Remote → Self-hosted → Own reverse proxy**, fill in: the public HTTPS address as your tunnel's public hostname (for example `https://dsh.example.com`), the private listen IP as `127.0.0.1`, an unused backend port (default `3444`), and the allowed source as `127.0.0.0/8`.
60
+ 1. In **Mobile access → Own reverse proxy**, fill in: the public HTTPS address as your tunnel's public hostname (for example `https://dsh.example.com`), the private listen IP as `127.0.0.1`, an unused backend port (default `3444`), and the allowed source as `127.0.0.0/8`.
61
61
  2. Select **Save and start backend** and copy the HTTP backend address the panel shows.
62
62
  3. For a locally managed tunnel, update the matching `ingress` entry's `service` while keeping your existing tunnel identity, credentials and other routes. This is an excerpt, not a replacement configuration:
63
63
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## 适用场景与安全边界
10
10
 
11
- 你已有 Lucky、Nginx、Caddy 等 HTTPS 反向代理,不需要 Funnel、cpolar 或 FRP 隧道。进入电脑端 **移动访问 → 远程 → 自建连接 → 自有反向代理**,让插件提供一个独立的、带设备配对认证的私有 HTTP 后端:
11
+ 你已有 Lucky、Nginx、Caddy 等 HTTPS 反向代理,不需要 Funnel、cpolar 或 FRP 隧道。进入电脑端 **移动访问 → 自有反向代理**,让插件提供一个独立的、带设备配对认证的私有 HTTP 后端:
12
12
 
13
13
  ```text
14
14
  手机 → https://phone.example.com:8815(你的代理终止 TLS)
@@ -58,7 +58,7 @@ CIDR 限制针对 TCP 连接的**直接来源地址**,不是手机 IP,也不
58
58
 
59
59
  如果你已经在用官方方式配置了命名隧道(`cloudflared tunnel`,可能是 systemd、launchd 或 Windows 服务),**不需要让插件再装一份 cloudflared,也不需要在插件里保存隧道 Token**。用上面的自备代理模式,把你已有的隧道指向插件的 HTTP 后端即可:
60
60
 
61
- 1. 在电脑端 **移动访问 → 远程 → 自建连接 → 自有反向代理** 里填写:公网 HTTPS 地址填你隧道的公开主机名(例如 `https://dsh.example.com`),私有监听 IP 填 `127.0.0.1`,后端端口填一个未占用的值(默认 `3444`),允许来源填 `127.0.0.0/8`。
61
+ 1. 在电脑端 **移动访问 → 自有反向代理** 里填写:公网 HTTPS 地址填你隧道的公开主机名(例如 `https://dsh.example.com`),私有监听 IP 填 `127.0.0.1`,后端端口填一个未占用的值(默认 `3444`),允许来源填 `127.0.0.0/8`。
62
62
  2. 点击 **保存并启动后端**,复制面板给出的 HTTP 后端地址。
63
63
  3. 本地管理的隧道只需修改对应 `ingress` 的 `service`,保留已有隧道身份、凭据及其他路由。以下仅为片段,不要覆盖整份配置:
64
64
 
@@ -111,7 +111,7 @@ location / {
111
111
 
112
112
  **“后端已监听”只证明本地 HTTP 监听成功,不代表公网 HTTPS、证书或 WebSocket 已成功。** 自备代理模式的连接诊断也只报告本地状态,不自动向公网地址探测。
113
113
 
114
- 在电脑端点击 **生成远程配对二维码**,再在 Android App **0.4.0 或更高版本**的 **远程访问** 流程扫码(不要使用 LAN 扫码流程)。使用受信任证书的自有域名也可在手机浏览器中完成配对;现有自有域名逻辑保留 HTTPS 自定义端口,无需为此功能修改 APK。
114
+ 在电脑端点击 **生成配对二维码**,再在 Android App **0.4.0 或更高版本**的 **远程访问** 流程扫码(不要使用 LAN 扫码流程)。使用受信任证书的自有域名也可在手机浏览器中完成配对;现有自有域名逻辑保留 HTTPS 自定义端口,无需为此功能修改 APK。
115
115
 
116
116
  上线前,必须用手机从目标外网实际检查:
117
117