doesdev.fr tout est nominal

Infrastructure auto-hébergée · France

DOESDEV

Un réseau domestique construit comme un réseau de production.

Trois nœuds Proxmox, un pare-feu OPNsense en bare metal, deux switchs 10 G et une trentaine de conteneurs. Segmenté en VLAN, adressé en IPv6, certifié par sa propre chaîne ACME, et documenté ligne à ligne — parce qu'ici chaque décision a dû être mesurée avant d'avoir le droit de rester.

entrant · tcp/443 live
  1. ix0 INTERNET fibre · v4 + v6
  2. fw OPNSENSE filtrage · NAT66
  3. 802.1Q SWITCH-CŒUR trunk taggé · 10GBASE-SR
  4. :443 TOKYO-3 HAProxy · le TLS s'arrête là
  5. sni MAGI 3 nœuds Proxmox
  6. lxc SERVICE un conteneur, un rôle
nœuds MAGI
3
conteneurs + VM
28
backends routés
19
domaines filtrés
187 k
débit descendant mesuré
6,2 Gb/s

Le chemin, saut par saut

Six sauts entre un navigateur et un conteneur.

Rien ici n'est une boîte noire. Chaque saut est une machine ou un processus sur lequel on peut se connecter, que l'on peut mesurer et qui, le jour où il a cassé, a donné lieu à un rapport.

ix0 / ix1

L'edge

OPNsense sur un OptiPlex réformé, un i3-4130 et deux ports SFP+ 10 G. Il porte le pare-feu, le NAT v4, le NAT66, le DHCP, le DNS et le tunnel WireGuard. La politique est la même sur chaque segment : la sortie internet est autorisée, la traversée d'un segment à l'autre est refusée tant qu'une règle ne la nomme pas.

802.1Q

Les switchs

Deux Aruba 2930F-24G-4SFP+ reliés par un lien 10GBASE-SR. Chaque segment est un VLAN taggé porté jusqu'aux hyperviseurs : le pare-feu voit tout le trafic inter-segments pour la raison simple qu'aucun chemin ne l'évite.

v6

L'adressage

Le FAI ne délègue qu'un seul /64. Il est utilisé tel quel sur le segment public ; les segments internes tournent sur un ULA /48 avec NAT66 en sortie. Ce n'est pas élégant. C'est ce qu'un unique préfixe délégué permet, et l'alternative a été mesurée avant d'être écartée.

udp/53

La résolution

dnsmasq répond au DHCP et au DNS de chaque segment, en direct et en inverse, pour chaque hôte. Une liste HaGeZi rafraîchie chaque nuit renvoie NXDOMAIN sur environ 187 000 domaines de publicité et de pistage — pour tous les clients du réseau, sans rien à installer.

tokyo-3

La terminaison

Un seul conteneur écoute sur le 443 public. HAProxy y termine le TLS et route sur le SNI : correspondance exacte d'abord, suffixe de domaine ensuite. Les maps SNI sont générées depuis les fichiers de backend eux-mêmes — une route ne peut donc pas exister sans le backend qui la sert.

melchior · gaspard · balthazar

Le compute

Trois nœuds Proxmox en cluster, stockage sur miroirs ZFS. Les workloads sont des conteneurs LXC non privilégiés — un service par conteneur, chacun posé sur le segment que sa politique lui accorde et sur aucun autre.

Ce qui tourne ici

Endpoints publics.

Tout ce qui suit est servi par le même edge, depuis la même chaîne de certificats. Ce qui n'est pas listé ne l'est pas par choix.

Photos, fichiers, mots de passe, mail, serveurs de jeu et identité tournent aussi sur ce cluster. Ils sont joignables par WireGuard pour celles et ceux qui s'en servent, et volontairement absents de cette page.

Notes d'ingénierie

Les morceaux qui ont pris le plus de temps.

Des certificats que personne ne renouvelle à la main

Aucun hôte ne détient de token d'API DNS. Chacun demande son certificat à un broker interne ; le broker est la seule chose qui parle au registrar, résout le challenge dns-01 et rend le certificat. Le renouvellement tourne en cron, le reload sur un hook, et le blast radius d'une clé qui fuite reste sur une seule machine.

Des clés qui expirent d'elles-mêmes

Les comptes SSH ne portent pas d'authorized_keys statiques. Une CA signe des certificats de courte durée, et la clé de signature dort dans un coffre jusqu'au moment de servir. Révoquer un accès, c'est simplement ne plus signer.

Une branche devient une URL

La forge, la registry, le runner et un cluster k3s sont sur le même réseau. Pousser une branche construit une image et la déploie sous son propre hostname ; le namespace et ses droits sont créés par un webhook à l'instant où le projet naît, pas par un humain ensuite.

Le mail, et ce que le FAI permet

Le port 25 sortant est bloqué en IPv4 et la voie IPv6 n'a pas de reverse DNS : la remise directe au MX n'avait aucune chance. Mesuré à l'edge avant qu'un relais ne soit accepté, et l'enregistrement SPF mis à jour dans le même changement, pas dans le suivant.

Une seule porte

L'administration passe par WireGuard. Vu de l'extérieur, le réseau répond sur le 443 et le 25, et sur rien d'autre — les interfaces d'administration, les hyperviseurs et le pare-feu lui-même n'ont jamais été publiés.

Écrit tant que c'était encore vrai

Chaque changement de fond laisse un rapport dans le repo : ce qui a été mesuré, ce qui a cassé, et pourquoi la solution survivante l'a emporté. Ces rapports sont la raison pour laquelle une décision vieille de deux ans peut encore être discutée.