程序员Benothing头像

Linux网络配置实战:ip、nmcli、netplan、ifcfg命令

「服务器换机房了,网卡要改成静态 IP」「虚拟机克隆后默认路由不见了」——网络配置是运维最基础也最容易翻车的操作。麻烦在于 Linux 没有统一的配置方式:ip 命令即时生效但重启就丢;netplan、ifcfg、nmcli 各管一派,发行版之间还不一样。这一篇把四种主流方式讲清楚,并给出 Ubuntu 与 CentOS/Rocky 的完整静态 IP 配置示例。

一、四种配置方式概览

先建立全景,知道每种方式何时用:

方式持久化发行版特点
ip否(重启丢失)通用临时调试、快速生效
nmcli是通用(有 NM)命令行管理 NetworkManager
netplan是Ubuntu 18.04+YAML 配置,底层调 NM 或 systemd-networkd
ifcfg是CentOS/RHEL 传统文本文件 + systemctl restart network

选择建议:临时改动用 ip;Ubuntu 用 netplan;CentOS/Rocky 用 nmcli 或 ifcfg;桌面/有 NetworkManager 的一律 nmcli 最顺手。

二、ip 命令:即时的临时配置

ip 属于 iproute2,改完立即生效,但重启或网络服务重载后丢失。适合排障时临时验证。

添加/删除 IP

# 给 eth0 加一个 IP
sudo ip addr add 192.168.1.100/24 dev eth0

# 删除
sudo ip addr del 192.168.1.100/24 dev eth0

# 查看
ip addr show eth0

启用/禁用网卡

sudo ip link set eth0 up
sudo ip link set eth0 down

临时改网关和路由

# 添加默认网关
sudo ip route add default via 192.168.1.1 dev eth0

# 删除默认网关
sudo ip route del default

# 添加静态路由(去 10.10.0.0/16 走 192.168.1.2)
sudo ip route add 10.10.0.0/16 via 192.168.1.2

⚠️ ip 命令的「即时性」陷阱

sudo ip addr add 192.168.1.100/24 dev eth0
# 重启网络服务后,这个 IP 就没了

想持久化必须写进配置文件。ip 只适合「先加上试试,通了再固化」。

三、nmcli:NetworkManager 命令行

现代发行版(Ubuntu Desktop/Server、CentOS 8+/Rocky)大多用 NetworkManager(NM) 管理网络。nmcli 是它的命令行前端,配置会持久保存到 /etc/NetworkManager/system-connections/。

查看连接

nmcli connection show
NAME    UUID                                  TYPE      DEVICE
eth0    3f8b...                                ethernet  eth0

NAME 是连接名(不一定等于网卡名),后续操作都用它或 UUID。

查看设备状态

nmcli device status
DEVICE  TYPE      STATE      CONNECTION
eth0    ethernet  connected  eth0
lo      loopback  unmanaged  --

配置静态 IP

sudo nmcli connection modify eth0 \
  ipv4.method manual \
  ipv4.addresses 192.168.1.100/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns "223.5.5.5 8.8.8.8"

# 重新激活连接使配置生效
sudo nmcli connection up eth0

配置 DHCP(自动获取)

sudo nmcli connection modify eth0 ipv4.method auto
sudo nmcli connection up eth0

新增一个连接

sudo nmcli connection add type ethernet con-name static-eth0 ifname eth0 \
  ipv4.method manual \
  ipv4.addresses 192.168.1.100/24 \
  ipv4.gateway 192.168.1.1

其他常用操作

nmcli connection show eth0            # 看某连接的详细配置
nmcli device connect eth0             # 连接设备
nmcli device disconnect eth0          # 断开
nmcli general status                  # 总体状态

nmcli 的优点是改完自动持久化,不用记文件格式,是 CentOS/Rocky 8+ 的推荐方式。

四、netplan:Ubuntu 的新方式

Ubuntu 17.10 起引入 netplan,用 YAML 描述网络,底层渲染成 NetworkManager 或 systemd-networkd 的配置。配置文件在 /etc/netplan/。

查看现有配置

ls /etc/netplan/
cat /etc/netplan/01-netcfg.yaml

配置静态 IP(systemd-networkd 后端)

sudo vim /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5, 8.8.8.8]

应用配置

sudo netplan apply

配置 DHCP

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes

⚠️ netplan 的两个大坑

  1. YAML 缩进必须用空格,不能用 Tab。缩进错了 netplan apply 会报解析错误。
  2. netplan try 是安全网:
sudo netplan try

它应用配置后等待确认,如果断网了(比如你远程改错了),120 秒后自动回滚。远程改网络配置务必用 netplan try,别用 apply 直接梭哈。

新旧配置文件名规律

  • 文件按名字字典序加载,数字前缀控制优先级
  • 01-、50-、99- 等,后面的覆盖前面的同名设置

五、ifcfg:CentOS/RHEL 传统方式

老牌 RHEL/CentOS 7 及之前的配置方式,文件在 /etc/sysconfig/network-scripts/,文件名 ifcfg-<网卡名>。

配置静态 IP

sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=223.5.5.5
DNS2=8.8.8.8

关键字段:

字段说明
BOOTPROTOstatic / dhcp / none
ONBOOT开机是否启用,必须是 yes
IPADDR / PREFIXIP 和掩码位数
GATEWAY默认网关
DNS1 / DNS2DNS

应用配置

# CentOS 7
sudo systemctl restart network

# CentOS 8+/Rocky(network 服务被 NM 取代)
sudo nmcli connection reload
sudo nmcli connection up eth0
# 或
sudo systemctl restart NetworkManager

⚠️ CentOS 8+ 的 ifcfg 兼容性

CentOS 8+ 默认只有 NetworkManager,systemctl restart network 已不存在。此时 ifcfg 文件仍能被 NM 读取(通过 ifcfg-rh 插件),但推荐改用 nmcli。改完 ifcfg 后要 nmcli connection reload 让 NM 重新读取。

六、完整示例:给 Ubuntu Server 配静态 IP

结合典型场景,走一遍完整流程:

# 1. 先看当前网卡名和状态
ip -br addr
# eth0  UP  192.168.1.50/24

# 2. 备份原配置
sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak

# 3. 编辑配置
sudo vim /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.1.100/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5, 8.8.8.8]
# 4. 用 try 应用(有回滚保护)
sudo netplan try

# 5. 验证
ip addr show eth0
ip route show default
ping -c 2 223.5.5.5

七、⚠️ 常见错误

  1. ip addr add 后以为改好了。它不持久,重启就丢。要写进 netplan/nmcli/ifcfg。
  2. 远程改网络用 netplan apply。配错直接断连,进不去机器。永远用 netplan try。
  3. 改完不激活连接。nmcli connection modify 后忘了 up,配置没生效。
  4. YAML 用 Tab 缩进。netplan 只认空格,报错难查。
  5. 网卡名写错。eth0 vs ens33 vs enp0s3,现代系统网卡名可预测化,先 ip -br addr 确认。
  6. ONBOOT=no 导致开机没网。ifcfg 里这个字段忘了改 yes,重启后网卡不启动。
  7. 多网卡只配了一个网关。两个网卡都写 GATEWAY 会冲突,应只在一个网卡配默认网关,另一个用静态路由。
  8. 改了 DNS 不重载。resolv.conf 被 NM 管理时,得通过 nmcli 改 DNS,直接改文件会被覆盖。

八、原理探究:网络配置的持久化机制

为什么 ip 改了不持久,netplan 改了持久?理解这套机制,就不会再困惑。

三条技术路线

传统:/etc/sysconfig/network-scripts/ifcfg-* + network 服务
         ↓(CentOS 7 及之前)
NetworkManager:/etc/NetworkManager/system-connections/*  + nmcli
         ↓(现代发行版)
systemd-networkd:.network 文件
         ↓
netplan:/etc/netplan/*.yaml(渲染到上面之一)
  • ip 命令:直接改内核里的网络配置对象,内核不落盘,重启即失。
  • 配置文件方式:把配置写在磁盘上,开机时由对应的服务读取、翻译成 ip 命令再执行,所以持久。

netplan 的「渲染」

netplan 本身不是网络管理程序,它只是个「配置翻译器」:

# 看 netplan 渲染出的底层配置
ls /run/systemd/network/      # renderer: networkd 时
ls /run/NetworkManager/system-connections/   # renderer: NetworkManager 时

你在 YAML 里写一次,netplan apply 会把它翻译成 systemd-networkd 或 NM 能懂的格式。这就是为什么改 netplan 后,可以用 networkctl 或 nmcli 查看结果。

为什么推荐 netplan try

netplan try 的机制:

  1. 应用新配置,启动一个 120 秒倒计时。
  2. 期间如果你确认没问题,按 Enter 固化。
  3. 如果你因为断网没法确认,倒计时结束自动回滚到上一个可用配置。

这是防止「远程配错网络把自己锁在门外」的安全设计,改网络配置的标准姿势。

一个判断口诀

  • 临时、紧急 → ip
  • Ubuntu 持久 → netplan(用 try)
  • CentOS/Rocky 持久 → nmcli(或 ifcfg + reload)
  • 改了没生效 → 检查:配置写对了吗?服务重载了吗?连接激活了吗?

九、网络配置速查表

# 临时配置(iproute2)
sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip route add default via 192.168.1.1

# NetworkManager(通用持久)
nmcli connection show
sudo nmcli connection modify eth0 ipv4.method manual \
  ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1
sudo nmcli connection up eth0

# netplan(Ubuntu 持久)
sudo vim /etc/netplan/*.yaml
sudo netplan try

# ifcfg(CentOS 传统)
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
sudo systemctl restart network   # 或 nmcli connection reload

# 验证
ip -br addr
ip route show default
ping -c2 223.5.5.5

一句话收尾:临时用 ip,持久分发行版——Ubuntu 认 netplan、CentOS 认 nmcli。改配置前先备份、远程操作用 try、改完必验证,网络配置就不会成为你的滑铁卢。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/m0_66083353/article/details/167921218

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--