← Tous les guides

Guide Linux

Ce que vous recevez de nous

Remplacez ces repères par les données reçues lors de votre commande chez FixedIP.be.

PRIVATE_KEYla clé privée de vos tunnels (à garder secrète)
PORTle port UDP de nos serveurs de tunnel
ENDPOINT_1l'adresse de notre serveur de tunnel à Anvers
SERVER_PUBLIC_KEY_1la clé publique de notre serveur de tunnel à Anvers
TUNNEL_IP_1l'adresse de tunnel de votre routeur vers Anvers
SERVER_TUNNEL_IP_1l'adresse de tunnel de notre côté à Anvers (passerelle)
ENDPOINT_2l'adresse de notre serveur de tunnel à Zaventem
SERVER_PUBLIC_KEY_2la clé publique de notre serveur de tunnel à Zaventem
TUNNEL_IP_2l'adresse de tunnel de votre routeur vers Zaventem
FIXED_IPvotre adresse IPv4 fixe
FIXED_SUBNETvotre sous-réseau IPv4, par exemple /29
IPV6_PREFIXvotre sous-réseau IPv6
IPV6_LANun /64 de votre sous-réseau IPv6 pour votre réseau
TUNNEL_IP6_1l'adresse de tunnel IPv6 de votre routeur vers Anvers
TUNNEL_IP6_2l'adresse de tunnel IPv6 de votre routeur vers Zaventem
LAN_HOSTl'adresse interne de votre serveur ou NAS, par exemple 192.168.1.10

Ce guide vous permet de configurer votre IP fixe directement sur un serveur Linux (Debian, Ubuntu, Fedora, ...). Le serveur établit deux tunnels, un vers chaque PoP, et bascule automatiquement si l'un d'eux tombe. Seul le trafic depuis et vers votre IP fixe passe par les tunnels ; le reste du trafic du serveur continue de passer par votre connexion habituelle.

Vous souhaitez utiliser une machine Linux comme routeur pour tout votre réseau ? Lisez alors aussi Linux comme routeur en bas de page.

1. Installer WireGuard

# Debian / Ubuntu
sudo apt install wireguard-tools nftables

# Fedora / RHEL
sudo dnf install wireguard-tools nftables

2. Les deux tunnels

Créez /etc/wireguard/fixedip1.conf :

[Interface]
PrivateKey = PRIVATE_KEY
Address = TUNNEL_IP_1/32
ListenPort = 51821
MTU = 1420
# Pas de routes : l'étape 3 détermine quel trafic passe par le tunnel.
Table = off

[Peer]
PublicKey = SERVER_PUBLIC_KEY_1
Endpoint = ENDPOINT_1:PORT
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Et /etc/wireguard/fixedip2.conf, avec la même clé :

[Interface]
PrivateKey = PRIVATE_KEY
Address = TUNNEL_IP_2/32
ListenPort = 51822
MTU = 1420
Table = off

[Peer]
PublicKey = SERVER_PUBLIC_KEY_2
Endpoint = ENDPOINT_2:PORT
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Protégez les fichiers et démarrez les deux tunnels :

sudo chmod 600 /etc/wireguard/fixedip1.conf /etc/wireguard/fixedip2.conf
sudo systemctl enable --now wg-quick@fixedip1 wg-quick@fixedip2

3. Votre IP fixe et le routage

L'IP fixe est placée sur sa propre interface dummy, indépendante des deux tunnels. Les réponses repartent par le tunnel par lequel la connexion est entrée ; le nouveau trafic depuis votre IP fixe passe par le tunnel qui fonctionne. Créez /usr/local/sbin/fixedip-up :

#!/bin/sh
# IP fixe sur sa propre interface
ip link add fixedip0 type dummy 2>/dev/null
ip addr replace FIXED_IP/32 dev fixedip0
ip link set fixedip0 up

# Réponses via le tunnel par lequel la connexion est entrée
nft -f - <<'NFT'
table inet fixedip
delete table inet fixedip
table inet fixedip {
    chain pre {
        type filter hook prerouting priority mangle; policy accept;
        iifname "fixedip1" ct state new ct mark set 1
        iifname "fixedip2" ct state new ct mark set 2
    }
    chain out {
        type route hook output priority mangle; policy accept;
        ct mark != 0 meta mark set ct mark
    }
}
NFT
ip route replace default dev fixedip1 table 101
ip route replace default dev fixedip2 table 102
ip rule del fwmark 1 table 101 2>/dev/null; ip rule add fwmark 1 table 101 priority 100
ip rule del fwmark 2 table 102 2>/dev/null; ip rule add fwmark 2 table 102 priority 101
ip rule del from FIXED_IP table 100 2>/dev/null; ip rule add from FIXED_IP table 100 priority 102

# Nouveau trafic : PoP 1 s'il répond, sinon PoP 2
/usr/local/sbin/fixedip-failover

Et /usr/local/sbin/fixedip-failover :

#!/bin/sh
if ping -c 2 -W 2 -I fixedip1 SERVER_TUNNEL_IP_1 >/dev/null 2>&1; then
    ip route replace default dev fixedip1 table 100
else
    ip route replace default dev fixedip2 table 100
fi

Rendez les deux exécutables et faites-les tourner automatiquement :

sudo chmod 755 /usr/local/sbin/fixedip-up /usr/local/sbin/fixedip-failover

/etc/systemd/system/fixedip.service :

[Unit]
Description=fixedip.be fixed IP
After=wg-quick@fixedip1.service wg-quick@fixedip2.service
Requires=wg-quick@fixedip1.service wg-quick@fixedip2.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/fixedip-up

[Install]
WantedBy=multi-user.target

/etc/systemd/system/fixedip-failover.timer (avec un .service du même nom qui exécute ExecStart=/usr/local/sbin/fixedip-failover, Type=oneshot) :

[Unit]
Description=fixedip.be failover check

[Timer]
OnBootSec=30
OnUnitActiveSec=15

[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now fixedip.service fixedip-failover.timer

4. Vos services

Un service qui écoute sur toutes les adresses (0.0.0.0 ou ::) est immédiatement joignable sur votre IP fixe. Si vous voulez qu'un service écoute uniquement sur votre IP fixe, liez-le à FIXED_IP.

N'oubliez pas votre pare-feu. Avec ufw, par exemple :

sudo ufw allow in on fixedip1 to FIXED_IP port 443 proto tcp
sudo ufw allow in on fixedip2 to FIXED_IP port 443 proto tcp

Autorisez le ping sur les tunnels (c'est le cas par défaut avec ufw) : nos serveurs de tunnel pinguent TUNNEL_IP_1 et TUNNEL_IP_2 pour savoir quel tunnel fonctionne. Sans réponse, nous n'envoyons pas votre IP fixe vers ce tunnel.

5. Sortir aussi avec votre IP fixe (facultatif)

Pour un seul programme, vous choisissez vous-même l'adresse source :

curl --interface FIXED_IP https://ifconfig.me

Tout le trafic sortant du serveur doit-il passer par votre IP fixe ? Ajoutez alors, à la fin de fixedip-failover, dans les deux branches, une route par défaut avec src FIXED_IP, par exemple ip route replace default dev fixedip1 src FIXED_IP metric 50. Tenez compte du fait que le serveur fera alors aussi passer ses mises à jour et son trafic DNS par les tunnels.

6. IPv6

Dans les deux fichiers de configuration, ajoutez l'adresse de tunnel IPv6 à Address (TUNNEL_IP6_1/128 et TUNNEL_IP6_2/128), placez une adresse de votre sous-réseau sur fixedip0 et ajoutez les mêmes règles pour IPv6 :

ip -6 addr replace IPV6_LAN::1/128 dev fixedip0
ip -6 route replace default dev fixedip1 table 101
ip -6 route replace default dev fixedip2 table 102
ip -6 rule add fwmark 1 table 101 priority 100
ip -6 rule add fwmark 2 table 102 priority 101
ip -6 rule add from IPV6_PREFIX table 100 priority 102

et, dans fixedip-failover, chaque fois aussi ip -6 route replace default dev fixedip1 table 100 (ou fixedip2).

Linux comme routeur

Vous utilisez la machine comme routeur pour votre réseau ? Activez alors le forwarding (net.ipv4.ip_forward=1) et ajoutez une règle DNAT de FIXED_IP vers LAN_HOST. Comme les réponses de LAN_HOST arrivent par le réseau, vous avez aussi besoin du marquage dans prerouting :

nft add chain inet fixedip nat '{ type nat hook prerouting priority dstnat; }'
nft add rule inet fixedip nat ip daddr FIXED_IP dnat ip to LAN_HOST
nft add rule inet fixedip pre ct mark != 0 meta mark set ct mark

Vous avez un sous-réseau (FIXED_SUBNET) ? Placez-le alors sur une interface LAN et remplacez from FIXED_IP par from FIXED_SUBNET. Les appareils utilisent alors directement leur adresse publique, sans NAT.

Vérification

sudo wg show
ip rule
ip route show table 100
curl --interface FIXED_IP https://ifconfig.me

Pour les deux tunnels, latest handshake doit afficher une heure récente, la table 100 pointe vers fixedip1, et la commande curl renvoie votre IP fixe.

Tester le basculement : sudo systemctl stop wg-quick@fixedip1. En moins d'une demi-minute, la table 100 pointe vers fixedip2 et votre IP fixe reste joignable. Redémarrez ensuite le tunnel.

Annulation

sudo systemctl disable --now fixedip-failover.timer fixedip.service wg-quick@fixedip1 wg-quick@fixedip2
sudo ip link del fixedip0
sudo nft delete table inet fixedip
sudo rm /etc/wireguard/fixedip1.conf /etc/wireguard/fixedip2.conf /usr/local/sbin/fixedip-up /usr/local/sbin/fixedip-failover
sudo rm /etc/systemd/system/fixedip.service /etc/systemd/system/fixedip-failover.*

Des problèmes ?

  • Pas de handshake : vérifiez ENDPOINT_1/ENDPOINT_2, PORT et les clés. Autorisez le trafic UDP sortant vers PORT.
  • Handshake OK, mais les connexions restent bloquées : mettez MTU = 1360 dans les deux fichiers. Sur la 4G/5G et certaines connexions fibre ou Starlink, 1420 est trop élevé.
  • Les paquets entrants arrivent mais rien ne repart : vérifiez avec ip rule que les règles sont bien présentes et, si nécessaire, mettez net.ipv4.conf.all.rp_filter=2.

Vous n'y arrivez pas ? Écrivez-nous à info@fixedip.be

Prêt pour votre IP fixe ?

Commencez dès aujourd'hui et soyez joignable partout.