我正在尝试配置 OpenNebula 以使用我网络上已存在的 DHCP 服务器。是的,我已经知道 OpenNebula 管理的是虚拟 MAC 地址而不是 IP 地址,但这并不能告诉我如何让它工作。;)
我的客户和主机都是 CentOS,所以我想所有需要做的就是配置上下文,以便将 BOOTPROTO=dhcp 转储到 /etc/sysconfig/network-scripts/ifcfg-eth0 中。
- 我该如何配置语境化才能实现这一点?我是否只需以某种方式修改模板?如果是,该怎么做?
- 一旦我使用这些新的语境化设置配置了我的模板,我应该如何在 ONE 中配置我的虚拟网络?
这似乎很容易做到,因为这看起来比管理一堆虚拟机的静态 IP 更简单,而且你会认为这是一个常见的用例。然而,到目前为止,谷歌搜索的结果很少。
谢谢!!
编辑:如果我手动设置 BOOTPROTO=dhcp 和 DHCP_HOSTNAME=foo 并重新启动虚拟机上的网络,我的 DHCP 服务器将成功为我的虚拟机提供 IP 地址。这很好,我希望能够设置我启动的虚拟机的主机名。
现在只需确定如何让 ONE 自动/通过 Web 界面或 CLI 工具执行这些操作。此外,ONE 仍列出原始租约的 IP 地址,而不是 DHCP 为我的 VM 提供的 IP。如果能修复该问题就好了。
答案1
我的 Opennebula 是 4.8.0 版本。我也有类似的需求,所以我做了以下事情:
- 我配置了网络中现有的 DHCP 服务器,为 DHCP 保留一个 IP 范围。范围是:10.23.1.201 - 10.23.1.254。这是 54 个动态 IP。
- 我创建了一个新的虚拟网络,并将其命名为“DHCP”。在“地址”选项卡上,我选择了单选按钮“以太网”。这样,Opennebula 将只向使用此网络的虚拟机提供 MAC 地址。我将“MAC 起始”留空,因为它无论如何都是可选的。我在“大小”字段中输入了 54,因为我的 DHCP 可以提供这么多动态 IP 地址。因此,Opennebula 只为新虚拟机提供一个 MAC 地址,仅此而已。
必须手动设置客户操作系统才能使用 DHCP。我不知道如何自动完成此操作,但这不是什么大问题。
以下是我如何进一步获得使用 DHCP 的模板。我继续安装新的操作系统,例如 CentOS 6.5。
- 我使用这个新的虚拟网络和两个磁盘(一个 ISO 映像和一个设置为“持久 = 是”的空数据块映像)创建了一个模板。
- 然后,我实例化模板,VM 从 ISO 启动,当我安装 VM 时,我将网络配置保留为“动态”。
- 安装完成后,我的虚拟机会从 DHCP 服务器自动分配一个 IP,就像一台真实的机器一样。
- 然后我停止并删除虚拟机。
- 将数据块图像设置回“持久=否”。
现在,从该模板生成的每个新 VM 都将使用“DHCP”虚拟网络,并具有动态 IP 地址,并且 Opennebula 不会显示此类 VM 的任何 IP 地址。
我无法回答有关主机名自动设置的问题,但我认为这肯定是配置客户操作系统和 DHCP 的问题。另一方面,DHCP 必须知道将哪个主机名赋予哪个 MAC 地址,并且由于 Opennebula 将动态生成这些 MAC 地址,所以我不知道如何提前告知 DHCP 服务器。
答案2
考虑使用 dhcpd 配置位在新机器上设置临时主机名,直到您自己可以 hostnamectl 为止。它的优点是可以设置一个可猜测的主机名,您可以使用它来连接,而无需查询日志或猜测 IP。
if (not (option host-name ~~ "^[a-z0-9][a-z0-9\-]+[a-z0-9]$")) {
set new_host-name = concat("host-", binary-to-ascii(16, 8, "", substring(hardware, 1, 6)));
log(concat("invalid hostname: ", option host-name, " => ", new_host-name));
ddns-hostname = new_host-name;
} else {
ddns-hostname = pick (option fqdn.hostname, option host-name, substring (option dhcp-client-identifier, 1, 20));
}
我从 Peter Rathlev 的一篇精彩文章中摘录了这一点,网址为: https://lists.isc.org/pipermail/dhcp-users/2013-March/016518.html。虽然它是在回答另一个问题,但它确实提供了一个很好的例子,说明如何配置 dhcpd 来做一些令人惊奇的事情,至少可以做我认为你需要的事情。
答案3
对于v4.x
(小于 4.10?):
首先创建一个VNET
,使用您想要的任何设置。例如,对于桥接网络,您可能有:
NAME = "net0"
TYPE = "FIXED"
BRIDGE = "br0"
接下来,创建与该 关联的租约VNET
。请注意,IP 地址是强制性的且唯一的,但如果您使用 DHCP(见下文),则仅用作 NIC“密钥”。确保设置 MAC 地址,以便您的 DHCP 服务器为其提供一个地址:
VNET = "net0"
IP = "192.168.0.1"
MAC = "02:00:d7:00:00:01"
现在向您的虚拟机添加一个 NIC:
网络=“net0” IP=“192.168.0.1” 型号=“virtio”
现在请确保为该 MAC 地址正确配置 DHCP。
对于4.x > 10?
和5.x
,情况几乎相同,只是租约现在被地址范围取代:
创建一个 VNET(差不多),如上所述:
NAME = "net0"
VN_MAD = "dummy"
BRIDGE = "br0"
然后创建一个地址范围,仅包含一个地址:
VNET= "net0"
SIZE = "1"
MAC = "02:00:d7:00:00:01"
在您的 VM 中使用此 AR:
NETWORK="net0"
MAC="02:00:d7:00:00:01"
MODEL="virtio"
并再次根据需要设置 DHCP。
有关地址范围的更多信息,请参见此处: