Ă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
/ PostDown
J'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é dnsmasq
avec 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.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
Remarques:- Au lieu de edgewalker, vous devez spécifier l'adresse IP publique ou l'hÎte du serveur VPN
- En définissant
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 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-quick
et 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.