![为 KVM 在不同的子网上配置 DHCPD 分配 IP 地址和网关](https://linux22.com/image/617394/%E4%B8%BA%20KVM%20%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E5%AD%90%E7%BD%91%E4%B8%8A%E9%85%8D%E7%BD%AE%20DHCPD%20%E5%88%86%E9%85%8D%20IP%20%E5%9C%B0%E5%9D%80%E5%92%8C%E7%BD%91%E5%85%B3%20.png)
我有一个 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)并告诉客户端使用它作为默认网关。