====== Wireguard ====== * [[https://github.com/pirate/wireguard-docs]] * [[https://dev.to/tangramvision/what-they-don-t-tell-you-about-setting-up-a-wireguard-vpn-1h2g]] * [[https://www.procustodibus.com/blog/2021/03/wireguard-logs/|Four ways to view WireGuard logs]] * [[https://linuxfr.org/news/wireguard-protocole-de-communication-chiffre-sur-udp-et-logiciel-libre|WireGuard, protocole de communication chiffré sur UDP et logiciel libre]] * [[https://dataswamp.org/~solene/2024-07-02-linux-vpn-netns.html|WireGuard and Linux network namespaces]] * [[https://it-notes.dragas.net/2024/07/15/bridging-networks-across-vps-wireguard-vxlan-freebsd/|Bridging Networks Across VPS With Wireguard and VXLAN on FreeBSD]] * [[https://korben.info/wg-easy-interface-web-simplifiee-wireguard.html|WG-Easy : l'interface web simplifiée pour WireGuard]] * [[https://blog.thea.codes/nordvpn-wireguard-namespaces/|Split tunneling using Wireguard and namespaces]] * [[https://enge.math.u-bordeaux.fr/blog/wireguard.html|Wireguard VPN with Guix]] Installer le paquet ''wireguard''. ==== Topologie avec un serveur central ==== [[https://www.procustodibus.com/blog/2020/11/wireguard-hub-and-spoke-config/|Wireguard: hub-and-spoke configuration]] ''A'' et ''B'' sont tous les deux derrière un NAT et un pare-feu et ont une adresse IP publique dynamique. Ils vont communiquer via Wireguard par le biais d'un serveur ''C'', accessible publiquement, avec une adresse IP fixe. === Génération des clés === Sur chaque machine, générer une paire de clés publique/privée: (umask 077; wg genkey > endpoint-a.key) wg pubkey < endpoint-a.key > endpoint-a.pub Les fichiers ne sont pas nécessaires, c'est ce qu'ils contiennent qui va être nécessaire dans les fichiers de configuration. === Configuration === Sur le serveur ''C'': # la configuration de C, le serveur [Interface] PrivateKey = Address = 10.0.0.1/32 ListenPort = 51823 # la configuration de A, un client [Peer] PublicKey = AllowedIPs = 10.0.0.2/32 # la configuration de B, un autre client [Peer] PublicKey = AllowedIPs = 10.0.0.3/32 Ajouter ''net.ipv4.ip_forward=1'' à ''/etc/sysctl.conf''. Sur le client ''A'': # la configuration de A, un client [Interface] PrivateKey = Address = 10.0.0.2/32 ListenPort = 51823 # la configuration de C, le serveur [Peer] PublicKey = Endpoint = 192.168.1.100:51823 AllowedIPs = 10.0.0.1/32, 10.0.0.3/32 PersistentKeepalive = 25 * ''AllowedIPs'' contient les adresses IP que le serveur C va router au sein du VPN. * ''PersistentKeepalive'' permet d'initier automatiquement la connexion des clients au serveur et de la maintenir fonctionnelle. Sans cela, A ne pourra parler à B en passant par C que si B a déjà parlé à C auparavant (un article qui en parle: [[https://jrs-s.net/2018/08/05/routing-between-wg-interfaces-with-wireguard/]]) Adapter pour le client ''B''. === Démarrage === Sur toutes les machines: sudo systemctl enable wg-quick@wg0.service sudo systemctl start wg-quick@wg0.service sudo journalctl -u wg-quick@wg0.service ==== Derrière un NAT ==== Objectif : que deux machines chacune derrière leur NAT puisse établir un tunnel sans faire passer tout le trafic par un serveur central (on a besoin d'un serveur central servant de point de rencontre pour partager les informations de connexion). * [[https://headscale.net/stable/#__do_not_save__|Headscale]] : implémentation libre et auto-hébergée du serveur Tailscale, qui semble pouvoir répondre à ce besoin * [[https://github.com/anderspitman/awesome-tunneling]] * [[https://hcartiaux.github.io/posts/2025-01-30-headscale/|Create a private network with Headscale and Tailscale]] * https://fossorial.io/Getting%20Started/quick-install * https://netbird.io/ * [[https://github.com/darksunstealth/multi-vpn-routing]] * [[https://blog.nommy.moe/blog/exotic-mesh-vpn/|Testing "exotic" p2p VPN]] Une solution est de faire du NAT-hole-punching : * [[https://github.com/malcolmseyd/natpunch-go]] * [[https://github.com/hoyho/wg-wormhole]] * [[https://github.com/alex14fr/wgsig]] * [[https://www.jordanwhited.com/posts/wireguard-endpoint-discovery-nat-traversal/|WireGuard Endpoint Discovery and NAT Traversal using DNS-SD]] * [[https://github.com/connet-dev/connet]]