Configuration Serveurs
Serveur OVH
# =============================================================================
# WireGuard — VPS OVH (Hub du mesh)
# IP WireGuard : 10.0.0.1/24
# Rôle : hub de signalisation + exit node OVH + Portainer UI #+ Versionentrée :private-only 2 — LAN cloisonnés par iptables FORWARD(10.0.0.40)
# =============================================================================
#
# - Les LAN (192.168.1.0/24 et 192.168.2.0/24) ne font pas parti des AllowedIPs
# des peers serveurs. OVH ne "connaît" plus les LAN des sites physiques.
# - La politique FORWARD passe à DROP par défaut : seul le trafic
# explicitement autorisé est routé. Tout le reste est silencieusement jeté.
# - Conséquence : un client connecté à OVH ne peut PAS atteindre
# 192.168.1.x ou 192.168.2.x, même s'il connaît l'adresse.
#
# PRÉREQUIS :
# - Port UDP 51820 ouvert dans le firewall OVH (managerET OVHdans > Security Groups)UFW
# - Vérifier le nom de l'interface réseau : ip link show
# (peut être eth0, ens3, ens4, enp1s0 selon le VPS)
# - ip_forward activé au niveau hôte (fait par le script UFW)
#
# =============================================================================
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <CLE_PRIVEE_OVH>
PostUp = \
sysctl -w net.ipv4.ip_forward=1; \
\
# --- Masquerading ---
# Permet aux clients exit-node OVH de sortir sur internet
# avec l'IP publique du VPS comme adresse source.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; \
\
# --- Politique FORWARD : DROP par défaut ---
# Tout paquet cherchant à traverser ce serveur (wg0 → eth0 ou eth0 → wg0)
# est refusé SAUF si une règle ci-dessous l'autorise explicitement.
# C'est le verrou de sécurité principal.
iptables -P FORWARD DROP; \
\
# --- Trafic établi / relatif ---
# Autorise les réponses aux connexions déjà ouvertes (TCP ACK, UDP retour…).
# Sans cette règle, même les connexions autorisées seraient bloquées en retour.
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT; \
\
# --- Client ovh-exitnode (10.0.0.10) ---
# Peut sortir sur internet via eth0 (exit node OVH).
# Ne peut PAS atteindre 192.168.1.x ou 192.168.2.x :
# aucune règle ne l'y autorise, le DROP s'applique.
iptables -A FORWARD -s 10.0.0.10/32 -o eth0 -j ACCEPT; \
\
# --- Client private-only (10.0.0.40) ---
# Accès au mesh (10.0.0.0/24) uniquement, pas d'internet, pas de LAN.
# Il peut joindre 10.0.0.1, 10.0.0.2, 10.0.0.3 mais rien au-delà.
iptables -A FORWARD -s 10.0.0.40/32 -d 10.0.0.0/24 -j ACCEPT; \
\
# --- Serveurs Marseille et Albi (trafic inter-mesh) ---
# Autorisés à communiquer avec les autres IPs WireGuard (10.0.0.x).
# Pas d'accès aux LAN distants via OVH : les LAN ne sont pas dans
# les AllowedIPs des peers (voir blocs [Peer] ci-dessous), donc
# WireGuard lui-même refuse de router ces paquets avant même iptables.
iptables -A FORWARD -s 10.0.0.2/32 -d 10.0.0.0/24 -j ACCEPT; \
iptables -A FORWARD -s 10.0.0.3/32 -d 10.0.0.0/24 -j ACCEPT
PostDown = \
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; \
iptables -P FORWARD ACCEPT; \
iptables -F FORWARD
# =============================================================================
# PEER : Serveur Marseille
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_MRS>
#Endpoint OVH= n'accepte pas de router des paquets à destination du LAN de Marseille.<IP_PUBLIQUE_MRS>:51820
# Seule10.0.0.2/32 l'→ IP WireGuard de MRS est(mesh)
déclarée# 10.0.0.20/32 → client mrs-exitnode : lesson clientstrafic retour repasse par MRS
# 10.0.0.41/32 → client private-only entré via MRS : retour via MRS
# Pas de 192.168.1.0/24 : OVH ne peuventroute #jamais pas atteindrevers le LAN de Marseille en passant par ce tunnel.Marseille.
AllowedIPs = 10.0.0.2/32, 10.0.0.20/32, 10.0.0.41/32
Endpoint = <IP_PUBLIQUE_MRS>:51820
PersistentKeepalive = 25
# =============================================================================
# PEER : Serveur Albi
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_ALBI>
Endpoint = <IP_PUBLIQUE_ALBI>:51820
# Même10.0.0.3/32 principe→ IP WireGuard d'Albi (mesh)
# 10.0.0.30/32 → client albi-exitnode : lesretour clientsvia OVHAlbi
ne# peuvent10.0.0.42/32 pas→ atteindreclient leprivate-only LANentré devia Albi.Albi : retour via Albi
AllowedIPs = 10.0.0.3/32, 10.0.0.30/32, 10.0.0.42/32
Endpoint = <IP_PUBLIQUE_ALBI>:51820
PersistentKeepalive = 25
# =============================================================================
# PEER : Client ovh-exitnode
# Tout le trafic internet sort par OVH. IP publique = VPS OVH.
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_CLIENT_OVH_1>
AllowedIPs = 10.0.0.10/32
# =============================================================================
# PEER : Client private-only #entré Accèsvia réseau mesh uniquement (10.0.0.x). Aucun exit node, aucun LAN.OVH
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_CLIENT_PRIVATE_1CLE_PUBLIQUE_CLIENT_PRIVATE_OVH>
AllowedIPs = 10.0.0.40/32
# =============================================================================
# NOTE : Les clients mrs-exitnode (10.0.0.20) et albi-exitnode (10.0.0.30)
# se connectent DIRECTEMENT à Marseille et Albi respectivement.
# Ils ne passent pas par OVH → pas de bloc [Peer] ici pour eux.
# =============================================================================
Serveur Albi & Marseille
# =============================================================================
# WireGuard — Serveur physique Albi & Marseille (Spoke)
# IP WireGuard : 10.0.0.3/24 & 10.0.0.2/24
# LAN local : 192.168.2.0/24 & 192.168.1.0/24
# Rôle : exit node AlbiMRS (+ accès LAN AlbiMRS) + Portainer Agent
# Version+ :entrée 2private-only —(10.0.0.41) LAN+ cloisonné,sauvegardes accessibleP2P uniquement aux clientsavec Albi ou Marseille
# =============================================================================
#
# RÈGLEACCÈS DEAU SÉCURITÉLAN FONDAMENTALE192.168.1.0/24 :
# 192.168.2.0/24 est accessibleAutorisé UNIQUEMENT depuisau :client mrs-exitnode (10.0.0.20) via UFW.
# -Voir 10.0.0.30/32ufw/marseille-ufw-setup.sh (clientpour albi-exitnode)les règles de filtrage.
# - 10.0.0.31/32 (client albi-lan)
# Tout autre peer (OVH, Marseille, clients exit-MRS, private-only…)
# est bloqué par iptablesle FORWARD.Pare-feu.
#
# PRÉREQUIS SUR LESLA BOX :
# 1. Port forwarding UDP 51820 → 192.168.2.1.100 (IP locale du serveur)
# 2. Route statique :
# Destination : 10.0.0.0/24
# Passerelle : 192.168.2.100
#
# =============================================================================
[Interface]
Address = 10.0.0.3/2/24
ListenPort = 51820
PrivateKey = <CLE_PRIVEE_ALBI>
PostUp = \
sysctl -w net.ipv4.ip_forward=1; \
\
# Masquerading : exit node Albi + accès LAN pour clients autorisés
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; \
\
# Politique FORWARD : DROP par défaut
iptables -P FORWARD DROP; \
\
# Trafic établi / relatif (réponses aux connexions autorisées)
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT; \
\
# --- Client albi-exitnode (10.0.0.30) ---
# Accès internet complet (exit node Albi) + accès LAN Albi.
iptables -A FORWARD -s 10.0.0.30/32 -o eth0 -j ACCEPT; \
iptables -A FORWARD -s 10.0.0.30/32 -d 192.168.2.0/24 -j ACCEPT; \
\
# --- Client albi-lan (10.0.0.31) ---
# Accès LAN Albi uniquement, sans exit node (split tunnel).
iptables -A FORWARD -s 10.0.0.31/32 -d 192.168.2.0/24 -j ACCEPT; \
\
# --- Serveur OVH (10.0.0.1) — mesh uniquement ---
# Peut joindre 10.0.0.3 pour le mesh, pas le LAN d'Albi.
iptables -A FORWARD -s 10.0.0.1/32 -d 10.0.0.3/32 -j ACCEPT; \
\
# --- Serveur Marseille (10.0.0.2) — sauvegardes uniquement ---
# Peut joindre 10.0.0.3 pour les sauvegardes rsync/SSH.
# Ne peut PAS atteindre 192.168.2.x.
iptables -A FORWARD -s 10.0.0.2/32 -d 10.0.0.3/32 -j ACCEPT; \
\
# Tout le reste → DROP implicite
PostDown = \
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; \
iptables -P FORWARD ACCEPT; \
iptables -F FORWARD
# =============================================================================
# PEER : VPS OVH
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_OVH>
Endpoint = <IP_PUBLIQUE_OVH>:51820
# Destinations routées VERS OVH routedepuis versMarseille :
# 10.0.0.1/32 → IP WireGuard d'OVH (mesh, Portainer UI)
# 10.0.0.10/32 → client ovh-exitnode : retour via OVH
# 10.0.0.40/32 → client private-only entré via OVH : retour via OVH
AllowedIPs = 10.0.0.1/32, 10.0.0.10/32, 10.0.0.40/32
PersistentKeepalive = 25
# =============================================================================
# PEER : Serveur Albi les(tunnel paquetsP2P destinésdirect à— sauvegardes sans passer par OVH)
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_ALBI>
Endpoint = <IP_PUBLIQUE_ALBI>:51820
# Destinations routées VERS Albi :
# 10.0.0.3/32 → IP WireGuard d'Albi (sauvegardes rsync/SSH)
# 10.0.0.30/32 → client albi-exitnode (symétrie mesh)
# 10.0.0.42/32 → client private-only entré via Albi
# Pas de 192.168.2.0/24 : MRS ne route jamais vers le LAN d'Albi.
AllowedIPs = 10.0.0.3/32, 10.0.0.30/32, 10.0.0.42/32
PersistentKeepalive = 25
# =============================================================================
# PEER : Client mrs-exitnode (IP publique = MRS, accès LAN MRS)
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_CLIENT_MRS>
AllowedIPs = 10.0.0.20/32
# =============================================================================
# PEER : Client private-only entré via MRS
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_CLIENT_PRIVATE_MRS>
AllowedIPs = 10.0.0.41/32
Serveur Albi
# =============================================================================
# WireGuard — Serveur physique Albi (Spoke)
# IP WireGuard : 10.0.0.3/24
# Interface physique : enp2s0
# LAN local : 192.168.2.0/24
# Rôle : exit node Albi (+ accès LAN Albi) + Portainer Agent
# + entrée private-only (10.0.0.42) + sauvegardes P2P avec MRS
# =============================================================================
#
# COHABITATION AVEC HOME ASSISTANT / FRIGATE :
# WireGuard tourne en network_mode: host, comme Home Assistant.
# Aucun conflit : plusieurs conteneurs peuvent partager la pile réseau
# de l'hôte. Le filtrage FORWARD posé par UFW n'affecte pas la
# communication HA <-> Frigate (trafic local ou géré par Docker),
# il ne filtre que le trafic VPN routé.
#
# ACCÈS AU LAN 192.168.2.0/24 :
# Autorisé UNIQUEMENT au client albi-exitnode (10.0.0.30) via UFW.
#
# PRÉREQUIS BOX ALBI :
# - Port forwarding UDP 51820 → 192.168.2.100 (IP locale du serveur)
#
# =============================================================================
[Interface]
Address = 10.0.0.3/24
ListenPort = 51820
PrivateKey = <CLE_PRIVEE_ALBI>
# =============================================================================
# PEER : VPS OVH
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_OVH>
Endpoint = <IP_PUBLIQUE_OVH>:51820
# 10.0.0.1/32 → IP WireGuard d'OVH
# 10.0.0.10/32 → client ovh-exitnode : retour via OVH
# 10.0.0.40/32 → client private-only entré via OVH
AllowedIPs = 10.0.0.1/32, 10.0.0.10/32, 10.0.0.40/32
PersistentKeepalive = 25
# =============================================================================
# PEER : Serveur Marseille (tunnel P2P direct)
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_MRS>
Endpoint = <IP_PUBLIQUE_MRS>:51820
# 10.0.0.2/32 → IP WireGuard de MRS (sauvegardes)
# 10.0.0.20/32 → client mrs-exitnode (symétrie mesh)
# 10.0.0.41/32 → client private-only entré via MRS
# Pas de 192.168.1.0/24 : Albi ne route pasjamais vers le LAN de Marseille.
# Les sauvegardes utilisent 10.0.0.2 (IP WireGuard de MRS).
AllowedIPs = 10.0.0.2/32, 10.0.0.20/32, 10.0.0.41/32
PersistentKeepalive = 25
# =============================================================================
# PEER : Client albi-exitnode (exitIP nodepublique += Albi, accès LAN Albi)
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_CLIENT_ALBI_1CLE_PUBLIQUE_CLIENT_ALBI>
AllowedIPs = 10.0.0.30/32
# =============================================================================
# PEER : Client albi-lanprivate-only (LANentré via Albi uniquement, split tunnel)
# =============================================================================
[Peer]
PublicKey = <CLE_PUBLIQUE_CLIENT_ALBI_LANCLE_PUBLIQUE_CLIENT_PRIVATE_ALBI>
AllowedIPs = 10.0.0.31/42/32