Merci pour ce guide !
J'utilise dhclient avec le patch de zoc ci-joint.
En ce qui me concerne cela n'a pas fonctionné directement : SOLICIT sans réponse.
Après avoir répliqué le DUID que j'utilisais avec Dibbler : SOLICIT > ADVERTISE > REQUEST > REPLY, avec réponse 'NoPrefixAvail'...
Cela a fonctionné seulement après avoir éteint l'ONT quelques minutes, un clic-clac ne suffit pas pour provoquer le Reset chez Orange.
Les modifications pour ma part :
Voici un unit systemd qui semble fonctionner, j'ai repris les "After" de l'unit SSH de l'ERL :
[Unit]
Description=dhclient for sending DUID IPv6
After=network.target auditd.service vyatta-router.service netplug.service
[Service]
Type=forking
ExecStart=/sbin/dhclient -6 -P -nw -cf /etc/dhcp3/dhclient6_eth1_832.conf -pf /var/run/dhclient6_eth1_832.pid -lf /var/run/dhclient6_eth1_832.leases eth1.832
[Install]
WantedBy=multi-user.target
Si on utilise un watchdog6 pour surveiller la connexion (cf zoc) il faut l'adapter :
/config/scripts/orange-watchdog6.sh
#!/bin/vbash
sleep 30
run=/opt/vyatta/bin/vyatta-op-cmd-wrapper
IP6ADDR=$(ip addr show scope global | awk '$1 == "inet6" {gsub(/\/.*$/, "", $2); print $2}')
if [ -z $IP6ADDR ]
then
logger -t grewatch -p err "No IPv6 address"
sudo systemctl restart dhclient6 >/dev/null 2>&1
exit ;
fi
# Reading the default gateway
read _ _ GATEWAY6 _ < <(/sbin/ip -6 route list match default)
if [ -z "$GATEWAY6" ]; then
logger -t watchdog6 -p err "No IPv6 route"
sudo systemctl restart dhclient6 >/dev/null 2>&1
exit
fi
# If we are here, then nothing is pinging. Try
# the default gateway
/bin/ping6 -c4 $GATEWAY6%eth1.832 > /dev/null 2>&1
if [ $? -ne 0 ]; then
logger -t watchdog6 -p err "IPv6 is broken"
sudo systemctl restart dhclient6 >/dev/null 2>&1
exit
fi
Ensuite, et c'est plus grave, le fonctionnement IPv6 du dhclient parallèle à celui de l'IPv4 écrase les DNS reçus de la part d'orange.
Je n'ai pas trouvé mieux qu'un "enter-hook" qui reprend la fonction "make_resolv_conf" de vyatta / UBNT en excluant le cas IPv6.
Il faut donc créer :
/etc/dhcp3/dhclient-enter-hooks.d/noresolvupdate-ipv6
#!/bin/bash
# modified make_resolv_conf () for Vyatta system below
make_resolv_conf() {
case "$reason" in
BOUND6|REBIND6)
#echo "Debug : IPv6, no DNS update" >> /tmp/dhclient6.log
return
;;
esac
local new_resolv_conf="/etc/resolv.conf.dhclient-new-$interface"
local old_resolv_conf="/etc/resolv.conf.dhclient-old-$interface"
mv -f $new_resolv_conf $old_resolv_conf
if [ -n "$new_domain_name" -o -n "$new_domain_name_servers" ]; then
if [ -n "$new_domain_name" ]; then
echo search $new_domain_name >>$new_resolv_conf
fi
if [ -n "$new_domain_name_servers" ]; then
for nameserver in $new_domain_name_servers; do
echo nameserver $nameserver >>$new_resolv_conf
done
fi
elif [ "x${new_dhcp6_name_servers}" != x ] ; then
if [ "x${new_dhcp6_domain_search}" != x ] ; then
echo search ${new_dhcp6_domain_search} >> $new_resolv_conf
fi
for nameserver in ${new_dhcp6_name_servers} ; do
echo nameserver ${nameserver} >> $new_resolv_conf
done
else
echo " " > $new_resolv_conf
fi
/opt/vyatta/sbin/vyatta_update_resolv.pl --dhclient-script 1
if ! diff -q $old_resolv_conf $new_resolv_conf >&/dev/null; then
if [ -d /opt/vyatta/config/active/service/dns/forwarding ]; then
/opt/vyatta/sbin/vyatta-dns-forwarding.pl --update-dnsforwarding --outside-cli >&/dev/null
fi
fi
rm -f $old_resolv_conf
}
Le souci c'est qu'au gré des évolution du FW cette fonction peut changer. Il faudra l'adapter.
Etrange que je sois le seul à avoir remarqué cela, probablement que beaucoup ici utilisent Google / OpenDNS /... en fixe dans la config "system".