Linux 默认网关配置不生效?这些坑我都帮你踩过了
大家好,我是33blog的技术博主。今天想和大家聊聊一个看似简单但实际可能让人抓狂的问题 —— 在 Linux 系统上配置默认网关后不生效的情况。这个问题我遇到过不止一次,每次都能发现新的”惊喜”。
1. 最基础的检查:你真的保存配置了吗?
说出来你可能不信,但这是我遇到最多的情况。很多朋友(包括我自己)在修改完网络配置后,经常忘记重启网络服务或者保存配置。
# 对于使用NetworkManager的系统
sudo nmcli connection reload
sudo nmcli connection up [connection-name]
# 对于传统network服务
sudo systemctl restart network
记得有次我在生产环境折腾了半天,最后发现只是忘记执行 service network restart
,那感觉真是…
2. 路由表优先级问题
有时候网关确实配置成功了,但路由表里有其他路由规则优先级更高。这时候可以检查一下:
ip route show
route -n
重点关注 metric
值,数值越小优先级越高。我曾经遇到过因为 VPN 连接自动添加了默认路由,导致我的网关配置”失效”的情况。
3. 多个网络接口的困扰
如果你的系统有多个网络接口(比如 eth0 和 eth1),确保你修改的是正确的接口配置。我就犯过在 eth0 上配置网关,但实际上系统使用的是 eth1 这种低级错误。
检查当前活跃的默认路由:
ip route | grep default
4. 配置文件语法错误
不同发行版的网络配置文件格式可能不同。比如:
- Ubuntu 的
/etc/netplan/*.yaml
- CentOS 的
/etc/sysconfig/network-scripts/ifcfg-eth0
- Debian 的
/etc/network/interfaces
我曾经在 CentOS 上把网关地址写在了 GATEWAY
而不是 GATEWAY0
里,结果死活不生效。
5. NetworkManager 和传统网络服务的冲突
有些系统同时运行了 NetworkManager 和传统的 network 服务,它们可能会互相覆盖配置。建议统一使用一种管理方式。
检查服务状态:
systemctl status NetworkManager
systemctl status network
6. 防火墙或安全组拦截
有时候网关配置是正确的,但因为防火墙规则或云平台的安全组设置,导致流量无法通过。我就遇到过 AWS EC2 实例上配置正确但忘记在安全组放行的情况。
7. 临时路由和永久路由的区别
通过 ip route add default via x.x.x.x
添加的是临时路由,重启后会丢失。要永久生效,必须修改配置文件。
记得有次排查问题,临时添加路由测试没问题,结果重启后问题”又出现了”,其实就是忘记写进配置文件。
总结
配置网关不生效的原因五花八门,从简单的忘记重启服务,到复杂的路由优先级问题都可能遇到。我的建议是:
- 先检查当前生效的路由表
- 确认修改了正确的配置文件
- 确保服务重启了
- 排除防火墙干扰
- 注意临时和永久配置的区别
希望这篇文章能帮你少走些弯路。如果你还遇到过其他奇葩情况,欢迎在评论区分享!
感谢分享!我在生产环境也遇到过忘记重启网络服务的情况,折腾了半天才发现问题😂