← Tous les guides

Guide OpenWrt

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 sur un routeur sous OpenWrt 23.05 ou 24.10 (firewall4/nftables). Le routeur établit deux tunnels, un vers chaque PoP, et bascule automatiquement si l'un d'eux tombe. Seul le trafic de votre IP fixe passe par les tunnels ; tout le reste du trafic continue de passer par votre WAN habituel.

Votre IP fixe arrive sur le routeur et est redirigée vers un appareil de votre réseau (LAN_HOST). Toutes les commandes s'exécutent via SSH sur le routeur.

1. Les paquets

opkg update
opkg install wireguard-tools luci-proto-wireguard

2. Les deux tunnels

uci set network.fixedip1=interface
uci set network.fixedip1.proto='wireguard'
uci set network.fixedip1.private_key='PRIVATE_KEY'
uci set network.fixedip1.listen_port='51821'
uci set network.fixedip1.mtu='1420'
uci add_list network.fixedip1.addresses='TUNNEL_IP_1/32'
uci add_list network.fixedip1.addresses='FIXED_IP/32'

uci set network.fixedip1_peer=wireguard_fixedip1
uci set network.fixedip1_peer.description='fixedip.be PoP 1'
uci set network.fixedip1_peer.public_key='SERVER_PUBLIC_KEY_1'
uci set network.fixedip1_peer.endpoint_host='ENDPOINT_1'
uci set network.fixedip1_peer.endpoint_port='PORT'
uci set network.fixedip1_peer.persistent_keepalive='25'
uci add_list network.fixedip1_peer.allowed_ips='0.0.0.0/0'
uci add_list network.fixedip1_peer.allowed_ips='::/0'
uci set network.fixedip1_peer.route_allowed_ips='0'

uci set network.fixedip2=interface
uci set network.fixedip2.proto='wireguard'
uci set network.fixedip2.private_key='PRIVATE_KEY'
uci set network.fixedip2.listen_port='51822'
uci set network.fixedip2.mtu='1420'
uci add_list network.fixedip2.addresses='TUNNEL_IP_2/32'

uci set network.fixedip2_peer=wireguard_fixedip2
uci set network.fixedip2_peer.description='fixedip.be PoP 2'
uci set network.fixedip2_peer.public_key='SERVER_PUBLIC_KEY_2'
uci set network.fixedip2_peer.endpoint_host='ENDPOINT_2'
uci set network.fixedip2_peer.endpoint_port='PORT'
uci set network.fixedip2_peer.persistent_keepalive='25'
uci add_list network.fixedip2_peer.allowed_ips='0.0.0.0/0'
uci add_list network.fixedip2_peer.allowed_ips='::/0'
uci set network.fixedip2_peer.route_allowed_ips='0'

route_allowed_ips='0' fait en sorte qu'OpenWrt ne crée pas de route par défaut à travers les tunnels : votre trafic habituel reste là où il était. Votre IP fixe se trouve sur fixedip1 ; une interface WireGuard reste active, même si le PoP 1 est momentanément injoignable.

3. Routage

Les réponses repartent par le tunnel par lequel la connexion est entrée (tables 101 et 102). Le nouveau trafic depuis votre IP fixe utilise la table 100, qui pointe à l'étape 6 vers le tunnel qui fonctionne.

uci set network.fixedip1_route=route
uci set network.fixedip1_route.interface='fixedip1'
uci set network.fixedip1_route.target='0.0.0.0/0'
uci set network.fixedip1_route.table='101'

uci set network.fixedip2_route=route
uci set network.fixedip2_route.interface='fixedip2'
uci set network.fixedip2_route.target='0.0.0.0/0'
uci set network.fixedip2_route.table='102'

uci set network.fixedip_mark1=rule
uci set network.fixedip_mark1.mark='0x101'
uci set network.fixedip_mark1.lookup='101'

uci set network.fixedip_mark2=rule
uci set network.fixedip_mark2.mark='0x102'
uci set network.fixedip_mark2.lookup='102'

uci set network.fixedip_src=rule
uci set network.fixedip_src.src='FIXED_IP/32'
uci set network.fixedip_src.lookup='100'

uci commit network
/etc/init.d/network reload

4. Zone de pare-feu et redirection

uci add firewall zone
uci set firewall.@zone[-1].name='fixedip'
uci add_list firewall.@zone[-1].network='fixedip1'
uci add_list firewall.@zone[-1].network='fixedip2'
uci set firewall.@zone[-1].input='REJECT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='REJECT'

uci add firewall redirect
uci set firewall.@redirect[-1].name='fixedip-https'
uci set firewall.@redirect[-1].src='fixedip'
uci set firewall.@redirect[-1].src_dip='FIXED_IP'
uci set firewall.@redirect[-1].src_dport='443'
uci set firewall.@redirect[-1].dest='lan'
uci set firewall.@redirect[-1].dest_ip='LAN_HOST'
uci set firewall.@redirect[-1].dest_port='443'
uci set firewall.@redirect[-1].proto='tcp'
uci set firewall.@redirect[-1].target='DNAT'

uci commit firewall

Autorisez aussi le ping depuis les tunnels. Nos serveurs de tunnel pinguent chaque tunnel pour savoir lequel fonctionne ; sans réponse, nous n'envoyons pas votre IP fixe vers ce tunnel.

uci add firewall rule
uci set firewall.@rule[-1].name='fixedip-ping'
uci set firewall.@rule[-1].src='fixedip'
uci set firewall.@rule[-1].proto='icmp'
uci set firewall.@rule[-1].icmp_type='echo-request'
uci set firewall.@rule[-1].target='ACCEPT'
uci commit firewall

5. Le marquage pour les réponses de votre serveur

Lorsque votre serveur répond, ce paquet a encore l'adresse interne LAN_HOST comme expéditeur. Pour le renvoyer par le bon tunnel, vous marquez la connexion à son arrivée. Créez /etc/nftables.d/10-fixedip.nft :

chain fixedip_mark {
    type filter hook prerouting priority mangle; policy accept;
    iifname "fixedip1" ct state new ct mark set 0x101
    iifname "fixedip2" ct state new ct mark set 0x102
    ct mark { 0x101, 0x102 } meta mark set ct mark
}
/etc/init.d/firewall restart

Vous utilisez déjà des marquages (par exemple pour mwan3 ou SQM) ? Choisissez alors des valeurs encore libres.

6. Basculement automatique

Un petit script choisit chaque minute le tunnel pour le nouveau trafic : le PoP 1 s'il répond, sinon le PoP 2. Créez /usr/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
chmod 755 /usr/sbin/fixedip-failover
echo '* * * * * /usr/sbin/fixedip-failover' >> /etc/crontabs/root
/etc/init.d/cron restart
/usr/sbin/fixedip-failover

Les connexions entrantes n'ont pas besoin du script : elles arrivent par le tunnel qui fonctionne, et les réponses suivent le même chemin.

7. Sortir aussi avec votre IP fixe (facultatif)

uci set network.fixedip_host=rule
uci set network.fixedip_host.src='LAN_HOST/32'
uci set network.fixedip_host.lookup='100'
uci commit network

uci add firewall forwarding
uci set firewall.@forwarding[-1].src='lan'
uci set firewall.@forwarding[-1].dest='fixedip'

uci add firewall redirect
uci set firewall.@redirect[-1].name='fixedip-snat'
uci set firewall.@redirect[-1].src='lan'
uci set firewall.@redirect[-1].dest='fixedip'
uci set firewall.@redirect[-1].src_ip='LAN_HOST'
uci set firewall.@redirect[-1].src_dip='FIXED_IP'
uci set firewall.@redirect[-1].proto='all'
uci set firewall.@redirect[-1].target='SNAT'
uci commit firewall

/etc/init.d/network reload
/etc/init.d/firewall restart

8. IPv6

Ajoutez TUNNEL_IP6_1/128 et TUNNEL_IP6_2/128 aux adresses de fixedip1 et fixedip2, placez un /64 sur votre LAN et créez les mêmes règles pour IPv6 :

uci add_list network.lan.ip6addr='IPV6_LAN::1/64'

uci set network.fixedip_src6=rule6
uci set network.fixedip_src6.src='IPV6_PREFIX'
uci set network.fixedip_src6.lookup='100'

uci commit network
/etc/init.d/network reload

Dans fixedip-failover, ajoutez aussi dans les deux branches ip -6 route replace default dev fixedip1 table 100 (ou fixedip2). Ouvrez le trafic IPv6 entrant par appareil avec une traffic rule de la zone fixedip vers lan.

Plusieurs adresses

Vous avez un sous-réseau (FIXED_SUBNET) ? Vous pouvez alors l'utiliser de deux manières :

  • Via votre routeur (toutes les adresses utilisables) : ajoutez chaque adresse en /32 à fixedip1 et créez un port forward par adresse comme à l'étape 4.
  • Directement sur votre réseau : placez le sous-réseau sur une interface ou un VLAN distinct avec la première adresse utilisable, et remplacez à l'étape 3 FIXED_IP/32 par FIXED_SUBNET. Les appareils utilisent directement leur adresse publique, sans NAT ; ouvrez avec des traffic rules de la zone fixedip ce qui peut entrer.

Vérification

wg show
ip rule
ip route show table 100

Pour les deux tunnels, latest handshake doit afficher une heure récente et la table 100 pointe vers fixedip1. Testez ensuite depuis l'extérieur, par exemple avec votre smartphone en données mobiles : https://FIXED_IP doit aboutir sur votre serveur.

Tester le basculement : bloquez temporairement le trafic UDP sortant vers ENDPOINT_1 (par exemple avec une traffic rule) et attendez une minute : la table 100 pointe vers fixedip2 et votre IP fixe reste joignable. Retirez ensuite le blocage. N'utilisez pas ifdown fixedip1 pour cela : votre IP fixe se trouve sur cette interface.

Annulation

for s in fixedip1 fixedip1_peer fixedip2 fixedip2_peer fixedip1_route fixedip2_route fixedip_mark1 fixedip_mark2 fixedip_src fixedip_host fixedip_src6; do uci -q delete network.$s; done
uci commit network
rm /etc/nftables.d/10-fixedip.nft /usr/sbin/fixedip-failover
sed -i '/fixedip-failover/d' /etc/crontabs/root

Supprimez ensuite dans LuCI (Network › Firewall) la zone fixedip et les port forwards associés, puis redémarrez le réseau, le pare-feu et cron.

Des problèmes ?

  • Pas de handshake : vérifiez ENDPOINT_1/ENDPOINT_2, PORT et les clés.
  • Handshake OK, mais les connexions restent bloquées : réglez mtu sur 1360 pour les deux tunnels.
  • Rien ne revient depuis l'extérieur : vérifiez avec nft list chain inet fw4 fixedip_mark que le marquage compte des paquets, et avec ip rule que les règles pour 0x101/0x102 sont présentes.

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.