diff --git a/content/articles/2020/wireguard-avec-openwrt/index.md b/content/articles/2020/wireguard-avec-openwrt/index.md deleted file mode 100644 index aa327a2..0000000 --- a/content/articles/2020/wireguard-avec-openwrt/index.md +++ /dev/null @@ -1,213 +0,0 @@ -Title: Wireguard et OpenWRT, le VPN facile -Category: sysadmin -Tags: réseau, VPN, OpenWRT, Android, pl-fr, sécurité -Date: 2020-04-02 14:34 - -[Wireguard][l_wireguard] est un logiciel et un protocole de communication pour -créer un **VPN en mode point à point routé ou bridgé**. Il se compose d'un -module noyau et d'outils en espace utilisateur. - -Il se veut **léger**, **sécurisé**, **facile à configurer** (coucou OpenVPN) et -intègre par défaut des protocoles de chiffrement modernes : - - - [Curve25519][l_curve] pour l'échange de clé. - - [ChaCha20 ][l_chacha] pour le chiffrement et [Poly1305][l_poly] pour - l'authentification des messages. - - [SipHash][l_siphash] pour les [tables de hachage][l_hashtable]. - - [BLAKE2s][l_blake2] comme fonction de hachage [cryptographique][l_hashc] - -Il devrait être intégré comme **module du noyau GNU/Linux dans la version 5.6** -mais il est d'ores est déjà disponible via dkms sur des distributions comme -Debian ou Archlinux ou encore FreeBSD. - -Il est aussi disponible dans **les dépôts OpenWRT**, le sujet même de cet -article - -## Installation sous OpenWRT - -Je vais l'installer sur mon [Turris Omnia][l_turris], mais avant toute chose, je -vais définir le plan d'adressage : - - - le LAN déjà en place avec la place 192.168.100.0/24 et la passerelle en - 192.168.100.254 (le routeur) - - tout ce qui concerne Wireguard avec comme adresse 10.100.100.0/24 avec comme - passerelle 10.100.100.254 (notre interface wireguard sur le routeur). - -Pour commencer l'installation, connectons nous en SSH[^n_ssh] au routeur: - -```shell -opkg install wireguard wireguard-tools -``` - -Il est conseillé de **redémarrer le routeur** après l'installation de Wireguard -pour que le module noyau soit chargé[^n_reboot]. - -[^n_ssh]:Il est possible de le faire entièrement avec LUCI, l'interface graphique -d'OpenWRT mais ce n'est pas le sujet de cet article. - -[^n_reboot]:Certain utilisateurs on rapporté des instabilités lorsque le routeur - n'était pas redémarré après l'installation. - -### Générer la paire de clefs - -Pour fonctionner, Wireguard utilise une **paire de clefs privée / publique** -qu'il est possible de générer via `wg`. - -```shell -umask u=rw,g=,o= -wg genkey | tee wireguard.key | wg pubkey > wireguard.pub -``` - -### Créer l'interface réseau - -Maintenant que les clefs sont créées et le port ouvert nous allons configurer -notre interface réseau dédiées à Wireguard. - -```shell -uci set network.wg0="interface" -uci set network.wg0.proto="wireguard" -uci set network.wg0.private_key="$(cat /root/wireguard.key)" -uci set network.wg0.listen_port="51820" -uci add_list network.wg0.adresses="10.100.100.254/24" -uci commit network -``` - -### Ouvrir le port udp nécessaire - -Wireguard fonctionne exclusivement en UDP, il est donc nécessaire d'ouvrir un -port sur notre pare-feu afin de laisser passer les trames nécessaires. Le port -choisit est le 51820, voici les commandes à entrer (toujours via SSH) - -```shell -uci add firewall rule -uci set firewall.@rule[-1].src="wan" -uci set firewall.@rule[-1].target="ACCEPT" -uci set firewall.@rule[-1].proto="udp" -uci set firewall.@rule[-1].dest_port="51820" -uci set firewall.@rule[-1].name="Allow Wireguard Inbound" -uci commit firewall -``` - -### Ajouter les règles au pare-feu pour notre nouvelle interface - -Il serait possible de créer une nouvelle zone de pare-feu pour régler finement -le pare-feu pour notre interface `wg0`. Nous allons nous contenter de rattacher -cette interface à notre zone lan. - -```shell -uci rename firewall.@zone[0]="lan" -uci add_list firewall.lan.network="wg0" -uci commit -/etc/init.d/firewall restart -``` - -### Configurer un "peer" sur le routeur - -Dans le langage de Wireguard, **un peer est une machine cliente**. Nous allons -maintenant en rajouter un. Mais avant il faut penser à créer un couple de clefs -publique / privée pour celui-ci. - - -Il est aussi possible de générer une *pre-shared key* afin de renforcer le -chiffrement **celle-ci devra être différente pour chaque client pour des -raisons de sécurité** : - -```shell -wg genpsk > client1.psk -``` - -Puis configurer notre premier client : - -```shell -uci set network.wgclient="wireguard_wg0" -uci set network.wgclient.public_key="" -uci set network.wgclient.preshared_key="$(cat /root/client1.psk)" -uci add_list network.wgclient.allowed_ips="10.100.100.0/24" -uci add_list network.wgclient.description="My phone" -uci commit network -/etc/init.d/network restart -``` - -Il faut bien sûr remplacer `` par la clé publique de votre -client. - -## Configuer son Client. - -Le client se configure à l'aide d'un fichier de configuration, voici un exemple - que l'on nommera `wg.conf`: - -``` -[interface] -Address = 10.100.100.42/32 -PrivateKey = - -[peer] -EndPoint = :51820 -AllowedIPs = 0.0.0.0/24 -PersistentKeepAlive = 25 -PreSHaredKey = -PublicKey = -``` - -Il faut bien sur remplacer ces éléments : - - - `` par la clé privée de votre client, nous avons utilisé - la clé publique pour configurer l'accès sur notre routeur - - `` par l'adresse IP publique de votre routeur (ou son - nom DNS) - - `` par la *pre shared key* que nous avons créé pour la - configuration de notre client sur le routeur - - `` par la clé publique de notre Wireguard sur le - routeur créée au tout début de cet article. - - `AllowedIPs = 0.0.0.0/24` signifie que tous le trafic de notre client sera - envoyé vers le VPN. Cette partie est à adapter selon les besoins. - -Ce fichier servira à la commande `wg-quick` pour lancer la connexion sur un -système *NIX, ou sera à importer dans l'interface graphique de Wireguard sous -Windows. - -Il existe aussi une version Android disponible sur -[F-Droid][l_wg-fdroid][^n_fdroid], dans ce cas on peut utiliser un QR-code. Il -est possible de le générer dans un terminal avec [qrencode][l_qrencode]. Il est -disponible sur Archlinux, Debian et FreeBSD (de ce que j'ai vérifié) et sûrement -d'autre distributions / systèmes. - -Sous Archlinux, en `root` ça donne : - -```shell -pacman -S qrencode -qrencode -t ansiutf8 < wg0.conf -``` - -Il ne reste plus qu'à *"flasher"* le QR-code avec l'application Android. - -## En conclusion - -Voici une solution simple et efficace de mettre en place un VPN léger, robuste -et fiable sur son routeur. Avec Wireguard, j'ai accès à mon réseau local depuis -n'importe où que se soit sur mon ordinateur portable ou mon ordiphone. Il est -bien entendu possible **d'aller plus loin** : routage plus fin, pare-feu plus -élaboré, plan d'adressage plus complexe etc. - -[^n_fdroid]:Il l'est sûrement aussi sur le Google Play Store. - -## Bibliographie - - - [La documentation](https://doc.turris.cz/doc/en/public/wireguard) sur le site - du Turris Omnia - - [Wireguard](https://openwrt.org/docs/guide-user/services/vpn/wireguard/basic) - sur le wiki d'OpenWRT - -*[VPN]:Virtual Private Network - -[l_wireguard]:https://www.wireguard.com/ -[l_curve]:https://fr.wikipedia.org/wiki/Curve25519 -[l_chacha]:https://fr.wikipedia.org/wiki/Salsa20#Chacha -[l_poly]:https://en.wikipedia.org/wiki/Poly1305 -[l_siphash]:https://en.wikipedia.org/wiki/SipHash -[l_hashtable]:https://fr.wikipedia.org/wiki/Table_de_hachage -[l_blake2]:https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE2 -[l_hashc]:https://fr.wikipedia.org/wiki/Fonction_de_hachage_cryptographique -[l_turris]:https://www.turris.cz/en/omnia/ -[l_wg-fdroid]:https://f-droid.org/en/packages/com.wireguard.android/ -[l_qrencode]:https://fukuchi.org/works/qrencode/ diff --git a/theme b/theme index 505f5cb..bd554b3 160000 --- a/theme +++ b/theme @@ -1 +1 @@ -Subproject commit 505f5cbea00dfb537ec93f2ba96fba389f0f7acd +Subproject commit bd554b3814185be6fc9f5fc8180873fa49d2ece7