underlay : le routeur porte le SVI, et le transit sort de la partie B
Deux incohérences visibles à la relecture du devis complet. `bifrost-01` portait le SVI Vlan10 -> 10.0.0.1 et était déclaré dans `underlay.hotes` à 10.0.0.2. Une interface VLAN n'a qu'une adresse primaire : les deux ne pouvaient pas être vraies. L'entrée datait d'avant la désignation du routeur, quand 10.0.0.1 était une passerelle abstraite. Le routeur est déclaré à l'adresse du SVI qu'il porte, et `make underlay` refuse désormais la divergence. La partie B créait `vlan 40` alors que son trunk ne le transporte pas — le transit ne relie que le routeur à la frontière. VLAN exclu de la partie B, comme il l'est déjà des trunks généraux. Preuves : 24 OK, 0 échec ; garde de cohérence exercée. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
2d2c5c69fa
commit
7e852b5eef
4 changed files with 36 additions and 1 deletions
17
CHANGELOG.md
17
CHANGELOG.md
|
|
@ -1,5 +1,22 @@
|
|||
# CHANGELOG — Set-OPS
|
||||
|
||||
## 2026-08-01 (suite 5) — deux incohérences du devis switch
|
||||
|
||||
### Corrigé — le routeur avait deux adresses de gestion contradictoires
|
||||
`bifrost-01` portait le SVI `Vlan10 → 10.0.0.1` **et** était déclaré dans `underlay.hotes`
|
||||
à `10.0.0.2`. Une interface VLAN n'a qu'une adresse primaire : les deux ne pouvaient pas
|
||||
être vraies. L'entrée datait d'avant la désignation du routeur, quand `10.0.0.1` était une
|
||||
passerelle abstraite.
|
||||
|
||||
Le routeur est désormais déclaré à l'adresse du SVI qu'il porte, et `make underlay` **refuse**
|
||||
la divergence : `ip 10.0.0.2 != passerelle 10.0.0.1 — le routeur porte ce SVI, les deux
|
||||
doivent coïncider`. Le roster des trois switches reste complet.
|
||||
|
||||
### Corrigé — VLAN de transit déclaré sur les switches d'accès
|
||||
La partie B créait `vlan 40` alors que le trunk B3 ne le transporte pas — le transit ne relie
|
||||
que le routeur à la frontière. Un VLAN qui n'aurait jamais vu de trame. Il est exclu de la
|
||||
partie B, comme il l'est déjà des trunks généraux.
|
||||
|
||||
## 2026-08-01 (suite 4) — un seul switch route, les autres en L2 pur
|
||||
|
||||
### Décidé — `underlay.routeur`
|
||||
|
|
|
|||
|
|
@ -108,7 +108,12 @@ def partie_acces(underlay: dict | None, tenants: list, vlans: str) -> list[str]:
|
|||
"!",
|
||||
"! ----- B1. Memes VLANs (pour commuter les trames etiquetees) -----",
|
||||
]
|
||||
# Le transit ne relie que le routeur a la frontiere : aucune trame ne le traverse
|
||||
# ici. Le declarer serait un VLAN qui ne verra jamais de trafic.
|
||||
transit = underlay_mod.reseau_transit(underlay)
|
||||
for r in underlay_mod.reseaux(underlay):
|
||||
if transit and r["vlan"] == transit["vlan"]:
|
||||
continue
|
||||
out += [f"vlan {r['vlan']}", f" name {r['nom']}"]
|
||||
for nom, pfx, n in tenants:
|
||||
for zone in sorted(n["categories"]):
|
||||
|
|
|
|||
|
|
@ -165,6 +165,17 @@ def valider(underlay: dict | None,
|
|||
r_nom = routeur(underlay)
|
||||
if r_nom and r_nom not in {h.get("nom") for h in hotes(underlay)}:
|
||||
erreurs.append(f"routeur '{r_nom}': aucun hote de ce nom n'est declare")
|
||||
# Le routeur PORTE le SVI : son adresse de gestion est la passerelle du reseau, pas
|
||||
# une adresse d'hote a part. Deux valeurs differentes se contrediraient — une
|
||||
# interface VLAN n'a qu'une adresse primaire.
|
||||
for h in hotes(underlay):
|
||||
if h.get("nom") != r_nom:
|
||||
continue
|
||||
r = {x.get("nom"): x for x in reseaux(underlay)}.get(h.get("reseau")) or {}
|
||||
gw = r.get("passerelle")
|
||||
if gw and str(h.get("ip")) != str(gw):
|
||||
erreurs.append(f"routeur '{r_nom}': ip {h.get('ip')} != passerelle {gw} du reseau "
|
||||
f"'{h.get('reseau')}' — le routeur porte ce SVI, les deux doivent coincider")
|
||||
|
||||
par_nom = {r.get("nom"): r for r in reseaux(underlay)}
|
||||
for h in hotes(underlay):
|
||||
|
|
|
|||
|
|
@ -60,6 +60,8 @@ underlay:
|
|||
|
||||
# Hotes fixes documentes (optionnel) : IP hors DHCP, verifiees dans leur reseau.
|
||||
hotes:
|
||||
- { nom: switch-01, reseau: management, ip: 10.0.0.2 }
|
||||
# Le switch designe `routeur` porte le SVI de management : son adresse de gestion
|
||||
# EST la passerelle du reseau. `make underlay` refuse les deux valeurs divergentes.
|
||||
- { nom: switch-01, reseau: management, ip: 10.0.0.1 }
|
||||
- { nom: switch-02, reseau: management, ip: 10.0.0.3 }
|
||||
- { nom: switch-03, reseau: management, ip: 10.0.0.4 }
|
||||
|
|
|
|||
Loading…
Reference in a new issue