Ubuntu 中的 Netplan 活用指南|網路設定的基礎到進階

1. Ubuntu 中的 Netplan 概述

Netplan 是什麼?

Netplan 是 Ubuntu 17.10 及後續版本所採用的網路設定管理工具。過去使用 ifconfig/etc/network/interfaces,但 Netplan 提供了取代這些的新格式。Netplan 最大的特點是使用 YAML 檔案來描述網路設定。藉此,可以進行簡單且一致的設定,即使是複雜的網路構成也能輕鬆管理。

Netplan 支援 NetworkManagersystemd-networkd 等後端,並在 Ubuntu 的桌面版和伺服器版的兩者中皆可使用。藉此,即使在不同的環境中,也能以共通的方法管理網路。

為什麼應該使用 Netplan?

相較於傳統的網路設定方法,Netplan 提供了以下優點。

  1. 簡單的語法: YAML 格式直觀,結構明確。設定的視野良好,即使是初學者也能相對容易理解。
  2. 統一的管理: 因為可在桌面環境和伺服器環境的兩者中使用,因此能將不同的網路構成一元化管理。
  3. 動態變更: 只需編輯設定檔案並套用,即可在即時反映網路設定。

Netplan 的基本結構

Netplan 的設定檔案通常配置在 /etc/netplan/ 目錄中,副檔名為 .yaml。此檔案包含網路介面的設定、IP 位址、DNS 伺服器的資訊。

作為 Netplan 的基本設定範例,以下是類似這樣的 YAML 檔案。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true

在此範例中,enp3s0 這個乙太網路介面使用 DHCP 來取得 IP 位址的設定。

Ubuntu 18.04 LTS 及後續版本中 Netplan 的角色

在 Ubuntu 18.04 LTS 及後續版本中,Netplan 預設安裝,並廣泛用於伺服器環境或桌面環境的網路管理。特別是在伺服器環境中,常需設定多個網路介面或靜態 IP 位址,因此 Netplan 的便利性得以發揮。

接下來,將說明使用 Netplan 進行網路的具體設定方法。

2. Netplan 的基本設定方法

Netplan 的設定檔案位置

Netplan 的設定檔案通常儲存在 /etc/netplan/ 目錄中。透過編輯此目錄內的 .yaml 檔案,即可變更網路設定。例如,50-cloud-init.yaml 等檔案名稱很常見,但會因環境而異。

要開啟設定檔案,請使用以下方式,以 vinano 等文字編輯器。

sudo vi /etc/netplan/50-cloud-init.yaml

動態 IP 位址 (DHCP) 的設定

若使用 DHCP 自動取得 IP 位址,請使用以下 YAML 設定。此設定是最簡單的範例,可用於大多數家庭或辦公室環境。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true

靜態 IP 位址的設定

在某些環境中,需要為伺服器或特定裝置設定固定的 IP 位址。以下是設定靜態 IP 位址的範例。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

設定的套用

編輯設定檔案後,請使用以下指令套用 Netplan 的設定。

sudo netplan apply

設定的確認

要確認 Netplan 的設定是否正確套用,請使用以下指令檢查網路介面的狀態。

ip a

3. 多個網路介面的設定

多個乙太網路介面的設定

在擁有多个網路介面的伺服器或裝置中,可以對每個介面套用不同的 IP 位址或設定。以下的範例中,對兩個乙太網路介面分別進行不同的設定。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true
    enp4s0:
      addresses:
        - 192.168.1.150/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

透過綁定來設定冗餘性

將網路介面彙整成一個虛擬介面來運作的「bonding」,是確保冗餘性並提高可用性的有效手法。以下是將兩個乙太網路介面進行 bonding 並作為一個虛擬介面bond0來處理的範例。

network:
  version: 2
  renderer: networkd
  bonds:
    bond0:
      interfaces:
        - enp3s0
        - enp4s0
      addresses:
        - 192.168.1.200/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      parameters:
        mode: active-backup
        primary: enp3s0

Wi-Fi 連線的設定

在 Netplan 中,也可以設定 Wi-Fi 連線。以下範例顯示連接到特定 SSID 的 Wi-Fi 設定。

network:
  version: 2
  renderer: networkd
  wifis:
    wlp2s0:
      access-points:
        "my_wifi_network":
          password: "password1234"
      dhcp4: true

VLAN 的設定

在特定用途中,可能需要使用虛擬 LAN (VLAN) 來邏輯分割網路。在 Netplan 中,也可以設定 VLAN。以下是對enp3s0介面設定 VLAN 的範例。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true
  vlans:
    vlan10:
      id: 10
      link: enp3s0
      addresses:
        - 192.168.10.1/24

4. Netplan 的進階設定

靜態路由的設定

當網路透過多個路由器連接時,需要靜態路由。使用 Netplan 設定靜態路由,可以指定特定 IP 位址或網路的通訊路徑。以下是靜態路由的範例。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: 10.0.0.0/24
          via: 192.168.1.1

在這個設定中,enp3s0 介面透過預設閘道 192.168.1.1,指定了通往 10.0.0.0/24 網路的靜態路由通訊。藉此,可以為特定網路設定優先路由。

多個預設閘道的設定

在 Netplan 中,當存在多個網路介面時,可以為每個介面設定不同的預設閘道。這對於透過不同網路區段存取網際網路的環境很有用。以下是其設定範例。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
    enp4s0:
      addresses:
        - 10.0.0.100/24
      gateway4: 10.0.0.1

DNS 伺服器的設定

在 Netplan 中,靜態指定 DNS 伺服器的設定也很簡單。以下範例指定了 Google 的公用 DNS 伺服器(8.8.8.8 以及 8.8.4.4)。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

Bonding 的進階設定

除了前述的 bonding 設定之外,透過調整 bonding 的模式,可以實現不同的動作模式。例如,以下範例設定了輪詢方式的 bonding。

network:
  version: 2
  renderer: networkd
  bonds:
    bond0:
      interfaces:
        - enp3s0
        - enp4s0
      addresses:
        - 192.168.1.200/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      parameters:
        mode: balance-rr

balance-rr(輪詢)模式中,透過交替使用兩個介面來分散頻寬,從而提升效能。此外,還有用於故障轉移的 active-backup 模式,或進行負載平衡的 balance-tlb 模式等,可以依用途選擇模式。

VLAN 的進階設定

VLAN(虛擬區域網路)在大型網路中,用於邏輯分割物理網路。使用 Netplan 也可以設定 VLAN。以下範例設定了名為 vlan100 的 VLAN 介面。

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true
  vlans:
    vlan100:
      id: 100
      link: enp3s0
      addresses:
        - 192.168.100.1/24

在這個設定中,為 enp3s0 介面分配 VLAN ID 100,並設定靜態 IP 位址 192.168.100.1。藉此,可以虛擬分割網路,並將流量限制在特定網路區段。

5. Netplan 的疑難排解

Netplan 的設定非常方便,但由於設定錯誤或系統特性,可能會發生問題。本節將說明使用 Netplan 時常見的問題及其解決方法。透過此,您可以有效應對網路連線錯誤或設定錯誤。

常見的 Netplan 問題及其原因

1. 設定未套用

即使使用 Netplan 變更設定並執行指令,變更也可能未反映。可能原因如下。

  • YAML 檔案的縮排錯誤:YAML 格式對縮排非常嚴格。若有空格或 Tab 的錯誤,檔案無法正確解讀,設定也無法套用。請務必確認縮排是否一致。
  • 不適當的介面名稱:Netplan 需要指定網路介面的正確名稱。請執行 ip a 指令確認精確的介面名稱,並檢查設定檔案是否一致。

解決方法

  1. 儲存設定檔案後,執行 netplan apply 指令來套用設定。
  2. 若發生錯誤,請使用 sudo netplan try 指令測試變更是否可套用,並加以確認。此指令會在 5 分鐘內測試設定,若有問題則會自動復原。
sudo netplan apply
sudo netplan try

2. 網路連線錯誤

若網路無法連線,可能原因如下。

  • 閘道或 DNS 伺服器的設定錯誤:若預設閘道或 DNS 伺服器的設定錯誤,則無法連線至網際網路。請確認是否指定正確的 IP 位址,以及 DNS 伺服器是否適當。
  • 實體介面的故障:若纜線或硬體未正確連接,即使軟體設定正確,也無法連線。確認纜線及網路裝置的實體狀態也很重要。

解決方法

  1. 使用 ping 指令測試是否可連線至網路。例如,向 Google 的 DNS 伺服器(8.8.8.8)發送 ping 來確認連線狀態。
ping 8.8.8.8
  1. 若設定檔案有問題,請再次執行 netplan apply 來套用設定,並嘗試重新啟動網路。
sudo systemctl restart networkd

3. netplan apply 顯示錯誤訊息

執行 netplan apply 時,可能會顯示錯誤訊息。此問題可能是設定檔案內容不準確,或介面未正確辨識所致。

  • 錯誤訊息範例Error in network configuration: failed to bring up device enp3s0

此錯誤是因為指定的介面 enp3s0 未正確辨識所致。請執行 ip a 指令確認介面名稱是否正確。

解決方法

請仔細確認錯誤訊息,並重新檢查指定的介面或 IP 位址是否正確。此外,請檢視介面名稱或 YAML 格式是否有錯誤,檢查拼字及縮排。

確認記錄檔案

進行疑難排解時,確認系統記錄非常有用。與 Netplan 設定相關的錯誤訊息或警告,可使用 journalctl 指令來確認。

journalctl -u systemd-networkd

執行此指令即可顯示與網路服務相關的記錄。若發生錯誤,會顯示詳細訊息,您可以據此解決問題。

6. Netplan 的總結與後續步驟

透過使用 Netplan,我們了解到 Ubuntu 的網路設定可以非常簡單且有效地管理。在本節中,我們將總結之前的說明,並提出未來如何活用 Netplan,以及進一步學習的步驟。

Netplan 的主要優點

透過使用 Netplan,可以享受到比傳統方法更多的優點。

  1. YAML 格式的直觀設定:Netplan 採用簡單且視認性優異的 YAML 格式。因此,網路設定的描述變得容易,設定錯誤的發現也相對簡單。
  2. 靈活的網路構成:多個網路介面的設定、綁定、靜態路由、VLAN 的建置,都能以直觀的描述方式進行。藉此,即便複雜的網路構成也能輕鬆管理。
  3. 統一的介面:Netplan 相容 systemd-networkdNetworkManager 等不同的後端,不論桌面或伺服器環境,都能提供一致的網路管理。藉此,即便在不同環境中,也能以相同方式進行設定,從而提升管理的效率。
  4. 即時的設定變更:Netplan 的設定只需一個指令即可立即套用,因此能將網路的中斷時間降到最低,從而進行管理。

今後的活用方法

熟悉 Netplan 的基本設定後,建議挑戰更高階的網路構成。以下列出幾個作為下一步應學習的項目。

  1. 虛擬網路的建置:透過設定多個 VLAN,將實體網路虛擬分割,從而強化安全性與網路管理。虛擬網路的設定在大規模基礎設施或雲端環境中特別重要。
  2. IPv6 相容的設定:目前的網際網路協定 IPv4 面臨位址枯竭的問題。透過使用 Netplan 進行 IPv6 相容的網路設定,即能為未來的網路基礎設施做好準備。
  3. 自動化腳本的建立:將 Netplan 的設定腳本化,並推進網路構成的自動化,即能在大型網路環境中進行一括管理。與 Ansible 或 Puppet 等工具聯動,即能實現更有效的管理。
  4. 安全性的強化:為了提升使用 Netplan 的網路安全性,學習防火牆設定、存取限制、網路分離(網路分割)等技術非常重要。

進一步學習的資源

Netplan 的官方文件以及 Ubuntu 的網路相關技術資訊,是推進學習的有益資源。此外,論壇或技術部落格也值得參考。以下是可供參考的資源。

  • Netplan 官方文件:關於 Netplan 的詳細設定方法與選項,官方文件是最可靠的資訊來源。
  • Ubuntu Community Help Wiki:Ubuntu 社群提供的 Wiki 中,刊載了豐富的實際疑難排解與範例。
  • 技術論壇與部落格Ask UbuntuStack Overflow 等論壇,非常適合找出特定問題的解決方案。此外,技術部落格中介紹了 Netplan 的活用範例與最新資訊。