Non, nous n’allons pas parler du tube de Nelly Furtado mais de promiscuous sur NSX-T
Certaines appliances (souvent étroitement liées avec des Appliances réseaux… ) nécessitent une configuration spécifique, au niveau des Port Group, par exemple :
- Citrix NetScaler VPX
- Portail Captif UCOPIA/Weblib (Mode espion)
- Controleur Virtuel Aruba
- VMware Esxi Nested
- …
En effet, il est nécessaire d’activer le mode Promiscuous / Mac Address Changes et/ou Forged MAC au niveau du Port Group pour le bon fonctionnement des VM.
Cela est dû à une sécurité côté VMware ESX, pour autoriser uniquement l’adresse Mac affectée à la VM.
En effet, certain VM veulent forger leur propre MAC (par exemple quand plusieurs adresses IP affectées à une même interface) ou encore, l’utilisation des protocoles HRSP / VRRP qui utilise des adresses MAC spécifiques.
Mais dans le cas de NSX-T, il n’y a pas d’option (Promiscuous & co) dans les parametres Segments Vlan / Overlay…
Pour cela, il faut créer un Discovery Profile de type MAC (L2)
Dans Networking -> Segments -> Segments Profiles
Créer un nouveau Profil Add Segment Profile -> MAC Discovery
Et activer le MAC Learning (et MAC Change qui est actif par défaut aussi)
Puis retourner dans Segments, on sélectionne notre Segment MySegment (ou on crée un nouveau)
et dans la sous section Segment Profiles, on affecte notre nouveau Profil de MAC Discovery (passer en mode Edition avant !)
et un p’tit Save et Voilà !
Et pour le plaisir ! Je me suis dit que cela serait intéressant de faire la même chose avec des API. Pour changer, nous utilisons Terraform (au lieu de PowerShell et psNSXT qui je savais ne supporteraient pas encore cette option…).
Et la… gros FAIL, l’ajout d’un segment est très simple et documenté.
Avec la possibilité d’affecter des Discovery Profiles (IP ou MAC)
Mais impossible de trouver comment créer un nouveau profil de Mac Discovery.
Apres quelque recherches sur le Github Terraform de VMware, le constat, ce n’est pas possible pour le moment !!!
J’ai pris mon éditeur préféré… et je me suis attaqué à l’ajout du Policy Mac Discovery Profile dans le terraform NSX-T, après plusieurs heures/jours. J’ai reussi à finir l’ajout avec l’ensemble des tests fonctionnelles ! c’est disponible en PR sur le Github de VMware/Terraform/NSX-T et ca devrait etre disponible dans la prochaine version !
Et donc maintenant il est possible d’avoir une ressource policy_mac_discovery_profile avec le MAC Learning activé et de l’affecter à un segment.
Voilà le fichier tf
data "nsxt_policy_transport_zone" "tz_vlan" {
display_name = "TZ-VLAN"
}
resource "nsxt_policy_mac_discovery_profile" "tf_mac_discovery_mac_learning" {
display_name = "tf_mac_discovery_mac_learning"
description = "Profil MAC Discovery avec MAC Learning On pour MyVMworld"
mac_change_enabled = true
mac_learning_enabled = true
mac_limit_policy = "ALLOW"
}
resource "nsxt_policy_vlan_segment" "tf_mysegment_23" {
display_name = "TF_MySegment_23"
description = "Segment Vlan 23 avec MAC Discovery pour MyVMWorld"
transport_zone_path = data.nsxt_policy_transport_zone.tz_vlan.path
vlan_ids = ["23"]
discovery_profile {
mac_discovery_profile_path = nsxt_policy_mac_discovery_profile.tf_mac_discovery_mac_learning.path
}
}
Et un petit terraform plan
>terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# nsxt_policy_mac_discovery_profile.tf_mac_discovery_mac_learning will be created
+ resource "nsxt_policy_mac_discovery_profile" "tf_mac_discovery_mac_learning" {
+ description = "Profil MAC Discovery avec MAC Learning On pour MyVMworld"
+ display_name = "tf_mac_discovery_mac_learning"
+ id = (known after apply)
+ mac_change_enabled = true
+ mac_learning_enabled = true
+ mac_limit_policy = "ALLOW"
+ nsx_id = (known after apply)
+ path = (known after apply)
+ remote_overlay_mac_limit = 2048
+ revision = (known after apply)
}
# nsxt_policy_vlan_segment.tf_mysegment_23 will be created
+ resource "nsxt_policy_vlan_segment" "tf_mysegment_23" {
+ description = "Segment Vlan 23 avec MAC Discovery pour MyVMWorld"
+ display_name = "TF_MySegment_23"
+ id = (known after apply)
+ nsx_id = (known after apply)
+ path = (known after apply)
+ revision = (known after apply)
+ transport_zone_path = "/infra/sites/default/enforcement-points/default/transport-zones/af9bed19-6b4a-4790-8a93-c7a20d88ce3c"
+ vlan_ids = [
+ "23",
]
+ discovery_profile {
+ binding_map_path = (known after apply)
+ mac_discovery_profile_path = (known after apply)
+ revision = (known after apply)
}
}
Plan: 2 to add, 0 to change, 0 to destroy.
Il suffit de faire un terraform apply puis yes
>terraform apply
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# nsxt_policy_mac_discovery_profile.tf_mac_discovery_mac_learning will be created
+ resource "nsxt_policy_mac_discovery_profile" "tf_mac_discovery_mac_learning" {
+ description = "Profil MAC Discovery avec MAC Learning On pour MyVMworld"
+ display_name = "tf_mac_discovery_mac_learning"
+ id = (known after apply)
+ mac_change_enabled = true
+ mac_learning_enabled = true
+ mac_limit_policy = "ALLOW"
+ nsx_id = (known after apply)
+ path = (known after apply)
+ remote_overlay_mac_limit = 2048
+ revision = (known after apply)
}
# nsxt_policy_vlan_segment.tf_mysegment_23 will be created
+ resource "nsxt_policy_vlan_segment" "tf_mysegment_23" {
+ description = "Segment Vlan 23 avec MAC Discovery pour MyVMWorld"
+ display_name = "TF_MySegment_23"
+ id = (known after apply)
+ nsx_id = (known after apply)
+ path = (known after apply)
+ revision = (known after apply)
+ transport_zone_path = "/infra/sites/default/enforcement-points/default/transport-zones/af9bed19-6b4a-4790-8a93-c7a20d88ce3c"
+ vlan_ids = [
+ "23",
]
+ discovery_profile {
+ binding_map_path = (known after apply)
+ mac_discovery_profile_path = (known after apply)
+ revision = (known after apply)
}
}
Plan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
nsxt_policy_mac_discovery_profile.tf_mac_discovery_mac_learning: Creating...
nsxt_policy_mac_discovery_profile.tf_mac_discovery_mac_learning: Creation complete after 0s [id=acac04b1-6e68-4acf-991d-764a1d7cf1ca]
nsxt_policy_vlan_segment.tf_mysegment_23: Creating...
nsxt_policy_vlan_segment.tf_mysegment_23: Creation complete after 0s [id=4057af9b-27f7-4bd1-ac6c-7ae67ebead81]
et Voila !
Merci au p’tit Greg pour l’idée de sujet… 😉