devis switch : la liaison des ACL n'existe pas sur une interface VLAN

`ip ?` sur une interface VLAN du Binardat n'offre aucun `access-group`, et la
liste complète des commandes de ce mode n'en contient pas davantage. La ligne
`ip access-group <NOM> in` posée sur les douze SVI n'existe pas sur cette
plateforme.

C'est la ligne qui rend l'isolation effective. Sans elle, les ACL de la
section 3 sont parfaitement définies et jamais liées : `show access-lists`
afficherait « used 0 time(s) », et rien d'autre ne signalerait que
l'isolation inter-tenant ne filtre rien. Même signature que le défaut du
trunk — une configuration qui a l'air juste et n'agit pas.

Le `firewall disable` aperçu dans un `show running-config` prend
rétrospectivement du sens : le filtrage semble conditionné globalement.

Aucune forme de remplacement n'est devinée. Le devis porte un avertissement à
cet endroit, en dialecte `binardat` uniquement — après trois syntaxes
supposées dont deux fausses, marquer l'incertitude vaut mieux qu'un quatrième
pari.

Preuves : 24 OK, 0 échec.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-08-02 20:11:15 -04:00
parent b39a3a4735
commit b5ca369ae7
3 changed files with 42 additions and 3 deletions

View file

@ -1,5 +1,25 @@
# CHANGELOG — Set-OPS
## 2026-08-02 (suite 18) — la liaison des ACL n'existe pas sur une interface VLAN
`ip ?` sur une interface VLAN du Binardat n'offre **aucun `access-group`**, et la liste
complète des commandes de ce mode n'en contient pas davantage. La ligne
`ip access-group <NOM> in` que le devis pose sur les douze SVI n'existe donc pas sur cette
plateforme.
**C'est la ligne qui rend l'isolation effective.** Sans elle, les ACL de la section 3 sont
parfaitement définies et jamais liées : `show access-lists` afficherait « used 0 time(s) », et
rien d'autre ne signalerait que l'isolation inter-tenant ne filtre rien. Même signature que le
défaut du trunk — une configuration qui a l'air juste et n'agit pas.
Le `firewall disable` aperçu dans un `show running-config` prend rétrospectivement du sens :
le filtrage semble conditionné globalement.
**Aucune forme de remplacement n'est devinée.** Le devis porte un avertissement à cet endroit,
en dialecte `binardat` uniquement — après trois syntaxes supposées dont deux fausses, marquer
l'incertitude vaut mieux qu'un quatrième pari. Reste à trancher sur une interface **physique**
(`ip ?`, `access-group ?`) et sur le rôle de `firewall enable`.
## 2026-08-02 (suite 17) — spanning-tree vérifié : les six familles sont closes
`spanning-tree ?` en mode configuration tranche la dernière inconnue, **en faveur de la forme

View file

@ -324,11 +324,20 @@ surtout les trunks, dont la forme `add` ne retranchait rien.
| Ligne émise | Où | Risque |
|---|---|---|
| `spanning-tree portfast trunk` | interface | `trunk` est un mot-clé Cisco ; l'équivalent s'écrit souvent `spanning-tree portfast` seul, voire `edged-port` |
| `ip access-group <NOM> in` | interface | c'est ce qui **lie** l'ACL au SVI — sans elle, l'ACL existe et ne filtre rien |
| `ip access-group <NOM> in` | interface VLAN | **probablement invalide** : `ip ?` sur une interface VLAN n'offre aucun `access-group` (vérifié le 2026-08-02). Le filtrage semble aussi conditionné globalement par `firewall enable` |
| `ip default-gateway <ip>` | global | forme des switches d'accès (partie B) |
L'aide de `spanning-tree ?` en mode configuration **globale** ne couvre pas les commandes
d'interface : `(config-if)#spanning-tree ?` et `(config-if)#ip ?` les donneraient.
Sur une **interface VLAN**, ni `spanning-tree` ni `ip access-group` n'existent (liste complète
des commandes vérifiée). Pour `portfast` c'est attendu — il vise un port physique. Pour la
liaison des ACL, non : c'est le mécanisme qui rend l'isolation effective.
**Conséquence, et elle est lourde** : appliqué tel quel, le devis produirait des ACL
parfaitement définies et **jamais liées**. `show access-lists` afficherait « used 0 time(s) »,
et rien d'autre ne signalerait que l'isolation inter-tenant ne filtre pas. Le devis porte
désormais un avertissement à cet endroit, en dialecte `binardat` uniquement.
Reste à trancher sur une interface **physique** : `ip ?`, `access-group ?`, `spanning-tree ?`
— et le rôle de `firewall enable`.
- **Les ports physiques restent à nommer**`<PORT-VERS-PROXMOX>`, `<PORT-VERS-FRONTIERE>`
et `<PORT-TRUNK>` ; 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

View file

@ -477,6 +477,16 @@ def generer(tenants: list[tuple[str, str, dict]], dialecte: str | None = None) -
out.append(f"vlan {vlan_de(n['index'], zone)}")
out.append(f" name {pfx}{n['index']}-{c['libelle']}")
out += ["!", "! ----- 2. Interfaces de routage (SVI = passerelle des hotes) -----"]
if dialecte == "binardat":
out += [
"! /!\\ LA LIGNE `ip access-group ... in` CI-DESSOUS EST DOUTEUSE SUR CETTE",
"! PLATEFORME : `ip ?` sur une interface VLAN n'offre AUCUN `access-group`",
"! (verifie le 2026-08-02). Appliquee telle quelle, elle serait refusee — ou pire,",
"! ignoree : les ACL de la section 3 existeraient sans rien filtrer, exactement",
"! comme un `show access-lists` affichant « used 0 time(s) ».",
"! Le filtrage semble par ailleurs conditionne globalement (`firewall enable`).",
"! A trancher par `ip ?` et `access-group ?` sur une interface PHYSIQUE.",
]
for nom, pfx, n in tenants:
m = masque(int(n.get("cidr_hote", 24)))
for zone in sorted(n["categories"]):