从不正确克隆的虚拟机检测重复的IP地址

我们的一台生产服务器被“克隆”成为二级testing环境。 源服务器是连接到域并具有静态IP地址的虚拟机(VMWare vSphere环境)。

当克隆的VM启动时,虚拟networking适配器已启用。 计算机名称未更改。 IP地址也不是。 不知何故,具有相同的DNS名称和IP地址的这两台服务器在同一个域上共存几天 – 可能多达一周。 我们会忙着解开一段时间的伤害…

无论是粗心还是无知,人们都会犯错误。 我可以接受这个 那么让我们假设它可能会再次发生。 我知道如何解决这个问题。 但是如何检测?

编辑
我不在寻找关于如何克隆虚拟机的说明或build议。 我不是那个任务的人。 我想知道如何快速(或立即)检测两台计算机/工作站/虚拟机具有相同的DNS名称。

UPDATE
我决定在主要的SQL Server服务启动时运行一个“检查”,试图确定是否克隆了SQL主机。 (请注意,这种策略只适用于SQL Server主机的虚拟机。)

TLDR:在存储过程中对SQL主机名和域进行硬编码,并将这些值与SERVERPROPERTY(N'MachineName')DEFAULT_DOMAIN() 。 如果值不匹配,做一些激烈的事情。

如果任何人有兴趣,我博客: SQL Server:克隆的攻击

最后的想法
当我最初发布这个问题时,我可能应该提到这个:我是一个SQL Server DBA。 即使我不是一个系统pipe理员types,我也与他们合作。 我和系统pipe理员不在同一个“团队”,但是我也没有被他们隔离。 我感谢所有的投入和我的问题无数的答案。 大多数人表示这个​​问题是一个培训问题,我应该教育那些涉及到的人。 我不能不同意。 这是一个明智的,主动的方法。 但是…几乎SQL Server领域以外的所有东西都超出了我的控制范围。 系统pipe理员来来去去。 他们的行为和独立于我的愿望和需求的决定。 不过,我确实可以控制从SQL Serverangular度发生的事情。 即使在行为完成后,我仍然可以积极主动。 由于我自己开发的解决scheme是SQL Server特定的, 现在显然我应该在https://dba.stackexchange.com/上发布我的问题。我认为在这里有问题仍然有一些价值,但是如果主持人希望迁移它,我明白。

在vSphere环境中克隆虚拟机时,可以在从模板克隆或部署虚拟机时select“自定义guest虚拟机”。

这是您可以指定名称,更改networking设置,指定域成员资格并生成新的SID (适用于Microsoft操作系统)的位置 。 这就是你需要做的所有事情。

事件查看器中很可能有loggingIP冲突的日志。 任何收集和过滤事件日志的监视系统都应该能够检测并触发警报。

在物理pipe理交换机上,您可能会检测到并警告重复的MAC地址 – 我对vmware虚拟交换机不熟悉,不知道您可能在那里有哪些选项。

当然,真正的解决scheme是对参与克隆的每个人进行适当的培训,以确保克隆不会发生 – 克隆VM需要非常小心,改变IP或转移到隔离networking以避免出现这种情况。

希望一台机器“赢得”整个时间,变化werent传播两个服务器!

永远不能替代良好的知识产权pipe理政策。 结束。 鳍。 FIN-ACK。

无论上下文如何,都不可能阻止人们使用IP地址来进行愚蠢的行为,除非这个软件完全禁止它 – 而且通常不能。 它如何知道你不需要多个虚拟机来保存这些地址,并且一次只能联机其中一个? 警告这不是软件的工作。 pipe理层的工作足以评估他们的工作,不会因创build知识产权冲突而造成中断。

这是pipe理员必须学习的教训之一,要么是困难的方式,要么是当别人正在艰难地学习时发生的不可避免的3AM恐慌。

  • 你不会因知识产权冲突而面临风险。
  • 您在处理与某些重要IP地址相关的东西时要小心,要大于或等于您希望继续获得薪水。
  • 更重要的是, 你不能认为有什么东西能够阻止或者检测到你 ,除了你的组织被授予知识产权真相之前的自己的努力和幻想。

没有人比IPAM更聪明。 指定一个IP地址或克隆一个设备是一个宗教function,必须伴随着IPAM的祝福。 相信旨在防止或减轻知识产权冲突的异教行为只会导致破产。 无视自己的神圣指引,自担风险。

(我得到你想要做的事情,我真的这样做,而且我尊重它,但除了那些希望保持工作的人的恐惧之外 ,没有真正的解决办法。

我同意这些意见,创造这些克隆的技术需要一些再教育。 也许有些人会推迟,特别是如果testing服务器与生产服务器在同一个networking上。

同时,这可能会帮助您识别环境中已有重复IP的VM guest虚拟机。 您将需要PowerCli,并且请记住,群集成员使用相同的IPdevise。

 $vcserver = "your-vcenter-server-name" Add-PSsnapin VMware.VimAutomation.Core Connect-VIServer $vcserver $results = Get-VM | Select -ExpandProperty Guest | % { $name = $_.HostName $_.IPAddress | % { New-Object PSObject -Property @{ HostName = $name IP = $_ } } } Disconnect-VIServer 

然后find与此重复:

 $count = @{} $results | % { $count["$($_.IP)"] += 1 } $count.Keys | ? { $count["$_"] -gt 1 } | % { $dup = $_ $results | ? { $_.IP -eq $dup } } | ft