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 :

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… 😉

Alexis La Goutte

Rédigé par

Alexis La Goutte

Alexis La Goutte est depuis 8 ans consultant Réseau & Sécurité chez Cheops Technology. Il intervient chez des ETI de l’ouest et quelques grands comptes nationaux. Spécialisé dans le réseau, et plus particulièrement sur les produits Aruba, et dans la virtualisation & sécurisation du réseau VMware NSX. Alexis est certifié Aruba Certified Mobility eXpert (ACMX) et Aruba Certified ClearPass Professional (ACCP) également membre des programmes Aruba Ambassador Partner et MVP Airheads depuis 2017.
Lors qu’il lui reste du temps, il est Core dev pour Wireshark (contributeur au dissector WiFi, TLS, QUIC…) depuis 2011. Il contribue aussi au module PowerNSX qui permet l’automatisation NSX via PowerShell. il y a aussi crée en 2018, PowerAruba qui regroupe différents modules concernant l’automatisation (utilisation des API REST) des produits Aruba/HPE (PowerArubaSW), pour ArubaCX (PowerArubaCX) et enfin pour ClearPass (PowerArubaCP).
Depuis 2020, Alexis est devenu vExpert, et reconnu aussi dans la catégorie vExpert NSX.