Le but de ce tutoriel est de router un subnet IPv4 de n'importe quelle taille chez vous en utilisant un tunnel WireGuard et un routeur VyOS sous forme de machine virtuelle.
Vous devriez au minimum être familier avec le concept de routes statiques, et le principe de sous-réseau sous forme cidr
Quelle utilité ?
Si vous souhaitez auto-héberger certains services chez vous, vous allez assez rapidement vous retrouver limités par l'unique IPv4 publique fournie par votre opérateur. Il se peut même que votre opérateur ne permette l'accès à internet qu'à travers un CGNAT, et que vous partagiez donc votre IP avec vos voisins. Dans ce cas, vous ne pourrez pas ouvrir de ports, ou alors un nombré limité. Vous pourriez aussi avoir une IP dynamique, là aussi, c'est beaucoup de galères pour du selfhost.
Par ailleurs, si vous souhaitez héberger quelques VMs pour vos amis, partager votre IP publique peut être ennuyant, voire dangereux.
Ce tutoriel permet in fine de mettre à disposition des IPv4 sur votre réseau personnel, un bridge virtuel sous Proxmox ou autre, ou sur un VLAN dédié, vous permettant par exemple d'assigner une IP publique a des équipements réseaux qui ne permettent pas d'installer WireGuard.
Ce tutoriel n'a pas pour but d'expliquer la manipulation pour une seule IPv4 ou quelques VMs avec un tunnel monté sur chaque VM. Pour cela, je vous recommande le tutoriel de Creeper, qui est plus simple, mais qui nécessite de monter un tunnel vers chaque VM: https://creeper.fr/wireguard/
Quel matériel nécessaire ?
Pour commencer, il vous faudra un VPS ou un serveur dédié chez un quelconque hébergeur, quoi que je recommande personnellement de partir chez HostMyServers, qui permettent de bénéficier d'IPs à 2€ one time au moment de l'écriture de ce tuto, ainsi que de VPS à très bas prix avec une grande bande passante. (LES BANDES PASSANTES AFFICHÉES CI-DESSOUS SONT LES BPs GARANTIES, TOUS LES VPS ONT UNE BP DE 10Gbps en BestEffort)

D'après mes essais passés, le VPS SSD-1 permets ~500Mbps de throughput, le VPS SSD-2 devrait être suffisant pour saturer une ligne fibre 1Gbps, en tout cas, il sature la mienne.
Il vous faudra aussi un serveur chez vous, idéalement sous Proxmox (ça devrait fonctionner sur ESXi, etc. Mais il y aura probablement des options à changer sur les bridges virtuels.), sur lequel vous préparerez une machine virtuelle sur laquelle vous installerez VyOS (expliqué ci-dessous).
Et évidemment, il faudra acheter un ou plusieurs blocs d'IPs (attention à la taille du bloc, il faudra d'office soustraire une IP au bloc afin de l'assigner au VyOS).
Ok, j'ai mon VPS chez HMS et mon serveur Proxmox, que faire maintenant ?
Chez HMS
- Installez Debian 12 sur votre VPS, vous recevrez vos infos de connexion par email.
- Achetez vos IPs, ⚠️PRENEZ BIEN UN BLOC ET NON PAS UNE SEULE IP. Pour ce tuto, je me contenterai d'un bloc /30 (4IPs (-1 pour le routeur, donc 3 IPs utilisables))
- Installez WireGuard et activer l'IPv4 forwarding sur votre VPS:
apt-get update && apt-get install wireguard-tools resolvconf arping -y
echo "nameserver 1.1.1.1" > /etc/resolv.conf
echo -e "net.ipv4.ip_forward=1\nnet.ipv4.conf.all.proxy_arp=1\n" | sudo tee -a /etc/sysctl.conf > /dev/null
sysctl -p
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
bash wireguard-install.sh
Vous allez vous retrouver face au script wireguard-install d'angristan. Laissez la config par défaut, vérifiez juste que l'IPv4 publique de votre VPS soit correctement détectée, et retirez l'IPv6 qui est proposée dans la liste des Allowed IPs pour ne laisser que 0.0.0.0/0

WireGuard est désormais installé, passons à la config.
Éditez le fichier /etc/wireguard/wg0.conf
pour qu'il ressemble à celui-ci (Supprimez le bloc avec les "PostUp", et "PostDown", retirez l'IPv6 dans "Address", et mettez votre bloc IP dans le AllowedIPs de votre client) :

Ensuite, démarrez WireGuard et activez-le au boot:
systemctl restart wg-quick@wg0
systemctl enable wg-quick@wg0
Finalement, ce n'est pas obligatoire, mais je vous conseille de mettre à jour le fichier qui a été créé à l'endroit où vous avez exécuté le script d'installation de WireGuard (/root
dans mon cas.) qui s'appellera wg0-client-<nom de votre client>.conf
, plus spécifiquement la section "Address" dans [Interface]
afin de la faire correspondre avec votre bloc IP. Exemple avec ma config ci-dessous :

⚠️Ce n'est pas obligatoire non plus, mais si vous voulez avoir l'esprit tranquille, créez un fichier nommé ips
dans /root
avec comme contenu toutes les IPs de votre/vos blocs comme ceci :

Ajoutez ensuite une crontab comme ceci en faisant crontab -e
:
*/5 * * * * for arg in $(< /root/ips); do arping -q -c1 -P $arg -S $arg -i eth0; done
Sur votre Proxmox
Créez un VMBR sur votre Proxmox, il servira de bridge entre le VyOS et vos VMs, ensuite, créez une VM VyOS sur votre Proxmox, pas besoin de specs folles, voici celles que je mets :
- ISO: (Version assez stable) GitHub, aura peut-être disparu car ils supriment les builds qui ont plus de ~3 mois, ou Ici (Mirroir chez moi)
- Graphic Card: Serial Terminal 0
- Disque: 32Go (vous pouvez mettre moins)
- CPU: 2 Cores, en type "host"
- RAM: 2Go (2048Mb)
- Network: VMBR connecté à votre box, le plus souvent vmbr0. Laissez le modèle en VirtIO
Une fois votre VM créé, allez dans son onglet Hardware, et ajoutez une nouvelle interface réseau, avec comme bridge le VMBR que vous avez créé tout à l'heure pour votre VyOS.
Vos deux interfaces réseaux devraient se présenter comme ceci :

Démarrez votre VM, et laissez la boot. Connectez vous avec les logins vyos/vyos
Tapez ensuite install image
, et changez le mot de passe de l'utilisateur vyos
quand ça vous sera demandé.

Tapez ensuite reboot
et laissez votre VyOS redémarrer.
Une fois connecté, faites sh int
afin de vérifier que vos interfaces sont bien nommées eth0, et eth1
Rentrez ensuite en mode config et passez eth0 en dhcp comme ceci:
config
edit int eth eth0
set address dhcp
set dhcp-options no-default-route
exit
set prot stat route <ip publique de votre VPS HMS>/32 next-hop <ip locale de votre box (192.168.1.1 par exemple)>
commit
save
Essayez ensuite de ping l'IP de votre VPS, ça devrait fonctionner

Ensuite, attaquons le tunnel !
Prenez le contenu de votre fichier wg0-client-<nom de votre client>.conf
, et exécutez les commandes suivantes (vous pouvez copier-coller dans les console serial en faisant clic droit 😉):
edit int wireg wg0
set address <la première ip de votre bloc + 1>/<cidr>
set ip adjust-mss clamp-mss-to-pmtu
set private-key <Votre private key dans [Interface]>
set peer serveur address <IP de votre VPS>
set peer serveur allowed-ips 0.0.0.0/0
set peer serveur port <Le port spécifié à la ligne Endpoint>
set peer serveur preshared-key <Votre preshared key>
set peer serveur public-key <Votre public key>
exit
set prot stat route 0.0.0.0/0 interface wg0
commit
save
Essayez de faire un mtr 1.1.1.1
, et vérifiez que le premier hop est bien 10.66.66.1. Si c'est bien le cas, il ne reste qu'à router les IPs vers eth1.
Il suffira de faire set prot stat route <votre bloc>/<cidr(/30 dans mon cas) interface eth1
, effectuez ensuite à nouveau commit
et save
.
Pour finir, si vous voulez faire les choses bien, pour vous faciliter la vie dans le futur, configurons les dns et activons le SSH sur le VyOs avec les commandes suivantes:
set sys name-server 1.1.1.1
set sys name-server 1.0.0.1
set serv ssh access allow user vyos
commit
save
exit
Vous pouvez désormais tester votre tunnel en créant une VM ou un LXC sur le bridge de votre VyOS, et en le configurant avec une IP de votre bloc et le cidr (/30 dans mon cas), et comme gateway la première IP utilisable (+1) de votre bloc, que vous avez alloué à votre VyOS. Exemple pour ma config ci-dessous

Laissez aussi idéalement la dernière IP du bloc libre comme IP de broadcast
Démarrez ensuite votre LXC, et vous devriez avoir internet, vous pouvez le vérifier en faisant ping 1.1.1.1
, et vérifier votre IP publique en faisant apt-get update && apt-get install curl -y && curl ifconfig.net
.
Et voilà, vous avez des IPv4 routées à la maison à travers un tunnel WireGuard sur les périphériques de votre choix !
Et si je veux racheter des IPs ?
Il suffira d'ajouter le nouveau bloc dans votre fichier de config /etc/wireguard/wg0.conf
comme ceci :

D'exécuter ensuite systemctl restart wg-quick@wg0
, et de faire ceci sur le VyOS:
config
set int wireg wg0 address <Première IP du nouveau bloc +1 >/<cidr>
set prot stat route <nouveau bloc>/cidr(29 ici) interface eth1
commit
save
exit
Et d'ajuster votre gateway en conséquence sur les VMs que vous créerez qui seront sur ce subnet, et d'encore une fois laisser la dernière IP du bloc libre.