Return

Mac mini 作為我的家庭伺服器

我把一台 Mac mini 放在家裡 24/7 運行,作為家庭伺服器。

Edit
我目前在踐行「自託管伺服器去數據中心化」,家庭網路拓撲已更新。敬請期待後續的博文。

它透過 UTM 托管多台橋接模式的虛擬機,分別處理 Home AssistantOpenWrt gateway 和一些邊緣服務。

我為什麼選擇了它:

為什麼是 Mac mini

Mac mini 主要是因為它很適合長時間放在家裡運行:

我把 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 和一些邊緣服務,例如 dashboardqBittorrent 等。

其中 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 和有線接入的設備都會進入這個介面。

iot_lan 介面

iot_lan 是專門給 IoT 設備使用的網路。wireless 中有一個獨立的 2.4 GHz Wi-Fi,只綁定到這個介面。

幾個 macOS 設定

因為這台 Mac mini 是長時間運行的伺服器,所以 macOS 上有幾個設定需要調整:

使用感受

UTM 的虛擬化足夠穩定,Mac mini 本身也足夠安靜、省電。Home AssistantOpenWrt Ubuntu 分別承擔不同角色,讓服務之間的邊界很清晰。

這樣確保了單一服務出問題時,不會拖垮整個家庭網路。比如某個 Docker container 壞了,不會影響上網;Home Assistant 出問題,也不會影響 OpenWrt gatewayIoT 設備則被獨立隔離在自己的網段裡,即使固件存在漏洞也不會威脅到其他裝置。

對我來說,Mac mini 很適合作為家庭伺服器。它不像傳統伺服器那樣吵,也不需要太多維護,同時又有足夠好的性能和網路能力。