三大網絡管理體系對比
| 管理工具 | 適用發行版 | 配置文件位置 | 特點 |
| NetworkManager (nmcli) | RHEL 7+/CentOS 7+/Fedora/Ubuntu Desktop | /etc/NetworkManager/system-connections/ | 動態管理、支援 GUI/TUI/CLI、熱插拔 |
| Netplan | Ubuntu 18.04+/20.04+ Server | /etc/netplan/*.yaml | 聲明式 YAML、統一抽象層、systemd-networkd/NetworkManager 後端 |
| 傳統 network-scripts | RHEL 6/CentOS 6、舊版 Debian | /etc/sysconfig/network-scripts/ifcfg-* | 傳統 ifcfg 格式、systemd-networkd 兼容 |
方式一:nmcli(推薦,通用性最強)
查看當前連接
nmcli con show
nmcli device status
修改靜態 IP
# 修改現有連接
nmcli con mod "Wired connection 1" \
ipv4.addresses 192.168.10.100/24 \
ipv4.gateway 192.168.10.1 \
ipv4.dns "8.8.8.8,1.1.1.1" \
ipv4.method manual \
connection.autoconnect yes
# 或新建連接
nmcli con add type ethernet con-name eth0-static ifname eth0 \
ipv4.addresses 192.168.10.100/24 \
ipv4.gateway 192.168.10.1 \
ipv4.dns "8.8.8.8,1.1.1.1" \
ipv4.method manual
生效與驗證
nmcli con up "Wired connection 1"
nmcli device reapply eth0
ip addr show eth0
ping -c 3 8.8.8.8
TUI 圖形配置(無需記憶參數)
nmtui
# 選擇 "Edit a connection" → 選擇介面 → 設置 IPv4 Manual → 填寫 IP/網關/DNS → OK → Activate
方式二:Netplan (Ubuntu Server 18.04+)
配置文件範例
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.10.100/24
routes:
- to: default
via: 192.168.10.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
search: [corp.local, example.com]
# 多 IP 配置
eth0:
addresses:
- 192.168.10.100/24
- 10.0.0.5/24
routes:
- to: default
via: 192.168.10.1
- to: 10.0.0.0/8
via: 10.0.0.1
生效與驗證
# 語法檢查
netplan generate
# 應用(試運行)
netplan try
# 正式應用
netplan apply
# 查看生效狀態
ip addr show
networkctl status
方式三:傳統 ifcfg 腳本 (RHEL 7/8 兼容)
配置文件
# /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none # none=靜態,dhcp=動態
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
DEVICE=eth0
ONBOOT=yes
AUTOCONNECT_PRIORITY=1
IPADDR=192.168.10.100
PREFIX=24
GATEWAY=192.168.10.1
DNS1=8.8.8.8
DNS2=1.1.1.1
DOMAIN=corp.local
生效
# 重啟網絡服務
systemctl restart NetworkManager
# 或
nmcli con reload
nmcli con up eth0
臨時修改(重啟失效,應急測試用)
# ip 命令(iproute2,現代標準)
ip addr add 192.168.10.100/24 dev eth0
ip route add default via 192.168.10.1 dev eth0
ip addr del 192.168.10.100/24 dev eth0
# ifconfig(舊工具,net-tools)
ifconfig eth0 192.168.10.100 netmask 255.255.255.0
route add default gw 192.168.10.1 eth0
多 IP/虛擬 IP 配置
nmcli
# 添加第二個 IP
nmcli con mod "Wired connection 1" +ipv4.addresses 192.168.10.101/24
nmcli con up "Wired connection 1"
Netplan
addresses:
- 192.168.10.100/24
- 192.168.10.101/24
傳統別名介面(不推薦,iproute2 原生支援多 IP)
# /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=none
IPADDR=192.168.10.101
PREFIX=24
ONBOOT=yes
IPv6 配置要點
# nmcli
nmcli con mod eth0 ipv6.addresses "2001:db8::100/64"
nmcli con mod eth0 ipv6.gateway "2001:db8::1"
nmcli con mod eth0 ipv6.method manual
# Netplan
addresses:
- 2001:db8::100/64
routes:
- to: default
via: 2001:db8::1
驗證與除錯清單
# 1. 確認 IP 生效
ip -br addr show
# 2. 確認路由
ip route show
# 3. 確認 DNS
resolvectl status
cat /etc/resolv.conf
# 4. 連通性測試
ping -c 3
ping -c 3 8.8.8.8
ping -c 3 example.com
# 5. 檢查防火牆
firewall-cmd --list-all
iptables -L -n -v
# 6. NetworkManager 日誌
journalctl -u NetworkManager -f
常見陷阱避坑
- 雙重管理衝突:同時啟用 NetworkManager 和 systemd-networkd 管理同一介面 → 禁用其一
- YAML 縮進錯誤:Netplan 極其敏感,只用空格,禁止 Tab
- BOOTPROTO=none vs static:RHEL 8+ 用
none,舊版用 static
- DNS 不生效:檢查
/etc/resolv.conf 是否為 systemd-resolved 符號鏈接
- 雲服務器元數據覆蓋:AWS/Azure/GCP 需配置雲初始化保留靜態 IP 或用雲控制台設置
總結建議
- **新部署首選 nmcli**:跨發行版、支援動態修改、TUI 友好
- **Ubuntu Server 必學 Netplan**:聲明式、版本控制友好、雲原生標準
- **維護舊系統**才用 ifcfg,新項目避免
- **永久修改配置文件 + 重載服務**,勿依賴臨時 ip/ifconfig 命令
- **變更前備份**,遠程操作預留回滾方案(如控制台訪問)