← Alle Anleitungen

Anleitung OpenWrt

Was Sie von uns erhalten

Ersetzen Sie diese Platzhalter durch die Daten, die Sie mit Ihrer Bestellung bei FixedIP.be erhalten haben.

PRIVATE_KEYder private Schlüssel Ihrer Tunnel (geheim halten)
PORTder UDP-Port unserer Tunnelserver
ENDPOINT_1die Adresse unseres Tunnelservers in Antwerpen
SERVER_PUBLIC_KEY_1der öffentliche Schlüssel unseres Tunnelservers in Antwerpen
TUNNEL_IP_1die Tunneladresse Ihres Routers zu Antwerpen
SERVER_TUNNEL_IP_1die Tunneladresse auf unserer Seite in Antwerpen (Gateway)
ENDPOINT_2die Adresse unseres Tunnelservers in Zaventem
SERVER_PUBLIC_KEY_2der öffentliche Schlüssel unseres Tunnelservers in Zaventem
TUNNEL_IP_2die Tunneladresse Ihres Routers zu Zaventem
FIXED_IPIhre feste IPv4-Adresse
FIXED_SUBNETIhr IPv4-Subnetz, zum Beispiel /29
IPV6_PREFIXIhr IPv6-Subnetz
IPV6_LANein /64 aus Ihrem IPv6-Subnetz für Ihr Netzwerk
TUNNEL_IP6_1die IPv6-Tunneladresse Ihres Routers zu Antwerpen
TUNNEL_IP6_2die IPv6-Tunneladresse Ihres Routers zu Zaventem
LAN_HOSTdie interne Adresse Ihres Servers oder NAS, zum Beispiel 192.168.1.10

Mit dieser Anleitung richten Sie Ihre feste IP auf einem Router mit OpenWrt 23.05 oder 24.10 ein (firewall4/nftables). Der Router baut zwei Tunnel auf, einen zu jedem PoP, und schaltet automatisch um, wenn einer ausfällt. Nur der Verkehr Ihrer festen IP läuft durch die Tunnel; der gesamte übrige Verkehr geht weiterhin über Ihr normales WAN.

Ihre feste IP kommt auf dem Router an und wird an ein Gerät in Ihrem Netzwerk (LAN_HOST) weitergeleitet. Alle Befehle führen Sie per SSH auf dem Router aus.

1. Die Pakete

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

2. Die zwei Tunnel

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' sorgt dafür, dass OpenWrt keine Standardroute durch die Tunnel legt: Ihr normaler Verkehr bleibt, wo er war. Ihre feste IP liegt auf fixedip1; ein WireGuard-Interface bleibt aktiv, auch wenn PoP 1 kurz nicht erreichbar ist.

3. Routing

Antworten gehen über den Tunnel zurück, über den die Verbindung hereinkam (Tabellen 101 und 102). Neuer Verkehr von Ihrer festen IP verwendet Tabelle 100, die in Schritt 6 auf den funktionierenden Tunnel zeigt.

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. Firewall-Zone und Weiterleitung

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

Erlauben Sie außerdem Ping aus den Tunneln. Unsere Tunnelserver pingen jeden Tunnel, um zu wissen, welcher funktioniert; ohne Antwort leiten wir Ihre feste IP nicht zu diesem 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. Die Markierung für Antworten Ihres Servers

Wenn Ihr Server antwortet, hat dieses Paket noch die interne Adresse LAN_HOST als Absender. Um es über den richtigen Tunnel zurückzuschicken, markieren Sie die Verbindung, wenn sie hereinkommt. Legen Sie /etc/nftables.d/10-fixedip.nft an:

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

Verwenden Sie bereits Markierungen (zum Beispiel für mwan3 oder SQM)? Dann wählen Sie Werte, die noch frei sind.

6. Automatisches Failover

Ein kleines Skript wählt jede Minute den Tunnel für neuen Verkehr: PoP 1, wenn er antwortet, sonst PoP 2. Legen Sie /usr/sbin/fixedip-failover an:

#!/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

Eingehende Verbindungen brauchen das Skript nicht: Sie kommen über den Tunnel herein, der funktioniert, und die Antworten nehmen denselben Weg.

7. Auch ausgehend mit Ihrer festen IP (optional)

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

Fügen Sie TUNNEL_IP6_1/128 und TUNNEL_IP6_2/128 zu den Adressen von fixedip1 und fixedip2 hinzu, setzen Sie ein /64 auf Ihr LAN und legen Sie dieselben Regeln für IPv6 an:

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

Fügen Sie in fixedip-failover in beiden Zweigen auch ip -6 route replace default dev fixedip1 table 100 (bzw. fixedip2) hinzu. Öffnen Sie eingehenden IPv6-Verkehr pro Gerät mit einer traffic rule von Zone fixedip nach lan.

Mehrere Adressen

Haben Sie ein Subnetz (FIXED_SUBNET)? Dann können Sie es auf zwei Arten nutzen:

  • Über Ihren Router (alle Adressen nutzbar): Fügen Sie jede Adresse als /32 zu fixedip1 hinzu und legen Sie pro Adresse einen Port Forward an wie in Schritt 4.
  • Direkt in Ihrem Netzwerk: Legen Sie das Subnetz auf ein eigenes Interface oder VLAN mit der ersten nutzbaren Adresse und ersetzen Sie in Schritt 3 FIXED_IP/32 durch FIXED_SUBNET. Die Geräte verwenden ihre öffentliche Adresse direkt, ohne NAT; öffnen Sie mit traffic rules von Zone fixedip, was hereinkommen darf.

Überprüfen

wg show
ip rule
ip route show table 100

Bei beiden Tunneln muss latest handshake einen aktuellen Zeitpunkt zeigen, und Tabelle 100 zeigt auf fixedip1. Testen Sie danach von außen, zum Beispiel mit Ihrem Smartphone über mobile Daten: https://FIXED_IP muss bei Ihrem Server ankommen.

Failover testen: Blockieren Sie vorübergehend den ausgehenden UDP-Verkehr zu ENDPOINT_1 (zum Beispiel mit einer Traffic Rule) und warten Sie eine Minute: Tabelle 100 zeigt auf fixedip2 und Ihre feste IP bleibt erreichbar. Heben Sie die Blockierung danach wieder auf. Verwenden Sie dafür nicht ifdown fixedip1: Ihre feste IP liegt auf diesem Interface.

Rückgängig machen

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

Entfernen Sie danach in LuCI (Network › Firewall) die Zone fixedip und die zugehörigen Port Forwards und starten Sie Netzwerk, Firewall und Cron neu.

Probleme?

  • Kein Handshake: Prüfen Sie ENDPOINT_1/ENDPOINT_2, PORT und die Schlüssel.
  • Handshake ok, aber Verbindungen hängen: Setzen Sie mtu für beide Tunnel auf 1360.
  • Von außen kommt nichts zurück: Prüfen Sie mit nft list chain inet fw4 fixedip_mark, ob die Markierung zählt, und mit ip rule, ob die Regeln für 0x101/0x102 vorhanden sind.

Kommen Sie nicht weiter? Schreiben Sie uns an info@fixedip.be

Bereit für Ihre feste IP?

Starten Sie noch heute und seien Sie überall erreichbar.