31 juillet 2020

VPN : Mise en place d’un serveur Wireguard IPV4 et IPV6 Ubuntu Serveur :

Par ubune

Bonjour, post concernant la mise en place de Wireguard, ici sur un système ubuntu.

Dans mon exemple, ayant un préfixe /56 routé par l’opérateur et ayant mon propre routeur Linux en lieu et place de la box :

  • j’ai ajouté une route ipv4 et 10.0.0.0/24 à destination du serveur ubuntu.
  • j’ai ajouté une route ipv6 pour un préfixe /64 ipv6 utilisé par les clients wireguard, à destination de la machine wireguard serveur (cf schéma).

Si vous n’avez pas remplacé la box, vous pouvez suivre le tuto en y appliquant le nat/nat6 expliqué en bas de cette page.

Dans un premier temps, nous allons activer le forwading (routage) sur notre machine ubuntu-server.
Il faut décommenter les deux lignes suivantes :

nano /etc/sysctl.conf

net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1

Puis on valide :

sysctl -p

Nous allons commencer par installer Wireguard :

sudo apt-get install wireguard -y

Nous allons créer un couple de clef privée/publique pour le serveur.

On passe en root :

sudo su –

On autorise l’accès au répertoire que depuis le compte root :

umask 077 /etc/wireguard/

On creer le couple de clef :

wg genkey | tee /etc/wireguard/srv-privatekey | wg pubkey > /etc/wireguard/srv-publickey

On peut les consulter avec la commande cat :

cat /etc/wireguard/srv-publickey

JBXRfYc3PoTHZTIAsZrXOCh4fr531hSwse5RD1nY5Ck=

cat /etc/wireguard/srv-privatekey

KCH/Ng18qg5Vqx8cyhkJXiceO9uetcrUYrRYxfeSp1A=

On va désormais créer son fichier de configuration « wg0.conf » qui sera utilisé au lancement du processus.

Pour le serveur nous allons utiliser les adresses (interface wg0):

  • 10.0.0.1/24 et chaque client aura une adresse ipv4 dans ce subnet.
  • 2a01:cb1d:6fb:XXXX::1/64 et chaque client aura une adresse ipv6 dans ce préfixe.
  • UDP/51800 comme port d’écoute du processus Wireguard.

Afin de pouvoir monter le tunnel en ipv4 et ipv6 il faudra :

  • faire une règle de dnat (redirection de port) sur votre routeur, du port 51800 arrivant sur la patte wan de votre box à destination de la patte lan du serveur port 51800 UDP.
  • autoriser le flux à destination du serveur sur le port 51800 UDP (ipv6)

Attention, vous pouvez obtiendrez une connexion dual-stack que le tunnel soit monté via ipv4 ou ipv6, wireguard pouvant encapsuler les deux protocoles.

Voici la configuration de notre serveur wireguard:

nano /etc/wireguard/wg0.conf

[Interface] Address = 10.0.0.1/24 Address = 2a01:cb1d:6fb:XXXX::1/64 ListenPort = 51800 PrivateKey = KCH/Ng18qg5Vqx8cyhkJXiceO9uetcrUYrRYxfeSp1A=

On peut désormais lancer le serveur et faire en sorte qu’il démarre en même temps que la machine :

wg-quick up /etc/wireguard/wg0.conf
systemctl enable wg-quick@wg0

On va maintenant générer notre premier client :

Dans un premier temps on lui génère son couple clef privée/publique :

wg genkey | tee /etc/wireguard/client1-privatekey | wg pubkey > /etc/wireguard/client1-publickey

cat /etc/wireguard/client1-publickey

lxavoAkZnnikRhQrSKievpioYrLcIbakceTFfm7DNQA=

cat /etc/wireguard/client1-privatekey

OC/b9vNFlH6BXsCXRDPmb7qGx5XrrWLj6oEw/w8HC38=

On ajoute ce nouveau client comme peer sur la configuration serveur :

wg set wg0 peer lxavoAkZnnikRhQrSKievpioYrLcIbakceTFfm7DNQA= allowed-ips 10.0.0.2,2a01:cb1d:6fb:XXXX::2

On sauvegarde :

wg-quick save /etc/wireguard/wg0.conf

Voici le fichier client1.conf à importer dans le wireguard-client :

[Interface] PrivateKey = OC/b9vNFlH6BXsCXRDPmb7qGx5XrrWLj6oEw/w8HC38= Address = 10.0.0.2/32, 2a01:cb1d:6fb:XXXX::2/128 DNS = 2606:4700:4700::1111, 1.0.0.1 [Peer] PublicKey = JBXRfYc3PoTHZTIAsZrXOCh4fr531hSwse5RD1nY5Ck= AllowedIPs = ::/0, 0.0.0.0/0 Endpoint = votreippub-box-ou-ipv6srv:51800

Et voila, vous pouvez-vous connecter 🙂

Dans le cas ou vous ne pouvez pas effectuer de routage sur votre box et/ou de délégation de préfixe, il faut mettre en place du nat/nat6 en ajoutant les lignes suivantes dans le fichier wg0.conf (remplacer ens160 par le nom de votre interface) :

PostUp = iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE; ip6tables -t nat -A POSTROUTING -o ens160 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o ens160 -j MASQUERADE; ip6tables -t nat -D POSTROUTING -o ens160 -j MASQUERADE