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_KEY | la clé privée de vos tunnels (à garder secrète) |
PORT | le port UDP de nos serveurs de tunnel |
ENDPOINT_1 | l'adresse de notre serveur de tunnel à Anvers |
SERVER_PUBLIC_KEY_1 | la clé publique de notre serveur de tunnel à Anvers |
TUNNEL_IP_1 | l'adresse de tunnel de votre routeur vers Anvers |
SERVER_TUNNEL_IP_1 | l'adresse de tunnel de notre côté à Anvers (passerelle) |
ENDPOINT_2 | l'adresse de notre serveur de tunnel à Zaventem |
SERVER_PUBLIC_KEY_2 | la clé publique de notre serveur de tunnel à Zaventem |
TUNNEL_IP_2 | l'adresse de tunnel de votre routeur vers Zaventem |
FIXED_IP | votre adresse IPv4 fixe |
FIXED_SUBNET | votre sous-réseau IPv4, par exemple /29 |
IPV6_PREFIX | votre sous-réseau IPv6 |
IPV6_LAN | un /64 de votre sous-réseau IPv6 pour votre réseau |
TUNNEL_IP6_1 | l'adresse de tunnel IPv6 de votre routeur vers Anvers |
TUNNEL_IP6_2 | l'adresse de tunnel IPv6 de votre routeur vers Zaventem |
LAN_HOST | l'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àfixedip1et 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/32parFIXED_SUBNET. Les appareils utilisent directement leur adresse publique, sans NAT ; ouvrez avec des traffic rules de la zonefixedipce 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,PORTet les clés. - Handshake OK, mais les connexions restent bloquées : réglez
mtusur1360pour les deux tunnels. - Rien ne revient depuis l'extérieur : vérifiez avec
nft list chain inet fw4 fixedip_markque le marquage compte des paquets, et avecip ruleque les règles pour0x101/0x102sont 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.