命令行改IP后死活不生效?老司机教你排查这两个关键点
大家好,我是33blog的技术小编。今天想和大家分享一个我最近在服务器运维中遇到的坑——明明用命令行改了IP地址,结果死活不生效。这个问题折腾了我大半天,最后发现是两处细节没注意。相信很多运维新手都会遇到类似情况,所以特地写出来帮大家避坑。
第一坑:NetworkManager在偷偷捣乱
那天我正用老方法给CentOS服务器改IP:
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
route add default gw 192.168.1.1
执行完ifconfig查看确实生效了,但诡异的是ping外网就是不通。后来才发现,这台服务器装了NetworkManager服务,它会定期把配置”纠正”回原来的状态。解决方法很简单:
systemctl stop NetworkManager
systemctl disable NetworkManager
或者在/etc/sysconfig/network-scripts/里直接修改ifcfg-eth0文件,这样NetworkManager也会认。
第二坑:DNS缓存还在作祟
解决了第一个问题后,我发现虽然能ping通IP,但域名解析还是有问题。这是因为——
系统DNS缓存没更新! 不同系统清理方法不同:
- CentOS/RHEL:
systemctl restart network
- Ubuntu:
systemd-resolve --flush-caches
- Windows:
ipconfig /flushdns
另外别忘了检查/etc/resolv.conf里的DNS服务器地址是否也更新了。
我的血泪经验
经过这次折腾,我总结出两个经验:
- 现在主流Linux发行版基本都用NetworkManager了,直接用nmcli命令改IP更稳妥
- 改完IP后一定要做完整测试:先ping网关,再ping外网IP,最后测域名解析
最后分享个实用命令,一键查看所有网络配置:
ip a && ip route && cat /etc/resolv.conf
遇到网络问题别急着重启,按这个顺序排查能省不少时间。大家有什么网络配置的踩坑经历,欢迎在评论区分享~
原来NetworkManager还会偷偷改回去,难怪之前总是不生效,学到了!