Tunnel Wireguard d'un serveur local à un VPS
Cette configuration permet d'établir une connexion entre votre réseau local et un serveur VPS, vous offrant la possibilité d'ouvrir les ports nécessaires sur le VPS sans exposer directement votre réseau. Vous bénéficiez également de la protection DDoS fournie par le serveur distant. Cette solution est pratique si vous ne pouvez pas ouvrir de ports sur votre routeur ou si vous disposez d'une adresse IP dynamique. L'utilisation d'un VPS comme intermédiaire vous permet de contourner les limitations de votre routeur ou de votre fournisseur d'accès Internet, tout en offrant une sécurité supplémentaire.
Prérequis
- Un minimum de connaissances en réseau, administration VPS.
- Vous disposez d'un VPS sur Debian chez IONOS, OVH, autres.
- Connaître l'adresse IP publique du VPS.
- Une heure de temps pour faire la configuration.
Installation du serveur WireGuard sur le VPS
Connectez-vous en SSH à votre machine :
- Connectez-vous en tant que root :
sudo -i
- Commande pour obtenir les DNS utilisés par le serveur. Notez les adresses IP pour les étapes suivantes.
cat /run/systemd/resolve/resolv.conf | grep -E '^nameserver' | grep -v 'IPv6' | awk '{print $2}' | head -n 2
-
Suivez les instructions de ce dépôt pour installer votre serveur WireGuard. Laissez tout par défaut pour les questions posées, sauf pour
First DNS resolver to use for the clients:et la deuxième questionSecond DNS resolver to use for the clients (optional):, indiquez les IP utilisées par votre serveur afin de ne pas perturber certains services qui nécessitent une vérification DNS pour des raisons de sécurité, comme les serveurs de messagerie. -
À la fin de l'installation, vous aurez accès au fichier de configuration. Exécutez la commande
cat /chemindevotrefichier.confpour copier les informations du client. Notez ces informations quelque part afin de pouvoir les utiliser plus tard dans le processus d'installation.
-
Vous pouvez créer plusieurs clients, mais les machines ne communiqueront pas entre elles avec
iptables -I FORWARD -i wg0 -s 10.66.66.0/24 -d 10.66.66.0/24 -j DROP, ce qui est une bonne pratique de sécurité. -
Vous devez lire le fichier de configuration pour comprendre son fonctionnement. Vous pouvez utiliser un IDE pour changer les occurrences. Vous avez trois choses à faire : remplacer PORT_WIREGUARD par le port WireGuard généré durant l'installation du script, IP_PUBLIQUE_DU_SERVEUR-VPS par l'adresse IP publique du VPS, et ajouter en dessous les ports que vous voulez en prenant exemple sur PostUp et PostDown.
PostUp = iptables -t nat -A PREROUTING -i ens2 -d IP_PUBLIQUE_DU_SERVEUR-VPS -p tcp --dport 443 -j DNAT --to-destination 10.66.66.2:443 # Redirige le trafic entrant vers l'adresse IP du client WireGuard
PostDown = iptables -t nat -D PREROUTING -i ens2 -d IP_PUBLIQUE_DU_SERVEUR-VPS -p tcp --dport 443 -j DNAT --to-destination 10.66.66.2:443 || true # Supprime la redirection du trafic entrant
# Description :
# Cette configuration vous permet d'établir une connexion entre une machine dans votre réseau local ou un routeur OPNsense et un serveur VPS. Cela vous permet d'ouvrir les ports nécessaires sur le VPS sans exposer votre réseau local, tou>
# Sauvegarder la configuration actuelle avant de la modifier
# Effectuez cette sauvegarde avant toute modification
# cp /etc/wireguard/wg0.conf /etc/wireguard/wg0.conf.bak
# Arrêter le service WireGuard avant de modifier la configuration
# sudo wg-quick down wg0
# Modifier la configuration de WireGuard
# Ouvrez le fichier de configuration pour le modifier
# nano /etc/wireguard/wg0.conf
# Supprimez la section entre 'PrivateKey = x' et '### Client opnsense' et rajouter cette configuration avec tout les commentaires pour vous aidez
# Remplacez PORT_WIREGUARD et IP_PUBLIQUE_DU_SERVEUR-VPS par le port WireGuard et l'adresse IP publique du VPS
# Remplacez ens2 par votre interface. Commande pour voir le nom : `ip link show`
# Il est important d'ouvrir en `PostUp` et en `PostDown` le port que vous avez ouvert.
# Pour un deuxième client, ajoutez les lignes et modifiez l'adresse IP locale : '10.66.66.3' en prenant exemple sur '10.66.66.2'
# Règles iptables à appliquer après avoir configuré l'interface WireGuard
PostUp = sysctl -w net.ipv4.ip_forward=1 # Active le forwarding IPv4 pour permettre le routage entre les interfaces
PostUp = iptables -I INPUT -p udp --dport PORT_WIREGUARD -j ACCEPT # Autorise le trafic entrant sur le port UDP de WireGuard (remplacez 'PORT_WIREGUARD' par le numéro de port réel)
PostUp = iptables -A FORWARD -i wg0 -o ens2 -j ACCEPT # Autorise le trafic passant de l'interface WireGuard (wg0) vers l'interface réseau (ens2)
PostUp = iptables -A FORWARD -i ens2 -o wg0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Autorise les connexions établies et connexes à revenir sur l'interface WireGuard
PostUp = iptables -I FORWARD -i wg0 -s 10.66.66.0/24 -d 10.66.66.0/24 -j DROP # Bloque le trafic interne au sous-réseau WireGuard pour éviter les boucles ou les attaques internes
# Règles de translation d'adresse réseau (NAT) pour le trafic sortant et entrant
PostUp = iptables -t nat -A POSTROUTING -s 10.66.66.2/32 -o ens2 -j SNAT --to-source IP_PUBLIQUE_DU_SERVEUR-VPS # Effectue une translation d'adresse pour le trafic sortant du client vers l'IP publique
PostUp = iptables -t nat -A PREROUTING -i ens2 -d IP_PUBLIQUE_DU_SERVEUR-VPS -p tcp --dport 80 -j DNAT --to-destination 10.66.66.2:80 # Redirige le trafic entrant vers l'adresse IP du client WireGuard
PostUp = iptables -t nat -A PREROUTING -i ens2 -d IP_PUBLIQUE_DU_SERVEUR-VPS -p tcp --dport 443 -j DNAT --to-destination 10.66.66.2:443 # Redirige le trafic entrant vers l'adresse IP du client WireGuard
# Règles iptables à retirer lors de la suppression de l'interface WireGuard
PostDown = iptables -D INPUT -p udp --dport PORT_WIREGUARD -j ACCEPT || true # Supprime la règle autorisant le trafic entrant sur le port UDP de WireGuard
PostDown = iptables -D FORWARD -i wg0 -o ens2 -j ACCEPT || true # Supprime la règle autorisant le trafic de wg0 vers ens2
PostDown = iptables -D FORWARD -i ens2 -o wg0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT || true # Supprime la règle autorisant les connexions établies à retourner vers wg0
PostDown = iptables -D FORWARD -i wg0 -s 10.66.66.0/24 -d 10.66.66.0/24 -j DROP || true # Supprime la règle bloquant le trafic interne au sous-réseau WireGuard
PostDown = iptables -t nat -D POSTROUTING -s 10.66.66.2/32 -o ens2 -j SNAT --to-source IP_PUBLIQUE_DU_SERVEUR-VPS || true # Supprime la règle de NAT pour le trafic sortant du client
PostDown = iptables -t nat -D PREROUTING -i ens2 -d IP_PUBLIQUE_DU_SERVEUR-VPS -p tcp --dport 80 -j DNAT --to-destination 10.66.66.2:80 || true # Supprime la redirection du trafic entrant
PostDown = iptables -t nat -D PREROUTING -i ens2 -d IP_PUBLIQUE_DU_SERVEUR-VPS -p tcp --dport 443 -j DNAT --to-destination 10.66.66.2:443 || true # Supprime la redirection du trafic entrant
# Redémarrer le service WireGuard après avoir modifié la configuration :
# sudo wg-quick up wg0
# Vérifiez l'état de WireGuard :
# sudo wg
- Éditez le fichier de configuration :
nano /etc/wg0.conf
Installation du client Wireguard sur le serveur dans votre réseau local
Ce guide fournit les instructions étape par étape pour installer le client généré précédemment sur un système Debian.
1. Mise à jour du Système
Mettez à jour les paquets du système :
sudo apt update && sudo apt upgrade -y
2. Installer WireGuard
Installez WireGuard à partir des dépôts de Debian :
sudo apt install wireguard curl resolvconf iptables -y
3. Générer des Clés
Générez une clé privée et une clé publique pour l'interface WireGuard :
wg genkey | tee privatekey | wg pubkey > publickey
4. Configurer WireGuard
Créez un fichier de configuration pour l'interface WireGuard :
sudo nano /etc/wireguard/wg0.conf
Collez ou modifiez la configuration que vous avez précédemment généré dans le serveur dans le fichier, en remplaçant par les valeurs appropriées :
[Interface]
PrivateKey = VOTRE_CLE_PRIVEE
Address = 10.66.66.2/24 # IP locale pour l'interface WireGuard
ListenPort = 5678 # Le port WireGuard
# Autoriser le trafic
PostUp = iptables -A INPUT -s 192.168.0.0/16 -p udp -m multiport --dports 22,80,443 -j ACCEPT
PostUp = iptables -A INPUT -s 192.168.0.0/16 -p tcp -m multiport --dports 22,80,443 -j ACCEPT
# Bloquer tout autre trafic entrant depuis le réseau local
PostUp = iptables -A INPUT -s 192.168.0.0/16 -j DROP
# Supprimer la règle autorisant le trafic
PostDown = iptables -D INPUT -s 192.168.0.0/16 -p udp -m multiport --dports 22,80,443 -j ACCEPT
PostDown = iptables -D INPUT -s 192.168.0.0/16 -p tcp -m multiport --dports 22,80,443 -j ACCEPT
# Supprimer la règle bloquant tout autre trafic entrant depuis le réseau local
PostDown = iptables -D INPUT -s 192.168.0.0/16 -j DROP
[Peer]
PublicKey = CLE_PUBLIQUE_DU_SERVEUR
Endpoint = IP_PUBLIQUE_DU_SERVEUR:51820 # Le port WireGuard
AllowedIPs = 0.0.0.0/0
Ces règles ont pour but de s'assurer que tout le trafic sortant de l'interface WireGuard soit rejeté, à l'exception du trafic destiné au réseau local et du trafic marqué avec le fwmark de l'interface WireGuard. Cela permet de s'assurer que seul le trafic VPN passe par l'interface WireGuard, et que le reste du trafic est bloqué :
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL ! -d 192.168.0.0/16 -j REJECT && ip6tables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL ! -d 192.168.0.0/16 -j REJECT && ip6tables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
5. Démarrer WireGuard
Mettez en route l'interface WireGuard :
sudo wg-quick up wg0
Activez WireGuard au démarrage :
sudo systemctl enable wg-quick@wg0
6. Vérifier la Connexion
Vérifiez l'état de WireGuard :
sudo wg
7. Tester l'IP Publique
Vérifiez votre adresse IP publique en utilisant curl :
curl ifconfig.me
8. Arrêter WireGuard
Fermez l'interface :
sudo wg-quick down wg0
