Skip to main content

Configuration Wireguard Docker

Docker compose

# =============================================================================
# docker-compose.yml — VPS OVH
# Services : WireGuard Hub + Portainer UI
# Version  : 2 — Portainer UI bind sur 10.0.0.1 uniquement
# =============================================================================
#
# STRUCTURE DES FICHIERS ATTENDUE :
#   /opt/wireguard-ovh/
#   ├── docker-compose.yml   (ce fichier)
#   └── wg-config/
#       └── wg0.conf         (ovh-wg0.conf renommé)
#
#
# VÉRIFICATION :
#   docker exec wireguard-ovh wg show
#   ss -tlnp | grep 9000   # doit afficher 10.0.0.1:9000 uniquement
#
# =============================================================================

services:

  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard-ovh
    # network_mode: host est obligatoire pour que les règles iptables PostUp
    # du fichier wg0.conf s'appliquent sur les interfaces réseau de l'hôte.
    # En mode bridge Docker, le conteneur a ses propres interfaces virtuelles
    # et ne peut pas manipuler eth0 de l'hôte ni les règles FORWARD globales.
    network_mode: host
    cap_add:
      - NET_ADMIN   # manipulation des interfaces réseau et iptables
      - SYS_MODULE  # chargement du module kernel WireGuard
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    volumes:
      - ./wg-config:/config
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer-ui
    # SÉCURITÉ : bind sur l'IP WireGuard uniquement.
    # Le port 9000 est invisible depuis l'IP publique d'OVH.
    # Accessible uniquement via le mesh : http://10.0.0.1:9000
    # Profils clients qui peuvent y accéder :
    #   - ovh-exitnode  (10.0.0.10) → oui, trafic mesh autorisé
    #   - private-only  (10.0.0.40) → oui, c'est l'usage principal
    #   - mrs-exitnode  (10.0.0.20) → oui, passe par le mesh via MRS→OVH
    #   - albi-exitnode (10.0.0.30) → oui, idem via Albi→OVH
    ports:
      - "10.0.0.1:9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer-data:/data
    restart: unless-stopped
    depends_on:
      - wireguard

volumes:
  portainer-data:

---
# =============================================================================
# docker-compose.yml — Serveur Marseille
# Services : WireGuard Spoke + Portainer Agent
# (Copier ce fichier pour Albi en changeant l'IP de bind du Portainer Agent)
# =============================================================================
#
# STRUCTURE DES FICHIERS ATTENDUE :
#   /opt/wireguard-mrs/
#   ├── docker-compose.yml
#   └── wg-config/
#       └── wg0.conf         (marseille-wg0.conf renommé)
#
# =============================================================================

services:

  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard-mrs
    network_mode: host
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    volumes:
      - ./wg-config:/config
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

  portainer-agent:
    image: portainer/agent:latest
    container_name: portainer-agent
    # SÉCURITÉ : bind sur l'IP WireGuard de Marseille uniquement.
    # Le port 9001 est invisible depuis internet et depuis le LAN local.
    # Seul Portainer UI (10.0.0.1) peut s'y connecter via le mesh.
    # Pour Albi : remplacer 10.0.0.2 par 10.0.0.3
    ports:
      - "10.0.0.2:9001:9001"
    environment:
      - AGENT_PORT=9001
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    restart: unless-stopped
    depends_on:
      - wireguard

# =============================================================================
# docker-compose.yml — Serveur Albi
# Identique à Marseille, changer uniquement :
#   ports: "10.0.0.3:9001:9001"
#   container_name: wireguard-albi
# =============================================================================