implementer la gestion des ip public... #31
Labels
No labels
bug fix
feature implementation
new feature
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
syonad/two#31
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Synthèse — architecture réseau opérateur de VMs
Le design retenu
Un plan underlay hiérarchique en eBGP, et un plan overlay EVPN-VXLAN en iBGP, indépendants l'un de l'autre.
L'espace public est ancré aux routeurs de bordure, qui en sont la gateway. Chaque subnet public est un VNI L2 étendu jusqu'aux hosts, y compris entre DC — ce qui permet à n'importe quelle VM d'obtenir n'importe quelle IP du pool, où qu'elle tourne. C'est le besoin structurant que tu as confirmé comme non négociable.
Plan d'ASN :
local-asoverlay vers les RRlocal-asoverlay vers les RR (VTEP)Le sens du
local-ascompte : ASN global = ASN public sur les bordures, artifice sur les sessions internes. Les sessions exposées à Internet restent natives, donc AS_PATH, ROA et objets IRR cohérents sans manipulation. À valider en lab quelocal-asproduit bien une session iBGP sur tes versions exactes — certaines plateformes déterminent le type de session avant d'appliquerlocal-as, ce qui casserait la préservation du next-hop et donc l'EVPN.Ce qui a été tranché en chemin
Ta question initiale — trop de routes ? Non, et structurellement pas. Les subnets publics ne remontent pas vers la bordure, ils sont dessus : vers Internet, seuls les agrégats sortent. Découper un /19 en /24 ou en /28 ne change rien au routage. Ce qui scale, c'est le nombre de VMs (une type-2 MAC + une MAC/IP + une entrée ARP par VM), pas le nombre de subnets.
Keepalived → gateway anycast. Même IP et même MAC de bridge sur les deux bordures, avec
advertise-default-gw. Tu évites le trombonnement de bascule, le MAC mobility à chaque événement, et surtout le risque qu'une VM cliente émette du VRRP en priorité 255 et devienne la gateway du subnet. La sélection du VTEP côté host est déterministe, donc sans ESI tu auras probablement une seule bordure utilisée — bascule propre, mais pas de répartition. À vérifier avecbridge fdb show.iBGP + RR plutôt qu'eBGP pour l'EVPN. Ta config précédente était déjà en iBGP (
remote-as= ASN local). L'eBGP pour l'EVPN reste faisable mais expose deux pièges silencieux : les route targets auto-dérivés enAS:VNIqui ne concordent plus quand les ASN diffèrent, et le next-hop qui doit rester celui du VTEP d'origine.RR : deux VIP Pacemaker sur deux groupes de trois. Ton montage corrigé répond à l'objection — aucun événement unique ne casse les deux sessions. Je reste convaincu que six loopbacks fixes seraient plus simples (pas de fencing, pas de split-brain, pas d'ordonnancement VIP/FRR, et les six nœuds vérifiés en continu), mais c'est viable si le fencing est réel et testé, les groupes séparés physiquement, et l'ordre VIP→FRR explicite ou
ip_nonlocal_bindposé.Multi-DC. eBGP entre DC pour l'underlay, mais l'overlay reste un domaine iBGP unique traversant tous les DC. Conséquence contre-intuitive à documenter : on lit un ASN par DC et on en déduit que les DC sont isolés — c'est vrai pour l'underlay, faux pour l'EVPN.
Les points opérationnels à ne pas rater
gc_thresh1/2/3remontés sur les gateways, sinon pertes ARP intermittentes sans trace dans les logsttl 64sur les interfaces VXLAN — l'underlay fait trois sautsrp_filter=0, l'asymétrie entrée/sortie est la normenolearning+neigh_suppress on: le plan de contrôle EVPN est la seule source de vérité MACblackholevers l'agrégat, pour ne jamais faire flapper l'annonce Internetroute-mapen deny par défaut sur les sessions transit, plusmaximum-prefixLes risques ouverts
Aucune fonction à état sur les bordures. Le chemin retour est indépendant du chemin aller, une bordure ne voit qu'une moitié de chaque flux. Pas de NAT, pas de firewall stateful, pas de conntrack. Si tu en as besoin, ça vit sur l'hyperviseur.
Isolation intra-subnet public. Un /24 public est un domaine de broadcast partagé entre clients différents : ARP spoofing et interception entre voisins. Il faut qu'une VM ne puisse joindre que la MAC de la gateway — ARP suppression sur le VTEP hyperviseur plus binding MAC/IP par port virtuel. À concevoir maintenant, le rétrofit sur un plan public en production est douloureux.
BCP38 au port virtuel. La bordure ne peut pas distinguer une VM qui usurpe l'IP d'une autre dans le même VNI. L'anti-spoofing n'a de valeur qu'à l'hyperviseur, sur le couple MAC/IP alloué.
maximum-prefixsur les sessions clients des RR. Un host qui part en boucle et injecte des type-2 en masse sature les deux RR actifs simultanément et emporte l'overlay des deux DC. Aucune redondance de RR ne protège de ça. C'est le scénario que je testerais en priorité.Domaine de défaillance L2 inter-DC. Tu l'as accepté explicitement, mais il doit figurer dans le dossier d'architecture comme un risque assumé et non comme un oubli.
🛡️ Garde-fou Voltalis
local-as/iBGP, du comportement anycast gateway et du fencing Pacemaker sur tes versions exactes ; aucune configuration à appliquer en production sans revue humaine. Versionner sur le GitLab vibecoding et tracer l'usage de l'IA dans le cadrage.Si un arbitrage reste ambigu — notamment le stretch L2 inter-DC — Samy Denno pour le Comité IA, ou securite@voltalis.com pour la revue sécurité.
Une première brique a été posée pendant le travail sur #34, côté DHCP et API uniquement. Rien de l'architecture décrite ici n'est entamé ; il s'agit seulement de rendre le routage exprimable.
Ce qui existe déjà
gatewayoptionnel surPOST /subnets, stocké ensubnet/<name>/gateway, exposé dans la réponse. Non validé par l'agent : joignabilité et cohérence avec le CIDR relèvent de l'appelant.default_routechange de sens : une route par défaut est désormais toujours annoncée, et ce drapeau ne choisit que son next-hop —interface_ippar défaut, sinon lagatewayfournie ou celle déduite de l'host.interface_ipcomme next-hop dans tous les modes saufbridge. C'est la contrainte structurante pour les IP publiques : le trafic vers les plages internes ne doit jamais sortir par la gateway publique.public_ipaccepté par l'API et par la sélection des routes DHCP. La mise en place réseau côté host n'existe pas : créer un tel subnet échoue explicitement surhost network setup is not implemented yet, plutôt que de laisser une ressource à moitié configurée.dhcpRouting), testée pour les quatre combinaisons mode ×default_route×gateway, y comprispublic_ip.Reste entièrement à faire : veth, adressage, NAT, et tout le plan underlay/overlay décrit dans ce ticket.
top
Vérification en lab #50 — 2026-10-04
La vérification restante du champ
gateway(prévue à la main sur lab3) est faite sur le labmulti-nœud de #50, scénario
s2-gateway, release0.2.0rc003, guests Debian 12(systemd-networkd) :
/32vers les métadonnéesdefault_routeinterface_ipinterface_ipinterface_ipdefault_route: true,gatewayfourniegatewayinterface_ip(pas via la gateway)interface_ipdefault_route, après suppression et recréation du subnetinterface_ipinterface_ipinterface_ip22 vérifications sur 22. Le mode
public_iplui-même n'est pas testé : sa mise en place côté hôten'existe pas encore (cf. commentaire précédent).