--- tags: [网络, 凭据, EasyTier, 组网, 家庭实验室] --- # 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),仅作中继足够,不要再堆需要长期更新的服务。