Linux 网卡配置的本质,是管理接口、IP、路由与稳定性四层关系,无论你用 ifconfig、ip 还是网卡配置文件,核心目标只有一个:在重启后依然生效,并保证网络路径最优,对于生产环境,推荐以 NetworkManager + nmcli 或 systemd-networkd 作为统一管理入口,并避免直接混用传统 ifcfg 文件与网络管理服务,否则极易出现“当时能用、重启就断”的隐性故障。
先分清网卡管理工具与配置文件
Linux 网卡配置存在两套体系:传统 SysV 风格(/etc/sysconfig/network-scripts/ifcfg-,主要见于 CentOS 6/7)和 系统化风格(/etc/NetworkManager/system-connections/,主要见于 CentOS 8+、Ubuntu 18.04+、Rocky Linux),很多问题都源于混用:手动修改了 ifcfg-eth0,又启动 NetworkManager 接管,最终配置被覆盖。
专业操作原则:
- 如果系统开启 NetworkManager,优先用
nmcli修改,NM 自动落盘到配置文件。 - 如果禁用 NetworkManager,则直接编辑
/etc/network/interfaces(Debian/Ubuntu)或ifcfg-(RHEL 系),并systemctl restart networking。 - 不要同时让 DHCP 和静态 IP 共存于同一接口,除非你明确要做 failover。
动态 IP 与静态 IP 的配置策略
1 临时配置:快速验证网络
ip addr add 192.168.1.100/24 dev eth0 ip route add default via 192.168.1.1
这种方法是内存级修改,适合排查故障,重启即失效,如果想持久化,必须走配置文件或工具。
2 基于 nmcli 的持久化静态配置(推荐)

nmcli con mod eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24 nmcli con mod eth0 ipv4.gateway 192.168.1.1 nmcli con mod eth0 ipv4.dns "8.8.8.8 114.114.114.114" nmcli con up eth0
关键点:必须指定 ipv4.method manual,否则 NM 会继续执行 DHCP,配置后立刻执行 nmcli con show eth0 | grep ipv4 验证。
3 传统 ifcfg 文件写法(用于无 NM 环境)
DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8
风险提示:很多用户会漏掉 ONBOOT=yes,导致重启后网卡未激活,这属于高频踩坑点。
多网卡场景下的路由优先级管理
当服务器有多个网卡时,默认路由只有一个,Linux 内核根据路由表的 metric 值选择出口网关,而非网卡顺序。
专业配置案例:
ip route add default via 192.168.1.1 dev eth0 table 100 ip route add default via 10.0.0.1 dev eth1 table 200 ip rule add from 192.168.1.0/24 table 100 ip rule add from 10.0.0.0/24 table 200
这样可实现策略路由:内网流量走 eth1,外网流量走 eth0,互不干扰,如果只是简单双网卡,建议减小网关配置错误的概率,只保留一条默认路由。
酷番云经验案例:我们常接到客户反馈“服务器重启后,第二块网卡无法访问外部网络”,经排查,99% 是因为两块网卡都配置了相同 GATEWAY,而系统只认 ifcfg-eth0 里的网关,在酷番云裸金属服务器上,我们建议将业务内网网卡 GATEWAY 留空,仅在外网网卡指定网关,并配合 ip rule 走策略路由,同时开启

net.ipv4.ip_forward=1 支持内部转发,彻底避免路由冲突。
DNS 配置的隐性坑
/etc/resolv.conf 很有可能被 NetworkManager 或 systemd-resolved 自动覆盖,如果你手动编写该文件,而系统使用了 NetworkManager,重启后 DNS 必然失效。
正确做法:
- NM 环境:通过
nmcli con mod eth0 ipv4.dns "223.5.5.5"写入 DNS,NM 会生成 resolv.conf。 - systemd-resolved:需要配置
/etc/systemd/resolved.conf的DNS=项,并开启DNSStubListener=no才能绑定到 53 端口。 - 纯手工环境:在 ifcfg 文件中写
DNS1、DNS2,然后确保PEERDNS=no,防止 DHCP 覆盖。
验证命令:resolvectl status(新版系统)或 cat /etc/resolv.conf 后,使用 dig +short example.com 测试。
常见故障排查流程
- 链路层:
ethtool eth0查看Link detected: yes。 - IP 层:
ip addr show eth0检查是否获取到正确地址。 - 路由层:
ip route确认网关可达。 - 连通性:
ping -I eth0 8.8.8.8指定出口测试。 - 防火墙:
iptables -L与firewall-cmd --list-all确认没有屏蔽 ICMP。
如果以上全过但仍无法上网,查看 /var/log/messages 或 journalctl -u NetworkManager,注意 NetworkManager 已激活连接 的日志,常能直接给出冲突提示。
最佳实践总结
- 生产环境统一管理工具,不要手工与 NM 混改。
-

每台服务器保留至少一个带外管理网口
(如 IPMI),用于网络配置错误时救援。 - 修改前备份配置:
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/是最简单的保险。 - 配置后必须持久化验证:执行
reboot或用systemctl restart network测试,而不是只ping一次。 - 监控网卡流量:用
nload或vnstat做基线,异常流量能提前暴露配置问题。
相关问答
问题 1:为什么我的 Linux 静态 IP 配置后,重启变成了 DHCP 获取?
这多半是因为你修改了 /etc/network/interfaces 或 ifcfg-eth0,但系统里 NetworkManager 服务处于开机自启状态,NM 在启动时接管了网卡,并加载了自己连接配置(可能仍是 DHCP)。解决方案:用 nmcli con show 找到该连接,执行 nmcli con mod <连接名> ipv4.method manual ipv4.addresses ...,nmcli con up,或者直接 systemctl disable NetworkManager 并启用传统网络服务,但你需要确保手动配置的脚本完全兼容。
问题 2:多块网卡时,如何让不同网段互访且不影响默认出口?需要开启 IP 转发。
先确认 /etc/sysctl.conf 中 net.ipv4.ip_forward = 1 生效,然后为每个网段添加静态路由,比如要让 192.168.2.0/24 通过 eth1 访问,执行 ip route add 192.168.2.0/24 dev eth1 src 192.168.2.1,同时注意防火墙 FORWARD 链是否允许转发,若需要持久化,在 ifcfg 文件中使用 ROUTE= 参数,或在 NetworkManager 中配置路由表。核心思想:明确每个网卡的子网归属,避免内核路由表混乱。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/787678.html


评论列表(3条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于执行的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
@smart335er:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是执行部分,给了我很多新的思路。感谢分享这么好的内容!
读了这篇文章,我深有感触。作者对执行的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!