为 KVM 在不同的子网上配置 DHCPD 分配 IP 地址和网关

为 KVM 在不同的子网上配置 DHCPD 分配 IP 地址和网关

我有一个 IP 范围为 123.123.123.1/24 的 Dedi,问题在于网关地址:111.111.111.254,并且它位于完全不同的子网上。我已经设置了桥接和 KVM 虚拟化。

主机节点上的 /etc/dhcpd.conf。

subnet 0.0.0.0 netmask 0.0.0.0 {
authoritative;
default-lease-time 21600000;
max-lease-time 432000000;
}
 ddns-update-style ad-hoc;

host kvm111.0 {
hardware ethernet 02:00:00:ce:fd:ab;
option routers 111.111.111.254;
option subnet-mask 255.255.255.0;
fixed-address 123.123.123.2;
option domain-name-servers 8.8.8.8,8.8.4.4;
}

然后我在该 HWID 上设置了一个 KVM 虚拟机 (VM),使用 Windows 操作系统并启用 dhcp。它运行良好。Windows VM 获得 123.123.123.2 IP,网关为 111.111.111.254。

但是当我将虚拟机的操作系统更改为 Debian 6 时,它不起作用。我登录到虚拟机,发现网关未分配。当我输入路由添加默认网关 111.111.111.254答案是:

SIOADDCART: no such process

这是因为网关与分配的 IP 地址位于不同的子网中。所以我必须在虚拟机上执行以下操作:

路由添加 111.111.111.254/32 dev eth0

路由添加默认网关 111.111.111.254

然后它就可以正常工作了。但由于我想要通过主机节点实现自动化(而不是通过 VM 手动执行),因此我不得不通过 /etc/dhcpd.conf 执行此操作

有人知道怎么做吗路由添加 111.111.111.254/32 dev eth0通过 /etc/dhcpd.conf?

答案1

答案是无类静态路由(RFC3442)。在 isc dhcp 服务器中,您必须手动指定该选项。

本网站简明扼要地说明了如何以适用于 Windows 和 Linux 客户端的方式执行此操作。

以下是缩写版本:

在 dhcpd.conf 顶部添加以下内容

option rfc3442-classless-static-routes code 121 = array of integer 8;
option ms-classless-static-routes code 249 = array of integer 8;

在适当的子网块中添加以下两个选项行

option rfc3442-classless-static-routes 32, 111, 111, 111, 254, 0, 0, 0, 0, 111, 111, 111, 254;
option ms-classless-static-routes 32, 111, 111, 111, 254, 0, 0, 0, 0, 111, 111, 111, 254;

这应该会为 111.111.111.254 创建一个静态路由,并使用 dhcp 分配的地址,并保留默认路由器 111.111.111.254。特殊路由器值 0.0.0.0 表示链接。rfc 指出客户端不需要实现无类静态路由,但 Windows 通过其 ms 选项实现了无类静态路由,Linux 的 dhclient(已测试 debian7、rhel6.4)实现了无类静态路由,我的所有 IPMI 和 PXE 客户端也实现了无类静态路由。您应该进行测试以确保它与您的客户端兼容,但我相当有信心它会起作用。dhclient 可以使用退出钩子来解释选项 121,如果它还不支持开箱即用功能。

最坏的情况是,在主机节点上,您可以添加一个在 LAN 范围内的 IP(在您的示例中为 123.123.123.254)并告诉客户端使用它作为默认网关。

相关内容