Files
AgentsMeeting/docs/EasyTier组网方案.md

267 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 后台(非 systemdDashboard 不管理它) |
| 二进制 | `/usr/local/bin/easytier-linux-x86_64/easytier-core` |
| 日志 | `/tmp/easytier.log` |
| 注意 | **永不停止**,始终在线为外出机器提供中继 |
### 3.2 客户端 246Ubuntu
| 项目 | 值 |
|------|-----|
| 安装位置 | `/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 客户端 Mac122
| 项目 | 值 |
|------|-----|
| 安装位置 | `/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 客户端 Windows16
| 项目 | 值 |
|------|-----|
| 安装位置 | `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 稳定运行一段时间后,再来做主机名替换。