Skip to main content

Configuration Wireguard Docker

Docker compose

# =============================================================================
# docker-compose.yml — VPS OVH  # Services : (WireGuard Hub + Portainer UIUI)
# Version : 23Portainerpare-feu UIgéré bindpar surUFW 10.0.0.1(pas uniquementde règles dans wg0.conf)
# =============================================================================
# # STRUCTURE DES FICHIERS ATTENDUEArborescence :
#   /opt/wireguard-ovh/
#   ├── docker-compose.yml
(ce fichier)
#   └── wg-config/
#       └── wg0.conf      (= servers/ovh-wg0.conf renommé)
#
# # VÉRIFICATIONDémarrage :
#   docker execcompose wireguard-ovhup wg show-d
#   sssudo -tlnpbash | grep 9000ovh-ufw-setup.sh   # doitAPRÈS, afficherpour 10.0.0.1:9000que uniquementwg0 #existe
# =============================================================================

services:

  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard-ovh
    # network_mode: host est obligatoirecohabite sans souci avec d'autres conteneurs host
    # (ex : Home Assistant sur Albi). Indispensable pour que leswg0 règleset iptables PostUple
    # duroutage fichiersoient wg0.confau s'appliquent sur les interfaces réseauniveau de l'hôte.hôte, # EnUFW mode bridge Docker, le conteneur aapplique ses propres interfaces virtuelles
    # et ne peut pas manipuler eth0 de l'hôte ni les règles FORWARD globales.règles.
    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:# Accès au module kernel wireguard de l'hôte
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1/lib/modules:/lib/modules:ro
    restart: unless-stopped

  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer-ui
    # SÉCURITÉ : bindBind sur l'IP WireGuard uniquement.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 (= servers/marseille-wg0.conf
renommé)# #Lancer ensuite : sudo bash marseille-ufw-setup.sh
# =============================================================================

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/lib/modules:/lib/modules:ro
    restart: unless-stopped

  portainer-agent:
    image: portainer/agent:latest
    container_name: portainer-agent
    # SÉCURITÉ : bindBind sur l'IP WireGuard de Marseille uniquement. #joignable Le port 9001 est invisible depuis internet et depuis le LAN local.
    # Seul Portainer UI (10.0.0.1) peut s'y connecterseulement 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  (WireGuard + Portainer Agent)
# Identiquewg-config/wg0.conf à= Marseille,servers/albi-wg0.conf
changer# uniquementLancer ensuite : #sudo ports:bash "10.0.0.3:9001:9001"albi-ufw-setup.sh
#
container_name:# wireguard-albiHome Assistant / Frigate tournent déjà sur ce serveur : aucun changement
# requis pour eux. WireGuard en host cohabite avec HA en host.
# =============================================================================

services:

  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard-albi
    network_mode: host
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    volumes:
      - ./wg-config:/config
      - /lib/modules:/lib/modules:ro
    restart: unless-stopped

  portainer-agent:
    image: portainer/agent:latest
    container_name: portainer-agent
    # Bind sur l'IP WireGuard d'Albi.
    ports:
      - "10.0.0.3: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