前言
在 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 的運作方式
| |
設定檔位置
Netplan 的設定檔通常位於 /etc/netplan/ 目錄下,常見的檔名包括:
00-installer-config.yaml(系統安裝時產生)01-network-manager-all.yaml01-netcfg.yaml50-cloud-init.yaml(雲端環境)
基本靜態 IP 設定
步驟一:確認網路介面名稱
首先,使用以下指令確認您的網路介面名稱:
| |
或者使用:
| |
常見的網路介面名稱包括:eth0、ens3、ens33、enp0s3 等。
步驟二:編輯 Netplan 設定檔
使用您偏好的文字編輯器開啟設定檔:
| |
步驟三:設定靜態 IP
將設定檔修改為以下內容(請根據您的網路環境調整):
| |
注意:
gateway4參數在較新版本的 Netplan 中已被棄用,建議使用routes來設定預設閘道。
設定參數說明
| 參數 | 說明 |
|---|---|
version: 2 | Netplan 設定檔格式版本 |
renderer: networkd | 使用 systemd-networkd 作為後端渲染器,另一選項為 NetworkManager |
ethernets | 有線網路介面設定區塊 |
ens3 | 網路介面名稱(請依實際情況調整) |
dhcp4: no | 停用 IPv4 DHCP |
addresses | 設定靜態 IP 位址,需包含子網路遮罩(CIDR 格式) |
routes | 路由設定,包含預設閘道 |
to: default | 表示預設路由(0.0.0.0/0) |
via | 指定閘道 IP 位址 |
nameservers | DNS 伺服器設定 |
子網路遮罩對照表
| CIDR | 子網路遮罩 | 可用主機數 |
|---|---|---|
| /8 | 255.0.0.0 | 16,777,214 |
| /16 | 255.255.0.0 | 65,534 |
| /24 | 255.255.255.0 | 254 |
| /25 | 255.255.255.128 | 126 |
| /26 | 255.255.255.192 | 62 |
| /27 | 255.255.255.224 | 30 |
| /28 | 255.255.255.240 | 14 |
| /29 | 255.255.255.248 | 6 |
| /30 | 255.255.255.252 | 2 |
IPv6 設定
如果您的網路環境支援 IPv6,可以同時設定 IPv4 和 IPv6 位址:
| |
IPv6 參數說明
| 參數 | 說明 |
|---|---|
dhcp6: no | 停用 IPv6 DHCP |
2001:db8::1/64 | IPv6 位址與前綴長度 |
::/0 | IPv6 預設路由 |
2001:4860:4860::8888 | Google 的公共 IPv6 DNS 伺服器 |
設定多個 IP 位址
在某些情況下,您可能需要在同一個網路介面上設定多個 IP 位址,例如:
- 虛擬主機(Virtual Hosting)
- 負載平衡
- 服務分離
單一介面多 IP 設定
| |
多網路介面設定
如果伺服器有多個網路介面:
| |
套用設定
方法一:使用 netplan apply(推薦)
編輯完成後,使用以下指令套用設定:
| |
方法二:使用 netplan try(安全模式)
如果您擔心設定錯誤導致網路中斷,可以使用 try 指令:
| |
此指令會套用設定並等待 120 秒,如果您沒有按下 Enter 確認,設定會自動回滾。這對於遠端操作非常有用。
方法三:先測試後套用
在套用之前,先檢查設定檔語法是否正確:
| |
如果沒有輸出任何錯誤訊息,表示語法正確。
驗證設定
套用設定後,使用以下指令驗證:
檢查 IP 位址
| |
檢查路由表
| |
測試網路連線
| |
測試 DNS 解析
| |
或
| |
檢查 DNS 設定
| |
故障排除
問題一:netplan apply 報錯
錯誤訊息範例:
| |
解決方案:
較新版本的 Netplan 已棄用 gateway4 參數,請改用 routes 設定:
| |
問題二:YAML 語法錯誤
錯誤訊息範例:
| |
解決方案:
YAML 對縮排非常敏感,請確保:
- 使用空格而非 Tab 進行縮排
- 縮排一致(建議使用 2 個空格)
- 冒號後面要有空格
可以使用線上 YAML 驗證工具檢查語法。
問題三:網路介面名稱錯誤
症狀: 設定套用後網路仍然無法連線
解決方案:
確認網路介面名稱是否正確:
| |
問題四:DNS 無法解析
症狀: 可以 ping IP 位址但無法解析域名
解決方案:
檢查 DNS 設定:
1resolvectl status確認
/etc/resolv.conf內容:1cat /etc/resolv.conf嘗試手動指定 DNS 測試:
1nslookup google.com 8.8.8.8
問題五:設定後無法連線到伺服器
預防措施:
- 使用
sudo netplan try而非sudo netplan apply - 確保有其他連線方式(如 console、IPMI、雲端平台主控台)
- 在設定前記錄原有配置
緊急恢復:
如果完全無法連線,可透過主控台還原設定:
| |
| |
| |
問題六:重開機後設定遺失
症狀: 設定在重開機後恢復為 DHCP
可能原因:
- Cloud-init 覆蓋設定(雲端環境)
- NetworkManager 覆蓋設定
解決方案:
對於雲端環境,停用 cloud-init 的網路配置:
| |
加入以下內容:
| |
進階設定
MTU 設定
| |
Wake-on-LAN 設定
| |
MAC 位址設定
| |
總結
本文詳細介紹了如何在 Ubuntu 22.04 上使用 Netplan 設定靜態 IP 位址。重點包括:
- 使用 YAML 格式編寫 Netplan 設定檔
- 設定 IPv4 和 IPv6 位址
- 配置多個 IP 位址
- 使用
netplan try安全地測試設定 - 常見問題的故障排除方法
建議在進行網路設定變更前,務必確保有備用的連線方式,並使用 netplan try 來測試設定,以避免因設定錯誤而失去對伺服器的存取權限。