玩转神龙服务器的Hyper-V虚拟化网络之 配置直通网卡

在上一篇 玩转神龙服务器的Hyper-V虚拟化网络之 配置NAT网络 的文章中我们使用NAT的方式使Hyper-V VM可以访问公网。在这一篇里,我们会使用直通网卡的特性来使VM有对外提供服务的功能。

前置条件

神龙服务器,一块主网卡。
另外,需要创建额外的辅助网卡,并创建EIP绑定到此辅助网卡。需要创建多少VM,就要创建多少辅助网卡和EIP。

玩转神龙服务器的Hyper-V虚拟化网络之 配置直通网卡

玩转神龙服务器的Hyper-V虚拟化网络之 配置直通网卡

安装Hyper-V

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

运行完后会自动重启两次。

创建虚拟机

这里我预先Copy了阿里云的镜像VHD文件win2016_64_dtc_1607_en-us_40G_noxen_20180801.vhd放在了D盘。我会为每一个虚拟机新建一个基于此VHD的差异磁盘。

$PathVHD = "D:\win2016_64_dtc_1607_en-us_40G_noxen_20180801.vhd"
$VMName = "VM1"
$HyperVRootPath = "D:\Hyper-V"
$VMMeorySize = 4GB
$VMVHD = "${HyperVRootPath}\${VMName}\Virtual Hard Disks\${VMName}.vhd"

New-VHD -ParentPath $PathVHD -Path $VMVHD -Differencing
New-VM -Name $VMName -MemoryStartupBytes $VMMeorySize -BootDevice VHD -VHDPath $VMVHD -Path $HyperVRootPath -Generation 1

在Hyper-V Server上直通网卡到VM

  • 假定需要给VM使用的网卡的IP是192.168.88.20, 使用以下Powershell禁用此网卡,在神龙服务器,此网卡会消失并在设备管理器里不可见。

    $AttachNicIP = "192.168.88.20" # 替换为真实IP
    
    $pnpDeviceID = $null
    Get-WmiObject Win32_NetworkAdapter  | % {
        $config = $_.GetRelated('Win32_NetworkAdapterConfiguration') 
        $IP = $config | Select-Object -expand IPAddress
        if($IP -like "*${AttachNicIP}*")
        {
        $pnpDeviceID = $_.PNPDeviceID
        }
    }
    if ($pnpDeviceID -eq $null) {throw "no device matches."}
    
    $dev = (Get-PnpDevice -PresentOnly).Where{ $_.PNPDeviceID -like $pnpDeviceID }
    
    Disable-PnpDevice -InstanceId $dev.InstanceId -Confirm:$false
    $locationPath = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $dev.InstanceId).Data[0]
    Dismount-VmHostAssignableDevice -LocationPath $locationPath -Force –Verbose
  • 在分配直通网卡给VM时,VM要满足两个条件,一是VM的 自动停止操作关闭电源。二是如果VM使用了动态内存,最小内存和启动内存要一致(我们这里用的是固定大小内存)。在我们前一步创建的VM,第二个条件已经满足。现在配置第一个条件并添加网卡。

    $VM = Get-VM -Name $VMName
    Set-VM -VM $VM -AutomaticStopAction TurnOff
    Add-VMAssignableDevice -VM $vm -LocationPath $locationPath –Verbose
    Start-VM -Name $VMName

玩转神龙服务器的Hyper-V虚拟化网络之 配置直通网卡

为VM安装网卡驱动

如果镜像中已经有最新的网卡设备,这时我们应该可以通过EIP访问VM。
没有带最新的网卡驱动,虚拟机网卡设备可能不能工作。这时需要给虚拟机安装网卡驱动。
驱动位于Hyper-V Server的 "C:ProgramDataaliyunvminitkvmwin10amd64"里。

  • 将网卡驱动Copy到Guest VM里。方法有很多,你可以使用你所想到的方法。这里提供一个创建VHD,把驱动放进去,然后Attach 到VM里。

    $DriverVHD = "${evn:Temp}\DriverData.vhdx"
    New-VHD -Path $DriverVHD -Dynamic -Size 1GB
    Mount-VHD -Path $DriverVHD
    $vhdobj = (Get-DiskImage -ImagePath $DriverVHD)
    
    $DataDrive  = (Get-Disk -Number $vhdobj.Number) | Initialize-Disk -PartitionStyle MBR -PassThru |  New-Partition -UseMaximumSize -AssignDriveLetter | Format-Volume -Confirm:$false -FileSystem NTFS -Force 
    
    $DestPath = "{0}:\Drivers" -f $DataDrive.DriveLetter
    Copy-Item -Path "C:\ProgramData\aliyun\vminit\kvm\win10\amd64" -Filter net*.* -Destination $DestPath –Recurse
    
    Dismount-VHD -Path $DriverVHD
    
    Add-VMHardDiskDrive -VMName $VMName -Path $DriverVHD -ControllerType SCSI
  • 在VM里安装驱动。在命令行或PowerShell里执行以下命令。这里的D盘是我们上一步Attach的虚拟磁盘。

    pnputil -i -a D:\drivers\*.inf

当然,这个时候可以做一些清理工作像删除临时磁盘等,这里就不多说了。

到此,大功告成。可以通过EIP RDP到这个VM里了。感觉是不是多了一台ECS实例?当然你还可以创建很多台。。。

参考:

https://blogs.technet.microsoft.com/heyscriptingguy/2016/07/14/passing-through-devices-to-hyper-v-vms-by-using-discrete-device-assignment/

上一篇:解决Vmware Workstation7上安装Linux系统不能SSH远程连接的问题


下一篇:keepalived 双网卡服务器双机热备