萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 靜態 IP 配置完整指南:nmcli、Netplan、ifcfg、systemd-networkd 四大方式

現代 Linux 網路配置工具鏈

不同發行版、不同場景採用不同網路管理後端。掌握主流四種方式,覆蓋 99% 生產環境。

一、NetworkManager + nmcli (RHEL/CentOS/Fedora/Rocky/Alma, Ubuntu Desktop)

命令列模式 (推薦腳本化)

# 1. 查看連線設定檔
nmcli con show

# 2. 新增/修改乙太網路連線為靜態 IP
nmcli con add type ethernet con-name "eth0-static" ifname eth0 \
    ipv4.method manual \
    ipv4.addresses 192.168.1.100/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns "192.168.1.1 8.8.8.8" \
    ipv4.dns-search "example.com" \
    connection.autoconnect yes

# 3. 或修改現有連線
nmcli con mod "Wired connection 1" \
    ipv4.method manual \
    ipv4.addresses 192.168.1.100/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns "1.1.1.1 8.8.8.8"

# 4. 啟用連線
nmcli con up "eth0-static"

# 5. 驗證
ip a show eth0
ip route
cat /etc/resolv.conf

圖形/文字介面

  • nmtui:文字模式選單,適合無圖形環境。
  • GNOME/KDE 控制中心:圖形化編輯。

關鍵文件

/etc/NetworkManager/system-connections/eth0-static.nmconnection (600 權限,含密碼明文)。

二、Netplan (Ubuntu 17.10+ Server/Desktop, 官方標準)

配置文件 /etc/netplan/01-netcfg.yaml (YAML 縮排嚴格!)

network:
  version: 2
  renderer: networkd   # 或 NetworkManager
  ethernets:
    eth0:
      dhcp4: false
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
        search: [example.com]
      # 可選:MTU、啟用 IPv6、VLAN、橋接、綁定
      # mtu: 9000
      # dhcp6: false
      # addresses: [2001:db8::1/64]

應用與驗證

netplan generate      # 生成後端配置 (驗證語法)
netplan apply         # 套用配置
networkctl status eth0
resolvectl status eth0

注意:Netplan 只是前端,實際後端由 renderer 指定 (systemd-networkd 或 NetworkManager)。

三、傳統 ifcfg 檔案 (RHEL 7/8/9, CentOS 7, 舊版 Fedora — 不使用 NetworkManager 時)

文件 /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=1.1.1.1
DNS2=8.8.8.8
DOMAIN=example.com
# 可選
# IPV6INIT=no
# MTU=9000
# NM_CONTROLLED=no   # 關鍵:告訴 NetworkManager 不管這張卡

重啟網路服務

systemctl restart network
# 或
ifdown eth0 && ifup eth0

警告:RHEL 8+ 預設使用 NetworkManager,network.service 已棄用。建議遷移至 nmcli/Netplan。

四、systemd-networkd (純 systemd 環境、Arch、CoreOS、Container、嵌入式)

1. 連結文件 /etc/systemd/network/10-eth0.link (可選,命名規則)

[Match]
MACAddress=00:11:22:33:44:55

[Link]
Name=eth0

2. 網路配置 /etc/systemd/network/20-eth0.network

[Match]
Name=eth0

[Network]
DHCP=no
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=1.1.1.1
DNS=8.8.8.8
Domains=example.com
# 可選
# IPv6AcceptRA=no
# LinkLocalAddressing=no
# MTUBytes=9000

3. 啟用並重啟

systemctl enable --now systemd-networkd systemd-resolved
networkctl reload
networkctl status eth0
resolvectl status eth0

優點:極簡、無額外依賴、systemd 原生整合、容器友好。

五、通用驗證與故障排查清單

  1. ip a:確認 IP 已綁定介面。
  2. ip route:確認預設閘道 (default via)。
  3. ping -c 3 192.168.1.1:閘道可達。
  4. ping -c 3 8.8.8.8:外網可達。
  5. dig example.com / nslookup example.com:DNS 解析正常。
  6. cat /etc/resolv.conf:檢查 nameserver (systemd-resolved 通常指向 127.0.0.53)。
  7. ss -tulpn | grep :22:SSH 端口監聽正常。
  8. firewall-cmd --list-all / ufw status / nft list ruleset:防火牆允許 SSH/HTTP/HTTPS。

六、雲端/虛擬機特殊場景

  • AWS EC2:使用 cloud-init 透過 User Data 注入網路配置,或彈性 IP 綁定。
  • OpenStack:DHCP 由 Neutron 分配,靜態 IP 需建立 Port 指定 fixed_ips。
  • Kubernetes Pod:不直接配置節點 IP,使用 Service/Ingress/LoadBalancer 暴露服務。
  • 裸機 PXE 安裝:DHCP + TFTP + Kickstart/Ignition/Autoyast 自動化安裝含網路配置。

選擇適合你發行版與管理模式的方式,並將配置納入版本控制 (GitOps/Ansible),才是基礎設施即代碼 (IaC) 的正確姿勢。

copyright © 萬盛學電腦網 all rights reserved