KVM虚拟机MAC地址冲突,引发服务器对xshell说:Go away!

2024-02-02 15:44

本文主要是介绍KVM虚拟机MAC地址冲突,引发服务器对xshell说:Go away!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

湖蓝几何球体LinkedIn Banner.png
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


开场白

最近在机房的服务器上装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地址就是后面写入到配置文件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的尴尬。

解决问题参考:
https://bugzilla.redhat.com/show_bug.cgi?id=1331276 :

https://www.linuxquestions.org/questions/linux-newbie-8/etc-init-d-network-restart-failed-4175559158/ :

这篇关于KVM虚拟机MAC地址冲突,引发服务器对xshell说:Go away!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/671196

相关文章

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与