开场白
最近在机房的服务器上装 kvm 虚拟主机.
不经意间, 上演了一场由 Mac 地址异常而引发的服务器与 xshell 之间的血案!
问题描述
在一台服务器上装了两个虚拟机, 其中一台是从另一台上克隆的. 克隆的虚拟机开机之后, 发现 SSH 不能远程连接:
然后在虚拟机管理界面本地去连接上服务器排查:
查看 IP 地址, 想确认 xshell 是不是连错了 IP, 找错了对象, 却发现 ifconfig 居然查看不到 IP??
图:
查看 network 的启动状态, 看到的是绿油油的 active 状态.
然后又查看配置文件 / etc/sysconfig/network-scripts/ifcfg-eth0 , 检查 IP.
配置明明是正确的啊, 咋看不到 IP 呢?
查看 / var/log/messages 日志, 发现有下面这样的报错信息, 提示 Mac 地址有异常:
- Jun 24 22:21:05 devops02 network: Shutting down interface eth0: ERROR : [/etc/sysconfig/network-scripts/ifdown-eth] Device has Mac address 00:00:00:00:00:00
- Jun 24 22:21:05 devops02 network: 52:54:00:72:E3:FB, instead of configured address 52:54:00:32:43:34. Ignoring.
- Jun 24 22:21:05 devops02 /etc/sysconfig/network-scripts/ifdown-eth: Device has Mac address 00:00:00:00:00:00
- 52:54:00:72:E3:FB, instead of configured address 52:54:00:32:43:34. Ignoring.
- Jun 24 22:21:05 devops02 network: [FAILED]
问题排查
根据上面的报错信息, 开始了排查的长征!
日志提示 Mac 地址异常, 查看 ifcfg-eht0 配置的 Mac 地址是 HWADDR=52:54:00:32:43:34:
然鹅, ifconfig 显示出来的 Mac 地址却是 52:54:00:72:e3:fb!
图:
原来, 是两边的 Mac 地址不一样, 引起的问题!
原因分析
为什么会导致一台主机上有两个 Mac 地址?
原因是在 KVM 的界面克隆虚拟机的时候, 有一个设置 Mac 地址的 "Random MAC address" 按钮:
克隆主机的时候, 因为害怕克隆主机和原始主机的 Mac 地址产生冲突, 所以在克隆的时候点了 "Random MAC address" 按钮, 就随机生成了一个新的 Mac 地址 52:54:00:72:e3:fb.
这个 Mac 地址就是后面在 ifconfig 里面看到的那个 Mac 地址 52:54:00:72:e3:fb.
而在克隆界面的旁边还有一个 xml 配置界面, 里面也有一个 Mac 地址的配置:
xml 界面的 Mac 地址 < Mac address='52:54:00:32:43:34'/> 就是后面写入到配置文件 ifcfg-eth0 的 Mac 地址: 52:54:00:32:43:34.
这就导致 ifconfig 和 ifcfg-eth0 两边的 Mac 地址不一致了.
另外:
测试了一下, 即使在前面点了 "Random MAC address" 按钮, 生成新的 Mac 地址, 再把新的 Mac 地址修改到后面的 xml 文件, 然后再点击克隆主机. 新克隆的主机 ifcfg-eth0 文件里面的 Mac 地址还是以前的 52:54:00:32:43:34, 跟 ifconfig 的 Mac 地址也是不一样. 还是要手动改配置文件.
在这之前也有在 KVM 上克隆了十几台服务器, 但是以前都习惯于在刚刚克隆好主机之后, 第一步就是删掉配置文件 ifcfg-eth0 文件里面的 Mac 地址和 UUID 地址, 而恰好之前的原始主机配置文件 ifcfg-eth0 文件里面又配置了 DEVICE(关于 DEVICE 见后文), 所以删掉配置文件的 Mac 地址之后, 网卡就顺利起来了, 并没有注意到克隆主机 Mac 地址不一致的问题.
解决方法
这个问题有两种解决方法:
1, 修改配置文件 ifcfg-eth0 的 Mac 地址, 改成和 ifconfig 一样的. 然后再重启 network:
2, 删掉 ifcfg-eth0 里面的 "HWADDR=52:54:00:32:43:34" 这一行, 重新添加一行 "DEVICE=eth0", 然后重启 network:
注意:
删了 Mac 地址之后, 一定要确认配置文件上有 DEVICE 配置, 否则启动 network 的时候, messages 日志里面会有这样的报错:
- Jun 24 22:24:40 devops02 network: Shutting down interface eth0: ERROR : [ipv6_test_device_status] Missing parameter 'device' (arg 1)
- Jun 24 22:24:40 devops02 ipv6_test_device_status: Missing parameter 'device' (arg 1)
上面两种解决方法都尝试过了, 重启 network, 再查看 IP 地址, 就显示正常了:
xshell 再次远程连接已经 OK:
结束语:
回顾上面的问题, 小小总结:
1,ifconfig 的 Mac 地址和 ifcfg-eth0 的 Mac 地址一定要相同;
2, 如果在 ifcfg-eth0 里面删除了 Mac 地址, 就要保证有 DEVICE 配置, 因为 DEVICE 和 HWADDR 至少得有一个;
3,"/var/log/messages" 文件和 Google 是个好东西;
4, 多踩坑, 就会避免这种 low low 的尴尬.
解决问题参考:
:
:
来源: http://www.bubuko.com/infodetail-3104183.html