Mac mini 作為我的家庭伺服器
我把一台 Mac mini 放在家裡 24/7 運行,作為家庭伺服器。
Edit:
我目前在踐行「自託管伺服器去數據中心化」,家庭網路拓撲已更新。敬請期待後續的博文。
它透過 UTM 托管多台橋接模式的虛擬機,分別處理 Home Assistant、OpenWrt gateway 和一些邊緣服務。
我為什麼選擇了它:
- 安靜、省電。
- 單一服務故障不影響整體網路。
- 家庭設備、IoT 設備和代理 gateway 互相隔離。
- 外出時仍然可以安全地訪問家中網路。
為什麼是 Mac mini?
選 Mac mini 主要是因為它很適合長時間放在家裡運行:
- M-series 晶片能耗比高。
- 幾乎沒有噪音。
- Unified Memory 對多個輕量虛擬機很友好。
- 可選 10Gb Ethernet,足夠承載多台虛擬機的網路流量。
- macOS 本身方便管理,也能直接跑 Tailscale。
- 外觀足夠簡潔,放在家裡不突兀。
我把 Mac mini 透過一條網路線連接到 router。幾台虛擬機都使用橋接模式,直接出現在家庭網路中。因為這台機器有 10GbE 網路埠,即使多個虛擬機同時承載網路流量,也不太容易在物理層形成瓶頸。
整體架構
目前 Mac mini 上主要運行三台虛擬機:
| 虛擬機 | 用途 |
|---|---|
| Home Assistant OS | 接入智慧家庭設備,並透過 HomeKit 暴露非認證產品 |
| OpenWrt | 作為 LAN 的代理 gateway 和 DNS |
| Ubuntu 24.04.3 LTS Minimal | 運行 Docker 與邊緣服務 |
另外,macOS 本身還運行 Tailscale app,並設定為 exit node。這樣我在外出時,可以讓 MacBook 透過家中的網路出口連線,同時也能訪問本地服務。
虛擬機分工
Home Assistant OS
Home Assistant OS 負責智慧家庭設備的整合。它可以把一些非 HomeKit 認證的設備接入 HomeKit,也可以作為家庭自動化的控制中心。
我同時使用 cloudflared add-on 將 Home Assistant 的控制面板透過隧道暴露到公網,方便在外部遠程訪問。
OpenWrt
OpenWrt 是這套架構裡的核心網路角色。它作為 LAN 的「代理 gateway」,由 router 透過 DHCP 下發給普通家庭設備。
也就是說,普通設備接入家庭網路後,預設 gateway 和 DNS 都會指向這台 OpenWrt 虛擬機。
但 IoT 設備不走這條路。它們接入獨立的 iot_lan 介面,gateway 仍然是 router 自己。這樣可以避免 IoT 設備直接接入完整的家庭 LAN,也不讓它們經過代理 gateway。
Ubuntu
Ubuntu 24.04.3 LTS Minimal 用來運行 Docker 和一些邊緣服務,例如 dashboard、qBittorrent 等。
其中 qBittorrent 比較特殊。它不能走 OpenWrt 這個代理 gateway,否則可能影響連通性。所以我給它單獨配置了 ipvlan Docker 網路,讓它的 gateway 指向 router。
網路拓撲
router 上有兩個主要介面:
| 介面 | IP | 用途 |
|---|---|---|
lan |
192.168.10.1 | 普通家庭設備 |
iot_lan |
192.168.101.1 | IoT 設備 |
lan 介面
lan 是普通設備使用的網路。預設 Wi-Fi 和有線接入的設備都會進入這個介面。
- gateway 指向 OpenWrt。
- DNS 指向 OpenWrt。
- 可以訪問 LAN 區域。
- 網段為 192.168.10.0/24。
iot_lan 介面
iot_lan 是專門給 IoT 設備使用的網路。wireless 中有一個獨立的 2.4 GHz Wi-Fi,只綁定到這個介面。
- gateway 指向 router 自己,也就是 192.168.101.1。
- DNS 由 router 處理。
- 禁止訪問 LAN 區域。
- 網段為 192.168.101.0/24。
幾個 macOS 設定
因為這台 Mac mini 是長時間運行的伺服器,所以 macOS 上有幾個設定需要調整:
- 開啟 Content Caching,讓它作為本地網路的 Apple 內容快取伺服器。
- 開啟 Automatically log in,斷電恢復後可以自動進入系統。
- 將自動關閉顯示器和睡眠相關設定關閉,避免伺服器進入休眠。
使用感受
UTM 的虛擬化足夠穩定,Mac mini 本身也足夠安靜、省電。Home Assistant、OpenWrt 和 Ubuntu 分別承擔不同角色,讓服務之間的邊界很清晰。
這樣確保了單一服務出問題時,不會拖垮整個家庭網路。比如某個 Docker container 壞了,不會影響上網;Home Assistant 出問題,也不會影響 OpenWrt gateway;IoT 設備則被獨立隔離在自己的網段裡,即使固件存在漏洞也不會威脅到其他裝置。
對我來說,Mac mini 很適合作為家庭伺服器。它不像傳統伺服器那樣吵,也不需要太多維護,同時又有足夠好的性能和網路能力。