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:
parent
b39a3a4735
commit
b5ca369ae7
3 changed files with 42 additions and 3 deletions
20
CHANGELOG.md
20
CHANGELOG.md
|
|
@ -1,5 +1,25 @@
|
||||||
# CHANGELOG — Set-OPS
|
# 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
|
## 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
|
`spanning-tree ?` en mode configuration tranche la dernière inconnue, **en faveur de la forme
|
||||||
|
|
|
||||||
|
|
@ -324,11 +324,20 @@ surtout les trunks, dont la forme `add` ne retranchait rien.
|
||||||
| Ligne émise | Où | Risque |
|
| 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` |
|
| `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) |
|
| `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
|
Sur une **interface VLAN**, ni `spanning-tree` ni `ip access-group` n'existent (liste complète
|
||||||
d'interface : `(config-if)#spanning-tree ?` et `(config-if)#ip ?` les donneraient.
|
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>`
|
- **Les ports physiques restent à nommer** — `<PORT-VERS-PROXMOX>`, `<PORT-VERS-FRONTIERE>`
|
||||||
et `<PORT-TRUNK>` ; rien dans le modèle ne peut les deviner.
|
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
|
- ~~**La sortie générale** n'est pas déclarée~~ — **réglé le 2026-08-02.** Elle est
|
||||||
|
|
|
||||||
|
|
@ -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"vlan {vlan_de(n['index'], zone)}")
|
||||||
out.append(f" name {pfx}{n['index']}-{c['libelle']}")
|
out.append(f" name {pfx}{n['index']}-{c['libelle']}")
|
||||||
out += ["!", "! ----- 2. Interfaces de routage (SVI = passerelle des hotes) -----"]
|
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:
|
for nom, pfx, n in tenants:
|
||||||
m = masque(int(n.get("cidr_hote", 24)))
|
m = masque(int(n.get("cidr_hote", 24)))
|
||||||
for zone in sorted(n["categories"]):
|
for zone in sorted(n["categories"]):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue