Orange zapewnia natywny dostęp IPv6 jeżeli w ramach loginu PPPoE ...@neostrada.pl użyjemy sufiksu /ipv6 czyli ...@neostrada.pl/ipv6.
W umowie wskazany jest właśnie login z tym sufiksem, wydaje się że tak jest w większości umów.
Pomimo tego modem „FunBox 3.0” regularnie usuwa ten surfix z używanego loginu tym samym wyłączając IPv6.
Rozwiązaniem problemu może być użycie cron'a do sprawdzania dostępności IPv6 i jej przywracania z użyciem poniższego skryptu (check_ipv6.sh):
#!/bin/bash
exec >> /dev/shm/check_ipv6.log 2>&1
LOCK_FILE='/dev/shm/check_ipv6.lock'
#
# settings
#
ROUTER=192.168.6.1 # router IPv4
PASSWORD='' # router password
LOGIN='' # PPPoE login (...@neostrada.pl)
IP_CHECK_1="2001:4860:4860::8888" # external IPv6 to check
IP_CHECK_2="2620:0:ccc::2" # other external IPv6 to check
NAME_CHECK_1="ip1" # name for $IP_CHECK_2 (only for log)
NAME_CHECK_2="ip2" # name for $IP_CHECK_2 (only for log)
[ ! -e /etc/network/check_ipv6.cfg ] && exit
. /etc/network/check_ipv6.cfg
#
# router configure function
#
fix_ipv6() {
# logowanie
cookie=`mktemp /dev/shm/curl.XXXXXXXXXX`
res=`curl "http://$ROUTER/authenticate?username=admin&password=$PASSWORD" --cookie-jar "$cookie" --data '' 2>/dev/null`
context=`python3 -c 'import json; d = json.loads("""'"$res"'"""); print(d["data"]["contextID"])'`
# aktywacja IPv6
curl -s "http://$ROUTER/sysbus/NMC/IPv6:set" -H "X-Context: $context" --cookie "$cookie" --data '{"parameters":{"IPv4UserRequested":false}}'
curl -s "http://$ROUTER/sysbus/NMC:setWanMode" -H "X-Context: $context" --cookie "$cookie" --data '{"parameters":{"WanMode":"GPON_PPP","Username":"bez_ochrony-'"$LOGIN"'/ipv6"}}'
# sprzatanie
rm "$cookie"
}
#
# check and run ...
#
# check lock
lock=`cat $LOCK_FILE 2>/dev/null`
let lock--
if [ $lock -ge 0 ]; then
echo $lock > $LOCK_FILE
exit
fi
# check connections and try fix it
ping6 -c 1 $IP_CHECK_1 >& /dev/null && exit
date +"%F %H:%M"
echo " - $NAME_CHECK_1 is unavailable"
echo 1 > $LOCK_FILE # temporary lock for next ping
ping6 -c 1 $IP_CHECK_2 >& /dev/null && exit
echo " - $NAME_CHECK_2 is unavailable"
echo 3 > $LOCK_FILE # long temporary lock for restart networking
systemctl restart networking
sleep 30 # wait for recheck after restart networking
ping6 -c 1 $IP_CHECK_1 >& /dev/null && exit
ping6 -c 1 $IP_CHECK_2 >& /dev/null && exit
echo " - hosts are still unavailable after restart networking"
echo 10 > $LOCK_FILE # final lock for fix ipv6 on funbox
fix_ipv6
echo ""
Skrypt wymaga python3 i curl.
Konieczne jest ustawienie w skrypcie lub pliku konfiguracyjnym (/etc/network/check_ipv6.cfg) adresu IPv4 swojego routera (zmienna ROUTER), hasła do routera (zmienna PASSWORD) oraz loginu neostrady bez sufiksu (zmienna LOGIN).
Domyślnie skrypt do sprawdzania dostępności IPv6 używa serwerów DNS od Google i OpenDNS adresy te można zmienić poprzez odpowiednie zmienne.
Całość procedury przywrócenia IPv6 zajmuje około minuty, co przy uruchamianiu skryptu przez crond co 1 minutę daje niedostępność IPv6 przez niecałe 2 minuty.