La Saga du Certificat SSL : DNS Local, Nginx et Mon Homelab

Objectif du Projet

Configurer un environnement local sécurisé avec : - Domaine public olyhome.site (acheté chez Hostinger) - Serveur DNS local (Bind9) pour gérer les sous-domaines internes - Nginx Proxy Manager (NPM) pour proxy inverse - Sous-domaines locaux sécurisés par HTTPS (par ex., proxmox.olyhome.site, n8n.olyhome.site) - Sans exposer les services à Internet

Aperçu de l'Architecture

Réseau Local
    ↓
Bind9 (DNS Local)
├── proxmox.olyhome.site → 192.168.11.100
├── n8n.olyhome.site → 192.168.11.100
└── db.olyhome.site → 192.168.11.100
    ↓
Nginx Proxy Manager (192.168.11.100)
├── proxmox.olyhome.site → https://192.168.11.254:8006
├── n8n.olyhome.site → http://192.168.1.20:5678
└── db.olyhome.site → http://192.168.1.30:5432

Étapes Complétées

Étape 1 : Configuration de Bind9 (DNS Local)

Pourquoi Bind9 ?

Cas d'Utilisation : - Contrôler la résolution DNS pour le domaine local - Remplacer le DNS public par des IPs locales - Gérer le routage des sous-domaines internes - Aucune dépendance vis-à-vis des fournisseurs DNS externes

Installation

# Install Bind9
sudo apt update
sudo apt install bind9 bind9-utils -y

# Create zone directory
sudo mkdir -p /etc/bind/zones

Configuration de Zone

# Edit named.conf.local
sudo nano /etc/bind/named.conf.local
// Zone for olyhome.site
zone "olyhome.site" {
    type master;
    file "/etc/bind/zones/db.olyhome.site";
};

Création du Fichier de Zone

# Create zone file
sudo nano /etc/bind/zones/db.olyhome.site
$TTL    604800
@       IN      SOA     ns1.olyhome.site. admin.olyhome.site. (
                        2025102601      ; Serial
                        604800          ; Refresh
                        86400           ; Retry
                        2419200         ; Expire
                        604800 )        ; Negative Cache TTL
;
@       IN      NS      ns1.olyhome.site.
ns1     IN      A       192.168.11.100

; Proxy server (Nginx Proxy Manager)
@       IN      A       192.168.11.100

; Service subdomains
proxmox IN      A       192.168.11.100
n8n     IN      A       192.168.11.100
db      IN      A       192.168.11.100
nginx   IN      A       192.168.11.100

Redémarrage et Test

# Check configuration
sudo named-checkconf
sudo named-checkzone olyhome.site /etc/bind/zones/db.olyhome.site

# Restart Bind9
sudo systemctl restart bind9

# Test DNS resolution
dig proxmox.olyhome.site @localhost

# Expected: Answer section shows 192.168.11.100

Étape 2 : Déploiement de Bind9 dans Docker

Pourquoi Docker ?

  • Isolation du système hôte
  • Sauvegarde et restauration faciles
  • Configuration portable
  • Aucun conflit avec le résolveur système

Configuration Docker Compose

version: '3.8'

services:
  bind9:
    image: ubuntu/bind9:latest
    container_name: bind9-dns
    restart: unless-stopped
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "953:953/tcp"  # rndc
    volumes:
      - ./config:/etc/bind
      - ./zones:/var/lib/bind
      - ./cache:/var/cache/bind
    environment:
      - TZ=Europe/Paris
      - BIND9_USER=bind
    networks:
      - dns_network

networks:
  dns_network:
    driver: bridge

Résolution des Conflits

Problème : Le port 53 est déjà utilisé par systemd-resolved

# Check what's using port 53
sudo ss -tlnp | grep :53

# Disable systemd-resolved
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved

# Remove resolv.conf symlink
sudo rm /etc/resolv.conf

# Create static resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

# Start Bind9 container
docker-compose up -d

# Verify port 53 is bound
docker logs bind9-dns