Connecter WireGuard et OpenVPN
|
Important
|
Traduction d’un article du site Pro Custodibus Le contenu de cette page est la traduction Française de l’article Connecting WireGuard and OpenVPN de Justin Ludwig |
Connecter WireGuard et OpenVPN
Si vous avez un réseau existant OpenVPN , il est facile de connecter un réseau WireGuard à celui-ci, permettant le flux de trafic entre les deux. Voici comment procéder dans quatre scénarios courants :
Hub partagé
Le scénario le plus basique est celui où nous utilisons le même serveur OpenVPN en tant que hub pour nos réseaux OpenVPN et WireGuard, et simplement souhaitons permettre à nos clients OpenVPN d’accéder à nos clients WireGuard, et vice versa.
Par exemple, nous avons un réseau OpenVPN utilisant la plage d’adresses IP 10.8.0.0/24, et un réseau WireGuard utilisant la plage 10.0.0.0/24. Le serveur OpenVPN et le hub du réseau WireGuard partagent le même serveur (avec une adresse IP publique de 192.0.2.3):
Nous voulons être en mesure de nous connecter depuis le Point de terminaison A (à l’adresse IP 10.8.0.2 sur le réseau OpenVPN) au Point de terminaison B (à l’adresse IP 10.0.0.2 sur le réseau WireGuard), et vice versa.
Ce cas ressemble à un réseau OpenVPN hub-and-spoke basique, associé à un réseau WireGuard hub-and-spoke basique. Notre configuration du serveur OpenVPN utilisera simplement les paramètres par défaut :
# /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
tls-auth ta.key
cipher AES-256-CBC
persist-key
persist-tun
verb 3
explicit-exit-notify 1
En particulier, notez que nous ne utilisons pas les directives dev tap ou client-to-client dans notre configuration OpenVPN — nous utilisons la directive dev tun, donc tout le trafic des clients OpenVPN vers le serveur sera routé via l’interface réseau tun0 du serveur.
Notre configuration WireGuard sur le serveur OpenVPN ressemblera exactement à la configuration de la hub dans le guide WireGuard Hub and Spoke Configuration (la hub est l’Hôte C dans ce guide), sauf que dans cet exemple simple, nous ne connecterons qu’un seul spoke WireGuard à elle (Endpoint B) :
# /etc/wireguard/wg0.conf
# paramètres locaux pour la hub de WireGuard
[Interface]
PrivateKey = CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
Address = 10.0.0.3/32
ListenPort = 51823
PreUp = sysctl -w net.ipv4.ip_forward=1
# paramètres distants pour Endpoint B
[Peer]
PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
AllowedIPs = 10.0.0.2/32
Pour permettre aux réseaux WireGuard et OpenVPN de se parler entre eux, nous devons simplement faire ces quatre choses :
- Ajouter des routes aux clients WireGuard
- Ajouter des routes aux clients OpenVPN
- Autoriser les connexions entre les réseaux
- Tester cela
Ajouter des routes aux clients WireGuard
D’abord, nous devons mettre à jour la configuration du client WireGuard pour ajouter la route pour le réseau OpenVPN (10.8.0.0/24). Cela signifie simplement d’ajouter une entrée AllowedIPs = 10.8.0.0/24 dans la section [Peer] de la hub WireGuard.
Après avoir ajouté cette entrée, la configuration WireGuard sur Endpoint B serait comme suit (comparez cela à la configuration de Endpoint B du guide WireGuard Hub and Spoke Configuration) :
# /etc/wireguard/wg0.conf
# paramètres locaux pour la hub de WireGuard
[Interface]
PrivateKey = CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
Address = 10.0.0.3/32
ListenPort = 51823
PreUp = sysctl -w net.ipv4.ip_forward=1
# paramètres distants pour Endpoint B
[Peer]
PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
AllowedIPs = 10.0.0.2/32, 10.8.0.0/24
Ajouter des routes aux clients OpenVPN
De même, nous devons mettre à jour la configuration du client OpenVPN pour ajouter la route pour le réseau WireGuard (10.0.0.0/24). Cela signifie simplement d’ajouter une entrée route 10.0.0.0 255.255.255.0 dans la configuration du client OpenVPN.
Après avoir ajouté cette entrée, la configuration du client OpenVPN serait comme suit :
# /etc/openvpn/client.ovpn
client
dev tun
proto udp
remote 192.0.2.3 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
# Ajouter la route pour le réseau WireGuard
route 10.0.0.0 255.255.255.0
Autoriser les connexions entre les réseaux
Pour autoriser les connexions entre les réseaux, nous devons ajouter des règles de pare-feu pour permettre le trafic entre les interfaces tun0 (OpenVPN) et wg0 (WireGuard). Voici un exemple de règles iptables :
# Permettre le trafic entre tun0 et wg0
iptables -A FORWARD -i tun0 -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o tun0 -j ACCEPT
# Activer la forward
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Tester cela
Enfin, pour tester cette configuration, vous pouvez essayer de pinguer l’adresse IP du Point de terminaison B à partir du Point de terminaison A et vice versa. Si tout est configuré correctement, vous devriez être en mesure de communiquer entre les deux réseaux.
# À partir du Point de terminaison A (OpenVPN)
ping 10.0.0.2
# À partir du Point de terminaison B (WireGuard)
ping 10.8.0.2
En suivant ces étapes, vous devriez être en mesure de connecter un réseau WireGuard à un réseau OpenVPN existant et permettre le flux de trafic entre les deux.
Voici le texte corrigé :
Ajouter des Routes aux Clients OpenVPN
Ensuite, nous devons mettre à jour la configuration du serveur OpenVPN pour pousser la route pour le réseau WireGuard (10.0.0.0/24) à ses clients. Cela signifie simplement d’ajouter une entrée push "route 10.0.0.0 255.255.255.0" au fichier de configuration du serveur.
Après avoir ajouté cette entrée, la configuration du serveur OpenVPN ressemblerait à ceci :
# /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
push "route 10.0.0.0 255.255.255.0"
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
tls-auth ta.key
cipher AES-256-CBC
persist-key
persist-tun
verb 3
explicit-exit-notify 1
Autoriser les Connexions entre Réseaux
Enfin, nous devons autoriser le transfert de trafic entre les interfaces tun0 et wg0 sur le serveur OpenVPN. Si nous ne utilisons pas un pare-feu basé sur l’hôte sur le serveur OpenVPN, nous n’avons en fait rien à faire pour cette étape.
Cependant, si nous utilisons iptables comme pare-feu, nous devrions ajouter deux règles iptables comme suit pour permettre aux clients de notre réseau OpenVPN d’établir des connexions avec les clients de notre réseau WireGuard et vice versa :
-I FORWARD -i tun0 -o wg0 -j ACCEPT
-I FORWARD -i wg0 -o tun0 -j ACCEPT
Si nous avons utilisé l’exemple Simple Stateful Firewall de la wiki d’Arch Linux pour configurer notre pare-feu, c’est ainsi que nous configurons iptables :
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
:fw-interfaces - [0:0]
:fw-open - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j fw-interfaces
-A FORWARD -j fw-open
-A FORWARD -j REJECT --reject-with icmp-host-unreachable
-A TCP -p tcp --dport 22 -j ACCEPT
-A UDP -p udp --dport 1194 -j ACCEPT
-A UDP -p udp --dport 51823 -j ACCEPT
-A fw-interfaces -i tun0 -o tun0 -j ACCEPT
-A fw-interfaces -i wg0 -o wg0 -j ACCEPT
-A fw-interfaces -i tun0 -o wg0 -j ACCEPT
-A fw-interfaces -i wg0 -o tun0 -j ACCEPT
COMMIT
Alternativement, si nous utilisons nftables pour notre pare-feu, nous devons ajouter deux règles nftables comme suit pour permettre aux clients de notre réseau OpenVPN d’établir des connexions avec les clients de notre réseau WireGuard et vice versa :
iifname tun0 oifname wg0 accept
iifname wg0 oifname tun0 accept
Si nous avons utilisé le guide Comment utiliser WireGuard avec nftables pour configurer notre pare-feu, voici comment nous configurons nftables :
#!/usr/sbin/nft -f
flush ruleset
define pub_iface = "eth0"
define vpn_iface = "tun0"
define vpn_port = 1194
define wg_iface = "wg0"
define wg_port = 51823
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif "lo" accept
m
```markdown
eta l4proto { icmp, ipv6-icmp } accept
ct state vmap { invalid : drop, established : accept, related : accept }
ct state new limit rate over 1/second burst 10 packets drop
iifname $pub_iface tcp dport ssh accept
iifname $pub_iface udp dport $vpn_port accept
iifname $pub_iface udp dport $wg_port accept
reject
chain forward {
type filter hook forward priority 0; policy drop;
iifname $vpn_iface oifname $vpn_iface accept
iifname $wg_iface oifname $wg_iface accept
iifname $vpn_iface oifname $wg_iface accept
iifname $wg_iface oifname $vpn_iface accept
reject with icmpx type host-unreachable
}
Test It Out
Pour tester, si nous avons un service réseau comme un serveur HTTP en cours d’exécution sur le Point de terminaison B, nous devrions être en mesure de nous connecter à celui-ci depuis le Point de terminaison A en utilisant l’adresse WireGuard du Point de terminaison B :
$ curl 10.0.0.2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
...
Et de même, si nous avons un service réseau comme un serveur HTTP en cours d’exécution sur le Point de terminaison A, nous devrions être en mesure de nous connecter à celui-ci depuis le Point de terminaison B en utilisant l’adresse OpenVPN du Point de terminaison A :
$ curl 10.8.0.2
<!DOCTYPE html>
<html>
...
Si cela ne fonctionne pas, consultez les conseils de dépannage de base pour les réseaux hub-and-spoke dans le guide Configuration d’un Hub et d’Étoiles avec WireGuard. Si vous utilisez un pare-feu iptables sur le serveur OpenVPN, consultez la section “Erreurs Iptables” du guide Contrôle d’accès avec WireGuard et Iptables ; ou si vous utilisez un pare-feu nftables, consultez la section “Dépannage” du guide Utilisation de WireGuard avec Nftables.
Hub to Hub
Le prochain scénario que nous allons couvrir est similaire au précédent, où nous voulons simplement permettre à nos clients OpenVPN d’accéder aux clients WireGuard et vice versa. Dans ce scénario, cependant, nous utiliserons deux serveurs distincts : un pour le serveur OpenVPN et un autre pour la passerelle WireGuard.
Nous connecterons notre serveur OpenVPN à notre passerelle WireGuard en configurant un client WireGuard sur le serveur OpenVPN et en routant notre trafic inter-réseau à travers celui-ci :
Notre serveur OpenVPN sera une feuille dans notre réseau WireGuard, utilisant une adresse IP de 10.0.0.1 dans la plage d’adresses IP du réseau WireGuard 10.0.0.0/24. Le serveur OpenVPN utilisera également une adresse IP de 10.8.0.1 pour son interface OpenVPN sur le réseau OpenVPN (dans la plage d’adresses IP 10.8.0.0/24).
Comme dans le scénario précédent, nous voulons être en mesure de connecter Endpoint A, avec une adresse IP de 10.8.0.2 sur le réseau OpenVPN, à Endpoint B, avec une adresse IP de 10.0.0.2 sur le réseau WireGuard, et vice versa.
Et comme dans le scénario partagé Passerelle Partagée ci-dessus, assurez-vous de ne pas utiliser les directives dev tap ou client-to-client dans la configuration OpenVPN — utilisez plutôt la directive dev tun, afin que tout trafic des clients OpenVPN au serveur soit routé à travers l’interface réseau tun0 du serveur.
Pour permettre aux réseaux WireGuard et OpenVPN de communiquer entre eux, nous devons faire ces six choses :
- Configurer un client WireGuard sur le serveur OpenVPN
- Connecter le serveur OpenVPN à la passerelle WireGuard
- Ajouter des routes aux clients WireGuard
- Configurer les règles de pare-feu sur le serveur OpenVPN
- Configurer les règles de pare-feu sur la passerelle WireGuard
- Tester la connectivité entre les réseaux
En suivant ces étapes, vous devriez être en mesure d’établir une communication sécurisée et efficace entre vos réseaux OpenVPN et WireGuard.
Voici le texte corrigé :
---
wireguard-clients-2)
4. [Ajouter des routes aux clients OpenVPN](#add-routes-to-openvpn-clients-2)
5. [Autoriser les connexions entre les réseaux](#allow-connections-between-networks-2)
6. [Tester](#test-it-out-2)
### Configurer un client WireGuard sur le serveur OpenVPN
D'abord, configurez un client WireGuard sur le serveur OpenVPN. Ce client peut être configuré exactement comme les autres branches WireGuard (comparez cela à la configuration du Point A de l'article [WireGuard Hub et Configuration des Branches](/blog/2020/11/wireguard-hub-and-spoke-config/#configure-wireguard-on-endpoint-a)) :
```bash
# /etc/wireguard/wg0.conf
# paramètres locaux pour le serveur OpenVPN
[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
Address = 10.0.0.1/32
ListenPort = 51821
# paramètres distants pour la branche WireGuard
[Peer]
PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
Endpoint = 192.0.2.3:51823
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
Assurez-vous d’inclure une configuration PersistentKeepalive si vous souhaitez que les clients WireGuard puissent initier des connexions aux clients OpenVPN.
Connecter le Serveur OpenVPN au Hub WireGuard
Ensuite, ajoutez une entrée [Peer] pour le serveur OpenVPN dans la configuration du hub WireGuard. Cela doit être configuré exactement comme les sections [Peer] pour les autres branches WireGuard — sauf qu’il doit également inclure le réseau OpenVPN (10.8.0.0/24) dans son paramètre AllowedIPs (comparez cela à la configuration de l’Hôte C de l’article WireGuard Hub et Configuration des Branches) :
# /etc/wireguard/wg0.conf
# paramètres locaux pour le hub WireGuard
[Interface]
PrivateKey = CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
Address = 10.0.0.3/32
ListenPort = 51823
PreUp = sysctl -w net.ipv4.ip_forward=1
# paramètres distants pour le serveur OpenVPN
[Peer]
PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
AllowedIPs = 10.0.0.1/32, 10.8.0.0/24
# paramètres distants pour le Point B
[Peer]
PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
AllowedIPs = 10.0.0.2/32
Ajouter des Routes aux Clients WireGuard
Ensuite, nous devons mettre à jour la configuration de tous nos autres clients WireGuard pour ajouter le réseau OpenVPN (10.8.0.0/24) au paramètre AllowedIPs pour leur connexion au hub :
# /etc/wireguard/wg0.conf
# paramètres locaux pour le Point de terminaison B
[Interface]
PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
Address = 10.0.0.2/32
ListenPort = 51822
# paramètres distants pour le hub WireGuard
[Peer]
PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
Endpoint = 192.0.2.3:51823
AllowedIPs = 10.0.0.0/24, 10.8.0.0/24
PersistentKeepalive = 25
Cela est exactement le même que l’étape Ajouter des routes aux clients WireGuard du scénario Hub partagé.
Ajouter des routes aux clients OpenVPN
Ensuite, nous devons mettre à jour la configuration de notre serveur OpenVPN pour pousser la route pour le réseau WireGuard (10.0.0.0/24) à ses clients. Cela signifie simplement d’ajouter une entrée push "route 10.0.0.0 255.255.255.0".
Après avoir ajouté cette entrée, la configuration du serveur OpenVPN serait comme suit (exactement la même que l’étape Ajouter des routes aux clients OpenVPN du scénario Hub partagé) :
# /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
push "route 10.0.0.0 255.255.255.0"
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
tls-auth ta.key
cipher AES-256-CBC
persist-key
persist-tun
verb 3
explicit-exit-notify 1
Autoriser les connexions entre réseaux
Nous n’avons pas besoin de mettre à jour les paramètres des clients OpenVPN pour autoriser les connexions entre les réseaux. Les routes ont été correctement configurées pour que le réseau 10.8.0.0/24 soit accessible via le réseau 10.0.0.0/24.
Ce texte est maintenant plus fluide et la grammaire a été améliorée tout en respectant les consignes données.
Voici le texte corrigé :
Configurer les paramètres du pare-feu
Pour configurer les paramètres du pare-feu, vous devez ajuster les règles sur le hub WireGuard ou les clients WireGuard, car ils permettent déjà le trafic vers et depuis le réseau WireGuard. Vous devrez simplement modifier les paramètres du pare-feu sur le serveur OpenVPN pour autoriser le transfert de trafic entre ses interfaces tun0 et wg0. Ces ajustements sont exactement les mêmes que l’étape Autoriser les connexions entre réseaux du scénario Hub partagé, donc faites référence à celui-ci.
Tester
Pour tester cela, si nous avons un service réseau comme un serveur HTTP en cours d’exécution sur le Point de terminaison B, nous devrions être en mesure de nous connecter à celui-ci depuis le Point de terminaison A en utilisant l’adresse IP WireGuard du Point de terminaison B :
$ curl 10.0.0.2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
...
Et de même, si nous avons un service réseau comme un serveur HTTP en cours d’exécution sur le Point de terminaison A, nous devrions être en mesure de nous connecter à celui-ci depuis le Point de terminaison B en utilisant l’adresse OpenVPN du Point de terminaison A :
$ curl 10.8.0.2
<!DOCTYPE html>
<html>
...
Si cela ne fonctionne pas, consultez les conseils de dépannage de base pour les réseaux hub-and-spoke dans le guide Configuration d’un Hub et d’Étoiles avec WireGuard. Si vous utilisez un pare-feu iptables sur le serveur OpenVPN, consultez la section “Erreurs iptables” du guide Contrôle d’accès avec WireGuard et iptables ; ou si vous utilisez un pare-feu nftables, consultez la section “Dépannage” du guide Utilisation de WireGuard avec nftables.
Accès au Site WireGuard
Le scénario suivant que nous couvrirons est similaire au précédent, où nous utilisons des hôtes distincts pour le serveur OpenVPN et l’hub WireGuard. Mais dans ce cas, nous voulons permettre aux clients OpenVPN de la réseau OpenVPN d’accéder à un LAN (Réseau local) derrière l’un des points d’entrée WireGuard. Ce scénario est très similaire au scénario Passerelle du Site en tant qu’Etoile de l’article Multi-Hop WireGuard — sauf que dans ce scénario, le Point de terminaison A est un client OpenVPN et sa connexion au réseau WireGuard est indirecte, routée via le serveur OpenVPN.
Comme dans le scénario précédent, nous allons connecter notre serveur OpenVPN à notre hub WireGuard en configurant un client WireGuard sur le serveur OpenVPN et en routant notre trafic inter-réseau à travers celui-ci :
Comme dans le scénario précédent, notre serveur OpenVPN sera un spoke sur notre réseau WireGuard, utilisant une adresse IP de 10.0.0.1 dans la plage d’adresses IP du réseau WireGuard 10.0.0.0/24. Le serveur OpenVPN utilisera également une adresse IP de 10.8.0.1 pour son interface OpenVPN sur le réseau OpenVPN (dans la plage d’adresses IP 10.8.0.0/24).
Mais en différant du scénario précédent, nous voulons accéder à un autre réseau — le LAN Site B, qui utilise la plage d’adresses IP 192.168.200.0/24. Nous voulons être en mesure de nous connecter depuis le Point de terminaison A, avec une adresse IP 10.8.0.2 sur le réseau OpenVPN, à travers le réseau WireGuard jusqu’au Point de terminaison B, avec une adresse IP 192.168.200.22 sur le LAN Site B.
Comme dans les scénarios précédents, assurez-vous de ne pas utiliser les directives dev tap ou client-to-client dans la configuration OpenVPN — utilisez plutôt la directive dev tun, afin que tout trafic des clients OpenVPN au serveur soit routé à travers l’interface réseau tun0 du serveur.
Pour permettre au réseau OpenVPN d’accéder au LAN derrière le réseau WireGuard, nous devons effectuer ces six étapes :
- Configurer un client WireGuard sur le serveur OpenVPN
- Connecter le serveur OpenVPN au hub WireGuard
- Ajouter des routes à la passerelle du site WireGuard
- Ajouter des routes aux clients OpenVPN
- Autoriser les connexions entre les réseaux
- Tester le tout
Configurer un client WireGuard sur le serveur OpenVPN
D’abord, configurez un client WireGuard sur le serveur OpenVPN. Ce client peut être configuré comme les autres spokes WireGuard qui ont accès à la passerelle Site B :
# /etc/wireguard/wg0.conf
# paramètres locaux pour le serveur OpenVPN
[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
Address = 10.0.0.1/32
ListenPort = 51821
# paramètres distants pour le hub WireGuard
[Peer]
PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
Endpoint = 192.0.2.3:51823
AllowedIPs = 10.0.0.0/24, 192.168.200.0/24
Cela ressemble à l’étape Configurer un client WireGuard sur le serveur OpenVPN du scénario Hub au Hub ci-dessus — mais notez qu’il inclut également le LAN de Site B (192.168.200.0/24) dans sa configuration AllowedIPs. (Et il n’a pas besoin d’une configuration PersistentKeepalive, car dans ce scénario, aucun client WireGuard ne doit initier des connexions aux clients OpenVPN.) Comparez cela à la configuration de l’Endpoint A du scénario Passerelle de Site comme un Spoke de l’article Multi-Hop WireGuard.
Connecter le serveur OpenVPN au hub WireGuard
Ajoutez ensuite une entrée [Peer] pour le serveur OpenVPN dans la configuration du hub WireGuard. Cela doit être configuré de manière similaire aux sections [Peer] pour d’autres spokes WireGuard — mais il doit inclure le réseau OpenVPN (10.8.0.0/24) dans sa configuration AllowedIPs :
# /etc/wireguard/wg0.conf
# paramètres locaux pour le hub WireGuard
[Interface]
PrivateKey = CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
Address = 10.0.0.3/32
ListenPort = 51823
PreUp = sysctl -w net.ipv4.ip_forward=1
# paramètres distants pour le serveur OpenVPN
[Peer]
PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU=
AllowedIPs = 10.0.0.1/32, 10.8.0.0/24
# paramètres distants pour la passerelle de Site B
[Peer]
PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
AllowedIPs = 10.0.0.2/32, 192.168.200.0/24
Ceci est le même que l’étape Connecter un serveur OpenVPN au hub WireGuard du scénario Hub à Hub ci-dessus — sauf dans ce cas, nous avons également une entrée [Peer] pour la passerelle du Site B (Hôte β). Notez l’entrée [Peer] pour cette passerelle qui comprend un paramètre AllowedIPs pour le réseau LAN du Site B (192.168.200.0/24). Comparez ce fichier de configuration avec la configuration de l’Hôte C à partir du scénario Passerelle de Site en tant que Spoke de l’article Multi-Hop WireGuard.
Ajouter des Routes au Passerelle du Site WireGuard
Ensuite, nous devons mettre à jour la configuration du client WireGuard qui sert de passerelle du Site B pour ajouter le réseau OpenVPN (10.8.0.0/24) à l’ensemble AllowedIPs pour le hub WireGuard :
# /etc/wireguard/wg0.conf
# paramètres locaux pour la passerelle du Site B
[Interface]
PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
Address = 10.0.0.2/32
ListenPort = 51822
# transfert IP
PreUp = sysctl -w net.ipv4.ip_forward=1
Cela permet à la passerelle du Site B de transmettre les paquets entre le réseau OpenVPN et le LAN derrière le réseau WireGuard.
Voici le texte corrigé :
t.ipv4.ip_forward=1
# masquage IP
PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x30
PreUp = iptables -t nat -A POSTROUTING ! -o wg0 -m mark --mark 0x30 -j MASQUERADE
PostDown = iptables -t mangle -D PREROUTING -i wg0 -j MARK --set-mark 0x30
PostDown = iptables -t nat -D POSTROUTING ! -o wg0 -m mark --mark 0x30 -j MASQUERADE
# paramètres distants pour le hub WireGuard
[Peer]
PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
Endpoint = 192.0.2.3:51823
AllowedIPs = 10.0.0.0/24
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25
Cette modification de configuration est exactement la même que l’étape Ajouter des routes aux clients WireGuard du scénario Hub partagé ci-dessus. Cependant, cette configuration particulière du client WireGuard est un peu différente des exemples précédents en ce qui concerne le transfert et la masquarade des paquets vers le Site B ; comparez-la à la configuration de l’Hôte β du scénario Passerelle de site comme une branche de l’article WireGuard multi-saut.
Ajouter des routes aux clients OpenVPN
Ensuite, nous devons mettre à jour la configuration du serveur OpenVPN pour pousser la route pour le réseau Site B (192.168.200.0/24) à ses clients. Cela signifie simplement d’ajouter une entrée push "route 192.168.200.0 255.255.255.0".
Après avoir ajouté cette entrée, la configuration du serveur OpenVPN ressemblerait à ceci (très similaire à l’étape Ajouter des routes aux clients OpenVPN du scénario Hub partagé, juste avec une route différente) :
# /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
push "route 192.168.200.0 255.255.255.0"
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
tls-auth ta.key
cipher AES-256-CBC
persist-key
persist-tun
verb 3
explicit-exit-notify 1
Autoriser les connexions entre réseaux
Nous n’avons pas besoin de mettre à jour les paramètres du pare-feu sur l’hub WireGuard ou les clients WireGuard pour cela, car ils permettent déjà le trafic vers et depuis le réseau WireGuard. Nous devons simplement modifier les paramètres du pare-feu du serveur OpenVPN pour autoriser le transfert de trafic entre ses interfaces tun0 et wg0. Ces ajustements sont exactement les mêmes que l’étape Autoriser les connexions entre réseaux du scénario Hub partagé, donc faites référence à celui-ci.
Tester
Pour tester cela, si nous avons un service réseau comme un serveur HTTP en cours d’exécution sur le Point de terminaison B, nous devrions être en mesure de nous connecter à celui-ci depuis le Point de terminaison A en utilisant l’adresse IP du Point de terminaison B sur le LAN Site B :
$ curl 192.168.200.22
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
...
Si cela ne fonctionne pas, consultez les conseils de dépannage de base pour les réseaux hub-and-spoke dans le guide Configuration d’un Hub et d’Étoiles avec WireGuard. Si vous utilisez un pare-feu iptables sur le serveur OpenVPN, consultez la section “Erreurs iptables” du guide Contrôle d’accès avec WireGuard et iptables ; ou si vous utilisez un pare-feu nftables, consultez la section “Dépannage” du guide Utiliser WireGuard avec nftables.
Pour le Site OpenVPN
Le dernier scénario que nous couvrirons est similaire au précédent ; cependant, dans ce scénario, au lieu d’exposer un LAN derrière l’un des points de terminaison WireGuard aux clients OpenVPN, nous voulons expos
Voici le texte corrigé :
er un LAN derrière un client OpenVPN aux points de terminaison WireGuard.
Du point de vue du réseau WireGuard, ce scénario est similaire au scénario Passerelle du Site en tant qu’Étoile de l’article Multi-Hop WireGuard — simplement en inversant certaines choses afin que le Point de terminaison A dans ce scénario soit comme le Point de terminaison B dans ce scénario, et vice versa.
Comme dans le précédent scénario, nous connecterons notre serveur OpenVPN à notre hub WireGuard en configurant un client WireGuard sur le serveur OpenVPN et en routant notre trafic inter-réseau à travers celui-ci :
Et comme dans le scénario précédent, notre serveur OpenVPN sera un spoke de notre réseau WireGuard, en utilisant une adresse IP de 10.0.0.1 à l’intérieur de la plage d’adresses IP du réseau WireGuard 10.0.0.0/24. Le serveur OpenVPN utilisera également une adresse IP de 10.8.0.1 pour son interface OpenVPN sur le réseau OpenVPN (à l’intérieur de la plage d’adresses IP 10.8.0.0/24).
Mais contrairement au scénario précédent, nous voulons inverser la direction d’accès — permettre l’accès à la LAN Site A, qui utilise la plage d’adresses IP 192.168.1.0/24, depuis le réseau WireGuard. Nous voulons être en mesure de nous connecter depuis le Point de terminaison B, avec une adresse IP de 10.0.0.2 sur le réseau WireGuard, à travers le réseau OpenVPN jusqu’au Point de terminaison A, avec une adresse IP de 192.168.1.101 sur la LAN Site A.
Comme dans les scénarios précédents, assurez-vous de ne pas utiliser les directives dev tap ou client-to-client dans la configuration OpenVPN — utilisez plutôt la directive dev tun, afin que tout le trafic des clients OpenVPN vers le serveur soit routé via l’interface réseau tun0 du serveur.
Pour permettre au réseau WireGuard d’accéder à la LAN derrière le réseau OpenVPN, nous devons faire ces six choses :
- Configurer un client WireGuard sur le serveur OpenVPN
- Connecter le serveur OpenVPN au hub WireGuard
- Ajouter des routes aux clients WireGuard
- Ajouter des routes à la passerelle du site OpenVPN
- Autoriser les connexions entre les réseaux
- Tester cela
Configurer un client WireGuard sur le serveur OpenVPN
Tout d’abord, configurez un client WireGuard sur le serveur OpenVPN. C’est exactement la même chose que l’étape Configurer un client WireGuard sur le serveur OpenVPN du scénario Hub à Hub ci-dessus :
# /etc/wireguard/wg0.conf
# paramètres locaux pour le serveur OpenVPN
[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=
Address = 10.0.0.1/32
ListenPort = 51821
# paramètres distants pour le hub WireGuard
[Peer]
PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
Endpoint = 192.0.2.3:51823
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
PersistentKeepalive = 25
Connecter le serveur OpenVPN au hub WireGuard
Ajoutez une entrée [Peer] pour le serveur OpenVPN dans la configuration du hub WireGuard. Cela doit être configuré de manière similaire aux sections [Peer] pour d’autres spokes WireGuard — sauf qu’il doit également inclure le réseau Site A (192.168.1.0/24) dans son paramètre AllowedIPs :
# /etc/wireguard/wg0.conf
# paramètres locaux pour le hub WireGuard
[Interface]
PrivateKey = CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCGA=
Address = 10.0.0.3/32
ListenPort = 51823
PreUp = sysctl -w net.ipv4.ip_forward=1
# paramètres distants pour le serveur OpenVPN
[Peer]
PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nY
Endpoint = 192.0.2.4:51822
AllowedIPs = 10.0.0.0/24, 10.8.0.0/24
PersistentKeepalive = 25
Cette version est plus fluide et corrige certains anglicismes tout en conservant la structure Markdown originale.
Voici le texte corrigé :
q5xU=
AllowedIPs = 10.0.0.1/32
AllowedIPs = 192.168.1.0/24
# paramètres distants pour le point de terminaison B
[Peer]
PublicKey = fE/wdxzl0klVp/IR8UcaoGUMjqaWi3jAd7KzHKFS6Ds=
AllowedIPs = 10.0.0.2/32
Cela est presque le même que l’étape Connecter le serveur OpenVPN au hub WireGuard du scénario Hub à Hub, mais utilise le réseau Site A (192.168.1.0/24) pour le paramètre AllowedIPs du serveur OpenVPN au lieu du réseau OpenVPN lui-même (10.8.0.0/24).
Ajouter des routes aux clients WireGuard
Ensuite, nous devons mettre à jour la configuration de tous nos autres clients WireGuard pour ajouter le réseau Site A (192.168.1.0/24) au paramètre AllowedIPs pour le hub :
# /etc/wireguard/wg0.conf
# paramètres locaux pour le point de terminaison B
[Interface]
PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
Address = 10.0.0.2/32
ListenPort = 51822
# paramètres distants pour le hub WireGuard
[Peer]
PublicKey = jUd41n3XYa3yXBzyBvWqlLhYgRef5RiBD7jwo70U+Rw=
Endpoint = 192.0.2.3:51823
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
Cela est presque le même que l'étape [Ajouter des routes aux clients WireGuard](#add-routes-to-wireguard-clients) du scénario [Hub partagé](#shared-hub) ci-dessus — sauf qu'on ajoute le réseau Site A (`192.168.1.0/24`) au lieu du réseau OpenVPN (`10.8.0.0/24`) dans la configuration `AllowedIPs`.
### Ajouter des routes à la passerelle du site OpenVPN
Ensuite, nous devons mettre à jour notre configuration serveur OpenVPN pour pousser la route vers le réseau WireGuard (`10.0.0.0/24`) à la passerelle Site A. Contrairement aux autres scénarios, où nous avons configuré le serveur pour pousser une nouvelle route à *tous* ses clients, dans ce scénario, on veut simplement configurer le serveur pour pousser la route à un seul de ses clients.
Si on avait configuré les autres clients OpenVPN pour pouvoir accéder au Site A (`192.168.1.0/24`), notre configuration du serveur OpenVPN ressemblerait à ceci (notez les directives `client-config-dir` et `route`) :
```bash
# /etc/openvpn/server/server.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd
route 192.168.1.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
tls-auth ta.key
cipher AES-256-CBC
persist-key
persist-tun
verb 3
explicit-exit-notify 1
Et si le certificat client OpenVPN pour l’hôte α utilise un CN (Common Name) de host-alpha, on aurait un fichier de configuration client nommé host-alpha dans le répertoire ccd du serveur qui ressemblerait à ceci :
# /etc/openvpn/server/ccd/host-alpha
iroute 192.168.1.0 255.255.255.0
Pour ce fichier de configuration, nous devons ajouter l’entrée push-route suivante afin que l’hôte α sache de router le trafic vers le réseau WireGuard (10.0.0.0/24) à travers le serveur OpenVPN :
# /etc/openvpn/server/ccd/host-alpha
iroute 192.168.1.0 255.255.255.0
push "route 10.0.0.0 255.255.255.0"
En supposant que l’Hôte α est déjà configuré pour masquerader le trafic de son interface OpenVPN (tun0) vers le Site A, nous n’avons pas besoin de faire de modifications de routage pour le propre réseau du Site A.
Autoriser les Connexions Entre Réseaux
Nous n’avons pas à mettre à jour les paramètres de pare-feu sur le hub WireGuard ou les clients WireGuard pour cela, car ils permettent déjà le trafic vers et depuis le réseau WireGuard. Nous devons simplement modifier les paramètres de pare-feu sur le serveur OpenVPN pour autoriser le transfert de trafic entre ses interfaces tun0 et wg0. Ces ajustements sont exactement les mêmes que ceux des Autoriser les Connexions Entre Réseaux du scénario Hub Partagé, donc faites référence à celui-ci.
Tester
Pour tester, si nous avons un service réseau comme un serveur HTTP en cours d’exécution sur le Site A et que nous essayons de y accéder depuis l’Hôte α, nous devrions être en mesure de le faire. Si cela fonctionne, alors notre configuration est correcte.
Cours d'exécution sur le Point de terminaison A, nous devrions être en mesure de nous connecter à celui-ci depuis le Point de terminaison B en utilisant l'adresse IP du Point de terminaison A sur le réseau LAN du Site A :
```bash
$ curl 192.168.1.101
<!DOCTYPE html>
<html>
...
Si cela ne fonctionne pas, consultez les conseils de dépannage de base pour les réseaux hub-and-spoke dans la Configuration d’un Hub et Spoke avec WireGuard. Si vous utilisez un pare-feu iptables sur le serveur OpenVPN, consultez la section “Erreurs Iptables” de la Contrôle d’accès avec WireGuard et Iptables ; ou si vous utilisez un pare-feu nftables, consultez la section “Dépannage” de la Utilisation de WireGuard avec Nftables.
8/2/2022
par Justin Ludwig
by Justin Ludwig translated by: Patrice Le Guyader
