1. 程式人生 > >初始化Windows虛擬機(KVM)的網卡IP

初始化Windows虛擬機(KVM)的網卡IP

KVM windows 網卡配置

新創建的Windows虛擬機如果不能通過DHCP獲取IP,我們就需要登錄到虛擬機內手動配置,很麻煩。這個工作能自動化最好,為Windows虛擬機進行初始化通常有兩種思路:

1. 通過cloudbase-init,這個是cloud-init的Windows版本。Cloudbase-init需要類似OpenStack等雲平臺的metadata service獲取初始化數據,如果我們實際環境中沒有使用這種復雜的管理平臺來管理KVM虛擬機,cloudbase-init用起來就比較麻煩,需要自己構建metadata。

2. 內置初始化腳本。在系統內編寫腳本,並添加到開機啟動。虛擬機開機以前,在宿主機上通過guestfs工具把初始化腳本需要的數據拷進虛擬機磁盤。這種方法適合使用腳本或功能簡單的自研平臺創建虛擬機的情況。

Cloudbase-init的方法暫且不表,本文先演示筆者管理的環境裏如何初始化Windows虛擬機的網絡配置。

操作環境

宿主機操作系統CentOS7.4

虛擬機操作系統 Windows Server 2012 r2

虛擬機擁有1塊網卡,我們的試驗任務就是讓內置腳本為這塊網卡配置制定的IP。

制作虛擬機鏡像

首先使用Windows Server 2012 r2的光盤ISO文件安裝一臺虛擬機,然後進行以下步驟:

1. 約定數據格式

文件名約定為nicinfo.ini,後續我們編寫的內置腳本將讀取該文件,內容格式如下:

ipsetup:1

ip:192.168.1.2

mask:255.255.255.0

gw:192.168.1.1

mac: 52:54:00:a0:d8:67

各字段意義:

ipsetup是一個標誌位,控制是否進行IP配置,1表示進行,0表示不進行。因為對虛擬機來說只有第一次啟動時需要配置IP,其他時間的重啟都不需要,所以內置腳本需要在完成IP配置後把ipsetup置0,防止腳本再次執行;

ip、mask、gw和mac分別是IP地址,網絡掩碼,網關和MAC地址。

2. 編寫powershell腳本

腳本名setup.ps1,可以讀取並解析符合上一步中所定義格式的數據,放在路徑C:\Windows\下

sleep 120

$ini = Get-Content "C:\Windows\nicinfo.ini"

$hash = @{}

foreach ($iniLine in $ini) {

$key = $iniLine.split(':',2)[0]

$value = $iniLine.split(":",2)[1]

$hash."$key" = $value

}

$ipsetup=$hash["ipsetup"]

if($ipsetup -eq "1"){

$ip = $hash["ip"]

$mask = $hash["mask"]

$gw = $hash["gw"]

$mac = $hash["mac"]

$nic = Get-WmiObject win32_networkadapterconfiguration -filter "MACAddress='$mac'"

$nic.EnableStatic($ip, $mask)

$nic.SetGateways($gw, 1)

$nic.SetDNSServerSearchOrder("8.8.8.8")

$ini -replace "ipsetup:1","ipsetup:0" > tmp.ini

mv -Force tmp.ini nicinfo.ini

}

開始讓腳本sleep 120秒是給網卡設備啟用時間,如果不等待,有可能會出現腳本在網卡起來之前就運行,導致配置IP失敗。

如果ipsetup值為1,腳本就按照給定的數據設置網卡信息,並在結尾把ipsetup置0 。

3. 添加腳本開機啟動

在“運行”中執行gpedit.msc,進入組策略管理,找到計算機配置->Windows設置->腳本(啟動/關機),雙擊“啟動”按鈕

技術分享圖片

切換到powershell標簽,點擊“添加”:

技術分享圖片

添加上一步中寫的腳本,然後點擊確定,就添加完成了。

技術分享圖片

設置完後把虛擬機關機,現在這個鏡像就可以拿來創建新的虛擬機了。

驗證

在宿主機上執行以下命令:

virt-copy-in -a vmdisk.img nicinfo.ini C:/Windows/

vmdisk.img是剛才制作好的虛擬機鏡像文件。

然後把虛擬機開機,過一會登錄虛擬機會發現網卡已經配置好了,

技術分享圖片


初始化Windows虛擬機(KVM)的網卡IP