Configurer un VPN simple avec WireGuard et Raspberry Pi comme serveur

Depuis WireGuard faire partie de noyau futur Linux Le 5.6 juin, j'ai décidé de voir comment intégrer au mieux ce VPN à mon système. 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)
  • Téléphone allumé Android, qui doit utiliser un VPN pour toutes les communications
  • Ordinateur portable Linux, qui ne devrait utiliser le VPN qu'à 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 и macOSApplications pour Android et iOS sont distribués via les boutiques d'applications.

J'ai la dernière version de Fedora. Linux 31, et avant l'installation, j'étais trop paresseux pour lire le manuel. J'ai juste trouvé les paquets. 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

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

Installation des clés

Pour authentifier les nœuds Wireguard Utilise un système de clés privées/publiques simple pour authentifier les nœuds VPN. Vous pouvez facilement générer 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 wg-quick@wg0.service

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 wg-quick@wg0.service

Configuration du client pour Android-téléphone

Pour 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 affiché sur la console au format ASCII. Il pourra être scanné depuis l'application. Android VPN et configuration automatique du tunnel VPN.

conclusion

réglage WireGuard tout simplement magique comparé à OpenVPN.

Source: habr.com

Achetez un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Achetez un hébergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster