Configurons un VPN simple avec WireGuard et un Raspberry Pi comme serveur.

Puisque WireGuard deviendra une partie du futur noyau Linux 5.6, j'ai décidé de voir comment intégrer au mieux ce VPN avec mon routeur LTE / point d'accÚs sur Raspberry Pi.

Matériel

  • Raspberry Pi 3 avec un module LTE et une adresse IP publique. Ici, il y aura un serveur VPN (appelĂ© ci-aprĂšs edgewalker)
  • Un tĂ©lĂ©phone Android qui doit utiliser le VPN pour toutes les communications
  • Un ordinateur portable Linux qui doit utiliser le VPN uniquement au sein du rĂ©seau

Chaque appareil se connectant au VPN doit pouvoir se connecter à tous les autres appareils. Par exemple, le téléphone doit pouvoir se connecter à un serveur web sur l'ordinateur portable, si les deux appareils font partie du réseau VPN. Si la configuration est suffisamment simple, on peut envisager de se connecter au VPN avec un bureau (via Ethernet).

Étant donnĂ© que les connexions cĂąblĂ©es et sans fil deviennent de moins en moins sĂ©curisĂ©es avec le temps (attaques ciblĂ©es, attaque KRACK sur le WPA2 et attaque Dragonblood contre le WPA3), j'envisage sĂ©rieusement d'utiliser WireGuard pour tous mes appareils, peu importe l'environnement dans lequel ils fonctionnent.

Installation du logiciel

WireGuard fournit des packages précompilés pour la plupart des distributions Linux, Windows et macOS. Les applications pour Android et iOS sont disponibles dans les répertoires d'applications.

J'ai la derniÚre Fedora Linux 31, et avant l'installation, je n'ai pas pris la peine de lire le manuel. J'ai simplement trouvé les packages wireguard-tools, je les ai installés, puis je n'ai pas compris pourquoi rien ne fonctionnait. Des recherches ultérieures ont montré que je n'avais pas installé le package wireguard-dkms (avec le pilote réseau), et il n'était pas disponible dans le dépÎt de ma distribution.

Si j'avais lu les instructions, j'aurais fait les bonnes étapes :

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Sur Raspberry Pi, j'ai installĂ© la distribution Raspbian Buster, oĂč le package est dĂ©jĂ  disponible wireguard, je l'installe :

$ sudo apt install wireguard

Sur le téléphone Android, j'ai installé l'application WireGuard VPN du catalogue officiel Google App Store.

Installation des clés

Pour l'authentification des nƓuds, WireGuard utilise un schĂ©ma simple de clĂ©s privĂ©es/publiques pour l'authentification des nƓuds VPN. Vous pouvez facilement crĂ©er des clĂ©s VPN avec la commande suivante :

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

Cela nous donne trois paires de clés (six fichiers). Ne faisons pas référence aux fichiers dans les configurations, mais copions ici le contenu : chaque clé est une ligne en base64.

Création d'un fichier de configuration pour le serveur VPN (Raspberry Pi)

La configuration est assez simple, j'ai créé le fichier suivant /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = 
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# ordinateur portable
PublicKey = 
AllowedIPs = 10.200.200.2/32

[Peer]
# téléphone mobile
PublicKey = 
AllowedIPs = 10.200.200.3/32

Quelques remarques :

  • Il faut insĂ©rer les lignes des fichiers de clĂ©s aux emplacements appropriĂ©s
  • Mon rĂ©seau VPN utilise une plage interne 10.200.200.0/24
  • Pour les commandes PostUp/PostDown j'ai indiquĂ© l'interface rĂ©seau extĂ©rieure wwan0, chez vous cela peut ĂȘtre diffĂ©rent (par exemple, eth0)

Le réseau VPN se lance facilement avec la commande suivante :

$ sudo wg-quick up wg0

Un petit détail : en tant que serveur DNS, j'ai utilisé dnsmasq lié à l'interface réseau br0, j'ai également ajouté des appareils wg0 à la liste des appareils autorisés. Dans dnsmasq, cela se fait en ajoutant une nouvelle ligne avec l'interface réseau au fichier de configuration /etc/dnsmasq.conf, par exemple :

interface=br0
interface=wg0

De plus, j'ai ajouté une rÚgle iptable pour autoriser le trafic sur le port UDP d'écoute (51280) :

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Maintenant que tout fonctionne, nous pouvons définir le démarrage automatique du tunnel VPN :

$ sudo systemctl enable wg-quick@wg0.service

Configuration du client sur l'ordinateur portable

Sur l'ordinateur portable, crĂ©ons un fichier de configuration /etc/wireguard/wg0.conf avec les mĂȘmes paramĂštres :

[Interface]
Address = 10.200.200.2/24
PrivateKey = 

[Peer]
PublicKey = 
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Remarques :

  • Au lieu de edgewalker, il faut mettre l'IP publique ou le nom d'hĂŽte du serveur VPN
  • En configurant AllowedIPs sur 10.200.200.0/24, nous utilisons le VPN uniquement pour accĂ©der au rĂ©seau interne. Le trafic vers toutes les autres IP/serveurs passera toujours par les canaux 'normaux' ouverts. Un serveur DNS prĂ©configurĂ© sur l'ordinateur portable sera Ă©galement utilisĂ©.

Pour tester et dĂ©marrer automatiquement, utilisons les mĂȘmes commandes wg-quick et systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

Configuration du client sur le téléphone Android

Pour le téléphone Android, créons un fichier de configuration trÚs similaire (appelons-le mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = 
DNS = 10.200.200.1
        
[Peer]
PublicKey = 
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

Contrairement à la configuration sur l'ordinateur portable, le téléphone doit utiliser notre serveur VPN comme serveur DNS (ligne DNS), et également acheminer tout le trafic via le tunnel VPN (AllowedIPs = 0.0.0.0/0).

Au lieu de copier le fichier sur l'appareil mobile, vous pouvez le convertir en code QR :

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

Le code QR s'affichera dans la console sous forme d'ASCII. Il peut ĂȘtre scannĂ© depuis l'application VPN Android pour configurer automatiquement le tunnel VPN.

Sortie

La configuration de WireGuard est tout simplement magique par rapport Ă  OpenVPN.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster