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

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

我们的一台生产服务器被“克隆”以创建辅助测试环境。源服务器是加入域并具有静态 IP 地址的虚拟机(VMWare vSphere 环境)。

当克隆的虚拟机启动时,虚拟网络适配器已启用。计算机名称未更改。IP 地址也未更改。不知何故,这两台具有相同 DNS 名称和 IP 地址的服务器在同一个域中共存了几天——可能长达一周。我们会忙着修复损坏一段时间……

不管是粗心还是无知,人都会犯错。我可以接受这一点。所以让我们假设这种情况可能会再次发生。我知道如何解决这个问题。但我如何发现它呢?

编辑
我并不是在寻求有关如何克隆虚拟机的说明或建议。我不是负责这项任务的人。我想知道如何快速(或立即)检测两台计算机/工作站/虚拟机是否具有相同的 DNS 名称。

更新
我决定在启动主 SQL Server 服务时运行“检查”,以尝试确定 SQL 主机是否已被克隆。(请注意,此策略仅适用于作为 SQL Server 主机的 VM。)

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

如果有人感兴趣的话,我写了一篇博客:SQL Server:克隆的攻击

最后的想法
我可能应该在最初发布问题时提到这一点:我是一名 SQL Server DBA。尽管我不是系统管理员,但我确实与他们合作。我与系统管理员不在同一个“团队”,但我也没有被他们孤立。我感谢大家对我的问题的所有意见和大量答案。大多数人都表示问题在于培训问题,我应该教育相关人员。我不能不同意。这是一种明智的、主动的方法。但是……几乎所有 SQL Server 领域之外的事情都超出了我的控制范围。系统管理员来来去去。他们独立于我的愿望和需求采取行动和做出决定。但是,我确实可以控制从 SQL Server 角度发生的事情。即使在事情完成后,我仍然可以主动采取行动。由于我自己开发的解决方案是针对 SQL Server 的,现在显然我应该把我的问题发布在https://dba.stackexchange.com/ 我认为在这里提出这个问题仍然有一定价值,但如果主持人想迁移它,我理解。

答案1

在 vSphere 环境中克隆虚拟机时,您可以选择“自定义客人”从模板克隆或部署虚拟机时……

您可以在此处指定名称、更改网络设置、指定域成员身份并生成新的 SID(适用于微软操作系统)。这就是您接下来需要做的一切。

答案2

事件查看器中很可能有日志表明存在 IP 冲突。任何收集和过滤事件日志的监控系统都应该能够检测到这种情况并触发警报。

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

当然,真正的解决方案是对参与克隆的每个人进行适当的培训,以确保这种情况不会发生——克隆虚拟机需要非常小心,更改 IP 或移动到隔离网络以避免这种情况。

希望有一台机器始终“获胜”,并且变化不会扩散到两台服务器上!

答案3

良好的知识产权管理政策永远无可替代。结束。Fin。FIN-确认。

无论上下文如何,除非软件特意禁止,否则无法阻止人们愚蠢地使用 IP 地址——而软件通常做不到。它怎么知道你没有需要多个虚拟机保存这些地址,并且每次只会在线一个?这不是软件的工作。管理员的工作是重视他们的工作,不要因为 IP 冲突而导致中断。

这是管理员必须要学的课程之一,要么通过艰难的方式,要么在其他人学习艰难的方式时不可避免地会在凌晨 3 点惊慌失措。

  • 您不必担心 IP 冲突的风险。
  • 您在处理持有重要 IP 地址的事物时所投入的精力应该大于或等于您继续领取薪水的愿望。
  • 更重要的是,你不能假设有什么东西会帮你阻止或检测到它们——除了您自己在组织指定的知识产权真相来源前的勤奋和卑躬屈膝之外。

简而言之,没有人比 IPAM 更聪明。分配 IP 地址或克隆设备是一种宗教活动,必须得到 IPAM 的祝福。相信旨在防止或缓解 IP 冲突的异教做法只会导致注定的毁灭。忽视它的神圣指导,后果自负。

(我明白你想做什么。我真的明白,我尊重你的意见。但是除了害怕对于那些希望保住工作的人来说。

答案4

我同意评论中的观点,创建这些克隆的技术人员需要重新接受一些教育。也许你会反击,尤其是当测试服务器与生产服务器位于同一网络上时。

同时,这可能有助于您识别环境中已有重复 IP 的 VM 客户机。您将需要 PowerCli,并记住集群成员在设计上使用相同的 IP。

$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

然后使用以下方法查找重复项

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

相关内容