reseau:wireguard
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
reseau:wireguard [2024/08/17 00:04] – [Configuration côté client] alarig | reseau:wireguard [2025/04/23 13:39] (Version actuelle) – alarig | ||
---|---|---|---|
Ligne 10: | Ligne 10: | ||
===== Technique ===== | ===== Technique ===== | ||
- | Pour le moment le PoC se passe sur `ovpn02.grif` histoire d’éviter de spawn une VM juste pour les tests | + | On réutilise les VM ` ovpn01.grif` et `ovpn02.grif` histoire d’éviter de spawn une VM juste pour « rien ». |
+ | La redondance BGP se fait sur le routeur ID, et la synchro entre les deux se fait avec un rsync en cron. Par contre, il ne gère pas la suppression de VPN, il faut aller supprimer la conf sur les deux machines. | ||
+ | <file bash | / | ||
+ | # | ||
+ | |||
+ | die() { | ||
+ | echo " | ||
+ | exit 1 | ||
+ | } | ||
+ | |||
+ | if [ " | ||
+ | echo "The first argument must be the remote containing the production configs" | ||
+ | die "Other arguments are ignored" | ||
+ | else | ||
+ | REMOTE=" | ||
+ | fi | ||
+ | |||
+ | which rsync 1>/ | ||
+ | getent hosts " | ||
+ | |||
+ | if [ ! -d / | ||
+ | mkdir -p / | ||
+ | fi | ||
+ | |||
+ | RSYNC_OPTIONS=" | ||
+ | SSH_OPTIONS=" | ||
+ | rsync ${RSYNC_OPTIONS} -e "ssh ${SSH_OPTIONS}" | ||
+ | ${REMOTE}:/ | ||
+ | die "rsync / | ||
+ | rsync ${RSYNC_OPTIONS} -e "ssh ${SSH_OPTIONS}" | ||
+ | ${REMOTE}:/ | ||
+ | die 'rsync / | ||
+ | |||
+ | for i in / | ||
+ | # We need the file from the init.d dir | ||
+ | INITD=" | ||
+ | if [ ! -h ${INITD} ]; then | ||
+ | ln -s / | ||
+ | # We only need the file name | ||
+ | rc-update add $(basename " | ||
+ | rc-service $(basename " | ||
+ | fi | ||
+ | done | ||
+ | </ | ||
La mise en place se fait avec deux fichiers et trois commandes. Chaque utilisateur a son port que l’on extrapole du dernier bloc de l’adresse IPv6 : `2a00: | La mise en place se fait avec deux fichiers et trois commandes. Chaque utilisateur a son port que l’on extrapole du dernier bloc de l’adresse IPv6 : `2a00: | ||
Ligne 24: | Ligne 67: | ||
PublicKey = YtTa180Wgh3HiV4iVxoFL8vb3E+NueGpv4BLGuN3Zgs= | PublicKey = YtTa180Wgh3HiV4iVxoFL8vb3E+NueGpv4BLGuN3Zgs= | ||
AllowedIPs = 89.234.186.78/ | AllowedIPs = 89.234.186.78/ | ||
- | PersistentKeepalive = 25 | ||
</ | </ | ||
Ligne 60: | Ligne 102: | ||
rc-service ip6tables save | rc-service ip6tables save | ||
``` | ``` | ||
+ | ===== Debug ===== | ||
+ | |||
+ | Wireguard étant un module kernel, il faut jouer avec le debug du kernel : | ||
+ | ``` | ||
+ | echo module wireguard +p > / | ||
+ | echo module wireguard -p > / | ||
+ | ``` | ||
+ | |||
+ | Ensuite ça se consulte avec `dmesg -Tw`. À noter que le temps dans dmesg n’est pas hyper fiable, et que ça nécessite l’option kernel `DYNAMIC_DEBUG`. | ||
+ | |||
===== Configuration côté client ===== | ===== Configuration côté client ===== | ||
Ligne 87: | Ligne 139: | ||
De toutes façons on fournira un fichier de conf client d’exemple comme on le faisait pour OpenVPN. | De toutes façons on fournira un fichier de conf client d’exemple comme on le faisait pour OpenVPN. | ||
+ | |||
+ | |||
+ | ===== Script de génération ===== | ||
+ | |||
+ | Voici la v1 du script de génération de VPN wg. C’est une adaptation bête de celui d’OpenVPN. | ||
+ | <file bash / | ||
+ | #!/bin/sh | ||
+ | |||
+ | usage() { | ||
+ | printf " | ||
+ | printf "\t-h, --help | ||
+ | printf "\t-u, --user | ||
+ | printf "\t-i, --id Numéro servant à la génération des IPs\n" | ||
+ | printf "\t-m, --email | ||
+ | connexion\n" | ||
+ | } | ||
+ | |||
+ | OPTS=$(getopt -o u:,m:,h -l user:, | ||
+ | |||
+ | if [ $? != 0 ]; then | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ $1 ]; then | ||
+ | if [ $1 = ' | ||
+ | usage | ||
+ | exit 0 | ||
+ | elif [ $# -lt 4 ]; then | ||
+ | echo " | ||
+ | usage | ||
+ | exit 1 | ||
+ | fi | ||
+ | else | ||
+ | echo " | ||
+ | usage | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | eval set -- " | ||
+ | |||
+ | while :; do | ||
+ | case " | ||
+ | -h | --help) | ||
+ | exit 0;; | ||
+ | -u | --user) | ||
+ | shift 2;; | ||
+ | -m | --email) | ||
+ | shift 2;; | ||
+ | --) | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | mailregex=$(echo $EMAIL | egrep ' | ||
+ | if [ ${# | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | echo "1 - Récupération last IPv4" | ||
+ | LAST_VPN_V4=$(add-ovpn.netbox.py -a ipv4 -u " | ||
+ | V4_RETURN=$? | ||
+ | echo ${LAST_VPN_V4} | ||
+ | if [ ${V4_RETURN} = 1 ]; then | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | echo "2 - Récupération last IPv6" | ||
+ | LAST_VPN_V6=$(add-ovpn.netbox.py -a ipv6 -u " | ||
+ | echo ${LAST_VPN_V6} | ||
+ | |||
+ | WG_PORT=$(printf ' | ||
+ | |||
+ | echo "3 - Génération de la clé wg" >&2 | ||
+ | wg genkey | tee "/ | ||
+ | wg genkey | tee "/ | ||
+ | |||
+ | echo "4.1 - Génération de la configuration wg" >&2 | ||
+ | echo " | ||
+ | ListenPort = ${WG_PORT} | ||
+ | PrivateKey = $(cat / | ||
+ | |||
+ | [Peer] | ||
+ | PublicKey = $(cat / | ||
+ | AllowedIPs = ${LAST_VPN_V4}/ | ||
+ | |||
+ | echo "4.2 - Génération de la configuration ip" >&2 | ||
+ | echo " | ||
+ | config_wg${WG_PORT}=\" | ||
+ | routes_wg${WG_PORT}=\" | ||
+ | ${LAST_VPN_V4}/ | ||
+ | ${LAST_VPN_V6} | ||
+ | \" | ||
+ | |||
+ | postup () { | ||
+ | ip link set wg${WG_PORT} alias \" | ||
+ | }" > "/ | ||
+ | |||
+ | echo "4.3 - Activation du VPN" >&2 | ||
+ | ln -s / | ||
+ | rc-update add net.wg${WG_PORT} | ||
+ | rc-service net.wg${WG_PORT} start | ||
+ | |||
+ | echo "5 - Envoi du mail" >&2 | ||
+ | SUBJECT=$(perl -wse "use utf8; use Encode qw(encode); print encode(\" | ||
+ | \" | ||
+ | |||
+ | echo "Date: $(date --rfc-2822) | ||
+ | Content-Type: | ||
+ | MIME-Version: | ||
+ | Content-Transfer-Encoding: | ||
+ | From: Adminsys grifon < | ||
+ | To: < | ||
+ | Subject: $SUBJECT | ||
+ | Organization: | ||
+ | Message-ID: <$(date | md5sum | cut -d ' ' -f 1)@wg.grifon.fr> | ||
+ | |||
+ | Bonjour, | ||
+ | Votre VPN vient d’être créé. | ||
+ | |||
+ | Vous avez l’IPv4 $LAST_VPN_V4 et le subnet IPv6 $LAST_VPN_V6. | ||
+ | Votre configuration se trouve à la fin de ce mail. | ||
+ | Si vous souhaitez regénérer votre clé, n’hésitez pas à nous envoyer votre | ||
+ | nouvelle clé publique. | ||
+ | |||
+ | Si vous voulez un reverse DNS sur votre VPN, merci d’envoyer un mail à | ||
+ | adminsys@grifon.fr contenant votre choix, ou les serveurs à qui déléguer les | ||
+ | zones. | ||
+ | |||
+ | ##### DÉBUT DU FICHIER DE CONFIGURATION ##### | ||
+ | |||
+ | [Interface] | ||
+ | PrivateKey = $(cat / | ||
+ | DNS = 89.234.186.4, | ||
+ | |||
+ | [Peer] | ||
+ | Endpoint = wg.grifon.fr: | ||
+ | PublicKey = $(cat / | ||
+ | AllowedIPs = 0.0.0.0/0, ::/0 | ||
+ | |||
+ | ##### FIN DU FICHIER DE CONFIGURATION ##### | ||
+ | |||
+ | Cordialement, | ||
+ | -- | ||
+ | Les adminsys de grifon" | ||
+ | |||
+ | |||
+ | SUBJECT=$(perl -wse "use utf8; use Encode qw(encode); print encode(\" | ||
+ | \" | ||
+ | |||
+ | echo "From: Adminsys grifon < | ||
+ | To: adminsys@grifon.fr | ||
+ | Content-Type: | ||
+ | Subject: ${SUBJECT} | ||
+ | |||
+ | IPv4 : ${LAST_VPN_V4} | ||
+ | IPv6 : ${LAST_VPN_V6} | ||
+ | |||
+ | " | / | ||
+ | </ | ||
+ | |||
+ | ===== Suppression de VPN ===== | ||
+ | |||
+ | Pour supprimer un VPN il faut : | ||
+ | - Désactiver le service d’init | ||
+ | - Supprimer la conf réseau | ||
+ | - Supprimer la conf wireguard | ||
+ | |||
+ | ==== Désactiver le service d’init ==== | ||
+ | |||
+ | `rc-update del net.wg42 && rc-service net.wg42 stop && rm / | ||
+ | |||
+ | |||
+ | ==== Supprimer la conf réseau ==== | ||
+ | |||
+ | `rm / | ||
+ | |||
+ | ==== Supprimer la conf wireguard ==== | ||
+ | |||
+ | `rm / |
reseau/wireguard.1723853040.txt.gz · Dernière modification : 2024/08/17 00:04 de alarig