Bon, je me suis certainement pris un peu trop la tête, mais au moins ça fonctionne. J'ai eu un changement de mon IPv6 qui ressemblait beaucoup plus à /56 que mon IP précédente qui était sous la forme d'un /48 mais avec un prefix en /56
Du coup, le script radvd.sh ne fonctionnait plus vu que mes modifications n'étaient plus bonne.
Bref, j'ai un peu ré-automatisé le tout pour que quelque soit la longueur de l'IPv6 (tant que la longueur du préfixe envoyé par Orange reste un multiple de 4) tout se fasse automatiquement (sauf les réglages du FW..)
Par contre, ça nécessite l'installation du package "bc" pour les calculs qui est soit récupérable en apt-get install bc, sinon directement depuis cette url
http://ftp.fr.debian.org/debian/pool/main/b/bc/bc_1.06.95-2_mips.debVous pouvez donc modifier les variables SUBNET1 qui modifiera le bloc pour LAN0 et SUBNET2 pour LAN2
J'ai fixé les SUBNET1 et SUBNET2 à seulement deux caractères Hexa si vous mettez plus, ça risque de tout casser par contre
J'ai rajouté des logs dans /var/log/script_radvd.log
/etc/dibbler/radvd.sh
#!/bin/bash
LAN0=switch0
LAN2=switch0.832
WAN=eth1.832
SUBNET1=10
SUBNET2=20
echo "Prefix1 : ${PREFIX1}" > /var/log/script_radvd.log
echo "Prefix2 : ${PREFIX2}" >> /var/log/script_radvd.log
echo "Prefix1Len : ${PREFIX1LEN}" >> /var/log/script_radvd.log
echo "Taille : ${#PREFIX1}" >> /var/log/script_radvd.log
echo "Taille : ${taille}" >> /var/log/script_radvd.log
echo "Prefix edited : ${PREFIX1:0:taille}" >> /var/log/script_radvd.log
echo "Addr1 : ${ADDR1}" >> /var/log/script_radvd.log
echo "Addr2 : ${ADDR2}" >> /var/log/script_radvd.log
echo "Option1 : ${OPTION1}" >> /var/log/script_radvd.log
echo "Option2 : ${OPTION2}" >> /var/log/script_radvd.log
SUBPREFIX=$(echo $PREFIX1 | tr ":" "\n")
BITCNT=0
#Searching closest block to round our Prefix
for p in {0..128..16}
do
if [ $PREFIX1LEN -lt $p ]; then
RNDPFXLEN=$p
#echo "Rounded Prefix Len : $RNDPFXLEN"
break
fi
done
echo "Closest Block : $RNDPFXLEN" >> /var/log/script_radvd.log
#Converting IPv6 in Binary with bc
for j in $SUBPREFIX
do
BIN=$(echo "obase=2; ibase=16; ${j^^}" | bc)
BIN=$(printf "%016d" $BIN)
BITCNT=$(echo $BITCNT+${#BIN} | bc)
PREFIXBIT=$PREFIXBIT$BIN
# echo "Value : $j Nb Bits : $BITCNT Prefix Bits : $PREFIXBIT"
done
echo "Prefix With Real Mask : ${PREFIXBIT:0:$PREFIX1LEN}" >> /var/log/script_radvd.log
PREFIXSUB1=${PREFIXBIT:0:$PREFIX1LEN}$(printf "%08d" $(bc <<< "ibase=16; obase=2; $SUBNET1"))
PREFIXSUB2=${PREFIXBIT:0:$PREFIX1LEN}$(printf "%08d" $(bc <<< "ibase=16; obase=2; $SUBNET2"))
#Converting back our IPv6 to Hex
REALPREFIX1=$(echo "obase=16; ibase=2; $PREFIXSUB1" | bc)
REALPREFIX2=$(echo "obase=16; ibase=2; $PREFIXSUB2" | bc)
RPF1LEN=${#PREFIXSUB1}
RPF2LEN=${#PREFIXSUB2}
echo "Real Prefix 1 : $REALPREFIX1 / $RPF1LEN" >> /var/log/script_radvd.log
echo "Real Prefix 2 : $REALPREFIX2 / $RPF2LEN" >> /var/log/script_radvd.log
COUNTER=0
#Modify IPv6 to include the : for each blocks
for (( i=0; i<=${#REALPREFIX1} ; i++ ))
do
if ! (( i % 4 )) && [ $i -gt 0 ] && [ $i != ${#REALPREFIX1} ];
then
RPF1=$RPF1:
RPF2=$RPF2:
fi
RPF1=$RPF1${REALPREFIX1:$i:1}
RPF2=$RPF2${REALPREFIX2:$i:1}
done
#Here is our final prefix
RPF1=${RPF1,,}
RPF2=${RPF2,,}
echo "Working IPv6 Prefix 1 : $RPF1 / $RPF1LEN" >> /var/log/script_radvd.log
echo "Working IPv6 Prefix 2 : $RPF2 / $RPF2LEN" >> /var/log/script_radvd.log
cat > /etc/radvd.conf << EOF
interface ${LAN0}
{
AdvSendAdvert on;
AdvManagedFlag off;
AdvOtherConfigFlag on;
prefix $RPF1::/$RPF1LEN
{
AdvOnLink on;
AdvAutonomous on;
AdvPreferredLifetime 86400;
AdvValidLifetime 86400;
};
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844
{
AdvRDNSSLifetime 1200;
};
};
interface ${LAN2}
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
prefix $RPF2::/$RPF2LEN
{
AdvOnLink on;
AdvAutonomous off;
AdvPreferredLifetime 86400;
AdvValidLifetime 86400;
};
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844
{
AdvRDNSSLifetime 1200;
};
};
EOF
cat > /etc/dibbler/server.conf << EOF
log-level 7
log-mode full
iface "${LAN0}" {
T1 43200
T2 69120
option dns-server 2001:4860:4860::8888
prefered-lifetime 86400
valid-lifetime 86400
# option 11 duid 00:00:00:00:00:00:00:00:00:00:00:64:68:63:70:6c:69:76:65:62:6f:78:66:72:32:35:30
pd-class {
pd-pool $RPF1::/$RPF1LEN
pd-length 60
}
}
iface "${LAN2}" {
T1 43200
T2 69120
option dns-server 2001:4860:4860::8888
prefered-lifetime 86400
valid-lifetime 86400
option 11 duid 00:00:00:00:00:00:00:00:00:00:00:64:68:63:70:6c:69:76:65:62:6f:78:66:72:32:35:30
option dns-server $RPF2:c0::1
pd-class {
pd-pool $RPF2:::/RPF2LEN
pd-length 60
}
}
EOF
mv /etc/ip6deconf-new.sh /etc/ip6deconf-old.sh
cat > /etc/ip6conf.sh << EOF
/etc/ip6deconf-old.sh
ip -6 route add fe80::ba0:bab dev ${WAN}
ip -6 route add default via fe80::ba0:bab dev ${WAN}
ip -6 route add $RPF1::/$RPF1LEN dev ${LAN0}
ip -6 addr add $RPF1::1/$RPF1LEN dev ${LAN0}
ip -6 route add $RPF2::/$RPF2LEN dev ${LAN2}
ip -6 route add fe80::xxxx:xxxx:xxxx:xxxx dev ${LAN2} #4 derniers bloc de l'IPv6 de la LB
ip -6 route add $RPF2:c0::/60 via fe80::42c7:29ff:fe40:19f8 dev ${LAN2}
ip -6 addr add $RPF2::1/$RPF2LEN dev ${LAN2}
service radvd restart >> /var/log/radvd.log
EOF
cat > /etc/ip6deconf-new.sh << EOF
ip -6 route flush $RPF1::
ip -6 route flush default
ip -6 route del fe80::ba0:bab dev ${WAN}
ip -6 route del default via fe80::ba0:bab dev ${WAN}
ip -6 route del $RPF1::/$RPF1LEN dev ${LAN0}
ip -6 addr del $RPF1::1/$RPF1LEN dev ${LAN0}
ip -6 route del $RPF2::/$RPF2LEN dev ${LAN2}
ip -6 route del fe80::xxxx:xxxx:xxxx:xxxx dev ${LAN2} #4 derniers bloc de l'IPv6 de la LB
ip -6 route del $RPF2:c0::/60 via fe80::42c7:29ff:fe40:19f8 dev ${LAN2}
ip -6 addr del $RPF2::1/$RPF2LEN dev ${LAN2}
EOF
chmod +x /etc/ip6conf.sh
chmod +x /etc/ip6deconf-new.sh
/etc/ip6conf.sh
dibbler-server stop >> /var/log/radvd.log
dibbler-server start >> /var/log/radvd.log