為 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。
但是當我將 VM 的作業系統更改為 Debian 6 時,它不起作用。我登錄到VM,發現沒有分配網關。當我輸入route add default gw 111.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)並告訴客戶端將其用作預設網關。