Powershell HV : Commutateurs virtuels

Gestion des commutateurs virtuels

Un commutateur virtuel représente un switch réseau sur lequel les machines virtuelles seront connectées. C’est cet élément qui va permettre aux machines virtuelles de dialoguer entre elles ou avec l’extérieur.

Les commutateurs virtuels SAN ne seront pas abordés ici, il est nécessaire de disposer d’une carte HBA et une connexion Fibre Channel pour les utiliser ; ce qui est peu probable sur un poste de travail utilisateur.

1. Les types de commutateurs

La gestion des commutateurs se trouve dans la console de gestion Hyper-V en sélectionnant Gestionnaire de commutateur virtuel.

images/02EIT006.png

Trois types de commutateurs sont disponibles :

  • Externe : ce switch autorise les machines virtuelles à communiquer avec l’extérieur. Pour cela, il est nécessaire d’attacher le commutateur à une carte réseau physique. Un et un seul commutateur virtuel peut être attaché à une carte réseau physique.

  • Interne : ce type de switch permet aux ordinateurs virtuels de communiquer entre eux et de communiquer avec l’hôte, mais pas avec l’extérieur.

  • Privé : ce switch n’autorise que la communication entre machines virtuelles. Elles ne peuvent ni communiquer avec l’extérieur, ni avec l’hôte.

Le commutateur privé sera probablement peu utilisé, si ce n’est dans un environnement qui nécessite d’être complètement cloisonné. Le switch interne à l’avantage de cloisonner l’environnement virtuel tout en permettant les communications avec la machine hôte et donc d’échanger des informations. Si une connexion au réseau d’entreprise ou à Internet est nécessaire, il faudra utiliser un switch externe.

2. Création d’un commutateur virtuel

La commande New-VMSwitch crée un commutateur virtuel. Elle contient trois jeux de paramètres. Deux jeux de paramètres servent à créer un commutateur virtuel de type externe en spécifiant soit le nom de l’interface réseau physique, soit sa description. Le troisième jeu sert à créer un commutateur virtuel privé ou interne.

Attention, la création d’un commutateur virtuel qui utilise une carte réseau physique, interrompt la connectivité réseau le temps de sa création.

Ci-dessous la syntaxe de la commande pour créer un switch virtuel externe à partir du nom de l’interface réseau physique.

New-VMSwitch [-Name] <string>  
        -NetAdapterName <string[]>  
        [-AllowManagementOS <bool>]  
        [-Notes <string>]  
        [-MinimumBandwidthMode {Default | Weight | Absolute | None}]
        [-EnableIov <bool>]  
        [-EnablePacketDirect <bool>] 
        [-EnableEmbeddedTeaming <bool>]
  • Name : nom du switch virtuel à créer.

  • NetAdapterName : nom de l’interface réseau physique sur laquelle connecter le switch. La liste des cartes réseau peut être obtenue avec la commande : Get-NetAdapter.

  • Notes : description à donner au switch.

  • AllowManagementOS : spécifie si l’ordinateur a aussi accès à cette carte réseau. Si ce paramètre est configuré à faux, seules les machines virtuelles peuvent utiliser cette carte, l’ordinateur hôte n’y a plus accès.

Les paramètres suivants sont disponibles sur la version poste de travail d’Hyper-V mais sont plus pertinents dans le cadre de la version serveur d’Hyper-V.

  • EnableEmbeddedTeaming : activation du teaming de carte réseau pour le switch virtuel.

  • EnableIov : activation de la virtualisation IO.

  • EnablePacketDirect : activation de la fonctionnalité « packet direct path through ».

  • MinimumBandwidthMode : spécifie le mode de gestion QoS du switch, soit en pourcentage de la bande passante avec la valeur Weight, soit en valeur (octets/secondes), avec la valeur Absolute.

Le deuxième jeu de paramètres crée aussi un switch virtuel externe, mais cette fois à partir de la description de la carte réseau physique plutôt que son nom :

New-VMSwitch [-Name] <string>  
        -NetAdapterInterfaceDescription <string[]>  
         [-AllowManagementOS <bool>]  
         [-Notes <string>] 
         [-MinimumBandwidthMode {Default | Weight | Absolute | None}]
         [-EnableIov <bool>] 
         [-EnablePacketDirect <bool>]  
         [-EnableEmbeddedTeaming <bool>]

Dans ce cas aussi la description de la carte réseau peut être retrouvée avec la commande Get-NetAdapter.

Enfin, le troisième jeu de paramètres crée un switch virtuel interne ou privé :

New-VMSwitch [-Name] <string>  
        -SwitchType <VMSwitchType> {Internal | Private}  
         [-Notes <string>]  
         [-MinimumBandwidthMode {Default | Weight | Absolute | None}]
         [-EnableIov <bool>]  
         [-EnablePacketDirect <bool>] 
         [-EnableEmbeddedTeaming <bool>] 

L’exercice suivant se propose de créer des commutateurs virtuels de chaque type, le premier étant un switch virtuel privé.

Tout d’abord, les cartes réseau disponibles sont listées avec la commande Get-NetAdapter, ce qui va permettre d’effectuer la comparaison après la création des switchs virtuels.

images/02EIT007.png

L’ordinateur possède une carte réseau Lan et une carte Wi-Fi.

La première commande crée un commutateur virtuel privé :

New-VMSwitch -Name Privé ` 
       -SwitchType Private ` 
       -Notes "Commutateur Privé, VMs uniquement"

La deuxième commande crée un commutateur virtuel interne :

New-VMSwitch -Name Interne ` 
       -SwitchType Internal ` 
       -Notes "Commutateur Interne, VMs et hôte"

La troisième commande crée un commutateur virtuel externe à partir du nom de la carte physique LAN, ici Ethernet.

New-VMSwitch -Name Externe_LAN ` 
       -NetAdapterName "Ethernet" ` 
       -Notes "CommutateurExterne  sur carte LAN"

Enfin, la dernière commande crée un commutateur virtuel externe à partir de la description de la carte réseau Wi-Fi.

New-VMSwitch -Name Externe_Wifi ` 
     -NetAdapterInterfaceDescription "Intel(R) Centrino(R) Advanced-N 6205"` 
     -Notes "Commutateur Externe sur carte LAN"

Ci-dessous, le résultat des différentes commandes :

images/02EIT008.png

En plus des cartes physiques Ethernet et Wi-Fi, des cartes virtuelles ont été créées. Pour chaque carte physique, Hyper-V crée une carte virtuelle associée et c’est désormais la carte virtuelle qui est utilisée pour les communications. Même l’hôte va utiliser la carte virtuelle.

Les cartes virtuelles suivantes sont créées :

  • vEthernet (Externe_LAN) : créée par le switch Externe_LAN, pour se substituer à la carte physique Ethernet.

  • vEthernet (Externe_Wifi) : créée par le switch Externe_Wifi, pour se substituer à la carte physique Wi-Fi.

  • Ethernet 2 : pont réseau qui connecte la carte physique Wi-Fi au switch virtuel Externe_Wifi.

  • vEthernet (Interne) : créée par le switch Interne et permet de connecter l’hôte aux machines virtuelles.

3. Modification d’un commutateur virtuel

Lors de sa création, tous les paramètres du switch ne peuvent pas être spécifiés, il faut donc affiner la configuration des commutateurs après leur création si nécessaire.

La première étape consiste à lister les commutateurs avec la commande Get-VMSwitch. Utilisé sans arguments la commande retourne la liste des commutateurs. Si le nom du switch est passé en paramètre, la commande affiche des informations sommaires.

PS C:\> Get-VMSwitch 
 
Name         SwitchType NetAdapterInterfaceDescription 
----         ---------- ------------------------------ 
Privé        Private 
Interne      Internal 
Externe_LAN  External   Intel(R) 82579LM Gigabit Network Connection
Externe_Wifi External   Intel(R) Centrino(R) Advanced-N 6205

Pour afficher toutes les propriétés d’un commutateur, il faut utiliser la commande Format-List ou son alias fl en sortie de Get-VMSwitch.

PS C:\> Get-VMSwitch Privé | fl * 
 
Name                : Privé 
Id                  : c9305f8e-6e25-4b45-9349-83fa7d79a376 
Notes               : Commutateur Privé, VMS uniquement 
Extensions          : {Plateforme de filtrage Microsoft Windows, 
Capture NDIS Microsoft} 
BandwidthReservationMode     : Absolute 
PacketDirectEnabled          : False 
EmbeddedTeamingEnabled       : False 
IovEnabled                   : False 
SwitchType                   : Private 
AllowManagementOS            : False 
NetAdapterInterfaceDescription   :  
NetAdapterInterfaceDescriptions  :  
IovSupport                   : False 
IovSupportReasons            :  
AvailableIPSecSA             : 0 
. . .

La seconde commande à utiliser est Get-Member qui liste les méthodes et propriétés de l’objet. L’alias gm est ici utilisé.

Get-VMSwitch Privé | gm
images/02EIT009.png

Le constat à effectuer ici, est que les propriétés ont uniquement un accès en lecture ({get ;}), il n’est donc pas possible d’agir directement sur ces propriétés. Par exemple, une tentative de modification de la propriété PacketDirectEnabled en utilisant directement l’objet ne fonctionne pas.

images/02EIT010.png

Les modifications d’un commutateur virtuel doivent être effectuées avec le jeu de commandes Set-<nom> ; Set-VMSwitchRename-VMSwitchSet-VMSwitchExtensionPortFeatureSet-VMSwitchExtensionSwitchFeatureSet-VMSwitchTeam.

Seule la cmdlet Set-VMSwitch est décrite ici, les autres sont des commandes plus avancées ou liées à l’agrégation de cartes réseau (teaming), pour Set-VMSwitchTeam. Cette cmdlet possède cinq jeux de paramètres qui sont fonction des points d’entrée utilisés pour identifier le commutateur et la carte réseau.

Les paramètres de la commande :

  • AllowManagementOS : si ce paramètre est spécifié, l’hôte peut utiliser la carte réseau liée à ce commutateur. Dans le cas contraire, l’hôte ne pourra utiliser ce switch pour communiquer avec l’extérieur. Sur un poste avec une seule carte réseau, il faut donc spécifier ce paramètre, sinon l’ordinateur n’aura plus de connectivité réseau.

  • DefaultFlowMinimumBandwidthAbsoluteDefaultFlowMinimumBandwidthWeight : ces paramètres configurent la bande passante minimale attribuée à la catégorie de flux default flow. Les différents flux passant par un commutateur virtuel peuvent avoir une bande passante minimale allouée. C’est le cas dans un environnement serveur ou différentes cartes virtuelles sont définies sur le switch ; pour le réseau de management, de stockage de réplication, etc.

  • Extensions : liste des objets extensions, dans l’ordre où elles doivent être connectées. Cela permet de les réordonner.

  • Name : nom du commutateur à configurer.

  • Notes : description du switch.

  • SwitchType : type de switch, seule la conversion de type privé vers interne, ou inversement, est possible. Il n’est pas possible de convertir un switch externe vers un autre type ou inversement.

  • VMSwitch : objet commutateur à modifier. Il est obtenu avec la commande Get-VMSwitch.

  • NetAdapterInterfaceDescriptionNetAdapterName : description ou nom de la carte réseau à utiliser avec le commutateur. Par défaut, si ce paramètre est spécifié, le paramètre AllowManagementOS est configuré à vrai.

L’expression suivante retrouve la liste des commutateurs virtuels et leur assigne une description. Dans notre environnement, il n’y a qu’un seul commutateur. Si plusieurs switches sont présents, il faut spécifier le paramètre Name à Get-VMSwitch.

Get-VMSwitch | Set-VMSwitch -Notes "Comutateur Virtuel"

Le code suivant renomme le commutateur :

Get-VMSwitch | Rename-VMSwitch -NewName SwitchProd

La suppression d’un commutateur virtuel avec la commande Remove-VMSwitch est vue dans le chapitre suivant, cf. chapitre PowerShell, Hyper-V et Windows Server 2016. Avant de supprimer le commutateur, il est préférable de vérifier si des machines virtuelles y sont connectées.