Ubuntu 22.04 靜態 IP 設定

Ubuntu 22.04 Static IP Setting

前言

在 Linux 伺服器環境中,設定靜態 IP 位址是一項基本且重要的配置工作。與動態 IP(DHCP)相比,靜態 IP 具有以下優勢:

  • 穩定性:IP 位址固定不變,不會因為 DHCP 租約到期而改變
  • 可預測性:方便防火牆規則設定、DNS 記錄配置和服務存取
  • 伺服器必備:對於 Web 伺服器、資料庫伺服器等需要對外提供服務的主機,靜態 IP 是基本需求
  • 網路管理:便於網路管理員追蹤和管理網路設備

本文將詳細說明如何在 Ubuntu 22.04 上使用 Netplan 設定靜態 IP 位址。

Netplan 簡介

Netplan 是 Ubuntu 17.10 之後引入的網路配置工具,它使用 YAML 格式的設定檔來描述網路配置。Netplan 會讀取 /etc/netplan/ 目錄下的 YAML 設定檔,並將配置轉換為底層網路管理程式(如 systemd-networkd 或 NetworkManager)能夠理解的格式。

Netplan 的運作方式

1
YAML 設定檔 → Netplan → systemd-networkd 或 NetworkManager → 網路介面

設定檔位置

Netplan 的設定檔通常位於 /etc/netplan/ 目錄下,常見的檔名包括:

  • 00-installer-config.yaml(系統安裝時產生)
  • 01-network-manager-all.yaml
  • 01-netcfg.yaml
  • 50-cloud-init.yaml(雲端環境)

基本靜態 IP 設定

步驟一:確認網路介面名稱

首先,使用以下指令確認您的網路介面名稱:

1
ip link show

或者使用:

1
ip addr

常見的網路介面名稱包括:eth0ens3ens33enp0s3 等。

步驟二:編輯 Netplan 設定檔

使用您偏好的文字編輯器開啟設定檔:

1
sudo nano /etc/netplan/01-network-manager-all.yaml

步驟三:設定靜態 IP

將設定檔修改為以下內容(請根據您的網路環境調整):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: no
      addresses:
        - 192.168.121.221/24
      routes:
        - to: default
          via: 192.168.121.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1

注意gateway4 參數在較新版本的 Netplan 中已被棄用,建議使用 routes 來設定預設閘道。

設定參數說明

參數說明
version: 2Netplan 設定檔格式版本
renderer: networkd使用 systemd-networkd 作為後端渲染器,另一選項為 NetworkManager
ethernets有線網路介面設定區塊
ens3網路介面名稱(請依實際情況調整)
dhcp4: no停用 IPv4 DHCP
addresses設定靜態 IP 位址,需包含子網路遮罩(CIDR 格式)
routes路由設定,包含預設閘道
to: default表示預設路由(0.0.0.0/0)
via指定閘道 IP 位址
nameserversDNS 伺服器設定

子網路遮罩對照表

CIDR子網路遮罩可用主機數
/8255.0.0.016,777,214
/16255.255.0.065,534
/24255.255.255.0254
/25255.255.255.128126
/26255.255.255.19262
/27255.255.255.22430
/28255.255.255.24014
/29255.255.255.2486
/30255.255.255.2522

IPv6 設定

如果您的網路環境支援 IPv6,可以同時設定 IPv4 和 IPv6 位址:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: no
      dhcp6: no
      addresses:
        - 192.168.121.221/24
        - 2001:db8::1/64
      routes:
        - to: default
          via: 192.168.121.1
        - to: ::/0
          via: 2001:db8::ffff
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1
          - 2001:4860:4860::8888
          - 2001:4860:4860::8844

IPv6 參數說明

參數說明
dhcp6: no停用 IPv6 DHCP
2001:db8::1/64IPv6 位址與前綴長度
::/0IPv6 預設路由
2001:4860:4860::8888Google 的公共 IPv6 DNS 伺服器

設定多個 IP 位址

在某些情況下,您可能需要在同一個網路介面上設定多個 IP 位址,例如:

  • 虛擬主機(Virtual Hosting)
  • 負載平衡
  • 服務分離

單一介面多 IP 設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: no
      addresses:
        - 192.168.121.221/24
        - 192.168.121.222/24
        - 192.168.121.223/24
        - 10.0.0.100/8
      routes:
        - to: default
          via: 192.168.121.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1

多網路介面設定

如果伺服器有多個網路介面:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: no
      addresses:
        - 192.168.121.221/24
      routes:
        - to: default
          via: 192.168.121.1
      nameservers:
        addresses:
          - 8.8.8.8
    ens4:
      dhcp4: no
      addresses:
        - 10.0.0.100/24
      routes:
        - to: 10.10.0.0/16
          via: 10.0.0.1

套用設定

方法一:使用 netplan apply(推薦)

編輯完成後,使用以下指令套用設定:

1
sudo netplan apply

方法二:使用 netplan try(安全模式)

如果您擔心設定錯誤導致網路中斷,可以使用 try 指令:

1
sudo netplan try

此指令會套用設定並等待 120 秒,如果您沒有按下 Enter 確認,設定會自動回滾。這對於遠端操作非常有用。

方法三:先測試後套用

在套用之前,先檢查設定檔語法是否正確:

1
sudo netplan generate

如果沒有輸出任何錯誤訊息,表示語法正確。

驗證設定

套用設定後,使用以下指令驗證:

檢查 IP 位址

1
ip addr show ens3

檢查路由表

1
ip route show

測試網路連線

1
ping -c 4 8.8.8.8

測試 DNS 解析

1
nslookup google.com

1
dig google.com

檢查 DNS 設定

1
resolvectl status

故障排除

問題一:netplan apply 報錯

錯誤訊息範例:

1
Error in network definition: unknown key 'gateway4'

解決方案:

較新版本的 Netplan 已棄用 gateway4 參數,請改用 routes 設定:

1
2
3
routes:
  - to: default
    via: 192.168.121.1

問題二:YAML 語法錯誤

錯誤訊息範例:

1
Error in network definition: expected mapping

解決方案:

YAML 對縮排非常敏感,請確保:

  • 使用空格而非 Tab 進行縮排
  • 縮排一致(建議使用 2 個空格)
  • 冒號後面要有空格

可以使用線上 YAML 驗證工具檢查語法。

問題三:網路介面名稱錯誤

症狀: 設定套用後網路仍然無法連線

解決方案:

確認網路介面名稱是否正確:

1
ip link show

問題四:DNS 無法解析

症狀: 可以 ping IP 位址但無法解析域名

解決方案:

  1. 檢查 DNS 設定:

    1
    
    resolvectl status
    
  2. 確認 /etc/resolv.conf 內容:

    1
    
    cat /etc/resolv.conf
    
  3. 嘗試手動指定 DNS 測試:

    1
    
    nslookup google.com 8.8.8.8
    

問題五:設定後無法連線到伺服器

預防措施:

  1. 使用 sudo netplan try 而非 sudo netplan apply
  2. 確保有其他連線方式(如 console、IPMI、雲端平台主控台)
  3. 在設定前記錄原有配置

緊急恢復:

如果完全無法連線,可透過主控台還原設定:

1
2
# 還原為 DHCP
sudo nano /etc/netplan/01-network-manager-all.yaml
1
2
3
4
5
6
network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: yes
1
sudo netplan apply

問題六:重開機後設定遺失

症狀: 設定在重開機後恢復為 DHCP

可能原因:

  1. Cloud-init 覆蓋設定(雲端環境)
  2. NetworkManager 覆蓋設定

解決方案:

對於雲端環境,停用 cloud-init 的網路配置:

1
sudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

加入以下內容:

1
network: {config: disabled}

進階設定

MTU 設定

1
2
3
4
5
6
7
8
network:
  version: 2
  ethernets:
    ens3:
      dhcp4: no
      mtu: 9000
      addresses:
        - 192.168.121.221/24

Wake-on-LAN 設定

1
2
3
4
5
6
7
8
network:
  version: 2
  ethernets:
    ens3:
      dhcp4: no
      wakeonlan: true
      addresses:
        - 192.168.121.221/24

MAC 位址設定

1
2
3
4
5
6
7
8
network:
  version: 2
  ethernets:
    ens3:
      dhcp4: no
      macaddress: "00:11:22:33:44:55"
      addresses:
        - 192.168.121.221/24

總結

本文詳細介紹了如何在 Ubuntu 22.04 上使用 Netplan 設定靜態 IP 位址。重點包括:

  1. 使用 YAML 格式編寫 Netplan 設定檔
  2. 設定 IPv4 和 IPv6 位址
  3. 配置多個 IP 位址
  4. 使用 netplan try 安全地測試設定
  5. 常見問題的故障排除方法

建議在進行網路設定變更前,務必確保有備用的連線方式,並使用 netplan try 來測試設定,以避免因設定錯誤而失去對伺服器的存取權限。

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy