Mac mini OpenClaw 部署方案

M4 MacBook Max(主机)+ M4 Mac mini(AI 节点)
MacBook 对 Mac mini 完全不受限,OpenClaw 拥有管理员级权限,但永远无法触及 MacBook、NAS 及局域网任何设备。

题图:孤岛 AI 节点
图:Mac mini 作为隔离 AI 节点,唯一的授权通道是加密的 Tailscale 隧道


架构

家庭路由器
 │
 ├── 主网络(MacBook Max、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,同一账户登录。

登录 https://login.tailscale.com/admin

  • Machines → Mac mini → 添加标签 tag:ai-node
  • Machines → MacBook / 手机 → 添加标签 tag:controller
  • Access Controls → 编辑:
{
  "tagOwners": {
    "tag:controller": ["autogroup:admin"],
    "tag:ai-node": ["autogroup:admin"]
  },
  "acls": [
    {
      "action": "accept",
      "src": ["tag:controller"],
      "dst": ["tag:ai-node:*"]
    },
    {
      "action": "deny",
      "src": ["*"],
      "dst": ["*"]
    }
  ]
}

从 MacBook 验证:

ssh [email protected]

步骤 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 健康
openclaw health

# 2. 监听地址
lsof -i :18789
# → 127.0.0.1:18789

# 3. 安全审计
openclaw security audit --deep
# → 修复所有 CRITICAL / WARNING

# 4. 沙箱镜像
docker images | grep openclaw-sandbox
# → openclaw-sandbox:bookworm-slim

# 5. 睡眠禁用
pmset -g | grep -E "sleep|autopoweroff"
# → sleep 0, autopoweroff 0

# 6. iCloud 不存在
ls ~/Library/Mobile\ Documents/ 2>&1
# → No such file or directory

# 7. 无 NAS 挂载
ls /Volumes/
# → 仅 Macintosh HD

# 8. Keychain 无网络凭证
security dump-keychain 2>&1 | grep -ci smb
# → 0

# 9. Mac mini 无法访问 NAS(从 Mac mini 终端执行)
ping -c 2 192.168.1.100    # 你 NAS 的主网络 IP
# → 超时,不可达

# 10. Mac mini 可以上外网
curl -sI https://api.anthropic.com | head -1
# → HTTP/2 200(或类似响应)

# 11. MacBook 完全访问 Mac mini(从 MacBook 执行)
ssh [email protected]           # → 成功
curl -s http://100.x.x.x:18789 | head -1  # → 有响应

日常使用

# 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 来说不存在。

已有 0 条评论
滚动至顶部