Configurer un VPN simple avec WireGuard et Raspberry Pi comme serveur

Étant donnĂ© que WireGuard fera partie du futur noyau Linux 5.6, j'ai dĂ©cidĂ© de voir comment intĂ©grer au mieux ce VPN Ă  mon routeur / point d'accĂšs LTE sur le Raspberry Pi .

Équipement


  • Raspberry Pi 3 avec module LTE et adresse IP publique. Il y aura un serveur VPN (ci-aprĂšs dĂ©nommĂ© edgewalker )
  • Un tĂ©lĂ©phone Android qui devrait utiliser un VPN pour toutes les communications
  • Ordinateur portable Linux qui ne doit utiliser le VPN qu'Ă  l'intĂ©rieur du rĂ©seau

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

Étant donnĂ© que les connexions filaires et sans fil deviennent de moins en moins sĂ©curisĂ©es au fil du temps ( attaques ciblĂ©es , attaque KRACK sur le piratage WPA2 et 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 des packages précompilés pour la plupart des distributions Linux, Windows et macOS. Les applications Android et iOS sont fournies via des répertoires d'applications.

J'ai le dernier Fedora Linux 31, et avant l'installation, j'étais trop paresseux pour lire le manuel. Je viens de trouver les packages wireguard-tools, de les installer, puis je ne comprenais pas pourquoi rien ne fonctionnait. Des recherches plus approfondies ont montré que je n'avais pas installé de package wireguard-dkms(avec un pilote réseau) et qu'il n'était pas dans le référentiel de ma distribution.

Si je lis les instructions, je prendrais les bonnes mesures:

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

J'ai installé le kit de distribution Raspbian Buster sur le Raspberry Pi, il y a déjà un paquet là wireguard- bas , installez-le:

$ sudo apt install wireguard

Sur le téléphone Android, j'ai installé l'application WireGuard VPN à partir du répertoire officiel de Google App Store.

Installation des clés


Pour l'authentification de l'hÎte, Wireguard utilise un schéma de clé privée / publique simple pour authentifier les hÎtes 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 configs, mais copions le contenu ici: 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 = <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 commentaires:

  • Aux endroits appropriĂ©s, vous devez insĂ©rer des lignes Ă  partir de fichiers avec des clĂ©s
  • Mon VPN utilise une plage interne 10.200.200.0/24
  • Pour les commandes PostUp/ PostDownJ'ai une interface rĂ©seau externe wwan0, vous pouvez en avoir une autre (par exemple, eth0)

Le réseau VPN est facilement levé par la commande suivante:

$ sudo wg-quick up wg0

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

interface=br0
interface=wg0

De plus, j'ai ajouté la 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 configurer le tunnel VPN pour qu'il démarre automatiquement:

$ sudo systemctl enable wg-quick@wg0.service

Configuration client sur ordinateur portable


Sur l'ordinateur portable, crĂ©ez un fichier de configuration /etc/wireguard/wg0.confavec 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

Remarques:

  • Au lieu de edgewalker, vous devez spĂ©cifier l'adresse IP publique ou l'hĂŽte du serveur VPN
  • En dĂ©finissant AllowedIPssur 10.200.200.0/24, nous utilisons le VPN uniquement pour accĂ©der au rĂ©seau interne. Le trafic vers toutes les autres adresses / serveurs IP continuera Ă  passer par des canaux ouverts «normaux». Un serveur DNS prĂ©configurĂ© sur l'ordinateur portable sera Ă©galement utilisĂ©.

Pour les tests et le dĂ©marrage automatique, nous utilisons les mĂȘmes commandes wg-quicket systemd:

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

Configuration d'un client sur un téléphone Android


Pour un téléphone Android, créez 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 sur l'ordinateur portable, le téléphone doit utiliser notre serveur VPN comme serveur DNS (chaßne DNS), et également passer tout le trafic via le tunnel VPN ( AllowedIPs = 0.0.0.0/0).

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

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

Le code QR sera envoyé à la console au format ASCII. Vous pouvez le numériser à partir de l'application VPN Android et configurer automatiquement le tunnel VPN.

Conclusion


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

Source: https://habr.com/ru/post/undefined/


All Articles