Mac mini OpenClaw 部署方案

Mac mini OpenClaw 終極部署方案

M4 MacBook Max(主機(jī))+ M4 Mac mini(AI 節(jié)點(diǎn)) MacBook 對(duì) Mac mini 完全不受限,OpenClaw 擁有管理員級(jí)權(quán)限,但永遠(yuǎn)無法觸及 MacBook、NAS 及局域網(wǎng)任何設(shè)備。

圖:Mac mini 作為隔離 AI 節(jié)點(diǎn),唯一的授權(quán)通道是加密的 Tailscale 隧道

架構(gòu) 家庭路由器 │ ├── 主網(wǎng)絡(luò)(MacBook Max、NAS、手機(jī)、智能設(shè)備…) │ └── Guest WiFi ← Mac mini ? ? │ ? ? ? ? ? ├── OpenClaw Gateway(ai 用戶,可 sudo) ? ? │ ? ? ? ? ? └── Agent Sandbox(Docker,network:none) ? ? │ ? ? ? ? ? ? ? ? └── 僅 ~/workspace → /workspace ? ? │ ? ? └── ? 到主網(wǎng)絡(luò)的一切流量(路由器硬件級(jí)阻斷) Tailscale(overlay network) │ MacBook ───全端口互通──→ Mac mini(100.x.x.x) 手機(jī) ? ───全端口互通──→ Mac mini(100.x.x.x)

為什么這是終極結(jié)構(gòu):

Guest WiFi 在路由器芯片層面阻斷 Mac mini 到主網(wǎng)絡(luò)的一切通信。Mac mini 上的任何進(jìn)程——包括 root——都無法突破這個(gè)邊界。這不是軟件規(guī)則,是網(wǎng)絡(luò)拓?fù)渖系奈锢砀綦x。

Tailscale 在隔離之上建立了一條加密隧道,讓 MacBook 和手機(jī)能"穿透"Guest WiFi 的墻直接訪問 Mac mini。SSH、屏幕共享、文件傳輸、Web UI、任意端口——全部可用,體驗(yàn)等同局域網(wǎng)直連。同一物理網(wǎng)絡(luò)下 Tailscale 的額外延遲在 1-2ms 以內(nèi)。

NAS 沒有安裝 Tailscale,所以它不存在于這個(gè)隧道網(wǎng)絡(luò)中。Mac mini 永遠(yuǎn)看不到 NAS。

圖:路由器 Guest WiFi 將 Mac mini 與主網(wǎng)絡(luò)物理隔離,Tailscale 是唯一授權(quán)通道

安全邊界在路由器上,不在 Mac mini 上。 被保護(hù)的對(duì)象(Mac mini)無法修改保護(hù)它的規(guī)則(路由器的 Guest WiFi 隔離)。這是安全架構(gòu)的基本原則。

圖:被保護(hù)對(duì)象無法觸及保護(hù)規(guī)則本身——籠中的 AI 節(jié)點(diǎn),鑰匙始終在外

部署步驟

圖:四階段部署流程:系統(tǒng)配置 → 軟件安裝 → 安全配置 → 驗(yàn)證

第一階段:系統(tǒng)(接顯示器操作,約 15 分鐘)

步驟 1 — 創(chuàng)建用戶

系統(tǒng)設(shè)置 → 用戶與群組 → 添加用戶:

用戶名:ai 類型:管理員 Apple ID:不登錄

管理員身份讓 ai 用戶擁有 sudo 能力。OpenClaw 需要提權(quán)操作時(shí)走 sudo,而不是以 root 身份常駐運(yùn)行。

步驟 2 — 自動(dòng)登錄

系統(tǒng)設(shè)置 → 用戶與群組 → 登錄選項(xiàng) → 自動(dòng)登錄 → ai

步驟 3 — 連接 Guest WiFi

系統(tǒng)設(shè)置 → Wi-Fi → 連接路由器的 Guest WiFi

路由器管理后臺(tái) → Guest Network DHCP → 給 Mac mini 綁固定 IP(例如 192.168.2.50)

步驟 4 — 共享設(shè)置

系統(tǒng)設(shè)置 → 通用 → 共享:

? 遠(yuǎn)程登錄(SSH) ? 喚醒以供網(wǎng)絡(luò)訪問 ? 其他全部關(guān)閉

步驟 5 — 關(guān)閉自動(dòng)更新

系統(tǒng)設(shè)置 → 通用 → 軟件更新 → 關(guān)閉全部自動(dòng)選項(xiàng)

步驟 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 — 基礎(chǔ)工具

brew install node@22 btop brew install --cask docker tailscale

步驟 10 — Docker Desktop

啟動(dòng) Docker Desktop,完成初始設(shè)置:

General → 勾選 Start Docker Desktop when you sign in

Resources → Memory → 物理內(nèi)存的 60%

步驟 11 — Tailscale

Mac mini 上啟動(dòng) Tailscale,登錄。記下 100.x.x.x IP。

MacBook 和手機(jī)也安裝 Tailscale,同一賬戶登錄。

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

Machines → Mac mini → 添加標(biāo)簽 tag:ai-node

Machines → MacBook / 手機(jī) → 添加標(biāo)簽 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 驗(yàn)證:

ssh ai@100.x.x.x

步驟 12 — OpenClaw

npm install -g openclaw@latest openclaw onboard --install-daemon

引導(dǎo)向?qū)В?/p>

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 精細(xì)化授權(quán)

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 執(zhí)行的具體命令。其他所有 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

每行配置的作用:

配置項(xiàng) 作用 bind: "loopback" Gateway 只聽 127.0.0.1,Tailscale 通過本機(jī)代理訪問 auth.mode: "token" 所有連接需 token 認(rèn)證 mdns.mode: "off" 不廣播 OpenClaw 存在(不影響系統(tǒng) AirDrop 等) dmPolicy: "pairing" 陌生人需配對(duì)才能給 bot 發(fā)消息 fs.workspaceOnly 文件工具限制在 workspace 內(nèi) sandbox.mode: "all" 所有會(huì)話的工具執(zhí)行走 Docker 沙箱 sandbox.docker.network: "none" 沙箱容器零網(wǎng)絡(luò)(連 DNS 都不通) sandbox.docker.readOnlyRoot 容器根文件系統(tǒng)只讀 sandbox.docker.capDrop: ["ALL"] 丟棄全部 Linux capabilities sandbox.docker.user: "65532:65532" nobody 用戶,不與宿主機(jī) 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 — 首次權(quán)限彈窗

接顯示器或屏幕共享,啟動(dòng) OpenClaw 后通過 Web UI 讓 AI 執(zhí)行測試命令,逐一批準(zhǔn) macOS 彈出的權(quán)限請(qǐng)求:

ls ~/workspace/unsafe echo "test" > ~/workspace/unsafe/test.txt cat ~/workspace/unsafe/test.txt rm ~/workspace/unsafe/test.txt 第四階段:驗(yàn)證(約 5 分鐘)

步驟 20 — 逐條檢查

1. Gateway 健康

openclaw health

2. 監(jiān)聽地址

lsof -i :18789

→ 127.0.0.1:18789

3. 安全審計(jì)

openclaw security audit --deep

→ 修復(fù)所有 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 無網(wǎng)絡(luò)憑證

security dump-keychain 2>&1 | grep -ci smb

→ 0

9. Mac mini 無法訪問 NAS(從 Mac mini 終端執(zhí)行)

ping -c 2 192.168.1.100 ? ?# 你 NAS 的主網(wǎng)絡(luò) IP

→ 超時(shí),不可達(dá)

10. Mac mini 可以上外網(wǎng)

curl -sI https://api.anthropic.com | head -1

→ HTTP/2 200(或類似響應(yīng))

11. MacBook 完全訪問 Mac mini(從 MacBook 執(zhí)行)

ssh ai@100.x.x.x ? ? ? ? ? # → 成功 curl -s http://100.x.x.x:18789 | head -1 ?# → 有響應(yīng) 日常使用

MacBook SSH

ssh ai@100.x.x.x

MacBook 瀏覽器

http://100.x.x.x:18789

手機(jī)

Tailscale app 同賬戶 → 瀏覽器同地址

或 Telegram bot 直接對(duì)話

圖:無論身處何地,通過 Tailscale 加密隧道訪問 Mac mini,體驗(yàn)等同本地直連

日常運(yùn)維

每周(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/<已驗(yàn)證項(xiàng)目> ~/workspace/safe/ 三層隔離總覽

圖:三層同心防護(hù)圈——路由器(外層)、Docker 沙箱(中層)、OpenClaw 配置(內(nèi)層),Tailscale 是唯一授權(quán)入口

┌─────────────────────────────────────────────────────────┐ │ 第一層:路由器 Guest WiFi(硬件級(jí),不可被 Mac mini 突破)│ │ 效果:Mac mini ──?──→ NAS / MacBook / 所有 LAN 設(shè)備 ? │ └─────────────────────────────────────────────────────────┘ ? ? ? ? ? ? ? ? ? ? ? ? │ ┌─────────────────────────────────────────────────────────┐ │ 第二層:Docker Sandbox network:none(容器級(jí)) ? ? ? ? ? │ │ 效果:AI 工具執(zhí)行 ──?──→ 任何網(wǎng)絡(luò)(包括外網(wǎng)) ? ? ? ? ? │ │ ? ? ? AI 文件訪問 ──?──→ workspace 以外的一切 ? ? ? ? ? │ └─────────────────────────────────────────────────────────┘ ? ? ? ? ? ? ? ? ? ? ? ? │ ┌─────────────────────────────────────────────────────────┐ │ 第三層:OpenClaw 配置(應(yīng)用級(jí)) ? ? ? ? ? ? ? ? ? ? ? ? │ │ 效果:未授權(quán)用戶 ──?──→ Gateway / Web UI / Bot 消息 ? ? │ │ ? ? ? OpenClaw mDNS ──?──→ 廣播自身存在 ? ? ? ? ? ? ? ? │ └─────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────┐ │ Tailscale overlay(穿透隔離的唯一通道) ? ? ? ? ? ? ? ? │ │ MacBook ──?──→ Mac mini 全端口 ? ? ? ? ? ? ? ? ? ? ? ? │ │ 手機(jī) ? ──?──→ Mac mini 全端口 ? ? ? ? ? ? ? ? ? ? ? ? │ │ NAS ? ? ──?──→ Mac mini(NAS 不在 Tailscale 網(wǎng)絡(luò)中) ? │ └─────────────────────────────────────────────────────────┘

每層解決一個(gè)問題,不重疊:

層 解決什么 誰控制 能被 Mac mini root 繞過嗎 Guest WiFi Mac mini 不可達(dá) LAN 路由器 不能 Docker Sandbox AI 工具執(zhí)行隔離 Docker 引擎 沙箱內(nèi)不能,宿主機(jī) root 理論上能 OpenClaw 配置 訪問控制與信息泄露 配置文件 能改,但無實(shí)際攻擊動(dòng)機(jī) Tailscale ACL 誰能連 Mac mini Tailscale 云端 不能 完成

20 步,從拆箱到終態(tài)。合上 MacBook,Mac mini 永續(xù)運(yùn)行。你從任何地方通過 Tailscale 訪問它,跟坐在它面前一樣。你的 NAS、MacBook、家庭網(wǎng)絡(luò)的所有設(shè)備,對(duì) Mac mini 來說不存在。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容