Lattice 部署指南(个人/家庭模式)
适用: standalone 模式自托管部署(家庭局域网 + 出门访问) 读者: 自部署用户与家庭管理员 关联:
docs/latticedns-technical.md(LatticeDNS 原理)、docs/superpowers/specs/2026-09-17-latticedns-design.md合规摘要见 §七(自托管自用的边界;商业化运营需另行取得法律意见)
〇、一条黄金法则
所有"下发给设备"的地址(信令、二维码、接入指引),必须是设备能访问到的地址——不是服务器自己的回环地址。
服务器上 127.0.0.1:18090 自己能打开,不代表手机能连上。本次真机联调的第一堵墙就是它。
一、端口与地址总表
| 端口 | 协议 | 用途 | 绑定 |
|---|---|---|---|
listen(默认 :8080) | TCP | 管理 API + Web 控制台 + 入网二维码 | 见 §二 |
| 4222 | TCP | NATS 信令(设备注册/拓扑推送) | 所有接口 |
| 6266 | TCP/UDP | LRP 中继(打洞失败时的兜底通道) | 所有接口 |
| 51820/udp | UDP | WireGuard 数据面(引擎,按需) | 引擎 |
| 3478 | UDP | STUN(如启用自有 STUN) | 配置 |
二、三个必须理解的地址
| 名称 | 配置键 | 作用 | 常见错误 |
|---|---|---|---|
| 监听地址 | listen / LATTICE_LISTEN | latticed API 绑定的地址与端口 | 绑定回环后局域网设备访问不了 |
| 信令地址 | signaling-url / LATTICE_SIGNALING_URL | 下发给设备的 NATS 地址 | ⚠️ 留空时兜底 nats://127.0.0.1:4222——外部设备永远连不上 |
| 服务地址 | dashboard 的访问地址 | 入网二维码编码的服务器地址 | 用 127.0.0.1 打开控制台 → 二维码里也是回环地址 |
symptom 速查:App 点"连接"一闪回到"未连接" = 十有八九是信令地址问题(详见 §六故障表)。
三、三种典型部署拓扑
拓扑 A:纯家庭内网使用(设备回家才用)
最简部署,无需公网、无需 VPS:
yaml
# lattice.yaml 关键项
listen: "192.168.1.8:18090" # 绑定局域网地址(或 0.0.0.0)
signaling-url: "nats://192.168.1.8:4222" # ⚠️ 必填:局域网可达的 NATS 地址- 设备(手机/电脑)连家庭 Wi-Fi,App 扫码/手动填
http://192.168.1.8:18090加入; - 出门后回到家用 Wi-Fi 自动重连。
拓扑 B:出门随时可用 —— IPv6 直连(推荐,零暴露)
国内家宽与蜂窝网络 IPv6 普及率已很高。两端都有 IPv6 = 天然公网地址直连,无需打洞、无需中继。
要求:
- 家里宽带开启 IPv6(光猫改桥接/路由器开启 IPv6);
- 家里设备(NAS/Mac)的防火墙放行 WireGuard 端口(51820/udp)给指定来源;
- 出门设备(蜂窝/Wi-Fi)同样具备 IPv6。
IPv4 兜底(无 IPv6 环境时):路由器端口转发 UDP 51820 → 家里设备,或参考拓扑 C。
拓扑 C:出门随时可用 —— IPv4 + 自部署中继兜底
- 路由器端口转发 UDP 51820 → 家里设备(IPv4 直连路径);
- 打洞失败时的兜底:自部署 LRP 中继(
lrper)到你有公网的 VPS:
bash
# VPS 上(有公网 IP)
./lrper --listen :6266
# 家里 lattice.yaml
relay-url: "你VPS的IP:6266"合规边界:官方不运营任何中继节点;lrper 是自部署组件,使用者自行确保用途合规(不承载跨境信道、不面向公众提供服务)。商业化组网服务需电信业务牌照。
四、参考配置(带注释的 lattice.yaml)
yaml
# 管理/API 监听地址
listen: "127.0.0.1:18090" # 仅本机访问控制台时用回环;需要局域网访问则绑 LAN IP
# ⚠️ 信令地址:下发给设备的 NATS 地址。必须留空以外的值——
# 留空时兜底 nats://127.0.0.1:4222,外部设备会连向它自己。
signaling-url: "nats://192.168.1.8:4222"
# STUN:留空时使用内置多服务器列表(自有 + 国内公共 + 全球双栈)。
# 如自建 STUN 可在此指定,将作为列表首位优先使用。
stun-url: ""
# LRP 中继(拓扑 C 的自部署中继):none 时仅打洞直连
relay-url: ""环境变量等价(viper 自动绑定,LATTICE_ 前缀):LATTICE_LISTEN、LATTICE_SIGNALING_URL、LATTICE_STUN_URL。
五、入网二维码与服务器地址语义
控制台「令牌页 → 行菜单 → 入网二维码」生成的码,编码内容为:
lattice://join?server=<控制台访问地址>&token=<令牌值>- 控制台地址 = 手机将使用的服务器地址。用
http://192.168.1.8:18090打开控制台,码里就是局域网地址(回家 Wi-Fi 可用);用 VPS 域名打开,码里就是 VPS 地址(出门可用); - 二维码弹窗中会显示实际编码的服务器地址,出码前请核对其中的地址是手机可达的;
- 同一令牌默认 7 天有效、最多 5 台设备使用(生成时可在控制台调整)。
六、故障对照表(真实症状 → 原因 → 处理)
| 症状 | 原因 | 处理 |
|---|---|---|
| App 点连接一闪回到"未连接" | 信令地址是回环(127.0.0.1) | 设 signaling-url 为局域网/公网可达的 NATS 地址 |
| 扫码后无法连接 / 连接超时 | 二维码里的服务器地址手机不可达 | 用手机可达的地址重新打开控制台再出码 |
| 设备列表质量标签一直"连接中" | 探测对端不可达 | 检查对端是否在线;满 60 秒转"不可达" |
| 面板/列表无质量标签 | 探测数据未就绪(刚连上 15 秒内属正常) | 等待探测周期;仍无则检查隧道是否已连接 |
| 退出网络后首页仍显示"登录后可查看设备" | 旧版本退出未删除 VPN 配置 | 升级到包含 removeProfile 的版本后重新退出一次 |
七、合规边界摘要
- 自托管、自使用:合法(与 WireGuard/ZeroTier 等开源组网工具同类);
- 官方不运营任何中继/节点;lrper 为用户自部署组件;
- 不承载跨境信道;面向公众的组网/通信服务需电信业务牌照;
- 本文档为工程合规摘要,不构成法律意见;商业化前请咨询专业律师。