群暉 DSM 7.3 Container Manager 多網卡與 Macvlan 設定

整理群暉 DSM 7.3 和 7.2 中,Container Manager 使用 Macvlan 綁定多網卡的方法,包括獨立實體網段 IP、多網路綁定、Compose 設定、Open vSwitch 啟用方式與常見避坑。

群暉 DSM 7.3 和 DSM 7.2 內建的 Container Manager,圖形介面預設主要支援基礎的 bridgehost 網路。如果 NAS 有多張網卡,例如 LAN1 接內網、LAN2 接獨立軟路由或另一個網段,而你希望某些容器固定走 LAN2,或直接在 LAN2 網段取得一個獨立 IP,就需要借助 Docker 的 macvlan 網路。

常見需求可以分成兩類:

  • 讓容器綁定某張實體網卡,並取得該網段的獨立 IP;
  • 讓容器同時接入預設 bridge 網路和指定網卡的 macvlan 網路。

下面以第二張網卡 ovs_eth1、LAN2 網段 192.168.2.0/24 為例說明。實際使用時,請依照自己的網段、閘道和網卡名稱修改命令。

先確認實體網卡名稱

先在 DSM 中啟用 SSH,然後登入群暉執行:

1
ifconfig

如果群暉已經啟用 Open vSwitch,網卡名稱通常會變成 ovs_eth0ovs_eth1 這類形式。安裝過 Virtual Machine Manager 的機器,多數會自動啟用 Open vSwitch。

如果沒有啟用 Open vSwitch,網卡名稱通常是 eth0eth1

假設要讓容器走第二張網卡,後面的範例統一使用 ovs_eth1。如果你的機器沒有啟用 Open vSwitch,就把命令裡的 ovs_eth1 改成實際看到的 eth1 或其他名稱。

場景一:容器使用指定網卡的獨立 IP

這是最常見的用法,適合 Pi-hole、AdGuard Home、下載器、閘道類服務等場景。目標是讓容器直接出現在 LAN2 網段裡,擁有一個類似實體裝置的 IP,而不是只藏在群暉預設 Docker 網段後面。

Container Manager 圖形介面不能直接建立 macvlan 網路,需要先透過 SSH 建立一次:

1
2
3
4
5
6
sudo docker network create -d macvlan \
  --subnet=192.168.2.0/24 \
  --gateway=192.168.2.1 \
  --ip-range=192.168.2.200/29 \
  -o parent=ovs_eth1 \
  custom_lan2_net

參數含義如下:

  • -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,點擊「管理」,在列表中勾選目標容器並儲存。這樣容器啟動後,內部通常會同時出現 eth0eth1 兩張虛擬網卡。

這個方法最適合偶爾設定一兩個容器,操作簡單,也不需要修改 Compose 檔案。

方法 B:用專案功能編寫 Docker Compose

如果你習慣使用 Container Manager 的「專案」功能,也可以直接在 docker-compose.yml 中宣告多個網路:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
version: '3.8'

services:
  my_node:
    image: nginx:latest
    container_name: multi_nic_container
    networks:
      default_bridge:
        ipv4_address: 172.20.0.10
      lan2_macvlan:
        ipv4_address: 192.168.2.205

networks:
  default_bridge:
    external: true
    name: bridge
  lan2_macvlan:
    external: true
    name: custom_lan2_net

這裡的 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.200192.168.2.207 分配給手機、電腦或其他裝置。

如果路由器不方便設定 DHCP 排除範圍,至少也要給容器使用一段不太可能被自動分配的高位位址,並做好記錄。

如何啟用 Open vSwitch

在 DSM 7.x 中,Open vSwitch 可以透過圖形介面啟用,不需要手動修改底層設定。最省心的方法是安裝群暉官方的 Virtual Machine Manager,因為虛擬機網路橋接依賴 Open vSwitch,安裝精靈會自動提示啟用。

操作步驟:

  1. 打開 DSM 的「套件中心」;
  2. 搜尋並安裝 Virtual Machine Manager
  3. 打開套件,按精靈提示啟用 Open vSwitch;
  4. 等待網路服務重新啟動。

如果不想安裝 VMM,也可以在控制台裡手動啟用:

  1. 打開「控制台」;
  2. 進入「網路」;
  3. 切到「網路介面」分頁;
  4. 點擊「管理」,選擇「Open vSwitch 設定」;
  5. 勾選「啟用 Open vSwitch」,然後套用。

套用後,群暉網卡會重新初始化,瀏覽器連線通常會短暫中斷幾秒。不要在 NAS 正在傳輸大型檔案或執行重要寫入任務時操作。

驗證 Open vSwitch 是否生效

圖形介面裡,可以回到「控制台 -> 網路 -> 網路介面」查看網卡狀態,管理選單裡也會顯示 Open vSwitch 相關設定。

命令列裡,可以再次執行:

1
ifconfig

或者:

1
ip addr

如果看到 ovs_eth0ovs_eth1 這類介面,說明 Open vSwitch 已經生效。之後建立 macvlan 網路時,-o parent= 後面就要填寫帶 ovs_ 前綴的介面名稱,例如:

1
-o parent=ovs_eth1

如果仍然寫成 eth1,Docker 容器可能無法透過預期的網卡連網。

設定前的檢查清單

實際動手前,建議先確認這幾件事:

  • 群暉一共有幾張實體網卡,哪些網口已經插線;
  • 每個網口分別接入哪個交換器、路由器或 VLAN;
  • 目標網卡在 DSM 中顯示為 ethX 還是 ovs_ethX
  • --subnet--gateway 是否屬於目標網卡所在網段;
  • --ip-range 是否已經從 DHCP 位址池中排除;
  • 容器是否需要被群暉宿主機存取,如果需要,最好同時加入 bridge 網路。

只要網卡名稱、網段和 IP 池沒有寫錯,DSM 7.3 的 Container Manager 完全可以配合 macvlan 實現多網卡容器部署。圖形介面負責日常管理,SSH 只需要用來建立底層網路,後續維護成本並不高。

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計