EasyTier 私有组网 zlsh-net(tx6us 中继 + iStoreOS 锚点).md 11 KB


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、别贴公开群。

三、新设备接入

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。

路由器上的节点参数(已生效):

/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 只在新装路由时检查冲突,对已有的不复检。
  • 立即修复(管理员权限):

    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 不会自动把它补回来。

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 配置后都顺手看一眼这条路由。

七、运维命令

# 中继(管理走阿里云跳板,家宽出口到它的 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),仅作中继足够,不要再堆需要长期更新的服务。