Ceci est une ancienne révision du document !
Table des matières
Architecture du réseau — beafrancois.fr
Dernière mise à jour : juillet 2026
Vue d'ensemble de l'infrastructure, du général au particulier : segments réseau, machines, services, flux, puis détails de configuration et particularités connues.
1. Vue d'ensemble
Le LAN1 filaire porte l'infrastructure, deux PC tour et un Raspberry Pi 5. Les portables, eux, sont exclusivement en WiFi sur un segment séparé.
Internet
|
v
+----------------------------------------------+
| ROUTEUR OpenWrt 192.168.1.90 |
| NAT · pare-feu · DNS local (dnsmasq) |
| serveur WireGuard · admin LuCI :8443 |
+----------------------------------------------+
| | |
LAN1 filaire WiFi VPN WireGuard
192.168.1.0/24 192.168.115.0/24 10.1.100.0/24
(infra + fixes) (portables) (accès distant)
| | |
| +----------+----------+
| |
+-------+--------+-----------+ |
| | | | |
| [2 PC tour] [RPi5 « homeassistant »]
| |
v |
+------------------+ |
| PROXY Caddy .25 | <--------------+ (web des 3 segments)
| TLS · reverse |
| proxy · filtre | [Docker]
+--------+---------+
| HTTP interne
v
+------------------------------------------+
| SERVEUR « cahute » 192.168.1.9 |
| Debian 13 · RAID 2 To |
| UFW : accès restreint à 192.168.1.0/26 |
| - Auth : LLDAP [Docker] |
| - Surveillance : Uptime-Kuma, Dozzle, |
| Homepage [Docker] |
| - Services : Nextcloud, Wiki, Blog, |
| Ampache, Gitea, MariaDB, Cockpit |
| [bare-metal] |
| - Partages : NFS / Samba [bare-metal] |
+------------------------------------------+
^
| WiFi : sssd (LDAPS 6360) · web via proxy
| VPN : partages NFS / Samba
+------------------------------------------+
| PORTABLES (Debian GNOME, CachyOS…) |
| WiFi uniquement · home local |
| cache offline sssd · WireGuard pour les |
| partages |
+------------------------------------------+
2. Plan d'adressage
| Segment | Plage | Rôle |
|---|---|---|
| LAN1 filaire | 192.168.1.0/24 | Infrastructure + postes fixes + domotique |
| WiFi | 192.168.115.0/24 | Tous les portables |
| VPN WireGuard | 10.1.100.0/24 | Accès distant (partages NFS, services) |
⚠ Ne pas confondre : le LAN est bien un /24. Le 192.168.1.0/26 que l'on retrouve dans plusieurs règles n'est pas un masque réseau — c'est une plage d'autorisation UFW sur le serveur, qui limite l'accès aux adresses .1 à .62.
Le segment WiFi est déclaré comme zone invite côté OpenWrt : les règles de redirection et les autorisations UFW couvrent cette zone, d'où l'accès des portables au web et à LDAPS.
| Hôte | IP | Nom court | Fonction |
|---|---|---|---|
| Routeur | 192.168.1.90 | aiguilleur | OpenWrt : NAT, DNS, pare-feu, WG |
| Proxy | 192.168.1.25 | proxyhttp | Caddy : TLS + reverse proxy |
| Serveur | 192.168.1.9 | cahute | Docker, données, partages |
| PC tour ×2 | 192.168.1.x | — | Postes fixes filaires |
| Raspberry Pi 5 | 192.168.1.67 | homeassistant | Domotique — hors plage UFW (voir §8) |
3. Les flux principaux
3.1 Flux web (HTTPS)
Client (LAN / wifi invité / VPN / Internet)
| résolution DNS : sous-domaine -> 192.168.1.25
v
[ Routeur .90 ] DNAT 443 -> .25 (règle par zone : wan, lan, invite)
v
[ Caddy .25 ] terminaison TLS (Let's Encrypt ou tls internal)
filtre @denied par remote_ip
v
[ Serveur .9 ] port applicatif interne (ex. 3001, 3002, 8888, 17170)
3.2 Flux d'authentification
Portable (online) --> sssd --> ldaps://auth.beafrancois.fr:6360 --> LLDAP (.9) Portable (offline) --> sssd --> cache local chiffré (sans expiration) Navigateur --> ldap.beafrancois.fr / auth.beafrancois.fr --> UI LLDAP Serveur (NSS-only) --> sssd --> LLDAP (résolution UID/GID pour NFS)
3.3 Flux fichiers
Portable en WiFi --X-- pas d'accès direct aux partages Portable (WiFi ou 5G) --> tunnel WireGuard --> NFS / Samba --> /mnt/stockage (.9)
Les partages ne sont jamais montés directement depuis le segment WiFi : le tunnel WireGuard est le seul chemin, à la maison comme à l'extérieur.
4. Les machines
4.1 Routeur — OpenWrt (192.168.1.90)
Point d'entrée unique. Assure NAT, pare-feu de zones, DNS local et terminaison VPN.
- Admin web : https://aiguilleur.beafrancois.fr:8443 ou https://192.168.1.90:8443 (uhttpd déplacé de 443 vers 8443)
- ⚠ Le port est obligatoire.
aiguilleur.beafrancois.frrésout directement vers le routeur (.90), et non vers le proxy. Sans le:8443, la requête part sur le 443 du routeur, qui est justement redirigé vers Caddy (.25) — lequel n'a pas de bloc pour ce nom. - Nom :
aiguilleur(anciennementrouter, qui ne résout plus) - DNS : dnsmasq, entrées ciblées par sous-domaine (pas de wildcard)
- VPN : serveur WireGuard, interface
wg1(etwg0)
Redirections de port (DNAT)
| Port | Destination | Zones sources | Usage |
|---|---|---|---|
| 443 | 192.168.1.25:443 | wan + lan + invite | Web via Caddy |
| 6360 | 192.168.1.9:6360 | lan + invite | LDAPS (sssd) |
| 9090 | 192.168.1.9:9090 | lan | Cockpit |
| 8329 | 192.168.1.9 | lan | Gitea SSH |
DNS local (dnsmasq)
uci add_list dhcp.@dnsmasq[0].address='/nuage.beafrancois.fr/192.168.1.25' uci add_list dhcp.@dnsmasq[0].address='/wiki.beafrancois.fr/192.168.1.25' uci add_list dhcp.@dnsmasq[0].address='/blog.beafrancois.fr/192.168.1.25' uci add_list dhcp.@dnsmasq[0].address='/musique.beafrancois.fr/192.168.1.25' uci add_list dhcp.@dnsmasq[0].address='/surveillance.beafrancois.fr/192.168.1.25' uci add_list dhcp.@dnsmasq[0].address='/status.beafrancois.fr/192.168.1.25' uci add_list dhcp.@dnsmasq[0].address='/logs.beafrancois.fr/192.168.1.25' uci commit dhcp /etc/init.d/dnsmasq restart
dnsmasq écoute sur l'interface du tunnel (wg1), ce qui permet la résolution depuis le VPN.
4.2 Proxy HTTP — Caddy (192.168.1.25)
Machine physique dédiée (NUC), hostname proxyhttp — distincte du serveur principal. Seule machine exposée au trafic entrant 443.
- Terminaison TLS : Let's Encrypt pour les noms publics,
tls internal(auto-signé) pour les noms internes - Reverse proxy vers les ports applicatifs du serveur
- Restriction d'accès par IP source sur les services d'administration
- Projet dans
/opt/proxy, Caddy lui-même en conteneur
surveillance.beafrancois.fr {
@denied not remote_ip 192.168.1.0/24 192.168.115.0/24 10.1.100.0/24
respond @denied 403
tls internal
reverse_proxy 192.168.1.9:3002
}
Rechargement : docker compose exec caddy caddy reload –config /etc/caddy/Caddyfile
4.3 Serveur principal — cahute (192.168.1.9)
- OS : Debian Trixie (13), kernel 6.x
- Matériel : AMD x86, 8 Go RAM, 2 To en soft-RAID mdadm
- Conteneurisation : Docker CE (dépôt officiel), Compose v2
- Stockage :
/mnt/stockage(multimedia, famille, partage, homes, system, docker) - Jamais exposé directement à Internet
État de la migration vers Docker
La conteneurisation est partielle sur le serveur. Situation actuelle :
- Sous Docker : LLDAP, stack surveillance (Dozzle, Uptime-Kuma, Homepage)
- Encore en bare-metal : Apache (vhosts web, :443), Nextcloud, DokuWiki, Blog, Ampache, Gitea, MariaDB, Cockpit, NFS
Caddy, lui, ne tourne pas sur ce serveur : il est en conteneur sur la machine proxy dédiée (.25), voir §4.2.
Les dossiers compose/ et data/ des services restants sont déjà créés, mais les stacks ne sont pas déployées.
Arborescence Docker
/mnt/stockage/docker/ ├── compose/ ← un dossier par stack (lldap, surveillance, + à venir) └── data/ ← données persistantes (bind mounts vers le RAID)
4.4 Postes clients
Portables
- Portables Linux (Debian/GNOME, CachyOS/Arch)
- Connexion en WiFi exclusivement (192.168.115.0/24)
- Authentification système via sssd sur LLDAP,
cache_credentials = True, cache offline sans expiration (offline_credentials_expiration = 0) - Home local sur chaque poste (pas de NFS) — condition du fonctionnement hors ligne
- WireGuard obligatoire pour les partages : les montages NFS/Samba ne passent que par le tunnel (10.1.100.0/24), y compris depuis le WiFi de la maison. Le client pousse
DNS = 192.168.1.90
PC tour (×2)
- Postes fixes raccordés en filaire sur le LAN1
- Adresses dans la plage
.1–.62, donc couvertes par les règles UFW du serveur : accès direct aux services et aux partages, sans VPN
Raspberry Pi 5 — ''homeassistant'' (192.168.1.67)
- Domotique, raccordé en filaire sur le LAN1
- ⚠ Son adresse (
.67) est hors de la plage.1–.62couverte par les règles UFW en/26. Le serveur lui refuse donc SSH (22), HTTPS (443), NFS (111/2048/2049/4045), Gitea (3000) et Cockpit (9090). - Ce qui lui reste accessible : les services via le proxy Caddy (.25, machine distincte, dont le filtre autorise tout le
192.168.1.0/24), et LDAPS 6360 (règle en/24). - Comportement observé depuis cette machine : le serveur répond au ping, mais refuse la connexion sur ces ports.
5. Services et points d'accès
| Service | Sous-domaine | Cible | Exécution |
|---|---|---|---|
| Nextcloud | nuage.beafrancois.fr | .9:443 (Apache) | bare-metal |
| DokuWiki | wiki.beafrancois.fr | .9:443 (Apache) | bare-metal |
| Blog | blog.beafrancois.fr/blog | .9:443 (Apache) | bare-metal |
| Ampache | musique.beafrancois.fr/musique/public | .9:443 (Apache) | bare-metal |
| Gitea | gitea.beafrancois.fr (+ SSH 8329) | .9:3000 | bare-metal |
| MariaDB | — | .9:3306 | bare-metal |
| LLDAP (UI) | auth… / ldap.beafrancois.fr | .9:17170 | Docker |
| LLDAP (LDAPS) | auth.beafrancois.fr:6360 | .9:6360 | Docker |
| Homepage | surveillance.beafrancois.fr | .9:3002 | Docker |
| Uptime-Kuma | status.beafrancois.fr | .9:3001 | Docker |
| Dozzle | logs.beafrancois.fr | .9:8888 | Docker |
| Cockpit | — | .9:9090 | bare-metal |
| NFS | — | filaire .1–.62 + VPN | bare-metal |
Le port 3000 est occupé par Gitea, d'où Homepage sur 3002. Le port 3890 (LDAP en clair) n'est pas ouvert au pare-feu : usage interne au serveur.
6. Authentification et droits
- Annuaire : LLDAP (conteneur Docker), remplace Kanidm (abandonné : offline cassé)
- Clients : sssd (PAM + NSS) sur les portables et sur le serveur (mode NSS-only, pour que NFS applique les identités LLDAP)
- Compte bind en lecture seule déclaré dans
sssd.conf(permissions 600) - UID forcés 1000–1003, groupes :
partage(GID 301),famille(GID 302),multimedia - Pas de Kerberos : la cohérence des UID/GID suffit pour NFS
7. Sécurité
- Le serveur n'est joignable depuis Internet que par l'intermédiaire du proxy — sauf le port 8329 (Gitea SSH), ouvert à tous
- MariaDB (3306) et le LDAP en clair (3890) ne sont pas ouverts
- Le WiFi est autorisé sur LDAPS (6360) et Cockpit (9090), pas sur NFS : les partages ne sont joignables que depuis le filaire
.1–.62ou par le VPN
7.1 Règles UFW du serveur (état réel)
| Port(s) | Service | Sources autorisées |
|---|---|---|
| 22/tcp | SSH | 192.168.1.0/26 |
| 443/tcp | Apache | 192.168.1.0/26 (dont le proxy .25) |
| 111, 2048, 2049, 4045 | NFS (tcp + udp) | 192.168.1.0/26 |
| 2049/tcp | NFSv4 | 10.1.100.0/24 (VPN) |
| 3000/tcp | Gitea (web) | 192.168.1.0/26 |
| 8329/tcp (v4 + v6) | Gitea (SSH) | Anywhere |
| 9090/tcp | Cockpit | 192.168.1.0/26 + 192.168.115.0/24 |
| 6360/tcp | LLDAP (LDAPS) | 192.168.1.0/24 + WiFi + VPN |
| 17170/tcp | LLDAP (UI) | 192.168.1.25 (proxy) |
| 3001, 3002, 8888 | Surveillance | 192.168.1.25 (proxy) |
Lecture de ces règles :
- NFS n'est pas ouvert au WiFi — ce qui confirme que les portables ne peuvent monter les partages que via WireGuard. Côté VPN, seul
2049/tcpest autorisé : cela suffit en NFSv4 (pas de portmapper), mais interdit NFSv3. - Samba n'est pas ouvert (ni 445, ni 139). Les partages se font donc en NFS uniquement, malgré la présence du service.
- 6360 est en
/24, contrairement aux autres règles en/26: l'authentification reste donc possible depuis toute machine du LAN filaire, y compris au-delà de.62. - 8329 est ouvert à Anywhere, IPv6 compris : c'est le SSH de Gitea, seule exposition directe du serveur à Internet (accès Git distant).
- Le 443 correspond à Apache, en bare-metal sur le serveur ; sa racine affiche encore la page par défaut. Le proxy (.25) étant dans la plage
/26, il peut le joindre — c'est par là que passent les services web non conteneurisés. - Les règles portant sur 17170, 6360, 3001, 3002 et 8888 visent des conteneurs Docker : elles sont inopérantes en l'état (voir ci-dessous).
⚠ Limitation connue : Docker contourne UFW
Docker insère ses règles iptables (chaînes FORWARD / DOCKER) en amont d'UFW. Les règles ufw allow from 192.168.1.25 to any port … ne s'appliquent donc pas aux ports publiés par des conteneurs (LLDAP, Dozzle, Uptime-Kuma, Homepage). Constat vérifié : Dozzle (:8888, conteneur) reste joignable depuis le VPN, alors que Cockpit (:9090, bare-metal) est bien filtré.
Ce qui protège malgré tout : le binding sur 192.168.1.9 (et non 0.0.0.0), et le filtre par IP source de Caddy sur les sous-domaines.
ufw-docker (règles dans la chaîne DOCKER-USER) n'est pas installé.
8. Particularités et incidents connus
- Le
/26n'est pas un sous-réseau — c'est une plage d'autorisation dans les règles UFW du serveur (ufw allow from 192.168.1.0/26 …), qui ne couvre que.1–.62. Toute machine du LAN adressée au-delà de.62est silencieusement refusée par le serveur alors que le réseau, lui, fonctionne. Cas avéré :homeassistanten.67. - Redirection 443 par zone — une règle limitée à
src=wancasse l'accès web interne. Les zoneslanetinviteont donc chacune leur règle. - Admin OpenWrt sur 443 — entrait en conflit avec la redirection ; déplacé sur 8443.
- Pas de wildcard DNS
/beafrancois.fr/…— un wildcard casserait Gitea SSH (un nom ne peut pas résoudre vers deux IP selon le protocole). Chaque service est donc déclaré individuellement. - dnsmasq et le VPN — sans écoute sur
wg1(etlocalserviceadapté), la résolution depuis le tunnel ne fonctionnait pas. - HOMEPAGE_ALLOWED_HOSTS — Homepage rejette tout
Hostnon listé (« Host validation failed »). Valeurs séparées par des virgules, sans espace. - Bits spéciaux et NFSv4 — setuid/setgid sur les dossiers de partage bloquaient l'accès malgré l'appartenance au bon groupe. Corrigé par
chmod -R a-s,a-t partage. - Renommage
router→aiguilleur— l'ancien nom ne résout plus du tout. Tout ce qui le référence est cassé : la sonde Ping « Routeur » d'Uptime-Kuma (hôterouter), et l'éventuel blocrouter.beafrancois.frdu Caddyfile, désormais orphelin. À l'époque, ce nom résolvait vers le proxy (.25) qui reverse-proxifiait vers le routeur (.90:8443) — sans boucle, ce sont deux machines distinctes. Le nouveau nom pointe directement vers .90, sans passer par Caddy.
