102 lines
No EOL
7 KiB
Markdown
102 lines
No EOL
7 KiB
Markdown
---
|
|
title: Infrastructure
|
|
layout: page
|
|
---
|
|
|
|
> 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](https://contabo.com/), 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.
|
|
- Boitier Fractal Design Node 804 (130€)
|
|
- Processeur AMD Ryzen 5 7600 (240€)
|
|
- Carte mère Gigabyte B650M D3HP AX (145€)
|
|
- RAM Kingston Fury Beast 32Go 5200MHz (122€)
|
|
- Alimentation Corsair RM650 (100€)
|
|
- SSD Samsung 980 250Go (60€)
|
|
- 3 disques durs 2To de récup (0€)
|
|
|
|
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).
|
|
|
|
- `client.chapo.li` (`10.255.1.0/24`) : contient les appareils branchés en Wi-Fi ou filaire à mon réseau (ordinateurs, téléphones, télévision, consoles...). C'est le seul réseau avec DHCP.
|
|
- `hw.chapo.li` (`10.255.2.0/24`) : contient les machines physiques (actuellement, uniquement `Gandalf`).
|
|
- `vm.chapo.li` (`10.255.3.0/24`) : contient les machines virtuelles.
|
|
- `gw.chapo.li` (`192.168.1.0/24`) : contient uniquement le lien entre `Cirdan` et la Freebox.
|
|
- `wg.chapo.li` (`172.31.0.0/24`) : contient les terminaisons Wireguard (`Cirdan`, `Amber`, et autres).
|
|
|
|
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](https://help.ui.com/hc/en-us/articles/204952274-EdgeRouter-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](https://faercol.me/fr/posts/dns-challenge/). 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](https://github.com/serokell/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 :
|
|
- Grafana + Prometheus pour monitorer les métriques de mes serveurs, grace à [Prometheus Proxmox VE Exporter](https://github.com/prometheus-pve/prometheus-pve-exporter)
|
|
- Uptime Kuma pour visualiser et alerter sur la disponibilité de mes services
|
|
- Healthchecks pour le monitoring de mes backups
|
|
|
|
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](https://git.chapoline.me), est construit sur le runner Forgejo `action.vm.chapo.li`, et est hébergé sur le serveur Nginx de `dillon.vm.chapo.li`, rendu accessible sur Internet via le tunnel avec `amber.wg.chapo.li`. |