|
@@ -0,0 +1,202 @@
|
|
|
|
|
+---
|
|
|
|
|
+tags:
|
|
|
|
|
+ - 网络
|
|
|
|
|
+ - EasyTier
|
|
|
|
|
+ - 组网
|
|
|
|
|
+ - 家庭实验室
|
|
|
|
|
+created: 2026-09-30
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+# EasyTier 私有组网 zlsh-net(tx6us 中继 + iStoreOS 锚点)
|
|
|
|
|
+
|
|
|
|
|
+相关:[[Easytier配置]] · [[异地组网]] · [[Zerotier局域网配置]] · [[软路由维护]]
|
|
|
|
|
+
|
|
|
|
|
+> ✅ 2026-09-29 ~ 09-30 部署完成,全部开机自启,实测可用。
|
|
|
|
|
+> 工作区原始长文(含全部调试过程):`~/Documents/MacBook/easytier-tx6us-relay.md`
|
|
|
|
|
+
|
|
|
|
|
+## 一、这套网现在长什么样
|
|
|
|
|
+
|
|
|
|
|
+| 节点 | 虚拟 IP | 角色 | 开机自启 |
|
|
|
|
|
+|---|---|---|---|
|
|
|
|
|
+| tx6us VPS `61.110.28.176`(CentOS 7) | — | **中继**:帮两端打洞,打不通兜底转发 | `/etc/systemd/system/easytier.service`(enabled) |
|
|
|
|
|
+| iStoreOS 软路由 `10.10.10.252` | `10.126.126.4` | **子网代理锚点**:把家里局域网搬进私有网 | `/etc/init.d/easytier`(procd,enable) |
|
|
|
|
|
+| MacBook | `10.126.126.2` | 客户端 | `/Library/LaunchDaemons/com.easytier.zlsh.plist` |
|
|
|
|
|
+| macmini `10.10.10.25` | `10.126.126.3` | 客户端(**上面跑着 Hindsight 记忆系统,不能移除**) | 同款 plist |
|
|
|
|
|
+
|
|
|
|
|
+设备间**优先 P2P 直连**(家里 macbook↔路由 5 ms、macmini↔路由 36 ms),中继只在打不通时介入。
|
|
|
|
|
+
|
|
|
|
|
+## 二、网络参数(钥匙)
|
|
|
|
|
+
|
|
|
|
|
+| 项 | 值 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| network-name | `zlsh-net` |
|
|
|
|
|
+| network-secret | `52e24a00ef6a85180ece6d89ae3fd821` |
|
|
|
|
|
+| 中继监听 | `tcp://0.0.0.0:11010`、`udp://0.0.0.0:11010`、`ws://0.0.0.0:11011` |
|
|
|
|
|
+| 私有模式 | `--private-mode true`(只允许持同一密钥的节点接入) |
|
|
|
|
|
+
|
|
|
|
|
+> ⚠️ secret 等于这套内网的钥匙,泄露 = 任何人都能进你的虚拟内网。别提交 git、别贴公开群。
|
|
|
|
|
+
|
|
|
|
|
+## 三、新设备接入
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+easytier-core -d \
|
|
|
|
|
+ --network-name zlsh-net \
|
|
|
|
|
+ --network-secret 52e24a00ef6a85180ece6d89ae3fd821 \
|
|
|
|
|
+ --peers tcp://61.110.28.176:11010 \
|
|
|
|
|
+ --peers udp://61.110.28.176:11010 \
|
|
|
|
|
+ -i 10.126.126.9/24 # 每台设备必须不同
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+验证:`easytier-cli peer` 能看到 `tx6us-relay` 与其它成员;`easytier-cli route` 看路由。
|
|
|
|
|
+
|
|
|
|
|
+## 四、在外访问家里局域网(核心能力)
|
|
|
|
|
+
|
|
|
|
|
+家里设备**不用装任何东西**,路由器在隧道里做地址转换,把 `10.10.10.X` 以别名 `10.99.0.X` 发布给其它节点:
|
|
|
|
|
+
|
|
|
|
|
+| 出门敲这个 | = 家里的 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| `10.99.0.23` | NAS `10.10.10.23` |
|
|
|
|
|
+| `10.99.0.252` | iStoreOS `10.10.10.252` |
|
|
|
|
|
+| `10.99.0.25` | macmini `10.10.10.25` |
|
|
|
|
|
+| `10.99.0.14` | dev `10.10.10.14` |
|
|
|
|
|
+| `10.99.0.254` | PVE `10.10.10.254` |
|
|
|
|
|
+
|
|
|
|
|
+**在家**照旧用 `10.10.10.X`(走 en0 直连,不经过隧道)。规 则通用:`10.99.0.X` ⇄ `10.10.10.X`。
|
|
|
|
|
+
|
|
|
|
|
+路由器上的节点参数(已生效):
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+/usr/bin/easytier-core \
|
|
|
|
|
+ --hostname istore-router --instance-name zlsh-istore \
|
|
|
|
|
+ --ipv4 10.126.126.4/24 \
|
|
|
|
|
+ --listeners tcp://0.0.0.0:11010 udp://0.0.0.0:11010 ws://0.0.0.0:11011 \
|
|
|
|
|
+ --peers udp://61.110.28.176:11010 tcp://10.10.10.25:11010 \
|
|
|
|
|
+ --proxy-networks 10.10.10.0/24->10.99.0.0/24 \
|
|
|
|
|
+ --private-mode true
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+配置与自启:二进制 `/etc/easytier/`,参数文件 `/etc/easytier/easytier.conf`(0600),
|
|
|
|
|
+`/etc/easytier/` 已写进 `/etc/sysupgrade.conf`(固件升级保留)。
|
|
|
|
|
+
|
|
|
|
|
+## 五、家里设备可达性普查(2026-09-30,从 MacBook 走隧道)
|
|
|
|
|
+
|
|
|
|
|
+21 台 ICMP 可达(`.2 .3 .4 .5 .6 .7 .9 .10 .16 .17 .18 .19 .22 .23 .24 .25 .27 .29 .252 .253 .254`),
|
|
|
|
|
+其中有**应用层证据**的:
|
|
|
|
|
+
|
|
|
|
|
+| 家里地址 | 证据 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| `10.10.10.23` NAS | HTTP 200 / HTTPS 200 / `SSH-2.0-OpenSSH_8.2` |
|
|
|
|
|
+| `10.10.10.252` iStoreOS | HTTP 200 / HTTPS 200 / `SSH-2.0-dropbear` |
|
|
|
|
|
+| `10.10.10.253` 网关 | HTTP 302 |
|
|
|
|
|
+| `10.10.10.25` macmini | `SSH-2.0-OpenSSH_10.3`、`:8888` 服务在 |
|
|
|
|
|
+| `10.10.10.14` dev | HTTP 403 / `SSH-2.0-OpenSSH_9.9` |
|
|
|
|
|
+| `10.10.10.254` PVE | `SSH-2.0-OpenSSH_10.0p2 Debian-13` |
|
|
|
|
|
+| `10.10.10.16` / `.24` | `SSH-2.0-OpenSSH_10.0p2 Debian-7` |
|
|
|
|
|
+| `10.10.10.29` | HTTP 200 / `SSH-2.0-OpenSSH_8.8` |
|
|
|
|
|
+| `10.10.10.9` | HTTP 200 |
|
|
|
|
|
+
|
|
|
|
|
+其它(`.4 .5 .6 .7 .10 .17 .18 .19 .21 .22 .27`)没回 ICMP 或常见端口,**不代表不可达**,
|
|
|
|
|
+只是没开 HTTP/SSH;同网段内换它们的实际服务端口(SMB 445、AirPlay、RTSP…)照样能连。
|
|
|
|
|
+**不在 `10.10.10.0/24` 的网段**(`192.168.8.x`、`192.168.6.x` 等)不在隧道里,需要另加 `--proxy-networks`。
|
|
|
|
|
+
|
|
|
|
|
+## 六、踩过的 4 个坑(都是真金白银)
|
|
|
|
|
+
|
|
|
|
|
+### 1. 只 ping 通、TCP 全挂 → iStoreOS 防火墙
|
|
|
|
|
+
|
|
|
|
|
+iStoreOS 上 EasyTier 建的接口是 **`tun0`**。子网代理里 **ICMP/UDP 走用户态协议栈(不过防火墙)、TCP 才走内核转发**,
|
|
|
|
|
+所以不放防火墙会出现「`ping 10.99.0.23` 3/3 通,`curl http://10.99.0.23/` 秒拒 000」。
|
|
|
|
|
+解法:给 `tun0` 加独立 fw4 zone(input/output/forward 全 ACCEPT + `forwarding easytier→lan`)后 `fw4 reload`。
|
|
|
|
|
+改动前备份 `/etc/config/firewall.bak-20260929-235841`。
|
|
|
|
|
+**教训:验证子网代理必须用 TCP,只 ping 会误判。**
|
|
|
|
|
+
|
|
|
|
|
+### 2. 隧道里别用 `nc -z` 判断端口
|
|
|
|
|
+
|
|
|
|
|
+EasyTier 用户态协议栈会先把 TCP 连接「接受」下来,`nc -z` 对**根本不存在的 IP** 也报成功
|
|
|
|
|
+(实测 `nc -z -G 1 10.99.0.55 22` 报 OPEN,但那台机器没有)→ 会得到满屏「所有端口都开着」的假结果。
|
|
|
|
|
+**必须用真实应用层证据**:HTTP 状态码、`SSH-2.0-…` banner。
|
|
|
|
|
+
|
|
|
|
|
+### 3. 从外面回家,家里局域网被隧道路由吞掉(2026-09-29 踩到)
|
|
|
|
|
+
|
|
|
|
|
+- **症状**:出门回来上不去 `10.10.10.25`(22/8888/11010 全超时),NAS、网关一起不通;overlay 同时断
|
|
|
|
|
+ (`easytier-cli peer` 里 mac-mini 变 `relay(2)`、rx/tx `0 B`)。
|
|
|
|
|
+- **原因**:在外时 EasyTier 自动装了 `10.10.10/24 → utun4`(正确);回家后这条没撤,macOS 想给 en0 装回直连 /24
|
|
|
|
|
+ 时前缀已被占住 → 装不上 → 整个家里网段被吸进隧道。EasyTier 只在**新装**路由时检查冲突,对已有的不复检。
|
|
|
|
|
+- **立即修复**(管理员权限):
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo route delete -net 10.10.10.0/24
|
|
|
|
|
+sudo route add -net 10.10.10.0 -netmask 255.255.255.0 -interface en0
|
|
|
|
|
+sudo launchctl kickstart -k system/com.easytier.zlsh # overlay 还没好时再重启守护进程
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- **持久方案(已实施)**:子网代理搬到路由器并改成**映射网段** `10.10.10.0/24->10.99.0.0/24`(永不冲突)+
|
|
|
|
|
+ MacBook 加 `--manual-routes 10.99.0.0/24`(peer 传播来的代理路由一律不装)→ 这个坑结构性消除。
|
|
|
|
|
+- **判据**:`netstat -rn -f inet | grep '^10.10.10/24'` 应是 `en0`;正常状态是
|
|
|
|
|
+ `10.10.10/24 → en0`(家里直连)与 `10.126.126/24 → utun4`(overlay)**两条并存**。
|
|
|
|
|
+
|
|
|
|
|
+### 4. macOS `/bin/sh` 的 `$VAR` + 中文坑
|
|
|
|
|
+
|
|
|
|
|
+脚本里写 `echo "下标 $IDX,值"` 会报 `IDX\uFFFD: unbound variable`——bash 3.2 把紧跟变量名的多字节字符
|
|
|
|
|
+并进了变量名。**一律写 `${IDX}`**。
|
|
|
|
|
+
|
|
|
|
|
+### 5. EasyTier 清理路由时,会把系统自己的直连 /24 一起删掉(2026-09-30 又踩到)
|
|
|
|
|
+
|
|
|
|
|
+改完配置 / `launchctl kickstart -k system/com.easytier.zlsh` 之后,`10.10.10/24` 直连路由会消失,
|
|
|
|
|
+路由表里只剩 `10.10.10.3/32`、`10.10.10.252/32` 两个 /32。**家里设备仍然能连**(改走默认路由绕到路由器一圈),
|
|
|
|
|
+所以很隐蔽。原因:EasyTier 卸载它曾安装过的 `10.10.10.0/24` 时按**前缀**删,不管这个前缀现在是系统自己的
|
|
|
|
|
+en0 直连路由;而 macOS 不会自动把它补回来。
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+sudo route add -net 10.10.10.0 -netmask 255.255.255.0 -interface en0 # 脚本 /tmp/et/restore-lan-route.sh
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+判据:`route -n get 10.10.10.23` 的 flags 里**不应**有 `GATEWAY`;`netstat -rn -f inet | grep '^10.10.10/24'`
|
|
|
|
|
+应显示 `link#14 … UCSc … en0`。**每次重启/改 EasyTier 配置后都顺手看一眼这条路由。**
|
|
|
|
|
+
|
|
|
|
|
+## 七、运维命令
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+# 中继(管理走阿里云跳板,家宽出口到它的 22 被链路透明代理掐断)
|
|
|
|
|
+ssh -J aliyun2 root@61.110.28.176
|
|
|
|
|
+systemctl status easytier ; journalctl -u easytier -f
|
|
|
|
|
+
|
|
|
|
|
+# 路由器(iStoreOS)
|
|
|
|
|
+/etc/init.d/easytier status|restart
|
|
|
|
|
+easytier-cli peer ; easytier-cli route ; easytier-cli node
|
|
|
|
|
+
|
|
|
|
|
+# macOS 客户端
|
|
|
|
|
+sudo launchctl kickstart -k system/com.easytier.zlsh
|
|
|
|
|
+easytier-cli peer # macOS 无 watch,用 while 循环看
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+即时看状态(macOS):`while true; do clear; easytier-cli peer; sleep 2; done`
|
|
|
|
|
+
|
|
|
|
|
+## 八、备份与回退
|
|
|
|
|
+
|
|
|
|
|
+| 内容 | 位置 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| 路由器防火墙(改前) | 路由器 `/etc/config/firewall.bak-20260929-235841` |
|
|
|
|
|
+| MacBook 的 EasyTier 参数(改前) | MacBook `/tmp/et/plist.before-manual-routes` |
|
|
|
|
|
+| macmini 的 EasyTier 参数(改前) | macmini `/tmp/et/plist.before-proxy-removal` |
|
|
|
|
|
+
|
|
|
|
|
+> ⚠️ 后两个在 `/tmp`,重启会被清(想长期留就挪到 `~/`)。
|
|
|
|
|
+
|
|
|
|
|
+## 九、边界与注意
|
|
|
|
|
+
|
|
|
|
|
+- 出门要用别名 `10.99.0.X`,不是家里原地址;**书签 / App / SMB 挂载里写死 `10.10.10.X` 的,出门一律不通**
|
|
|
|
|
+ (2026-09-30 实测:外面 ping `10.10.10.23` 丢包 100%、curl 6 s 超时 `000`)。`10.99.0.X` 在家里也同样能用。
|
|
|
|
|
+- 切网络后有**约 1 分钟**自愈空窗(先连中继再打通),刚切过去别急着判定「不通」。
|
|
|
|
|
+- 而且**中继会自动升级成直连**:2026-09-30 实测同一次会话里,macmini 那条腿从 `relay(2)`(133 ms)在无人工干预下
|
|
|
|
|
+ 自动变成 `p2p` UDP 直连(42–48 ms,软路由 8.5 ms),拉 300 KB 只用 0.097 s ≈ 3 MB/s。判断方法:
|
|
|
|
|
+ `easytier-cli peer` 看 `cost` 列(`p2p`=直连 / `relay(N)`=中继);也可对比两条腿的 rx/tx 计数看流量算在谁头上。
|
|
|
|
|
+- 手机移动网络下 UDP 打洞打不通(双对称 NAT),走中继 → 延迟几百 ms;实测 ping 280–800 ms、
|
|
|
|
|
+ 隧道里 300 KB 文件 ≈ 36 KB/s → **适合 SSH、路由器/群晖后台、Hindsight 这类小请求,大文件很慢**。
|
|
|
|
|
+- 家里设备看到的来源 IP 是路由器 `10.10.10.252`(若 NAS 有 IP 白名单按它放行)。
|
|
|
|
|
+- macmini 上原来的 `--proxy-networks 10.10.10.0/24` **已于 2026-09-30 清理完成** → 全网只剩 istore-router
|
|
|
|
|
+ 发布 `10.99.0.0/24`,没有任何节点再发布与家里同名的 `10.10.10.0/24`;macmini 的虚拟 IP 仍是 `10.126.126.3`,
|
|
|
|
|
+ **Hindsight 不受影响**(清理脚本 `sudo sh /tmp/et/remove-macmini-proxy.sh`,自带自检与回滚)。
|
|
|
|
|
+- **重启实测(2026-09-30 00:45,路由器):真重启一次后全部自动恢复,不需要重新配置** —— EasyTier 自启、接口名仍是
|
|
|
|
|
+ `tun0`、防火墙 zone 与 nft 规则在、映射网段 `10.10.10.0/24->10.99.0.0/24` 在、LAN 仍 `10.10.10.252/24`、
|
|
|
|
|
+ 三个 peer 自动 p2p 重连;出门视角 TCP 实测 `10.99.0.23` 200/0.012s、`10.99.0.252` 200/0.014s、
|
|
|
|
|
+ `10.99.0.25:8888` 200/0.036s。(两台 Mac 的重启仍未实测;防火墙 zone 绑的是接口**名** `tun0`,见坑 1。)
|
|
|
|
|
+- 中继是 CentOS 7(已 EOL),仅作中继足够,不要再堆需要长期更新的服务。
|