Gestion du réseau Hyper-V
- 1. Commutateur virtuel
- 2. Adapteur réseau physique et adapteur réseau virtuel
- 3. Commutateur virtuel "Private"
- 4. Commutateur virtuel "Internal"
- 5. Commutateur virtuel "External"
- 6. Commutateurs à services TCP/IP
- 7. Récapitulatif
- 8. Exercice "Nested Virtualization"
- 8.1. Configure Nested Virtualization
- 8.2. Disable Nested Virtualization
- 8.3. Dynamic Memory and Runtime Memory Resize
- 8.4. Networking Options
- 8.5 MAC Address Spoofing
- 8.6. Network Address Translation {#network-address-translation}
- 8.7. Optionnel : activer le rôle DHCP en Powershell
- 8.8. Création de commutateurs pour le SAN, Live Migration, Management
- Notes
1. Commutateur virtuel
Un commutateur virtuel est une solution logicielle qui transfère le trafic réseau des machines virtuelles entre elles à la manère d'un commutateur matériel Ethernet, soit en fonction d'une table adresse MAC/numéro de port.
Un commutateur virtuel peut :
- offrir des services de distribution d'adresses et d'options TCP/IP via DHCP,
- s'interfacer à une interface physique
- offrir un service NAT et "router" le trafic à la manière d'un routeur IP,
- s'interfacer physiquement avec les protocoles 802.1 (VLANs, QoS, Etherchannel, LLDP, Spanning-Tree, etc.)
- peut offir des services avancés de sécurité et de redondance
A condition d'y mettre les moyens matériels et financiers, les constructeurs offre la possibilité d'unifier les commutateurs virtuels à travers les hôtes qui les exécutent. Cisco Systems offre un commutateur tiers (Nexus 1000v) qui s'intègre aux produits VMWare vSphere (en remplacement des Distributed Switches), Microsoft Hyper-V (grâce aux Extensible Switches) et à Linux KVM. Ces solutions permettraient d'atteindre des objectifs du paradigme "Software Defined Network".
L'image suivante tirée de la solution Open Source Open vSwitch (http://openvswitch.org/) illustre ce concept de commutateur virtuel distribué.
2. Adapteur réseau physique et adapteur réseau virtuel
Les machines virtuelles se voient attribuer un (ou plusieurs) adapteur réseau lié à un commutateur virtuel.
Un adapteur réseau physique peut être connecté à un commutateur virtuel.
Lors de l'installation du rôle Hyper-V, du point de vue de la partiton parente (domaine 0), l'adaptateur réseau physique abandonne ses paramètres TCP/IP. Les paramètres TCP/IP de cet adapteur sont pris en charges par un adapteur virtuel spécial qui lui est lié.
Get-NetAdapter
On trouvera dans cet exemple de sortie un adapteur physique et deux adapteurs virtuels avec leur nom.
Name InterfaceDescription ifIndex Status MacAddress
---- -------------------- ------- ------ ----------
Ethernet0 Intel(R) 82574L Gigabit Network Conn... 5 Up 00-50-56-01-5C-08
vEthernet (VmNAT) Hyper-V Virtual Ethernet Adapter #2 9 Up 00-15-5D-3A-FB-03
vEthernet (Internal1) Hyper-V Virtual Ethernet Adapter 3 Up 00-15-5D-3A-FB-00
3. Commutateur virtuel "Private"
Ce type de commutateur est totalement isolé du trafic des autres adapteurs et commutateurs.
New-VMSwitch -name PrivateSwitch -SwitchType Private
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
PrivateSwitch Private
4. Commutateur virtuel "Internal"
Ce type de commutateur est accessible à partir de la partition parente à titre de gestion.
New-VMSwitch -name InternalSwitch -SwitchType Internal
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
InternalSwitch Internal
5. Commutateur virtuel "External"
Ce type de commutateur est lié à un adapteur réseau physique. Il offre le résultat du commutateur "ponté" à un adaptateur physique.
New-VMSwitch -name ExternalSwitch -NetAdapterName Ethernet0
En lab, on autorisera la partition parente à accéder au commutateur virtuel qui offre les services TCP/IP du réseau local.
New-VMSwitch -name ExternalSwitch -NetAdapterName Ethernet0 -AllowManagementOS $true
6. Commutateurs à services TCP/IP
Pour offrir des services TCP/IP comme le routage, DHCP, DHCPv6/RA, DNS, NAT et pare-feu, on peut utiliser deux solutions :
- une machine virtuelle à service dédié avec un adapteur connecté à un commutateur "External" et à un ou plusieurs commutateurs "Internal" ou "Private".
- les services intégrés à la solution de l'hôte disponibles selon les versions.
6.1. Routeur virtuel
Le principe consiste à dédier une machine virtuelle à service dédié avec un adapteur connecté à un commutateur "External" et à un ou plusieurs commutateurs "Internal" ou "Private".
On citera des solutions populaires mais mal supportées par Hyper-V comme pfSense (BSD) ou OpenWRT (support LIS).
Par contre, on peut utiliser des solutions pures Linux Debian ou RHEL dernières versions voire une solution Windows Server avec dans le rôle "Remote Access" et les services "Routing" et "DirectAccess and VPN (RAS)" activés.
D'autres solutions supportées en Linux (RouterOS, VyOS) en Cisco Systems (CSR1000v) sont disponibles.
6.2. Solution intégrée Powershell
Sans passer par une machine "routeur" virtuelle, on peut utiliser la fonction intégrée. Celle-ci a été testée sur Server 2016.
On ira lire utilement https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/user_guide/setup_nat_network
New-VMSwitch -name NatSwitch -SwitchType Internal
Création d'une instance NAT
New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “172.17.18.0/24”
Attribution TCP/IP fixe à l'adapteur virtuel (vEthernet)
get-netadapter "vEthernet (NatSwitch)" | New-NetIPAddress -IPAddress 172.17.18.1 -AddressFamily IPv4 -PrefixLength 24
On trouvera ici le cmdlet qui permet de configurer l'adaptateur des partitions parentes avec une adresse IPv4 fixes :
get-netadapter "Ethernet0" | New-NetIPAddress -IPAddress 172.17.18.2 -DefaultGateway 172.17.18.1 -AddressFamily IPv4 -PrefixLength 24
Netsh interface ip add dnsserver “Ethernet” address=<my DNS server>
Hors infrastructure, en lab, on utilisera utilement le rôle DHCP
7. Récapitulatif
Pour mieux comprendre les adapteurs réseaux virtualisé, on peut faire référence à ces documents :
- VMWare : http://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/virtual_networking_concepts.pdf
- Prezi Goffinet : https://prezi.com/brmo8bzwzo1g/vmware-workstation-networking/
- Hyper-V : http://www.altaro.com/hyper-v/the-hyper-v-virtual-switch-explained-part-1/
7.1. Connecter/déconnecter une VM à un commutateur
...
7.2. Retirer un commutateur, un pool NAT
...
8. Exercice "Nested Virtualization"
Source : https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/user_guide/nesting
8.1. Configure Nested Virtualization
- Create a virtual machine. See the prerequisites above for the required OS and VM versions.
- While the virtual machine is in the OFF state, run the following command on the physical Hyper-V host. This enables nested virtualization for the virtual machine.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
- Start the virtual machine.
- Install Hyper-V within the virtual machine, just like you would for a physical server. For more information on installing Hyper-V see, Install Hyper-V .
8.2. Disable Nested Virtualization
You can disable nested virtualization for a stopped virtual machine using the following PowerShell command:
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false
8.3. Dynamic Memory and Runtime Memory Resize
When Hyper-V is running inside a virtual machine, the virtual machine must be turned off to adjust its memory. This means that even if dynamic memory is enabled, the amount of memory will not fluctuate. For virtual machines without dynamic memory enabled, any attempt to adjust the amount of memory while it's on will fail.
Note that simply enabling nested virtualization will have no effect on dynamic memory or runtime memory resize. The incompatibility only occurs while Hyper-V is running in the VM.
8.4. Networking Options
There are two options for networking with nested virtual machines: MAC address spoofing and NAT mode.
8.5 MAC Address Spoofing
In order for network packets to be routed through two virtual switches, MAC address spoofing must be enabled on the first level of virtual switch. This is completed with the following PowerShell command.
Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On
8.6. Network Address Translation
Référence : https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/user_guide/setup_nat_network
The second option relies on network address translation (NAT). This approach is best suited for cases where MAC address spoofing is not possible, like in a public cloud environment.
First, a virtual NAT switch must be created in the host virtual machine (the "middle" VM). Note that the IP addresses are just an example, and will vary across environments:
new-vmswitch -name VmNAT -SwitchType Internal
New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.100.0/24”
Next, assign an IP address to the net adapter:
get-netadapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Each nested virtual machine must have an IP address and gateway assigned to it. Note that the gateway IP must point to the NAT adapter from the previous step. You may also want to assign a DNS server:
get-netadapter "Ethernet" | New-NetIPAddress -IPAddress 192.168.100.2 -DefaultGateway 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Netsh interface ip add dnsserver “Ethernet” address=<my DNS server>
8.7. Optionnel : activer le rôle DHCP en Powershell
Source : https://blogs.technet.microsoft.com/teamdhcp/2012/07/15/bringing-powershell-to-dhcp-server/
Cet exemple est un excellent exercice d'apprentissage de l'environnement de commande.
8.8. Création de commutateurs pour le SAN, Live Migration, Management
...
Notes
Fixer une adresse IP dans la VM
New-NetIPAddress -IPAddress 172.17.18.2 -AddressFamily IPv4 -PrefixLength 24 -InterfaceAlias
"Ethernet"
Set-DnsClientServerAddress -InterfaceIndex 2 -ServerAddresses 8.8.8.8
Get-DnsClientServerAddress
Reconfigurer le client DHCP dans la VM
Set-NetIPInterface -dhcp --enabled
Attacher une NIC de VM à un switch
Connect-VMNetworkAdapter -VMname hy1 -SwitchName NatSwitch
Sur le rôle DHCP, obtenir les baux attribués
Get-DhcpServerv4Scope | Get-DhcpServerv4Lease