Depuis WireGuard
é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 (
Installation du logiciel
WireGuard fournit
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
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
sur10.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