群暉 DSM 7.3 和 DSM 7.2 內建的 Container Manager,圖形介面預設主要支援基礎的 bridge 和 host 網路。如果 NAS 有多張網卡,例如 LAN1 接內網、LAN2 接獨立軟路由或另一個網段,而你希望某些容器固定走 LAN2,或直接在 LAN2 網段取得一個獨立 IP,就需要借助 Docker 的 macvlan 網路。
常見需求可以分成兩類:
- 讓容器綁定某張實體網卡,並取得該網段的獨立 IP;
- 讓容器同時接入預設
bridge網路和指定網卡的macvlan網路。
下面以第二張網卡 ovs_eth1、LAN2 網段 192.168.2.0/24 為例說明。實際使用時,請依照自己的網段、閘道和網卡名稱修改命令。
先確認實體網卡名稱
先在 DSM 中啟用 SSH,然後登入群暉執行:
|
|
如果群暉已經啟用 Open vSwitch,網卡名稱通常會變成 ovs_eth0、ovs_eth1 這類形式。安裝過 Virtual Machine Manager 的機器,多數會自動啟用 Open vSwitch。
如果沒有啟用 Open vSwitch,網卡名稱通常是 eth0、eth1。
假設要讓容器走第二張網卡,後面的範例統一使用 ovs_eth1。如果你的機器沒有啟用 Open vSwitch,就把命令裡的 ovs_eth1 改成實際看到的 eth1 或其他名稱。
場景一:容器使用指定網卡的獨立 IP
這是最常見的用法,適合 Pi-hole、AdGuard Home、下載器、閘道類服務等場景。目標是讓容器直接出現在 LAN2 網段裡,擁有一個類似實體裝置的 IP,而不是只藏在群暉預設 Docker 網段後面。
Container Manager 圖形介面不能直接建立 macvlan 網路,需要先透過 SSH 建立一次:
|
|
參數含義如下:
-d macvlan:使用macvlan驅動;--subnet=192.168.2.0/24:LAN2 所在的完整網段;--gateway=192.168.2.1:LAN2 網段的閘道,一般是路由器 IP;--ip-range=192.168.2.200/29:限制 Docker 可分配的 IP 範圍,避免和手機、電腦、電視等裝置衝突;-o parent=ovs_eth1:指定綁定哪張實體網卡;custom_lan2_net:這個 Docker 網路的名稱。
建立完成後,打開 DSM 的 Container Manager,進入左側「網路」頁面,就能看到 custom_lan2_net。後續可以在圖形介面裡把既有容器加入這個網路,也可以在新建容器時選擇它,並給容器指定該網段內的固定 IP。
場景二:容器同時連接多個網路
有些容器需要同時出現在多個網路裡。例如它既要能被群暉宿主機透過預設 bridge 網段存取,又要在 LAN2 中擁有獨立實體網段 IP。此時可以讓容器同時擁有兩張虛擬網卡。
方法 A:在圖形介面追加網路
先按普通方式建立容器,並選擇一個主網路,例如預設的 bridge。容器建立完成後先不要啟動;如果已經啟動,先停止容器。
然後進入 Container Manager 的「網路」頁面,選中剛建立的 custom_lan2_net,點擊「管理」,在列表中勾選目標容器並儲存。這樣容器啟動後,內部通常會同時出現 eth0 和 eth1 兩張虛擬網卡。
這個方法最適合偶爾設定一兩個容器,操作簡單,也不需要修改 Compose 檔案。
方法 B:用專案功能編寫 Docker Compose
如果你習慣使用 Container Manager 的「專案」功能,也可以直接在 docker-compose.yml 中宣告多個網路:
|
|
這裡的 custom_lan2_net 是前面透過 SSH 建立好的 macvlan 網路。bridge 則引用群暉內建的 Docker 預設網路。
需要注意的是,範例中的 172.20.0.10 只有在你的預設橋接網路確實使用這個網段時才適用。一般群暉 Docker 預設 bridge 更常見的是 172.17.0.0/16,實際地址應以 docker network inspect bridge 的結果為準。
Macvlan 的宿主機互通問題
macvlan 有一個很容易踩坑的限制:Linux 核心預設不允許宿主機透過同一個 macvlan 介面直接存取容器。
也就是說,如果容器只加入 custom_lan2_net,群暉 DSM 本身可能無法透過 LAN2 的實體網段 IP 存取這個容器,容器也無法透過這個介面直接存取宿主機。
常見解法有兩種:
- 讓容器同時加入預設
bridge網路,群暉透過bridge分配的 Docker 內網位址存取它; - 在群暉上額外建立一個宿主機側的
macvlan子介面,讓宿主機也進入同一個macvlan通訊域。
第二種方式更接近網路工程設定,維護成本也更高。大多數家庭或小型辦公場景,用「bridge + macvlan 雙網路」會更省心。
IP 衝突要提前規避
使用 macvlan 時,容器 IP 會直接出現在實體區域網路裡,所以一定要避免和 DHCP 自動分配的位址池衝突。
建議在主路由裡把 Docker 專用位址段排除出去。例如你計畫把 192.168.2.200/29 分給 Docker,就不要讓路由器再把 192.168.2.200 到 192.168.2.207 分配給手機、電腦或其他裝置。
如果路由器不方便設定 DHCP 排除範圍,至少也要給容器使用一段不太可能被自動分配的高位位址,並做好記錄。
如何啟用 Open vSwitch
在 DSM 7.x 中,Open vSwitch 可以透過圖形介面啟用,不需要手動修改底層設定。最省心的方法是安裝群暉官方的 Virtual Machine Manager,因為虛擬機網路橋接依賴 Open vSwitch,安裝精靈會自動提示啟用。
操作步驟:
- 打開 DSM 的「套件中心」;
- 搜尋並安裝
Virtual Machine Manager; - 打開套件,按精靈提示啟用 Open vSwitch;
- 等待網路服務重新啟動。
如果不想安裝 VMM,也可以在控制台裡手動啟用:
- 打開「控制台」;
- 進入「網路」;
- 切到「網路介面」分頁;
- 點擊「管理」,選擇「Open vSwitch 設定」;
- 勾選「啟用 Open vSwitch」,然後套用。
套用後,群暉網卡會重新初始化,瀏覽器連線通常會短暫中斷幾秒。不要在 NAS 正在傳輸大型檔案或執行重要寫入任務時操作。
驗證 Open vSwitch 是否生效
圖形介面裡,可以回到「控制台 -> 網路 -> 網路介面」查看網卡狀態,管理選單裡也會顯示 Open vSwitch 相關設定。
命令列裡,可以再次執行:
|
|
或者:
|
|
如果看到 ovs_eth0、ovs_eth1 這類介面,說明 Open vSwitch 已經生效。之後建立 macvlan 網路時,-o parent= 後面就要填寫帶 ovs_ 前綴的介面名稱,例如:
|
|
如果仍然寫成 eth1,Docker 容器可能無法透過預期的網卡連網。
設定前的檢查清單
實際動手前,建議先確認這幾件事:
- 群暉一共有幾張實體網卡,哪些網口已經插線;
- 每個網口分別接入哪個交換器、路由器或 VLAN;
- 目標網卡在 DSM 中顯示為
ethX還是ovs_ethX; --subnet和--gateway是否屬於目標網卡所在網段;--ip-range是否已經從 DHCP 位址池中排除;- 容器是否需要被群暉宿主機存取,如果需要,最好同時加入
bridge網路。
只要網卡名稱、網段和 IP 池沒有寫錯,DSM 7.3 的 Container Manager 完全可以配合 macvlan 實現多網卡容器部署。圖形介面負責日常管理,SSH 只需要用來建立底層網路,後續維護成本並不高。