跳到主要内容Mac mini OpenClaw 部署方案 | 极客日志Shell / BashNode.jsAI
Mac mini OpenClaw 部署方案
本文介绍在 Mac mini 上部署 OpenClaw 的安全隔离方案。通过路由器 Guest WiFi 物理隔离主网络,利用 Tailscale 加密隧道实现受控访问。核心配置包括 Docker 沙箱(无网络、只读根)、精细化 sudo 权限及网关 Token 认证。步骤涵盖系统设置、软件安装(Homebrew, Docker, Tailscale)、安全加固及验证测试。确保 AI 节点无法触碰 NAS 或局域网其他设备,同时允许远程管理。
Mac mini OpenClaw 部署方案
MacBook Pro (M4 Max)(主机)+ M4 Mac mini(AI 节点)。MacBook 对 Mac mini 完全不受限,OpenClaw 拥有管理员级权限,但永远无法触及 MacBook、NAS 及局域网任何设备。
图:Mac mini 作为隔离 AI 节点,唯一的授权通道是加密的 Tailscale 隧道
架构
家庭路由器 │
├── 主网络(MacBook Pro、NAS、手机、智能设备…) │
└── Guest WiFi ← Mac mini
├── OpenClaw Gateway(ai 用户,可 sudo)
└── Agent Sandbox(Docker,network:none)
└── 仅 ~/workspace → /workspace
└── ✕ 到主网络的一切流量(路由器硬件级阻断)
Tailscale(overlay network)
MacBook ───全端口互通──→ Mac mini(100.x.x.x)
手机 ───全端口互通──→ Mac mini(100.x.x.x)
为什么这是终极结构
Guest WiFi 在路由器芯片层面阻断 Mac mini 到主网络的一切通信。Mac mini 上的任何进程——包括 root——都无法突破这个边界。这不是软件规则,是网络拓扑上的物理隔离。
Tailscale 在隔离之上建立了一条加密隧道,让 MacBook 和手机能"穿透"Guest WiFi 的墙直接访问 Mac mini。SSH、屏幕共享、文件传输、Web UI、任意端口——全部可用,体验等同局域网直连。同一物理网络下 Tailscale 的额外延迟在 1-2ms 以内。
NAS 没有安装 Tailscale,所以它不存在于这个隧道网络中。Mac mini 永远看不到 NAS。
图:路由器 Guest WiFi 将 Mac mini 与主网络物理隔离,Tailscale 是唯一授权通道
安全边界在路由器上,不在 Mac mini 上。被保护的对象(Mac mini)无法修改保护它的规则(路由器的 Guest WiFi 隔离)。这是安全架构的基本原则。
图:被保护对象无法触及保护规则本身——笼中的 AI 节点,钥匙始终在外
部署步骤
图:四阶段部署流程:系统配置 → 软件安装 → 安全配置 → 验证
第一阶段:系统(接显示器操作,约 15 分钟)
步骤 1 — 创建用户
- 用户名:ai
- 类型:管理员
- Apple ID:不登录
管理员身份让 ai 用户拥有 sudo 能力。OpenClaw 需要提权操作时走 sudo,而不是以 root 身份常驻运行。
步骤 2 — 自动登录
系统设置 → 用户与群组 → 登录选项 → 自动登录 → ai
步骤 3 — 连接 Guest WiFi
系统设置 → Wi-Fi → 连接路由器的 Guest WiFi
路由器管理后台 → Guest Network DHCP → 给 Mac mini 绑固定 IP(例如 192.168.2.50)
步骤 4 — 共享设置
- ✅ 远程登录(SSH)
- ✅ 唤醒以供网络访问
- ❌ 其他全部关闭
步骤 5 — 关闭自动更新
系统设置 → 通用 → 软件更新 → 关闭全部自动选项
步骤 6 — 插 HDMI Dummy Plug
步骤 7 — 防睡眠
sudo pmset -a sleep 0 disksleep 0 displaysleep 10
tcpkeepalive 1 ttyskeepawake 1 autopoweroff 0 powernap 0
第二阶段:软件安装(可 SSH 操作,约 20 分钟)
步骤 8 — Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
步骤 9 — 基础工具
brew install node@22 btop
brew install --cask docker tailscale
步骤 10 — Docker Desktop
启动 Docker Desktop,完成初始设置:
- General → 勾选 Start Docker Desktop when you sign in
- Resources → Memory → 物理内存的 60%
步骤 11 — Tailscale
Mac mini 上启动 Tailscale,登录。记下 100.x.x.x IP。
MacBook 和手机也安装 Tailscale,同一账户登录。
- Machines → Mac mini → 添加标签 tag:ai-node
- Machines → MacBook / 手机 → 添加标签 tag:controller
- Access Controls → 编辑 ACL:
{
"tagOwners": {
"tag:controller": ["autogroup:admin"],
"tag:ai-node": ["autogroup:admin"]
},
"acls": [
{
"action": "accept",
"src": ["tag:controller"],
"dst": ["tag:ai-node:*"]
},
{
"action": "deny",
"src": ["*"],
"dst": ["*"]
}
]
}
步骤 12 — OpenClaw
npm install -g openclaw@latest openclaw onboard --install-daemon
- Gateway mode → Local gateway (this machine)
- Model provider → Anthropic API Key(或你的选择)
- Install daemon → Yes
步骤 13 — 沙箱镜像
git clone https://github.com/openclaw/openclaw.git ~/openclaw-repo
cd ~/openclaw-repo
scripts/sandbox-setup.sh
步骤 14 — 工作目录
mkdir -p ~/workspace/{safe,unsafe,.snapshots}
步骤 15 — sudo 精细化授权
sudo visudo -f /etc/sudoers.d/ai-openclaw
ai ALL=(ALL) NOPASSWD: /opt/homebrew/bin/brew, /usr/sbin/softwareupdate, /bin/mkdir, /bin/chmod, /bin/chown, /usr/sbin/chown, /usr/local/bin/docker, /usr/bin/pmset
只放行 AI 可能需要 root 执行的具体命令。其他所有 sudo 操作仍需密码。
第三阶段:安全配置(约 10 分钟)
步骤 16 — Gateway Token
echo "OPENCLAW_GATEWAY_TOKEN=$(openssl rand -base64 32)" > ~/.openclaw/.env
chmod 600 ~/.openclaw/.env
步骤 17 — 核心配置
cat > ~/.openclaw/openclaw.json << 'CONF'
{
"gateway": {
"mode": "local",
"bind": "loopback",
"port": 18789,
"auth": {
"mode": "token",
"token": "${OPENCLAW_GATEWAY_TOKEN}"
}
},
"discovery": {
"mdns": { "mode": "off" }
},
"channels": {
"whatsapp": { "dmPolicy": "pairing" },
"telegram": { "dmPolicy": "pairing" }
},
"tools": {
"exec": {
"applyPatch": { "workspaceOnly": true }
},
"fs": { "workspaceOnly": true }
},
"agents": {
"defaults": {
"workspace": "~/workspace/unsafe",
"sandbox": {
"mode": "all",
"scope": "agent",
"workspaceAccess": "rw",
"docker": {
"image": "openclaw-sandbox:bookworm-slim",
"network": "none",
"readOnlyRoot": true,
"capDrop": ["ALL"],
"tmpfs": ["/tmp", "/var/tmp", "/run"],
"pidsLimit": 256,
"memory": "2g",
"cpus": 2,
"user": "65532:65532"
}
}
}
}
}
CONF
chmod 600 ~/.openclaw/openclaw.json
| 配置项 | 作用 |
|---|
| bind: "loopback" | Gateway 只听 127.0.0.1,Tailscale 通过本机代理访问 |
| auth.mode: "token" | 所有连接需 token 认证 |
| mdns.mode: "off" | 不广播 OpenClaw 存在(不影响系统 AirDrop 等) |
| dmPolicy: "pairing" | 陌生人需配对才能给 bot 发消息 |
| fs.workspaceOnly | 文件工具限制在 workspace 内 |
| sandbox.mode: "all" | 所有会话的工具执行走 Docker 沙箱 |
| sandbox.docker.network: "none" | 沙箱容器零网络(连 DNS 都不通) |
| sandbox.docker.readOnlyRoot | 容器根文件系统只读 |
| sandbox.docker.capDrop: ["ALL"] | 丢弃全部 Linux capabilities |
| sandbox.docker.user: "65532:65532" | nobody 用户,不与宿主机 uid 重叠 |
步骤 18 — 每日快照
crontab -e
0 3 * * * rsync -a ~/workspace/safe/ ~/workspace/.snapshots/$(date +%F)/
0 4 * * * find ~/workspace/.snapshots/ -maxdepth 1 -type d -mtime +30 -exec rm -rf {} +
步骤 19 — 首次权限弹窗
接显示器或屏幕共享,启动 OpenClaw 后通过 Web UI 让 AI 执行测试命令,逐一批准 macOS 弹出的权限请求:
ls ~/workspace/unsafe
echo "test" > ~/workspace/unsafe/test.txt
cat ~/workspace/unsafe/test.txt
rm ~/workspace/unsafe/test.txt
第四阶段:验证(约 5 分钟)
步骤 20 — 逐条检查
1. Gateway 健康
2. 监听地址
3. 安全审计
openclaw security audit --deep
4. 沙箱镜像
docker images | grep openclaw-sandbox
5. 睡眠禁用
pmset -g | grep -E "sleep|autopoweroff"
6. iCloud 不存在
ls ~/Library/Mobile\ Documents/ 2>&1
7. 无 NAS 挂载
8. Keychain 无网络凭证
security dump-keychain 2>&1 | grep -ci smb
9. Mac mini 无法访问 NAS(从 Mac mini 终端执行)
10. Mac mini 可以上外网
curl -sI https://api.anthropic.com | head -1
11. MacBook 完全访问 Mac mini(从 MacBook 执行)
日常使用
- MacBook SSH:
ssh [email protected]
- MacBook 浏览器:
http://100.x.x.x:18789
- 手机: Tailscale app 同账户 → 浏览器同地址,或 Telegram bot 直接对话
图:无论身处何地,通过 Tailscale 加密隧道访问 Mac mini,体验等同本地直连
日常运维
- 每周(30 秒):
openclaw security audit && openclaw health
- 每月(5 分钟):
npm update -g openclaw@latest, docker system prune -f, du -sh ~/.openclaw/, memory_pressure -l warn 2>&1 | head -5
- 不定期:
ls ~/workspace/unsafe/, mv ~/workspace/unsafe/<已验证项目> ~/workspace/safe/
三层隔离总览
图:三层同心防护圈——路由器(外层)、Docker 沙箱(中层)、OpenClaw 配置(内层),Tailscale 是唯一授权入口
┌─────────────────────────────────────────────────────────┐
│ 第一层:路由器 Guest WiFi(硬件级,不可被 Mac mini 突破)│
│ 效果:Mac mini ──✕──→ NAS / MacBook / 所有 LAN 设备 │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ 第二层:Docker Sandbox network:none(容器级) │
│ 效果:AI 工具执行 ──✕──→ 任何网络(包括外网) │
│ AI 文件访问 ──✕──→ workspace 以外的一切 │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ 第三层:OpenClaw 配置(应用级) │
│ 效果:未授权用户 ──✕──→ Gateway / Web UI / Bot 消息 │
│ OpenClaw mDNS ──✕──→ 广播自身存在 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Tailscale overlay(穿透隔离的唯一通道) │
│ MacBook ──✓──→ Mac mini 全端口 │
│ 手机 ──✓──→ Mac mini 全端口 │
│ NAS ──✕──→ Mac mini(NAS 不在 Tailscale 网络中) │
└─────────────────────────────────────────────────────────┘
| 层 | 解决什么 | 谁控制 | 能被 Mac mini root 绕过吗 |
|---|
| Guest WiFi | Mac mini 不可达 LAN | 路由器 | 不能 |
| Docker Sandbox | AI 工具执行隔离 | Docker 引擎 | 沙箱内不能,宿主机 root 理论上能 |
| OpenClaw 配置 | 访问控制与信息泄露 | 配置文件 | 能改,但无实际攻击动机 |
| Tailscale ACL | 谁能连 Mac mini | Tailscale 云端 | 不能 |
20 步,从拆箱到终态。合上 MacBook,Mac mini 永续运行。你从任何地方通过 Tailscale 访问它,跟坐在它面前一样。你的 NAS、MacBook、家庭网络的所有设备,对 Mac mini 来说不存在。
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown 转 HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
- HTML 转 Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online