Networking

為 KVM 在不同子網上配置 DHCPD,分配 IP 地址和網關

  • September 5, 2013

我有一個 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。

但是當我將 VM 的作業系統更改為 Debian 6 時,它不起作用。我登錄到VM,發現沒有分配網關。當我輸入route add default gw 1​​11.111.111.254時,答案是:

SIOADDCART: no such process

這是因為網關與分配的 IP 地址位於不同的子網中。所以我不得不在虛擬機上這樣做:

路由添加 111.111.111.254/32 dev eth0

路由添加預設gw 111.111.111.254

然後它將起作用。但是由於我想通過主機節點進行自動化(而不是通過 VM 手動進行),所以我必須通過 /etc/dhcpd.conf 進行

有誰知道如何通過 /etc/dhcpd.conf進行route add 111.111.111.254/32 dev eth0 ?

答案是無類靜態路由 (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尚不支持開箱即用,則可以使用 exit hook 解釋選項 121 。

最壞的情況是,在主機節點上,您可以添加一個區域網路範圍內的 IP(在您的範例中為 123.123.123.254)並告訴客戶端將其用作預設網關。

引用自:https://serverfault.com/questions/536612