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

时间:2013-08-19 14:36:00

标签: virtualization uuid mac-address

我需要能够重复,非随机地,唯一地识别服务器主机,这可能是任意虚拟化的,我无法控制。

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

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

主机是否有其他持久的唯一标识符?

4 个答案:

答案 0 :(得分:5)

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

因此,所需要的只是足够的信息来告诉机器除了持久性的持续时间之外。

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

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

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

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

暗示可以分辨“真实的”和“克隆的”之间的区别意味着有一些状态可以用来记录两者之间的差异,比如时间戳创建虚拟机时,在这种情况下,您可以将其合并到状态记录中。

答案 1 :(得分:1)

看起来已经排除了简单的解决方案。 这可能导致复杂的解决方案,如此协议: - 客户端发送元组[MAC地址,SSH公共主机密钥,序列号] - 如果服务器按预期收到此元组,则服务器和客户端都会递增序列号。 - 否则服务器必须确定发生了什么(客户端克隆了吗?客户端移动了吗?),也许会得出一个初步结论并提醒人们验证它。

答案 2 :(得分:0)

我认为根据可获得的信息没有直接的“使用X解决方案”,但这里有一些一般的建议可能会让您更好地找到。

  • 如果从“黄金映像”克隆,请考虑使用一些“第一启动”逻辑来生成唯一ID。像Chef,Puppet或Cf-engine这样的配置管理系统提供了一些脚手架来实现这一目标。
  • 考虑像zookeeper这样的全球州经理。特别是其原子计数器功能。同一系统可以随着时间的推移获得新的ID,但它将是唯一的。
  • stack overflow也可能会为您提供其他方向。它引用了Twitter对类似问题的处理方法。

答案 3 :(得分:-1)

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

  • 可以在运行时克隆的操作系统安装,因此任何内部 VM状态都不起作用,
  • 可以在任意虚拟化环境中运行,因此任何状态外部 VM都无法正常工作。

我意识到这并没有直接回答你的问题,但看起来设计或约束似乎需要进行一些实质性调整以适应解决方案。