Aller au contenu

Fonctionnement du réseau

Le réseau DNF se comprend à deux échelles : une zone locale isolée, puis plusieurs zones reliées par un VPN maillé. Le vocabulaire est défini dans Concepts.

Une zone, c’est une passerelle et ses machines.

Diagram
  • La passerelle partage Internet (NAT) et protège la zone (pare-feu).
  • dnsmasq distribue les adresses (DHCP) et résout les noms locaux (<hôte>.<zone>).
  • Côté Internet (WAN), tout est fermé. Côté local (LAN), seuls SSH, DNS, DHCP et la page d’accueil sont ouverts.

Service optionnel, activé sur la passerelle. Il s’intercale devant dnsmasq.

Diagram
  • AdGuardHome devient le résolveur DNS des postes (port 53).
  • Il bloque publicités et traceurs, et chiffre les requêtes vers l’extérieur.
  • dnsmasq recule sur un port interne et garde les noms locaux et le DHCP.

Plusieurs zones sont reliées par un VPN maillé, coordonné par le serveur de coordination (HCS).

Diagram
  • Le HCS (Headscale) est public et orchestre le maillage.
  • Chaque passerelle est subnet router : elle publie le sous-réseau de sa zone dans le VPN.
  • Les zones se voient entre elles ; les machines distantes (smartphone, PC) rejoignent le réseau via Tailscale.
  • Un résolveur pivot sur le HCS aiguille chaque zone vers son propre DNS.

Trois familles de noms cohabitent sur le réseau. Toutes sont générées depuis etc/config.yaml.

NomFormePortéeExemple
Nom simple<hôte>Tout le réseau interneserveur
FQDN de zone<nom>.<zone>.<domaine>Tout le réseau internecloud.maison.domain.tld
Service global<nom>.<domaine>Internet inclusgit.domain.tld
  • Noms simples : ce sont les machines (hôtes déclarés). Résolus partout sur le réseau, vers l’adresse réelle de la machine, quelle que soit sa zone.
  • FQDN de zone : ce sont les services d’une zone. Ils pointent vers la passerelle de cette zone, qui les sert via son proxy inverse.
  • Services globaux : les services marqués global dans etc/config.yaml. Exposés sur le HCS avec un DNS public : joignables depuis n’importe où.

Qui résout quoi :

  • dnsmasq, sur chaque passerelle, connaît tous les noms internes (machines et services de toutes les zones) : il résout les noms simples et les FQDN.
  • La zone courante est résolue localement ; les autres zones et le domaine global sont aiguillés vers la bonne passerelle, ou vers le résolveur pivot du HCS.
  • Les noms publics (Internet) partent vers les DNS chiffrés en amont, filtrés par AdGuardHome s’il est activé.

Sur le serveur de coordination (HCS), un résolveur pivot centralise la résolution interne du VPN. Il connaît le découpage en zones et se contente d’aiguiller :

  • chaque FQDN de zone part vers la passerelle de sa zone ;
  • le reste part vers un DNS externe chiffré.

Toutes les machines du VPN l’interrogent sur l’adresse VPN du HCS. C’est lui qui relie les zones entre elles pour la résolution des noms.

Une machine hors de toute zone (portable en déplacement, smartphone) rejoint le réseau par le VPN. Sa résolution DNS est scindée (split-DNS) selon la nature du nom demandé :

  • noms internes : dirigés, à travers le VPN, vers le résolveur pivot du HCS, qui les aiguille ensuite vers la bonne passerelle ;
  • noms publics : résolus par le résolveur local du réseau visité (box, point d’accès public), sans passer par le VPN.
Diagram

Une machine est déclarée dans une zone, mais elle ne s’y trouve pas toujours. Un portable part en déplacement. Une passerelle neuve est installée depuis une autre zone, avant d’être livrée sur place.

Sans disposition particulière, cette machine reçoit une adresse quelconque de la plage DHCP de la zone visitée, et son nom continue de désigner son adresse d’origine, injoignable depuis là. Rien ne permet de la joindre de façon fiable.

Diagram

Chaque zone réserve le bloc <préfixe>.6.x aux machines des autres zones. Le générateur y place une réservation DHCP pour chaque adresse MAC connue du réseau qui n’appartient pas à la zone.

Le numéro est attribué à l’échelle du réseau entier : une machine garde le même dernier octet dans toutes les zones où elle passe.

MachineZone déclaréeChez elleEn visite dans atelier
portablemaison10.0.2.410.1.6.3
serveuratelier10.1.1.2(elle y est chez elle)

L’adresse est donc connue avant que la machine ne démarre, sans rien observer sur le réseau.

La réservation vient avec un nom DNS dans la zone visitée. Le nom simple, lui, ne change pas de sens.

NomRésout vers
portableson adresse d’origine, partout sur le réseau
portable.atelier.domain.tldson adresse dans la zone atelier

dnsmasq indexe les baux sur la seule adresse MAC, et non sur l’identifiant client DHCP.

La raison : un même équipement n’annonce pas le même identifiant selon le système qui tourne dessus. Une image d’installation et le système installé passent pour deux machines différentes, et reçoivent deux adresses. En s’appuyant sur la MAC, l’adresse ne change plus entre l’installation et le premier démarrage réel.

Les recettes d’installation calculent l’adresse toutes seules. Elles identifient d’abord la zone où se trouve la machine d’administration, à partir de sa passerelle par défaut réelle et non de sa zone déclarée (un portable d’administration est précisément ce qui se déplace), puis en déduisent l’adresse de la cible.

Reste le déploiement : Colmena 🡕 s’adresse à un nœud par son nom, qui désigne l’adresse d’origine. Pour un hôte en visite, just configure pose donc une redirection SSH temporaire, retirée en fin d’installation ou à la main :

Fenêtre de terminal
just roaming # afficher les redirections en cours
just roaming-clear # toutes les retirer