Configurez un VPN simple avec WireGuard et Raspberry Pi en tant que serveur

Depuis WireGuard faire partie de du futur noyau Linux 5.6, j'ai décidé de voir comment intégrer au mieux ce VPN avec mon Routeur/point d'accès LTE sur Raspberry Pi.

équipement

  • Raspberry Pi 3 avec module LTE et IP publique. Il y aura un serveur VPN (ci-après dénommé marcheur)
  • Un téléphone Android qui doit utiliser un VPN pour toutes les communications
  • Ordinateur portable Linux qui doit utiliser le VPN uniquement à l'intérieur du réseau

Chaque appareil qui se connecte à un VPN doit pouvoir se connecter à tous les autres appareils. Par exemple, un téléphone doit pouvoir se connecter à un serveur Web sur un ordinateur portable si les deux appareils font partie d'un réseau VPN. Si la configuration est assez simple, vous pouvez penser à vous connecter à un VPN et à un ordinateur de bureau (via Ethernet).

Considérant que les connexions filaires et sans fil deviennent moins sécurisées au fil du temps (attaques ciblées, Attaque de piratage KRACK WPA2 и Attaque Dragonblood contre WPA3), j'envisage sérieusement d'utiliser WireGuard pour tous mes appareils, quel que soit l'environnement dans lequel ils fonctionnent.

Installation du logiciel

WireGuard fournit packages précompilés pour la plupart des distributions Linux, Windows et macOS. Les applications pour Android et iOS sont fournies via des catalogues d'applications.

J'ai le dernier Fedora Linux 31 et j'étais trop paresseux pour lire le manuel avant l'installation. Je viens de trouver les colis wireguard-tools, les a installés, puis n'a pas pu comprendre pourquoi rien ne fonctionnait. Une enquête plus approfondie a révélé que je n'avais pas installé le package wireguard-dkms (avec un pilote réseau), et ce n'était pas dans le référentiel de ma distribution.

Si j'avais lu les instructions, j'aurais pris les bonnes mesures:

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

J'ai la distribution Raspbian Buster installée sur mon Raspberry Pi, il y a déjà un paquet wireguard, Installez-le:

$ sudo apt install wireguard

J'ai installé l'application sur mon téléphone Android VPN WireGuard du catalogue officiel du Google App Store.

Installation des clés

Pour authentifier les nœuds, Wireguard utilise un simple schéma de clé privée/publique pour authentifier les 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). Nous ne ferons pas référence aux fichiers dans les configurations, mais copiez le contenu ici : chaque clé correspond à une ligne en base64.

Création d'un fichier de configuration pour un 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 = <copy private key from wg-server-private.key>
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]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

Quelques remarques :

  • Aux endroits appropriés, vous devez insérer les lignes des fichiers avec les clés
  • Mon VPN utilise la plage interne 10.200.200.0/24
  • Pour les équipes PostUp/PostDown J'ai une interface réseau externe wwan0, vous pouvez en avoir une autre (par exemple, eth0)

Le réseau VPN est facilement mis en place avec la commande suivante :

$ sudo wg-quick up wg0

Un petit détail : en tant que serveur DNS, j'utilisais dnsmasq connecté à l'interface réseau br0, j'ai aussi 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 vers le port UDP d'écoute (51280) :

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

Maintenant que tout fonctionne, nous pouvons enregistrer le lancement automatique du tunnel VPN :

$ sudo systemctl enable [email protected]

Configuration du client portable

Sur l'ordinateur portable, créez un fichier de configuration /etc/wireguard/wg0.conf avec les mêmes paramètres :

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Notes:

  • Au lieu de edgewalker, vous devez spécifier un hôte de serveur IP ou VPN public
  • En définissant AllowedIPs sur 10.200.200.0/24, nous n'utilisons le VPN que pour accéder au réseau interne. Le trafic vers toutes les autres adresses IP/serveurs continuera à passer par les canaux ouverts "réguliers". Le serveur DNS préconfiguré sur l'ordinateur portable sera également utilisé.

Pour les tests et le lancement automatique, nous utilisons les mêmes commandes wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Configurer un client sur un téléphone Android

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

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

Contrairement à la configuration de l'ordinateur portable, le téléphone doit utiliser notre serveur VPN comme serveur DNS (chaîne DNS), ainsi que faire passer tout le trafic par le tunnel VPN (AllowedIPs = 0.0.0.0/0).

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

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

Le code QR sera envoyé à la console au format ASCII. Il peut être analysé à partir de l'application VPN Android et configurer automatiquement un tunnel VPN.

conclusion

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

Source: habr.com

Ajouter un commentaire