1. 程式人生 > >《轉》QEMU-KVM建立虛擬機器自動指定IP的配置

《轉》QEMU-KVM建立虛擬機器自動指定IP的配置

在使用qemu建立虛擬機器的過程中是無法指定IP地址的,可是在實際應用中,我們是需要虛擬機器擁有IP地址的,並且不是人為去虛擬機器作業系統上配置。在qemu虛擬機器技術文件(http://qemu.weilnetz.de/qemu-doc.html#pcsys_005fmonitor)裡搗鼓了好久,發現在給虛擬機器建立虛擬網絡卡時可以指定MAC地址,頓時眼前大亮:如果可以給一個虛擬機器網絡卡唯一指定一個MAC地址,那麼我就可以通過配置DHCP來實現MAC地址與IP地址之間的唯一對映,這樣指定MAC地址,也就相當於指定了IP地址。現在的問題就是如何配置DHCP伺服器的問題了。

DHCP的配置

本人所使用的伺服器是Red Hat Enterprise 

Linux 6.2,DHCP的安裝這裡就不介紹了,網上大把大把的,這裡只說明下檢測伺服器上是否安裝了DHCP的命令:

rpm -qa | grep dhcp
上述命令如果有輸出,就說明伺服器上已經安裝了DHCP。

DHCP服務的配置檔案預設為:在/etc/dhcp/dhcpd.conf(好像linux早期的版本DHCP配置檔案是在/etc/dhcpd.conf,所以這裡要注意)。DHCP是通過其配置檔案啟動的,如果配置檔案中的所有配置正確,就能正常啟動DHCP服務。如果是新手,建議直接使用DHCP安裝檔案裡包含的配置檔案,並在其基礎上進行修改,這樣可以避免很多不必要的錯誤,我當時就是自己按照網上的一些例子來寫配置檔案,結果讓我吃了不少苦頭。使用如下命令拷貝配置檔案的模版:

cd /etc/dhcp/
cp /usr/share/doc/dhcp-3.0pl1/dhcpd.conf.sample dhcpd.conf //複製配置檔案模板
vim /etc/dhcp/dhcpd.conf //使用vi修改/etc/dhcpd.conf
配置的目的就是要將MAC地址與某些特定的IP繫結起來,為了更加理解DHCP,如下列出了DHCP的工作原理:

假設多部計算機在同一個網域當中,也就是說,DHCP Server與它的Clients都在同一個網段之內,可以透過軟體廣播的方式來達到相互溝通的狀態。那麼Client藉由DHCP Server得到的IP的程式為:

1、若Client端計算機設定使用DHCP協議以取得網路引數時,則Client端計算機在開機的時候,或者是重新啟動網絡卡的時候,會自動地發出DHCP Client的需求給網域中的每部計算機;這個時候,由於發出的訊息希望每部計算機都可以接受,所以該訊息除了網絡卡的硬體地址(MAC)無法改變外,需要將該訊息的來源軟體設定為0.0.0.0,而目的地址則為255.255.255.255(linux會自動設定)。網域中的其它沒有提供DHCP服務的計算機,收到這個封包之後會自動地將該封包丟棄而不迴應。

2、DHCP主機響應訊息:如果是DHCP主機收到這個Client的DHCP需求時,那麼DHCP主機首先會針對該次需求的訊息所攜帶的MAC和DHCP主機本身的設定值去比對,如果DHCP主機的設定有針對該MAC做靜態IP(每次都給予一個固定的IP)的提供時,則提供Client端相關的固定IP於相關的網路引數;而如果該訊息的MAC並不在DHCP主機的設定之內時,則DHCP主機會選取目前網域內沒有使用的IP(這個IP與設定值有關)來發放給client端使用。

3、Client端接受來自DHCP主機的網路引數,並設定Client自己的網路環境:當Client端接受響應的訊息之後,首先會以ARP封包在網域內發出訊息,以確定來自DHCP主機發放的IP並沒有被佔用。如果該IP已經被佔用了,那麼Client對於這次的DHCP資訊將不接受,而將再次向網域內發出DHCP的需求廣播封包;若該IP沒有被佔用,則client可以接受DHCP主機所給的網路的引數,那麼這些引數將會被使用於client端的網路設定當中,同時,Client端也會對DHCP主機發出確認封包,告訴server這次的需求已經被確認,而server也會將該資訊記錄下來。

4、Client端結束該IP的使用權:當Client開始使用這個DHCP發放的IP之後,有幾個情況可能會失去這個IP的使用權:Client端離線(不論是關閉網路介面、重新開機、關機等行為,皆算是離線狀態,這個時候server端就會將該IP回收,並放到server自己的備用區中,等待未來使用);Client端租約到期(DHCP server端發放的IP有其使用的期限,Client使用這個IP到達期限規定的期限,Client使用這個IP到達期限規定的時間,就需要將IP還回去,這個時候就會造成斷線,而client也可以再向DHCP主機要求再次分配IP地址)。

如下是我根據DHCP的配置檔案模版寫的一個配置檔案,其中實現了將MAC地址:66:66:66:66:66:0b與IP地址:192.168.0.88之間的繫結。可根據自己的需要實現更多MAC地址與IP之間的繫結。

# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;

ignore client-updates;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
#log-facility local7;

# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.
# This is a very basic subnet declaration.

# A slightly different configuration for an internal subnet.
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.30 192.168.0.39;
  option domain-name-servers 192.168.0.31;
  option domain-name "wan.hust.china";
  option routers 192.168.0.1;
  option broadcast-address 192.168.0.255;
  default-lease-time 21600;
  max-lease-time 43200;

  host pc001 {
	  hardware ethernet 66:66:66:66:66:0b;
	  fixed-address 192.168.0.88;
  }
}
啟動DHCP服務的命令如下所示: 
service dhcpd start    #啟動DHCP服務
service dhcpd status  #檢視DHCP狀態
如果想要開始自啟動DHCP服務,可以使用如下命令: 
chkconfig --level 345 dhcpd on 
至此DHCP配置完成。

QEMU-KVM虛擬機器建立設定

現在就可以通過在建立虛擬機器時指定MAC地址來間接指定IP地址了:

/usr/local/qemu-kemari-v0.2.14/bin/qemu-system-x86_64 -m 1024 /images/test2.img -net nic,mac=66:66:66:66:66:0b -net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=no -vnc :6 -enable-kvm
開啟虛擬機器檢視虛擬機器的網絡卡資訊,就可以看到虛擬機器的IP地址已配置好了。\