documentation:wireguard

Introduction

La plus part des FAI membres de FFDN qui proposent du VPN utilisent OpenVPN, sans doute parce que ça à été mis en place à un moment ou WireGuard n'existait pas et parce que c'est aussi plus facile à intégrer dans une infrastructure existante (OpenVPN supporte différent moyens d'authentifications comme Radius par exemple alors que WireGuard à besoin d'outils externe pour implémenter ça).

WireGuard supporte moins de fonctionalitées et son implémentation est plus simple et plus petite.

Au niveau des performances, Wireguard est bien meilleur quand on à pas d'accélération matérielle (comme aes-ni) pour le chiffrement / déchiffrement. Cela peut être le cas dans des machines virtuelles, pour du vieux matériel ou pour des ordinateurs ayant d'autres architectures que x86.

FAI

Au moment ou cette page est écrite, les FAI suivants proposent des VPN WireGuard:

  • Franciliens.net (expérimental)

Warning: Le cas d'usage de ce tutoriel est pour un usage serveur (par exemple pour fair serveur de mails, de site web, etc), et tout le trafic réseau ne passe pas par le VPN WireGuard. Il faut donc que quelqu'un complète ce tutorial pour montrer comment faire passer tout le trafic réseau par le VPN.

Lors de la commande du VPN au moment ou cette page est écrite, il faut signaler que l'on veut un VPN WireGuard.

Il faut ensuite générer une clef secrète (et la garder secrète):

  $ wg genkey
  SCql4mPh/JoVPssrcjdyjL2CIYkQkhhu0D3jowHZRUw=

Et générer la clef publique correspondante (à donner à Francilien.net):

  $ echo 'SCql4mPh/JoVPssrcjdyjL2CIYkQkhhu0D3jowHZRUw='  | wg pubkey
  Ee75BP3JAQTGF0TloSnzrBaZm6TwctuEXFR5ao9Pfyo=

Une personne qui administre les serveurs de Franciliens.net va donc rajouter dans la configuration de WireGuard une entrée qui ressemble à ça:

  [Peer] # CTXXXX-XXXX (numéro du contrat)
  AllowedIPs = 79.143.250.36/32, 2001:678:938:3ff::36/128, 2001:678:938:318::/61
  PublicKey = Ee75BP3JAQTGF0TloSnzrBaZm6TwctuEXFR5ao9Pfyo=

Les addresses IPs seront changés par rapport à la configuration ci dessus.

Ici on à 3 IPs:

  79.143.250.36/32         <- Une IPv4
  2001:678:938:3ff::36/128 <- Une IPv6
  2001:678:938:318::/61    <- Un range d'IPv6

Le fait d'avoir une IPv6 permet en plus pas dans le range permet de simplifier le routage du côté de la personne adhérente.

Par exemple on peut avoir la configuration suivante:

  [Interface Wireguard Franciliens.net dans le serveur de Franciliens.net]<->Routeur de la personne adhérente (avec l'IP 2001:678:938:3ff::36) <-> Sous réseau routable sur Internet chez la personne adhérente (2001:678:938:318::/61).

On va maintenant se conntecter au VPN Wireguard, pour ça il faut créer une configuration dans /etc/wireguard/franciliens.conf:

  $ sudo mkdir -p /etc/wireguard/ # Tout d'abord on créer le dossier au cas ou il n'existe pas

Ensuite il faut créer /etc/wireguard/franciliens.conf. Son contenu devrait ressembler à ça:

  [Interface]
  PrivateKey = SCql4mPh/JoVPssrcjdyjL2CIYkQkhhu0D3jowHZRUw=
  Address = 79.143.250.36/27, 2001:678:938:3ff::36/64
  [Peer]
  Endpoint = stephanie.franciliens.net:51820
  PublicKey = Ybfh3twyBpj7wx/lo9AVBsBKNAUMSQqAWWV0LfywSDI=
  AllowedIPs = 0.0.0.0/0, ::/0

La il faudra changer la PrivateKey, et Address dans [Interface] avec les valeurs qui correspondent à ce que la personne de Franciliens.net vous aura donné comme information.

Ensuite on peut facilement tester tout ça avec wg-quick:

  $ sudo wg-quick up franciliens

Chez moi ça imprime pleins de trucs:

  [#] ip link add franciliens type wireguard
  [#] wg setconf franciliens /dev/fd/63
  [#] ip -4 address add 79.143.250.36/27 dev franciliens
  [#] ip -6 address add 2001:678:938:3ff::36/64 dev franciliens
  [#] ip link set mtu 1420 up dev franciliens
  [#] wg set franciliens fwmark 51820
  [#] ip -6 route add ::/0 dev franciliens table 51820
  [#] ip -6 rule add not fwmark 51820 table 51820
  [#] ip -6 rule add table main suppress_prefixlength 0
  [#] ip6tables-restore -n
  [#] ip -4 route add 0.0.0.0/0 dev franciliens table 51820
  [#] ip -4 rule add not fwmark 51820 table 51820
  [#] ip -4 rule add table main suppress_prefixlength 0
  [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
  [#] iptables-restore -n

Et ça crée une interface réseau nomée franciliens et ça configure tout tout seul:

  $ ip addr show dev franciliens
  6: franciliens: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
      link/none 
      inet 79.143.250.36/27 scope global franciliens
         valid_lft forever preferred_lft forever
      inet6 2001:678:938:3ff::36/64 scope global 
         valid_lft forever preferred_lft forever

A noter que ça configure pas le DNS ni la route par default, donc ici il faudra consulter le manuel de wg-quick (avec la command man wg-quick) pour faire passer tout par l'interface WireGuard et idéalement compléter ce tutorial:

  $ ip route
  default via 192.168.10.1 dev ue0 
  79.143.250.32/27 dev franciliens proto kernel scope link src 79.143.250.36 
  172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
  192.168.10.0/24 dev ue0 proto kernel scope link src 192.168.10.50 

Si on veut éteindre le VPN on peut ensuite faire la commande suivante:

  $ sudo wg-quick down franciliens

ça imprime aussi pleins de trucs:

  [#] ip -4 rule delete table 51820
  [#] ip -4 rule delete table main suppress_prefixlength 0
  [#] ip -6 rule delete table 51820
  [#] ip -6 rule delete table main suppress_prefixlength 0
  [#] ip link delete dev franciliens
  [#] iptables-restore -n
  [#] ip6tables-restore -n

License

Cette page est publiée sous les licenses suivantes:

  • documentation/wireguard.txt
  • Dernière modification: 2023/07/07 16:49
  • de dcarikli