Handleiding OpenWrt
Wat je van ons krijgt
Vervang deze plaatsaanduidingen door de gegevens die je bij je bestelling van FixedIP.be kreeg.
PRIVATE_KEY | de private key van je tunnels (geheim houden) |
PORT | de UDP-poort van onze tunnelservers |
ENDPOINT_1 | het adres van onze tunnelserver in Antwerpen |
SERVER_PUBLIC_KEY_1 | de public key van onze tunnelserver in Antwerpen |
TUNNEL_IP_1 | het tunneladres van je router naar Antwerpen |
SERVER_TUNNEL_IP_1 | het tunneladres aan onze kant in Antwerpen (gateway) |
ENDPOINT_2 | het adres van onze tunnelserver in Zaventem |
SERVER_PUBLIC_KEY_2 | de public key van onze tunnelserver in Zaventem |
TUNNEL_IP_2 | het tunneladres van je router naar Zaventem |
FIXED_IP | je vaste IPv4-adres |
FIXED_SUBNET | je IPv4-subnet, bijvoorbeeld /29 |
IPV6_PREFIX | je IPv6-subnet |
IPV6_LAN | een /64 uit je IPv6-subnet voor je netwerk |
TUNNEL_IP6_1 | het IPv6-tunneladres van je router naar Antwerpen |
TUNNEL_IP6_2 | het IPv6-tunneladres van je router naar Zaventem |
LAN_HOST | het interne adres van je server of NAS, bijvoorbeeld 192.168.1.10 |
Met deze handleiding zet je je vaste IP op een router met OpenWrt 23.05 of 24.10 (firewall4/nftables). De router bouwt twee tunnels op, één naar elke PoP, en schakelt automatisch over als er één wegvalt. Enkel het verkeer van je vaste IP loopt door de tunnels; al het andere verkeer blijft via je gewone WAN gaan.
Je vaste IP komt binnen op de router en wordt doorgestuurd naar een toestel in je netwerk (LAN_HOST). Alle commando's voer je uit via SSH op de router.
1. De pakketten
opkg update
opkg install wireguard-tools luci-proto-wireguard
2. De twee 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' zorgt ervoor dat OpenWrt geen standaardroute door de tunnels legt: je gewone verkeer blijft waar het was. Je vaste IP staat op fixedip1; een WireGuard-interface blijft actief, ook als PoP 1 even onbereikbaar is.
3. Routering
Antwoorden gaan terug via de tunnel waarlangs de verbinding binnenkwam (tabellen 101 en 102). Nieuw verkeer vanaf je vaste IP gebruikt tabel 100, die in stap 6 naar de werkende tunnel wijst.
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. Firewallzone en doorsturen
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
Laat ook ping vanuit de tunnels toe. Onze tunnelservers pingen elke tunnel om te weten welke werkt; zonder antwoord sturen we je vaste IP niet naar die 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. De markering voor antwoorden van je server
Als je server antwoordt, heeft dat pakket nog het interne adres LAN_HOST als afzender. Om het via de juiste tunnel terug te sturen, markeer je de verbinding wanneer ze binnenkomt. Maak /etc/nftables.d/10-fixedip.nft aan:
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
Gebruik je al markeringen (bijvoorbeeld voor mwan3 of SQM)? Kies dan waarden die nog vrij zijn.
6. Automatische failover
Een klein script kiest elke minuut de tunnel voor nieuw verkeer: PoP 1 als die antwoordt, anders PoP 2. Maak /usr/sbin/fixedip-failover aan:
#!/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
Inkomende verbindingen hebben het script niet nodig: die komen binnen via de tunnel die werkt, en de antwoorden volgen dezelfde weg.
7. Ook uitgaand met je vaste IP (optioneel)
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
Voeg TUNNEL_IP6_1/128 en TUNNEL_IP6_2/128 toe aan de adressen van fixedip1 en fixedip2, zet een /64 op je LAN en maak dezelfde regels voor 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
Voeg in fixedip-failover in beide takken ook ip -6 route replace default dev fixedip1 table 100 (of fixedip2) toe. Open inkomend IPv6-verkeer per toestel met een traffic rule van zone fixedip naar lan.
Meerdere adressen
Heb je een subnet (FIXED_SUBNET)? Dan kan je het op twee manieren gebruiken:
- Via je router (alle adressen bruikbaar): voeg elk adres als
/32toe aanfixedip1en maak per adres een port forward zoals in stap 4. - Rechtstreeks op je netwerk: zet het subnet op een eigen interface of VLAN met het eerste bruikbare adres, en vervang in stap 3
FIXED_IP/32doorFIXED_SUBNET. De toestellen gebruiken hun publieke adres rechtstreeks, zonder NAT; open met traffic rules van zonefixedipwat binnen mag.
Controleren
wg show
ip rule
ip route show table 100
Bij beide tunnels moet latest handshake een recent tijdstip tonen en tabel 100 wijst naar fixedip1. Test daarna van buitenaf, bijvoorbeeld met je gsm op mobiele data: https://FIXED_IP moet op je server uitkomen.
Failover testen: blokkeer tijdelijk het uitgaande UDP-verkeer naar ENDPOINT_1 (bijvoorbeeld met een traffic rule) en wacht een minuut: tabel 100 wijst naar fixedip2 en je vaste IP blijft bereikbaar. Haal de blokkering daarna weg. Gebruik hiervoor geen ifdown fixedip1: je vaste IP staat op die interface.
Terugdraaien
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
Verwijder daarna in LuCI (Network › Firewall) de zone fixedip en de bijhorende port forwards, en herstart netwerk, firewall en cron.
Problemen?
- Geen handshake: controleer
ENDPOINT_1/ENDPOINT_2,PORTen de sleutels. - Handshake ok, maar verbindingen blijven hangen: zet
mtuop1360voor beide tunnels. - Van buitenaf komt er niets terug: controleer met
nft list chain inet fw4 fixedip_markof de markering telt, en metip ruleof de regels voor0x101/0x102er staan.
Kom je er niet uit? Mail ons op info@fixedip.be
Klaar voor je vaste IP?
Start vandaag nog en wees overal bereikbaar.