Infrastructure

Mis à jour le 09/09/2024

Mon infrastructure est entièrement hébergée chez moi, à l’exception d’Amber, un VPS en location chez Contabo, en Allemagne. Elle ne contient pas de données et me sert uniquement de gateway externe (et d’IP).

                             +-----------+                   
                             |           |                   
                             |  Freebox  |                   
                             |           |                   
                             +-----+-----+                   
                                   |                         
                                   |                         
                                   |                         
                                   |                         
                                   |  192.168.1.0/24         
                                   |   gw.chapo.li           
                                   |                         
                                   |                         
                                   |                         
+---------+                  +-----+-----+                   
|         |        VPN       |           |                   
|  Amber  +------------------+  Cirdan   |                   
|         |   172.31.0.0/24  |           |                   
+---------+    wg.chapo.li   +--+--+--+--+                   
                                |  |  |                      
                                |  |  |                      
                                |  |  |                      
                                |  |  |                      
                                |  |  |                      
                +---------------+  |  +---------------+      
                |                  |                  |      
                |                  |                  |      
          +-----+-----+      +-----+-----+      +-----+-----+
          |           |      |           |      |           |
          |  Clients  |      |  Hardware |      |  Servers  |
          |           |      |           |      |           |
          +-----------+      +-----------+      +-----------+
          10.255.1.0/24      10.255.2.0/24      10.255.3.0/24
         client.chapo.li      hw.chapo.li        vm.chapo.li 

Machines physiques

Cirdan est un EdgeRouter X, acheté 35€ sur Leboncoin en août 2024. Il sert à la fois de routeur principal de l’infrastructure, de terminaison Wireguard pour le tunnel avec Amber, et de DHCP pour les clients du réseau (tous les serveurs sont en ip statique).

Gandalf est mon hyperviseur principal, sous Proxmox VE 8. C’est un serveur monté moi-même avec des composants PC.

Soit un total de 800€.

Le SSD sert de disque OS pour Proxmox, et n’est pas en RAID. Les 3 disques durs sont en RAIDZ1 et servent à héberger les disques des machines hébergées dessus. La très grande majorité, voire la totalité de mes machines sont des LXC, pour des raisons de simplicité et de performance.

J’utilise ma Freebox comme routeur et borne Wi-Fi, bien que la majorité du routage soit fait par Cirdan.

Enfin, j’utilise deux switchs Netgear GS608 comme switchs stupides.

Plan d’adressage

Mon réseau est séparé de manière thématique, et chaque sous-réseau est associé à un nom de domaine. Ces réseaux ne sont pas isolés par VLAN (car mes bornes Wi-Fi et mes switchs ne le supportent pas).

Je n’utilise actuellement que de l’ipv4.

Routage

Les clients utilisent la Freebox comme passerelle vers Internet, à travers Cirdan. À cause de l’impossibilité de configurer des routes statiques sur la Freebox, Cirdan doit NATer les paquets à destination de la Freebox, qui doivent donc traverser 2 NAT.

Les serveurs ont accès à internet à travers le tunnel Wireguard et ressortent donc en Allemagne, sauf exception (par exemple le runner Forgejo, qui fonctionne mal depuis l’Allemagne, allez savoir pourquoi). L’implémentation du routage est faite grace à du Policy-Based Routing.

DNS

J’implémente un système de double DNS pour gérer mon infrastructure avec des noms de domaine publics, sans publier les enregistrements DNS sur internet, comme décrit dans ce blogpost. J’ai donc un serveur DNS interne, dns.vm.chapo.li, qui contient tous les enregistrements que j’utilise en interne, et qui n’est pas accessible de l’extérieur, et un serveur DNS externe, dns-ext.vm.chapo.li, sans aucun enregistrement, qui ne sert qu’à l’exécution de challenges DNS Let’s Encrypt pour la génération de mes certificats TLS internes.

Machines virtuelles

Toutes (ou presque) mes machines virtuelles sont des LXC. La majorité sont sous Debian 12, à quelques exceptions près, qui sont sous NixOS. Celles sous Debian sont managées par Ansible, et celles sous NixOS sont déployées avec deploy-rs. J’héberge de nombreux services dont la liste est dynamique, et donc non-exhaustive : Forgejo, Cryptpad, Nextcloud, Sharkey, Vikunja, Prosody… Ils sont utilisés par moi et par mon entourage. La création de ces LXC est également gérée par Ansible.

J’ai un système de backup basé sur Restic et MinIO, afin de sauvegarder les données de tous mes services importants. J’ai également plusieurs monitorings en place :

Ayant une seule adresse ipv4 publique, tous mes services web externes sont derrière un reverse-proxy Nginx hébergé sur un LXC NixOS, dillon.vm.chapo.li.

Ce blog a ses sources hébergées sur git.chapoline.me, est construit sur le runner Forgejo action.vm.chapo.li, et est hébergé sur blog.vm.chapo.li derrière le Nginx de dillon.vm.chapo.li et rendu accessible sur Internet via le tunnel avec amber.wg.chapo.li.

Theme forked from Moonwalk, mixed with Catppuccin