Vorschlag: Script zum automatischen Reconnect WAN bei geändertem IPv6-Präfix
-
Hallo,
in meinem Blog hat mich eine Leserin per Kommentar auf das Problem mit den geänderten IPv6-Präfixen beim Reconnect vorgeschalteter Router aufmerksam gemacht.
Hänge ich eine pfSense an einen Router und schieße ich das IPv6 vom Router per RA / Interfacetracking zu den Clients durch funktioniert das genau so lange, wie das IPv6-Präfix bestehen bleibt. Starte ich z.B. den Router neu, klopft der Rest vom Schützenfest weiterhin brav auf dem inzwischen historischen Präfix herum.
Meine Idee wäre ein cron-Job, der das WAN-Interface einmal kurz aus- und einschaltet, sobald IPv6 nicht mehr performt. Die erste Idee war, das Präfix per uPnP / TR-64 aus meiner FRITZ!Box zu zupfen und schlichtweg mit dem bekannten Wert zu vergleichen. Das habe ich verworfen: Zum Einen möchte ich uPnP und TR-64 deaktiviert lassen, zum Anderen wäre das "nur" eine Lösung für meine FRITZ!Box.
Die nächste Idee wäre, Hosts anzupingen. Hier könnte man exemplarisch die DNS-Server von seinem Anbieter nehmen - in meinem Beispiel die von Vodafone.
Folgende Gedanken haben mich begleitet:
- Wenn der Router - warum auch immer - nicht erreichbar ist, möchte ich auf WAN ein fünfminütiges "Schnittstellengewitter" vermeiden
- Die DNS-Server meines Anbieters beantworten, wie der Name schon sagt, DNS-Anfragen. Ich erachte das als legitim, dass die Pakete nicht mit 100%iger Zuverlässigkeit beantwortet werden
- Ich möchte - extern - möglichst sparsam "pingen" und unnötige Anfragen weitestgehend vermeiden
Der Ablauf wäre somit folgender:
- Ich prüfe den Router. Ist er nicht erreichbar, passiert nichts
- Ich prüfe den IPv4 DNS-Server. Ist er erreichbar, schlussfolgere ich daraus, dass die Internetverbindung grundsätzlich besteht. Ansonsten passiert nichts.
- Wenn IPv4 extern funktioniert, mache ich mit IPv6 extern weiter. Wenn der nicht reagiert, knipse ich die Schnittstelle für 5 Sekunden aus
Lange Rede, kurzer Sinn - hier mein erster Vorschlag:
#!/bin/sh router="192.168.178.1" ext_v4=88.134.228.225 ext_v6=2a02:8100:c0:239::4:1101 pingcount=3 waitbtwsec=3 timeoutms=150 wan_interface=$re0 ping -c$pingcount $router > /dev/null 2>&1 if [ $? = 0 ] then ping -c$pingcount -i$waitbtwsec -W$timeoutms $ext_v4 > /dev/null 2>&1 if [ $? = 0 ] then ping6 -c$pingcount -i$waitbtwsec -x$timeoutms $ext_v6 > /dev/null 2>&1 if [ $? != 0 ] then ifconfig $wan_interface down sleep 5 ifconfig $wan_interface up fi fi fi
Bin gespannt auf euer Feedback; erst einmal in Bezug auf die grundlegende Strategie.
Gruß,
JörgÜbrigens: Das vorgenannte Script enthält einen Typo (den ich natürlich kenne). Letzendlich sollt Ihr den Code ja sorgfältig lesen :-)