• # Intégré dans systemd-networkd

    Posté par . En réponse à la dépêche WireGuard, protocole de communication chiffré sur UDP et logiciel libre. Évalué à 10.

    Merci pour cette présentation :)

    Je trouve que le paragraphe "Tutoriel : Installer Wireguard côté serveur sur Debian/Ubuntu" est mal nommé, ça pourrait être "Tutoriel : Installer Wireguard sur Debian/Ubuntu" tout court, puisqu'il n'y a aucune notion de client ou serveur avec Wireguard, juste des peers qui se connectent entre eux.

    Pour donner une autre idée/vision, je l'utilise sur des machines Debian dont le réseau est géré par systemd-networkd, et ça tombe bien, puisqu'il y est géré nativement depuis un bon moment.

    Je n'installe aucun paquet sur les serveurs, uniquement le paquet wireguard-tools sur ma station de travail pour générer les clés avec la commande wg genkey | tee /dev/stderr | wg pubkey, ça affiche les deux dans la console sans écrire de fichier (la clé privée en premier, et la clé publique en dessous).
    Pour les clés preshared, j'utilise juste wg genpsk sans rediriger dans un fichier, puisque je vais juste copier/coller les clés dans la conf.

    Ensuite, je crée juste deux fichiers de conf par serveur :
    /etc/systemd/network/50-wg0.netdev (avec des droits en root:systemd-network 0640 puisqu'il contient des secrets)

    [NetDev]
    Name=wg0
    Kind=wireguard
    [WireGuard]
    PrivateKey=<server1_private_key>
    # Port d'écoute, si la machine est joignable directement par d'autres
    ListenPort=<port>
    [WireGuardPeer]
    PublicKey=<server2_public_key>
    PresharedKey=<preshared_key>
    # Adresse de la machine distante, si elle est joignable directement
    Endpoint=<remote_peer_public_ip>:<port>
    AllowedIPs=<remote_peer_vpn_ip>/32
    AllowedIPs=<remote_subnet1>/<mask>
    AllowedIPs=<remote_subnet2>/<mask>
    

    /etc/systemd/network/50-wg0.network

    [Match]
    Name=wg0
    [Network]
    Address=<server1_peer_vpn_ip>/<mask>
    [Route]
    Destination=<remote_subnet1>/<mask>
    Scope=link
    [Route]
    Destination=<remote_subnet2>/<mask>
    Scope=link
    

    Un restart du service systemd-networkd et... tadaaa !

    Bonus : Si le réseau de la machine n'est pas géré par systemd-networkd, on peut quand même l'utiliser pour Wireguard en lui demandant d'ignorer les autres interfaces avec quelque chose comme :

    [Match]
    Name=!en* wl*