Linux修改网卡配置,最稳妥、最通用的做法是直接编辑网卡配置文件,配合nmcli或systemctl重启网络服务生效,不建议在无图形界面的生产环境使用ifconfig临时修改。 这篇文章会把配置文件改法、命令改法、常见坑一次说清,无论你用的是Ubuntu还是CentOS,都能找到对应的路子。
为什么你改了网卡配置却不生效
很多朋友在Linux上折腾网络,最郁闷的就是明明照着教程改了IP,ping一下却还是旧地址。多数情况下,问题出在没分清“临时修改”和“永久修改”的区别。ifconfig eth0 192.168.1.10这种命令直接作用在内核网络栈上,重启网络服务或者重启机器,改动立马归零,而永久修改必须落到配置文件里,让网络服务启动时去读取。
另一个常见坑是NetworkManager和systemd-networkd在抢地盘,现在的Linux发行版,有的默认用NetworkManager管理网络,有的用systemd-networkd,还有的纯粹靠/etc/network/interfaces(Debian系)或者/etc/sysconfig/network-scripts/(RHEL系)里的脚本,你改了配置文件,但服务没重启,或者你改的是A配置,系统实际读的是B配置,自然不生效,业内专家指出,排查这类问题,第一步永远是确认当前系统用的什么网络管理工具。
Linux修改网卡配置的主流方法
临时修改,网络测试用
适合你只是临时改个IP试试连通性,或者调整路由表。
- 修改IP地址:
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up - 修改网关:
sudo route add default gw 192.168.1.1 - 修改DNS:临时修改DNS的话,直接改
/etc/resolv.conf文件,但很多系统这个文件被NetworkManager接管,改了也会被覆盖。
这种改法重启网络服务或重启机器后就失效,别指望它做持久化配置。
永久修改,编辑配置文件
这是生产环境推荐的做法,不同发行版路径不一样,先认准你的系统类型。
Debian/Ubuntu系统
配置文件在/etc/network/interfaces

,如果你用的是Ubuntu 18.04以上的桌面版或服务器版,大概率还会涉及Netplan。
传统interfaces文件写法:
# 网卡lo回环,别动
auto lo
iface lo inet loopback
# 配置eth0为静态IP
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 223.5.5.5 114.114.114.114
改完执行sudo systemctl restart networking或者sudo /etc/init.d/networking restart。
Netplan写法(Ubuntu 18.04+):
配置文件在/etc/netplan/.yaml,修改后必须执行sudo netplan apply才能生效。
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [223.5.5.5, 114.114.114.114]
CentOS/RHEL/Fedora系统
配置文件路径:/etc/sysconfig/network-scripts/ifcfg-eth0
静态IP配置示例:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=223.5.5.5 DNS2=114.114.114.114
改完执行sudo systemctl restart network(CentOS 7)或sudo nmcli connection reload。
用nmcli命令行修改
对于CentOS 8+和较新的Ubuntu系统,行业共识认为nmcli是唯一不需要记配置文件路径,也能做到永久生效的命令行工具,它直接跟NetworkManager交互,改完立刻生效且写入配置。
查看网络连接名称:
nmcli connection show
修改IP配置:
# 修改连接名为eth0的IP地址为静态 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 114.114.114.114" # 重新激活连接 nmcli connection up eth0

想从DHCP改回静态,或者反过来,nmcli都支持。 这套命令逻辑清晰,不需要记忆不同发行版的配置文件差异,对新手相当友好。
对比表格:不同修改方式的适用场景
| 修改方式 | 生效方式 | 持久性 | 适合场景 | 风险等级 |
|---|---|---|---|---|
| ifconfig命令 | 立即生效 | 临时 | 测试连通性 | 低 |
| 直接编辑配置文件 | 重启网络服务 | 永久 | 生产环境静态IP | 中(改错连不上) |
| nmcli命令 | 立即生效并写入配置 | 永久 | 远程服务器管理 | 低 |
| TUI图形化(nmtui) | 立即生效 | 永久 | 有交互界面的服务器 | 低 |
远程操作建议:如果你通过SSH连接服务器修改网卡配置,强烈建议先写个crontab定时任务,或者用screen会话执行命令,防止配置写错导致断网后连不回去,改完配置后,不要立刻断开当前SSH连接,先开个新终端尝试连接新IP,确认能连上再断旧连接。
网卡配置文件改了不生效?排查步骤
第一反应是看报错,执行sudo systemctl status network或者journalctl -xe,看看网络服务有没有报错,很多情况下是配置文件里多了个空格、少了引号导致解析失败。
第二步确认网卡名称,现在的系统网卡名早就不是eth0了,而是ens33、ens160或者eno1这种,跑一下ip addr看看你的网卡到底叫什么名字,然后去配置文件里改对应的名称。改错网卡名是新手最常见的问题来源。
第三步查NetworkManager是不是接管了,如果你的系统装了NetworkManager,而你又在/etc/network/interfaces里配了静态IP,这时候可能会冲突,解决思路二选一:要么让NetworkManager管理,要么禁用它,Ubuntu上你可以跑sudo systemctl stop NetworkManager试试效果。
还有个大坑是DNS缓存

,改了DNS配置不生效,可能是systemd-resolved在缓存,执行sudo systemd-resolve --flush-caches清一下缓存,排查DNS问题不用重启机器。
Q&A:关于Linux修改网卡配置常见疑问
修改Linux网卡配置后网关ping不通是什么原因?
网卡配置和网关不通是两层问题,先确认同一网段内其他机器能ping通网关,排除物理链路故障,然后看路由表,执行ip route show,确认default路由指向的是新网关地址,如果路由没问题,检查防火墙规则,systemctl stop firewalld或iptables -L看看是否拦截了ICMP请求,网卡配置文件里GATEWAY项写错是另一个常见原因,确保网关地址和IP地址在同一网段,且没有多余的空格。
Ubuntu和CentOS修改网卡配置文件的命令一样吗?
不一样,两个系统的网卡配置路径和服务管理方式有较大区别。
| 操作 | Ubuntu | CentOS 7+ |
|---|---|---|
| 配置文件路径 | /etc/netplan/.yaml 或 /etc/network/interfaces | /etc/sysconfig/network-scripts/ifcfg- |
| 重启网络命令 | sudo netplan apply | sudo systemctl restart network |
| 网卡命名规则 | 09:00.0的PCI位置命名 | biosdevname或一致性设备命名 |
如果你需要修改网卡配置,建议先确认系统版本再选择对应命令,避免照搬错误命令导致配置失败,Ubuntu 20.04以后默认用Netplan,CentOS 8以后推荐用nmcli,这些差异在写自动化脚本时特别容易踩坑。
用nmcli修改IP后为什么ifconfig看到的还是旧地址
因为ifconfig在某些系统上已经不直接显示NetworkManager管理的连接了,推荐用ip addr show检查IP地址,或者跑nmcli device status看设备状态。ifconfig显示的是内核接口信息,而NetworkManager的配置需要激活才会写入内核,执行nmcli connection up [连接名]激活一次,再看ip addr应该就是新地址了,如果还是旧地址,检查有没有多个connection配置指向同一块物理网卡,删掉多余的配置再试。
