Wireguard

De Justine's wiki
Aller à la navigation Aller à la recherche

Présentation

Wireguard est un VPN dont le but est d'être simple à utiliser et rapide. Il est à rapprocher d'IPsec. Son fonctionnement se fait en peer 2 peer, contrairement à OpenVPN par exemple. Le principe d'utilisation n'est pas si loin de SSH : les pairs sont connectés entre eux à l'aide de paires de clefs.

Mise en place

Manuelle

Page quickstart de la doc Je commence par installer les paquets :

apt install wireguard wireguard-tools

Je vais ici avoir deux pairs : leurs addresse réelles sont en 192.148.1.0/24 et leur adresses wireguard sont en 172.16.0.0./16. On commence, pour chacun d'entre eux, par leur créer des clefs. On crée une clef privée de laquelle on dérive une clef publique. <source> wg genkey > wireguard-private wg pubkey < wireguard-private > wireguard-public

  1. Ou en une seule commande

wg genkey | tee privatekey | wg pubkey > publickey </source>

Puis je vais créer une interface virtuelle pour wireguard pour chacun de mes pairs. <source> sudo ip addr add 172.16.0.1/16 sudo ip addr add 172.16.0.1/16 dev wg0 </source>

J'attribue ma clef privée à mon interface

sudo wg set wg0 private-key ./wireguard-private 

Et j'active l'interface

sudo ip link set wg0 up

Je peux voir mes clefs et le port d'écoute simplement

``` root@exploit:~# wg interface: wg0

 public key: I3iw8gOHB7sVNQJANC1AK7EkxV2P3DX7wrZEAZA+5U0=
 private key: (hidden)
 listening port: 37673

```

Je vais ensuite relier mes pairs. Sur chacun d'entre eux:

wg set wg0 peer mYJruEkvquUv3vHRgkKBd7TuYUZqB7U6EoZYeNC5fzQ= allowed-ips 172.16.0.2/32 endpoint 192.168.1.70:58733

Ici:

  • wg set wg0 : wg0 est mon interface wireguard
  • peer mYJruEkvquUv3vHRgkKBd7TuYUZqB7U6EoZYeNC5fzQ= : je donne la clef publique du pair
  • allowed-ips 172.16.0.2/32 : les ips que le pair a le droit d'avoir dans le tunnel
  • endpoint 192.168.1.70:58733 : L'adresse "réelle" du pair ainsi que son port (donné par la commande wg sur ce dernier).

Et voilà :)

Et si je veux supprimer l'interface :

ip link add wg0 type wireguard

Bien entendu, c'est long.

Avec un fichier de config

Je peux créer un fichier de config dans /etc/wireguard/wg0.conf: <source lang="ini"> [Interface] Address = 172.16.0.1/16 SaveConfig = true ListenPort = 58733 PrivateKey = XXXXXXXXXXXXXXXXX

[Peer] PublicKey = I3iw8gOHB7sVNQJANC1AK7EkxV2P3DX7wrZEAZA+5U0= AllowedIPs = 172.16.0.2/32 Endpoint = 192.168.1.205:58733

  1. Je peux aussi avoir des commandes PreUp, PostUp, PreDown, PostDown
  2. PostUp = echo bidule

</source> On voit ici ma section "Peer", que je peux répéter au besoin.

Et derrière, utiliser la commande wg-quick. <source> root@exploit:~# wg-quick Usage: wg-quick [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]

  1. Je monte mon interface

root@exploit:/home/justine# wg-quick up wg0 [#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 172.16.0.1/16 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] wg set wg0 peer mYJruEkvquUv3vHRgkKBd7TuYUZqB7U6EoZYeNC5fzQ= allowed-ips 172.16.0.1/32 endpoint 192.168.1.70:58733 </source>

Et voilà : la connexion est faite. <source> [root@Ulysses ~]# wg interface: wg0

 public key: mYJruEkvquUv3vHRgkKBd7TuYUZqB7U6EoZYeNC5fzQ=
 private key: (hidden)
 listening port: 51194

peer: I3iw8gOHB7sVNQJANC1AK7EkxV2P3DX7wrZEAZA+5U0=

 endpoint: 192.168.1.205:58733
 allowed ips: 172.16.0.2/32

</source>

Monter l'interface au démarrage

Pas besoin de créer un service ! Pour une interface wg0, il suffit de faire

systemctl enable wg-quick@wg0.service