Linux 修改网卡配置,第一步永远是确认网络管理工具
在 Linux 系统中修改网卡配置,最忌讳的是直接改配置文件后重启网络服务,因为不同发行版默认使用的网络管理工具不同(network、NetworkManager、netplan、systemd-networkd),用错工具会导致配置不生效甚至断网。正确做法是先执行 ip addr 和 systemctl status NetworkManager 判断当前网络栈,再选择对应的配置方式。 本文以最常用的 RHEL/CentOS 系和 Ubuntu/Debian 系为例,给出可落地的配置流程。
修改前的必做检查:避免“断网翻车”
无论你用的是静态 IP 还是 DHCP,修改前请先备份原配置,并确保你拥有物理控制台或带外管理(IPMI/iDRAC)的访问权限,否则一旦 IP 写错,SSH 会直接断开且无法恢复。
检查当前网卡名称:ip link show,记录类似 eth0、ens33、enp0s3 的接口名。
检查当前连接状态:ip addr show,看清楚现有 IP 和掩码。
检查网关路由:ip route,记下 default via 的地址。
检查 DNS 配置:cat /etc/resolv.conf(注意该文件可能被 systemd-resolved 软链)。
经验案例(酷番云):我们在为用户处理云服务器网络问题时,遇到最多的情况是用户直接编辑
/etc/sysconfig/network-scripts/ifcfg-eth0后执行systemctl restart network,结果因为云平台底层使用了NetworkManager,重启 network 服务反而把 NM 的活跃连接踢掉了。我们的标准操作是:先在控制台快照备份,再按发行版选择正确的工具链路,最后用nmcli或netplan apply热生效,避免重启实例。
RHEL/CentOS/Rocky/Alma 系:NetworkManager 是默认主力
1 推荐方式:使用 nmcli 命令行修改
nmcli 是 NetworkManager 的命令行工具,修改后立即生效且无需重启网络服务,是生产环境最安全的方式。
修改为静态 IP 示例:
nmcli con mod eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8 114.114.114.114" nmcli con up eth0

修改为 DHCP 示例:
nmcli con mod eth0 ipv4.method auto nmcli con up eth0
注意:nmcli con mod 修改的是连接配置,nmcli con up 才会激活,如果网卡没有现成的连接,需要先 nmcli con add。
2 传统方式:编辑 ifcfg 文件
适用于不使用 NetworkManager 的旧系统,编辑 /etc/sysconfig/network-scripts/ifcfg-eth0,关键参数:
BOOTPROTO=static # static 或 dhcp ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 # 或 PREFIX=24 GATEWAY=192.168.1.1 DNS1=8.8.8.8
保存后执行:
systemctl restart network # 或旧系统: service network restart
新版本不建议用 ifcfg,因为 CentOS 8+ 已移除 network 服务,只能用 nmcli 或 /etc/NetworkManager/system-connections/ 下的文件。
Ubuntu/Debian 系:netplan 与 interfaces
1 Ubuntu 18.04+:使用 netplan
配置文件位于 /etc/netplan/.yaml,默认是 00-installer-config.yaml,修改前先备份,然后编辑:
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114
重点:netplan 对 yaml 缩进极其敏感,不要混用空格和 Tab,修改后执行:
sudo netplan apply
若语法错误,netplan apply 会直接报错,不会断网,这是 netplan 的最大优点,如果想测试,可先 netplan try,10 秒不确认会自动回滚。
2 Debian 传统方式:interfaces 文件
编辑 /etc/network/interfaces:
auto ens33
iface ens33 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8
systemctl restart networking
通用验证步骤:确保配置真实有效
修改完成后,不要只看 ip addr,要验证三层连通性

。
ip addr show查看 IP 是否正确。ip route查看默认网关是否生效。ping -c 3 网关IP验证链路。ping -c 3 8.8.8.8验证外网。nslookup baidu.com或dig baidu.com验证 DNS 解析。
如果多网卡需要临时加 IP,直接用 ip addr add 192.168.1.200/24 dev eth0,但重启后失效,适合即战即退的测试场景。
常见故障与专业解决方案
1 修改后无法连上 SSH
- 原因:网关或 DNS 写错,或掩码错误。
- 解决:立即用物理控制台登录,恢复备份文件或使用单用户模式重置,不要盲目重启,重启可能让 DHCP 失效。
2 网络服务重启后配置丢失
- 原因:
ONBOOT=no或 netplan 中配置了dhcp4: yes覆盖静态。 - 解决:检查
ONBOOT值,netplan 中删除dhcp4或设为no。
3 网卡名称变为 ens33 但原配置是 eth0
- 原因:systemd 的 predictable network naming。
- 解决:用
ip link show确认实际名称,修改配置文件的DEVICE或 netplan 的ethernets键名,不建议强制关闭可预测命名,除非有特殊理由。
4 cloud-init 覆盖配置
- 原因:云服务器上有 cloud-init,会注入网络配置。
- 解决:在
/etc/netplan/下创建优先级更高的 yaml 文件(如99-custom.yaml),且配置正确的match规则。如果不需要 cloud-init 管理网络,可以用cloud-init clean或禁用相关模块,酷番云的云服务器在创建时可选择“自定义网络配置”,我们会直接为用户生成一份不冲突的 netplan 模板,避免后续被覆盖。
酷番云独家经验:生产环境修改网卡的“三段式”原则
结合酷番云数百台云主机的运维实践,我们总结出最稳妥的修改流程,任你参考:
-
第一段:备份与回滚
cp /etc/netplan/00-installer-config.yaml /root/netplan.backup
或对 ifcfg 文件执行同样操作,同时记得创建系统快照。 -
第二段:热生效与验证
优先使用
nmcli 或
netplan try这类支持“超时回滚”的命令,如果必须手动重启网络服务,务必先写一个包含原配置的恢复脚本放在/root/下,并加执行权限。 -
第三段:持久化与文档化
修改完成后,把网络拓扑、IP 分配表、修改时间记录到团队 Wiki。Linux 网络配置最大的风险不是不会改,而是改完没人知道改了。
酷番云案例:一位客户将 CentOS 7 的 ifcfg 中
BOOTPROTO从static改为dhcp后,没有重启网络而是直接重启实例,导致实例启动后 IP 变化,所有业务访问中断,我们介入后通过控制台 VNC 登录,发现/etc/sysconfig/network-scripts/下存在ifcfg-eth0与ifcfg-eth0.bak,我们恢复.bak文件后立即恢复了业务,后续我们为客户启用了 配置变更审批流程,并要求所有变更前在酷番云控制台创建自动快照,彻底杜绝此类事故。
相关问答
问题1:修改 Linux 网卡 IP 后,为什么 systemctl restart network 提示失败?
答:在 CentOS 8/RHEL 8 及以上版本,传统 network 服务已不再是默认启用,系统改用 NetworkManager 管理网络,你可以先执行 systemctl status NetworkManager 查看状态,NM 在运行,推荐用 nmcli con reload 和 nmcli con up 网卡名 来应用更改,而不是 restart network,如果确实需要旧版 network 服务,可以安装 network-scripts 包,但不建议这样做,因为未来版本会完全移除。
问题2:netplan 配置文件的 IP 地址修改了,为什么 netplan apply 后 IP 没变?
答:可能原因有三个:第一,你修改的不是当前生效的 yaml 文件,netplan get 可查看当前实际配置;第二,文件权限或格式错误,netplan generate 会提示语法问题;第三,网卡被其他服务(如 cloud-init)接管,建议先运行 sudo netplan generate 检查无报错,再 sudo netplan apply,最后用 ip addr 验证,如果仍不生效,检查 /etc/cloud/cloud.cfg.d/ 下是否有 cloud-init 的网络配置覆盖了你的设置。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/745004.html

