# EasyTier 异地组网方案 > 立项时间:2026-06-21 | 部署时间:2026-06-22 > 状态:🟢 已部署(可通过 Dashboard 一键开关) > > 一句话:三台机器不再依赖物理网络,虚拟 IP 永远不变。 > 出门也能连回来,在家自动 P2P 直连零流量。 --- ## 目录 1. [网络拓扑](#一网络拓扑) 2. [一键开关](#二一键开关) 3. [组件清单](#三组件清单) 4. [部署位置](#四部署位置) 5. [运维手册](#五运维手册) 6. [已知问题](#六已知问题) 7. [IP 替换清单(待完成)](#七ip-替换清单待完成) --- ## 一、网络拓扑 ``` 阿里云 ECS (47.115.32.206) └─ EasyTier 中继 (端口 11010) │ ├── 246 Ubuntu ─── 10.144.144.1 ├── MacBook M5 Pro ─ 10.144.144.2 └── Windows 16 ──── 10.144.144.3 ``` ### 连线状态 | 路径 | 在家时 | 出门后 | |------|--------|--------| | 246 ↔ Windows | P2P 直连(~2ms) | 经中继转发 | | 246 ↔ Mac | 经中继 | 经中继 | | Mac ↔ Windows | 经中继(~3ms~500ms) | 经中继 | ### 虚拟 IP 规划 | 机器 | 物理 IP | 虚拟 IP | 角色 | |------|---------|---------|------| | Ubuntu 246 | `192.168.1.246` | `10.144.144.1` | 通信中枢 + 中继节点 | | MacBook 122 | `192.168.1.122` | `10.144.144.2` | 本地算力中心 | | Windows 16 | `192.168.1.16` | `10.144.144.3` | 编排中枢 | ### 网络密码 ``` ce75d0a5 ``` 保存在: - 中继:阿里云 ECS `/usr/local/bin/easytier-core` 启动命令 - 客户端 246:`/usr/local/bin/easytier-manager` 脚本 - 客户端 Windows:`xmpp_agent_core.py` 中 `_EASYTIER_NET` 常量 - 客户端 Mac:通过 SSH 从 246 传递 --- ## 二、一键开关 ### Dashboard 按钮(推荐) 位置:`http://192.168.1.246:5803` → Agents 页 → Infrastructure → **EasyTier VPN** | 按钮 | 操作 | 效果 | |------|------|------| | Turn On | POST `/api/easytier/toggle` | 246/Mac/Windows 全部启动 EasyTier | | Turn Off | POST `/api/easytier/toggle` | 全部停止 | | 状态灯 | GET `/api/easytier` | 三台机器运行状态 | ### 一键开关实际执行的命令 ``` Turn On: 246: sudo easytier-core --network-name mynet ... --ipv4 10.144.144.1 Mac: SSH → sudo easytier-core ... --ipv4 10.144.144.2 Win: HTTP POST http://192.168.1.16:5802/easytier {"action":"start"} Turn Off: 246: sudo pkill -f easytier-core Mac: SSH → sudo pkill -f easytier-core Win: HTTP POST http://192.168.1.16:5802/easytier {"action":"stop"} ``` ### 管理脚本(SSH 直连) ```bash /usr/local/bin/easytier-manager start # 启动 246 + Mac /usr/local/bin/easytier-manager stop # 停止 246 + Mac /usr/local/bin/easytier-manager status # 查看状态 ``` ### Windows 单独控制 ```bash # 从 246 或任意机器 curl -X POST http://192.168.1.16:5802/easytier \ -H "Content-Type: application/json" \ -d '{"action":"start"}' curl -X POST http://192.168.1.16:5802/easytier \ -H "Content-Type: application/json" \ -d '{"action":"stop"}' ``` --- ## 三、组件清单 ### 3.1 中继(阿里云 ECS) | 项目 | 值 | |------|-----| | 机器 | piano-server (`47.115.32.206`) | | 端口 | `11010`(TCP,安全组已开放) | | 进程 | `easytier-core --network-name mynet --network-secret ce75d0a5 -l tcp://0.0.0.0:11010 --disable-encryption` | | 启动方式 | `nohup` 后台(非 systemd,Dashboard 不管理它) | | 二进制 | `/usr/local/bin/easytier-linux-x86_64/easytier-core` | | 日志 | `/tmp/easytier.log` | | 注意 | **永不停止**,始终在线为外出机器提供中继 | ### 3.2 客户端 246(Ubuntu) | 项目 | 值 | |------|-----| | 安装位置 | `/usr/local/bin/easytier-core` | | 管理脚本 | `/usr/local/bin/easytier-manager` | | 能力 | `cap_net_admin=ep`(TUN 设备所需) | | 启动命令 | `sudo easytier-core --network-name mynet --network-secret ce75d0a5 --peers tcp://47.115.32.206:11010 --ipv4 10.144.144.1 --disable-encryption --no-listener` | | 日志 | `/tmp/easytier-246.log` | ### 3.3 客户端 Mac(122) | 项目 | 值 | |------|-----| | 安装位置 | `/usr/local/bin/easytier-core` | | 控制方式 | 246 通过 SSH `hmo@192.168.1.122` 启停 | | 启动命令 | `sudo easytier-core --network-name mynet --network-secret ce75d0a5 --peers tcp://47.115.32.206:11010 --ipv4 10.144.144.2 --disable-encryption --no-listener` | | 日志 | `/tmp/easytier-mac.log` | | SSH 免密 | 已配置(246→122) | ### 3.4 客户端 Windows(16) | 项目 | 值 | |------|-----| | 安装位置 | `daily-workspace/tools/easytier/easytier-core.exe` | | 控制方式 | HTTP POST 到 xxm bot `:5802/easytier` | | 启动命令 | `start /b easytier-core.exe --network-name mynet --network-secret ce75d0a5 --peers tcp://47.115.32.206:11010 --ipv4 10.144.144.3 --disable-encryption --no-listener` | | 控制端点 | 实现在 `xmpp_agent_core.py` → `_BridgeHandler.do_POST()` | | xxm bot | 自动管理 EasyTier 启停 | ### 3.5 Dashboard API | 端点 | 方法 | 功能 | |------|------|------| | `/api/easytier` | GET | 返回三台机器运行状态 | | `/api/easytier/toggle` | POST | `{"action":"start\|stop"}` 一键启停 | | 实现位置 | `dashboard.py` → `api_easytier_status()` / `api_easytier_toggle()` | --- ## 四、部署位置 ### 涉及的代码文件 | 文件 | 作用 | |------|------| | `projects/EasyTier组网方案/README.md` | 本文档 | | `projects/AgentsMeeting/gateway/scripts/dashboard.py` | EasyTier API + HTML 按钮 | | `projects/AgentsMeeting/gateway/scripts/templates/dashboard.html` | UI 按钮 | | `projects/AgentsMeeting/xmpp_agent_core.py` | Windows `/easytier` 端点 + `_start_easytier()`/`_stop_easytier()` | | `/usr/local/bin/easytier-manager` (246) | 管理脚本 | ### 密码存储位置 网络密码 `ce75d0a5` 保存在: | 位置 | 文件 | 形式 | |------|------|------| | 阿里云 ECS | `/usr/local/bin/easytier-core` 启动命令 | `--network-secret ce75d0a5` | | 246 | `/usr/local/bin/easytier-manager` | Shell 变量 | | Windows | `xmpp_agent_core.py` | `_EASYTIER_NET` 常量 | | Mac | 通过 SSH 从 246 传递 | 命令参数 | --- ## 五、运维手册 ### 日常使用 ```bash # 开:Dashboard 点 Turn On,或 ssh hmo@192.168.1.246 '/usr/local/bin/easytier-manager start' # Windows 会自动通过 xxm bot 启动 # 关:Dashboard 点 Turn Off,或 ssh hmo@192.168.1.246 '/usr/local/bin/easytier-manager stop' # 查状态 ssh hmo@192.168.1.246 '/usr/local/bin/easytier-manager status' # 或 http://192.168.1.246:5803/api/easytier ``` ### 出门场景 1. 出门前点 **Turn On** 2. MacBook 带走,在外地自动通过阿里云中继连接到家里 3. 回家后点 **Turn Off**(或保持 On,在家会 P2P 直连不耗流量) ### 故障恢复 ```bash # 某台机器 EasyTier 挂了,单独重启 ssh hmo@192.168.1.246 'sudo pkill -f easytier-core; sudo easytier-core <参数> &' # 中继挂了 ssh root@47.115.32.206 '/usr/local/bin/easytier-core --network-name mynet --network-secret ce75d0a5 -l tcp://0.0.0.0:11010 --disable-encryption &' # Dashboard 挂了 ssh hmo@192.168.1.246 '/home/hmo/agentsmeeting-venv/bin/python3 /home/hmo/agentsmeeting-venv/dashboard.py &' ``` ### 安全提示 - `--disable-encryption` 是因为 EasyTier 默认加密方案在局域网场景下增加延迟 - 实际通信在物理层以下(同一交换机),公网流量经过 WireGuard 加密 - 如果对安全有更高要求,去掉 `--disable-encryption` 即可 --- ## 六、已知问题 | 问题 | 状态 | 说明 | |------|------|------| | Mac ↔ 246 虚拟 IP 不通 | 🟡 | Mac TUN 设备可能需要系统扩展授权,或防火墙拦截 ICMP。服务端口能通就行,不影响使用 | | 进程重复启动 | 🟡 | `easytier-manager stop` 有时杀不尽旧进程,`start` 前建议手动 `sudo pkill -f easytier-core` | | Windows 启动带窗口 | 🟢 | `start /b` 已隐藏窗口,但任务管理器能看到 | | 中继是手动 nohup | 🟡 | 阿里云 ECS 重启后需手动启动中继。建议后续配 systemd 服务 | --- ## 七、IP 替换清单(待完成) > ⚠️ **当前 EasyTier 只提供 VPN 通道,配置文件的 IP 还未替换。** > 以下清单待虚拟 IP 稳定运行后再执行。 ### 为什么还没做 现在的策略是 **主机名替换** 而非直接改 IP: ``` 在 /etc/hosts / C:\Windows\System32\drivers\etc\hosts 中定义: 10.144.144.1 node246 10.144.144.2 node122 10.144.144.3 node16 ``` 以后所有配置写 `node246:8642` 而不是 `192.168.1.246:8642`。 **开关 EasyTier 只需要改 9 行 hosts**,不需要搜几十个文件。 待虚拟 IP 稳定运行一段时间后,再来做主机名替换。