什么是MAC地址的独特,持久的替代方案?

Bar*_*rtz 5 virtualization uuid mac-address

我需要能够可重复地,非随机地,唯一地识别服务器主机,其可以任意地虚拟化,在其上我没有控制.

  • MAC地址不起作用,因为在某些虚拟化环境中,网络接口没有硬件地址.
  • 生成状态文件并将其保存到磁盘不起作用,因为可以克隆虚拟机,从而复制文件.
  • 服务器的SSH主机密钥可能是候选者.它们可以像状态文件一样被克隆,但实际上它们通常不是因为它是一个安全问题,而是经常犯的错误.
  • 还有/ var/lib/dbus/machine-id,但这取决于dbus.(感谢Preetam).
  • 有一个cpuid,但显然已被弃用.(感谢Bruno Aguirre在Twitter上).
  • 主机名值得考虑.像Chef这样的许多系统都需要独特的主机名.(谢谢Alfie John)

我希望解决方案能够持续很长时间,当然还有服务器重启和软件重启.最后,我也知道我的软件的用户会弃用主机并希望用另一个替换它,但要保持与之关联的数据的连续性,因此有理由认为UUID可能被认为是长期可变的,但我不赞成特别希望主持人开始认为自己是未知的并且无缘无故地重新注册.

主机是否有任何替代的持久性唯一标识符?

Joh*_*lla 5

这实际上取决于"持久性"的含义.例如,两个VM不能各自为您打开相同的网络套接字,因此即使它们是彼此的位级克隆,也可以区分它们.

因此,所需要的只是足够的信息来告诉机器分开持久性的持续时间.

  • 如果持久性的持续时间是网络连接的长度,那么您根本不需要任何标识符 - 套接字本身是唯一的.

  • 如果持久性需要更长 - 例如,对于引导的长度 - 那么您可以在系统引导时重新生成UUID.(请注意,克隆的VM仍然必须重新启动,除非您正在热复制它.)

  • 如果它需要比那个更长 - 比如说,无限期 - 那么你可以在启动时生成一个UUID标识符并将其保存到磁盘,但只能将其用作机器标识信息的一部分.如果随后克隆了虚拟机,您将会知道这一点,因为您将有两台计算机报告来自不同来源的相同ID - 例如,两个不同的网络套接字,不同的启动时间等.因为您可以区分它们,所以足以区分两台克隆机器的信息,这意味着您可以采取后续操作来强制进一步区分,例如指示每台机器重新生成其状态文件.

最终,如果一台机器被完美克隆,那么根据定义,你无法分辨哪一台是"真正的机器",只有现在有两台可区分的机器.

暗示您可以区分"真实的"和"克隆的"之间的区别意味着您可以使用某种状态来记录两者之间的差异,例如创建虚拟机本身的时间戳,其中您可以将其纳入州记录.

  • 要求是你能够分开("唯一识别").我没有看到有关其赛道记录被保留的任何信息.当你_可区别地克隆一台机器_时,根据定义,它们都不是"真正的机器"! (2认同)

小智 -1

如果我理解正确的话,在这些条件下您需要一个持久的、全局唯一的标识符:

  • 可以在运行时克隆的操作系统安装,因此虚拟机内的任何状态都不起作用,并且
  • 可以在任意虚拟化环境中运行,因此虚拟机之外的任何状态都不起作用。

我意识到这并不能直接回答您的问题,但看起来设计或约束确实需要进行一些实质性调整才能适应解决方案。