From 34e65259ac85222f9e01f0ec5bed2b8ea4aade29 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sun, 2 Aug 2026 18:15:22 -0400 Subject: [PATCH] devis switch : le trunk ne restreignait rien MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `switchport trunk allowed vlan ?` sur le matériel confirme la syntaxe et révèle un défaut : `add` ajoute à la liste courante, la forme sans mot-clé la définit. Le devis émettait `add`. Or un port trunk neuf autorise tous les VLAN — dans une config réelle, les ports n'ont aucune ligne `allowed vlan`, ce qui signifie exactement cela. Y ajouter la liste voulue n'en retranchait aucun : le trunk continuait de tout transporter, et le devis donnait l'illusion de restreindre. Le pire genre de défaut — ça a l'air juste, ça s'applique sans erreur, et ça ne fait pas ce que ça annonce. La forme sans mot-clé est aussi atomique : `none` puis `add` couperait le trunk entre les deux commandes, ce qui suffit à perdre la session si on l'applique sur le port de gestion. Preuves : 24 OK, 0 échec. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 17 +++++++++++++++++ docs/frontiere-opnsense.md | 9 ++++++--- scripts/devis_reseau.py | 8 +++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af72e20..22f17d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # CHANGELOG — Set-OPS +## 2026-08-02 (suite 13) — le trunk ne restreignait rien + +`switchport trunk allowed vlan ?` sur le matériel réel confirme la syntaxe **et** révèle un +défaut : `add` *ajoute* à la liste courante, la forme sans mot-clé la *définit*. + +Le devis émettait `add`. Or un port trunk neuf autorise **tous** les VLAN — dans une +configuration réelle, les ports n'avaient aucune ligne `allowed vlan`, ce qui signifie +exactement cela. Y ajouter la liste des VLAN voulus n'en retranchait aucun : le trunk +continuait de tout transporter, et le devis donnait **l'illusion de restreindre**. + +C'est le pire genre de défaut — une configuration qui a l'air juste, s'applique sans erreur, +et ne fait pas ce qu'elle annonce. + +La forme sans mot-clé est retenue, et elle est aussi **atomique** : `none` puis `add` aurait +coupé le trunk entre les deux commandes, ce qui suffit à perdre la session si on l'applique +sur le port de gestion. + ## 2026-08-02 (suite 12) — la syntaxe des routes, vérifiée sur le matériel Un `show running-config` du commutateur Binardat tranche la question restée ouverte : la diff --git a/docs/frontiere-opnsense.md b/docs/frontiere-opnsense.md index 9697415..4cfab06 100644 --- a/docs/frontiere-opnsense.md +++ b/docs/frontiere-opnsense.md @@ -295,9 +295,12 @@ ansible-vault edit instance/inventories/principal/group_vars/all/vault.yml - ~~La syntaxe des routes~~ — **réglé le 2026-08-02**, confronté à un `show running-config` Binardat : la plateforme écrit `ip route 0.0.0.0/0 ` en notation CIDR. Le générateur suit le dialecte. -- **Restent non vérifiés sur Binardat** : la syntaxe des ACL (`ip access-list extended`), celle - de `switchport trunk allowed vlan add`, et le **spanning-tree** — totalement absent du - `show running-config`, ce qui suggère qu'il est désactivé par défaut sur cette plateforme. +- ~~La syntaxe des trunks~~ — **réglé le 2026-08-02** par `switchport trunk allowed vlan ?`. + Le devis émet la forme **sans mot-clé**, qui *définit* la liste : `add` l'*ajoute* à + l'existante, et sur un port trunk neuf — qui autorise tous les VLAN — n'aurait rien + retranché. Le devis aurait donné l'illusion de restreindre. +- **Restent non vérifiés sur Binardat** : la syntaxe des ACL (`ip access-list extended`) et + celle du **spanning-tree**. - **Les ports physiques restent à nommer** — ``, `` et `` ; rien dans le modèle ne peut les deviner. - ~~**La sortie générale** n'est pas déclarée~~ — **réglé le 2026-08-02.** Elle est diff --git a/scripts/devis_reseau.py b/scripts/devis_reseau.py index f021619..47447e5 100644 --- a/scripts/devis_reseau.py +++ b/scripts/devis_reseau.py @@ -137,7 +137,13 @@ def bloc_trunk(port: str, vlans: str, description: str = "", bord: bool = False) out = [f"interface {port}"] if description: out.append(f" description {description}") - out += [" switchport mode trunk", f" switchport trunk allowed vlan add {vlans}"] + # `allowed vlan ` DEFINIT la liste ; `allowed vlan add ` l'AJOUTE a + # l'existante. Un port trunk neuf autorise tous les VLAN : `add` n'y retrancherait + # rien et le devis donnerait l'illusion de restreindre. La forme sans mot-cle est + # aussi atomique — `none` puis `add` couperait le trunk entre les deux commandes, + # ce qui suffit a perdre la session si on l'applique sur le port de gestion. + # Formes confirmees par `switchport trunk allowed vlan ?` (Binardat, 2026-08-02). + out += [" switchport mode trunk", f" switchport trunk allowed vlan {vlans}"] if bord: out.append(" spanning-tree portfast trunk") return out