La Fibre
Datacenter et équipements réseaux => Routeurs => Remplacer la LiveBox par un routeur => Discussion démarrée par: fttmeh le 24 mars 2023 à 15:26:57
-
Bonjour à tous,
Je vous partage les scripts que j'utilisais quand j'avais un EdgeRouter 4. Normalement ils doivent continuer à bien fonctionner.
L'ONT était connecté sur eth1, utilisant l'interface eth1.832.
Script /config/scripts/generate_dhcpv6_configfile.sh
Ce script va lire la configuration dans /config/config.boot et va reutiliser les mêmes informations d'authentification pour IPv6 (adresse MAC et chaine d'authentification).
#!/bin/bash
target_file="/var/run/dhclient6_eth1_832.conf"
interface="eth1"
vif="832"
auth_string=$(/bin/cli-shell-api showCfg interfaces ethernet $interface vif $vif dhcp-options client-option | grep "send rfc3118-auth" | awk '{ print $4 }' | awk -F ";" '{print $1}')
mac_livebox=$(/bin/cli-shell-api showCfg interfaces ethernet $interface vif $vif dhcp-options client-option | grep "dhcp-client-identifier" | awk '{ print $4 }' | awk -F ";" '{print $1}')
read -r -d '' conffile <<EOF
# $target_file\n
option dhcp6.auth code 11 = string;\n
option dhcp6.vendorclass code 16 = string;\n
option dhcp6.userclass code 15 = string;\n
option dhcp6.vendor-specific-info code 17 = string;\n
\n
#External interface (VLAN must be 832 for Orange)\n
interface "$interface.$vif" {\n
\t#Orange France specific options\n
\tsend dhcp6.vendor-specific-info 00:16:00:00:05:58:00:06:00:0e:49:50:56:36:5f:52:45:51:55:45:53:54:45:44;\n
\tsend dhcp6.vendorclass 00:00:04:0e:00:05:73:61:67:65:6d;\n
\tsend dhcp6.userclass 00:2b:46:53:56:44:53:4c:5f:6c:69:76:65:62:6f:78:2e:49:6e:74:65:72:6e:65:74:2e:73:6f:66:74:61:74:68:6f:6d:65:2e:6c:69:76:65:62:6f:78:34;\n
\tsend dhcp6.vendor-opts 00:00:05:58:00:06:00:0e:49:50:56:36:5f:52:45:51:55:45:53:54:45:44;\n
\n
\t#Authentication for Orange France DHCP server (same value as for DHCPv4)\n
\tsend dhcp6.auth $auth_string;\n
\n
\tsend dhcp6.client-id 00:03:00:$mac_livebox;\n
\n
\trequest dhcp6.name-servers, dhcp6.vendorclass, dhcp6.userclass, dhcp6.auth;\n
}\n
EOF
echo -e $conffile > $target_file
Script /config/scripts/install_extra_config_files.sh
Ce script va créer les fichiers de configuration nécessaires pour avoir IPv6 avec le dhclient par défaut. Il faut l'executer après chaque reinstallation de l'OS.
J'avais quelques VLAN avec des clients qui utilisent IPv6 (eth0.120, eth0.200, eth0.180, eth2.150). Il faut modifier la ligne "IPV6_INTERFACES=(eth0.120 eth0.200 eth0.180 eth2.150)" en conséquence.
#!/bin/bash
# DHCPv6
target_dhcphook="/etc/dhcp3/dhclient-exit-hooks.d/dhclient-ipv6-exit-hook"
target_servicefile="/etc/systemd/system/dhclient6.service"
cat >$target_dhcphook << 'EOF'
# /etc/dhcp3/dhclient-exit-hooks.d/dhclient-ipv6-exit-hook
# Interfaces that should obtain a /64 prefix
IPV6_INTERFACES=(eth0.120 eth0.200 eth0.180 eth2.150)
INT_ADDRESS="::cafe"
###
ipv6_prefix_setup() {
# $1 is the ethernet interface
# $2 is the suffix to use
ethiface=$1
suffix=$2
current_ip=$(ip -6 addr show dev $ethiface scope global | awk '/inet6/ {print $2}' | grep -v '^fd' )
current_prefix=$(echo $current_ip | sed -e 's@::.*/64@::/64@')
# To generate new IP, need to take new prefix, add 8 bits
new_ip=$( echo $new_ip6_prefix | sed -e 's/00::\/.*//g' )
new_ip="$new_ip$suffix"
if [ "$new_ip" != "$current_ip" ]
then
if [ "$current_ip" != "" ]
then
/sbin/ip -6 addr delete "$current_ip" dev $ethiface
fi
/sbin/ip -6 addr add "$new_ip" dev $ethiface
fi
}
case "$reason" in
BOUND6|REBIND6)
# We will get called twice here - once for the temp address
# and once for the prefix. We only care about the prefix.
if [ ! -z "$new_ip6_prefix" ] ; then
offset=$(( $RANDOM % (255 - ${#IPV6_INTERFACES[@]}) ))
for interface in "${IPV6_INTERFACES[@]}"
do
index=1
for i in "${!IPV6_INTERFACES[@]}"
do
if [[ "${IPV6_INTERFACES[i]}" = "${interface}" ]]
then
index="${i}"
break
fi
done
index=$(( $index + $offset ))
suffix=$(printf "%0*x" 2 $index )
suffix="$suffix$INT_ADDRESS/64"
ipv6_prefix_setup ${interface} $suffix
done
/bin/systemctl restart radvd.service >/dev/null 2>&1
fi
;;
esac
EOF
cat >$target_servicefile << 'EOF'
#/etc/systemd/system/dhclient6.service
[Unit]
Description=dhclient for sending IPv6 DUID
After=network.target auditd.service vyatta-router.service netplug.service
[Service]
Type=forking
ExecStartPre=/config/scripts/generate_dhcpv6_configfile.sh
ExecStart=/sbin/dhclient -6 -P -nw -cf /var/run/dhclient6_eth1_832.conf -pf /var/run/dhclient6_eth1_832.pid -lf /var/run/dhclient6_eth1_832.leases eth1.832
NonBlocking=yes
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
EOF
# Reload systemd configuration files and start dhclient6
/bin/systemctl daemon-reload
/bin/systemctl enable dhclient6
Enfin, la configuration de eth1.832 (extrait de /config/config.boot) :
ethernet eth1 {
description "WAN (Internet)"
duplex auto
speed auto
vif 832 {
address dhcp
description "VLAN Internet"
dhcp-options {
client-option "send vendor-class-identifier "sagem";"
client-option "send user-class "\053FSVDSL_livebox.Internet.softathome.Livebox4";"
client-option "send dhcp-client-identifier 01:XX:XX:XX:XX:XX:XX;"
client-option "request subnet-mask, routers, domain-name-servers, domain-name, broadcast-address, dhcp-lease-time, dhcp-renewal-time, dhcp-rebinding-time, rfc3118-authentication, domain-search, Vendor-Specific-Information;"
client-option "send rfc3118-authentication 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX;"
default-route update
default-route-distance 210
global-option "option rfc3118-authentication code 90 = string;"
global-option "option Vendor-Specific-Information code 125 = string;"
name-server no-update
}
egress-qos "0:0 1:0 2:0 3:0 4:0 5:0 6:6 7:0"
ipv6 {
address {
autoconf
}
dup-addr-detect-transmits 1
}
}
}
-
Salut et merci pour ton tuto ca va m'obliger à me mettre à la page en ipv6
Une question : est ce que cette config fonctionne avec le renforcement protocolaire DCHP ?
Thanks
-
Normalement oui mais je n’ai pas pu tester.
-
Bonjour à tous,
Je tente depuis quelques jours la mise en place de cet IPV6 sur mon EdgeRouter 6P v2.0.9-hotfix.7 avec en amont un switch CISCO SG350-10P en version 2.5.9.16 (celui-ci est configuré afin de marquer les paquets en COS6 pour la data vlan832 et COS5 pour le vlan 840 )
Ma liaison est stable depuis un moment en IPV4, mais l'IPV6 ne fonctionne pour moi en appliquant ce tuto.
PI j'ai bien adapté la conf, je suis sur l'interface eth5.832
J'ai mis dans dhcp-client-identifier l'adresse mac d'origine du routeur et pas celle de la livebox et j'ai mis l'adresse mac de la livebox sur l'interface eth5.832
J'ai en place un FW par zone (j'ai plusieurs vlans) et dans l'immédiat je cherche à le faire fonctionner que sur un vlan le 10 (bond0.10)
J'ai rebooté switch et routeur, dès que je changeais un paramètre, mais rien n'y fait.
Voici ce que donne le systemctl status dhclient6:
* dhclient6.service - dhclient for sending IPv6 DUID
Loaded: loaded (/etc/systemd/system/dhclient6.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-11-21 15:56:05 CET; 1h 16min ago
Main PID: 25121 (dhclient)
CGroup: /system.slice/dhclient6.service
`-25121 /sbin/dhclient -6 -P -nw -cf /var/run/dhclient6_eth5_832.conf -pf /var/run/dhclient6_eth5_832.pid -lf /var/run/dhclient6_eth5_832.leases eth5.832
ip -6 route:
fe80::/64 dev bond0 proto kernel metric 256 pref medium
fe80::/64 dev bond0.7 proto kernel metric 256 pref medium
fe80::/64 dev bond0.40 proto kernel metric 256 pref medium
fe80::/64 dev bond0.30 proto kernel metric 256 pref medium
fe80::/64 dev bond0.10 proto kernel metric 256 pref medium
fe80::/64 dev bond0.20 proto kernel metric 256 pref medium
fe80::/64 dev bond0.50 proto kernel metric 256 pref medium
fe80::/64 dev eth5.832 proto kernel metric 256 pref medium
default via fe80::ba0:bab dev eth5.832 proto zebra metric 1024 pref medium
le tcpdump -n -i eth5.832 ip6 and udp port 546 or udp port 547:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth5.832, link-type EN10MB (Ethernet), capture size 262144 bytes
ne va pas plus loin.
en pièce jointe un extrait de ma conf (conf_IPV6_ER6.txt)
Je précise également qu'avant de tester cet IPV6, j'ai reset le routeur et suis reparti sur une conf "saine"
Je vous remercie pour vos retours
-
Une autre info, voici le retour de la commande suivante
dhclient -6 -P -d -v eth5.832
Internet Systems Consortium DHCP Client 4.1-ESV-R15-P1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on Socket/eth5.832
Sending on Socket/eth5.832
PRC: Soliciting for leases (INIT).
XMT: Forming Solicit, 0 ms elapsed.
XMT: X-- IA_PD XX:XX:XX:XX
XMT: | X-- Request renew in +3600
XMT: | X-- Request rebind in +5400
XMT: Solicit on eth5.832, interval 1090ms.
send_packet6: Operation not permitted
dhc6: send_packet6() sent -1 of 52 bytes
XMT: Forming Solicit, 1090 ms elapsed.
XMT: X-- IA_PD XX:XX:XX:XX
XMT: | X-- Request renew in +3600
XMT: | X-- Request rebind in +5400
XMT: Solicit on eth5.832, interval 2100ms.
send_packet6: Operation not permitted
-
[...]
J'ai mis dans dhcp-client-identifier l'adresse mac d'origine du routeur et pas celle de la livebox et j'ai mis l'adresse mac de la livebox sur l'interface eth5.832
[...]
Dans le sujet "Orange DHCP conformité protocolaire 2023", il me semble que c'est indiqué que tout ce qui est envoyé dans la requête DHCP doit être concordant à présent.
C'est soit l'un soit l'autre (adresse mac de la LB dans dhcp-client-identifier + adresse mac LB sur l'interface wan ou adresse mac du routeur dans dhcp-client-identifier + adresse mac du routeur sur l'interface wan). Honnêtement, la 2ème solution est bien plus simple, je ne vois pas l’intérêt de modifier la mac de l'interface wan en reprenant celle de la LB.
-
Dans le sujet "Orange DHCP conformité protocolaire 2023", il me semble que c'est indiqué que tout ce qui est envoyé dans la requête DHCP doit être concordant à présent.
Bonjour
Je confirme, la concordance est plus que recommandée.
C'est supposé être comme cela dans les normes. Et suivant les implémentations dans les équipements ou version des équipements, un contrôle peut être mise en place en dehors de nos demandes.
Comme coté LB c'est cohérent, nous on ne fera pas obligatoirement attention à cela dans les validations.
=> cohérence si vous voulez un bon fonctionnement dans la durée
LeVieux
-
Merci de vous intéresser à mon cas.
J'ai donc corrigé cette partie et rebootés mes équipements mais cela ne change mon problème
Mais une question de moins à se poser ;)
-
Les points à vérifier:
- les options envoyées par le client DHCPv6: DUID type 3, option 11, 15, 16 et 17
- la COS6 s'applique bien au paquet DHCPv6 (tu peux vérifier cela dans le log de ton switch)
L'étape d'après, c'est le tcpdump/wireshark pour vérifier ce qui est envoyé (et reçu en retour)
-
quel est le contenu de /etc/systemd/system/dhclient6.service ?
et de /var/run/dhclient6_eth5_832.conf
-
Merci hj67, on va commencer par le plus simple
quel est le contenu de /etc/systemd/system/dhclient6.service ?
et de /var/run/dhclient6_eth5_832.conf
Merci kgersen,
Voici les infos des deux fichiers
/etc/systemd/system/dhclient6.service
#/etc/systemd/system/dhclient6.service
[Unit]
Description=dhclient for sending IPv6 DUID
After=network.target auditd.service vyatta-router.service netplug.service
[Service]
Type=forking
ExecStartPre=/config/scripts/generate_dhcpv6_configfile.sh
ExecStart=/sbin/dhclient -6 -P -nw -cf /var/run/dhclient6_eth5_832.conf -pf /var/run/dhclient6_eth5_832.pid -lf /var/run/dhclient6_eth5_832.leases eth5.832
NonBlocking=yes
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
/var/run/dhclient6_eth5_832.conf
# /var/run/dhclient6_eth5_832.conf
option dhcp6.auth code 11 = string;
option dhcp6.vendorclass code 16 = string;
option dhcp6.userclass code 15 = string;
option dhcp6.vendor-specific-info code 17 = string;
#External interface (VLAN must be 832 for Orange)
interface "eth5.832" {
#Orange France specific options
send dhcp6.vendor-specific-info 00:16:00:00:05:58:00:06:00:0e:49:50:56:36:5f:52:45:51:55:45:53:54:45:44;
send dhcp6.vendorclass 00:00:04:0e:00:05:73:61:67:65:6d;
send dhcp6.userclass 00:2b:46:53:56:44:53:4c:5f:6c:69:76:65:62:6f:78:2e:49:6e:74:65:72:6e:65:74:2e:73:6f:66:74:61:74:68:6f:6d:65:2e:6c:69:76:65:62:6f:78:34;
send dhcp6.vendor-opts 00:00:05:58:00:06:00:0e:49:50:56:36:5f:52:45:51:55:45:53:54:45:44;
#Authentication for Orange France DHCP server (same value as for DHCPv4)
send dhcp6.auth 00:00:00:00:00:00:00:00:00:00:00:1a:09:XX:XX:XX:XX:XX:XX:XX:XX:Xd:XX:XX:XX:Xf:Xa:XX:XX:XX:XX:XX:XX:Xc:XX:XX:XX:Xf:Xb:Xc:XX:XX:XX:XX:Xc:Xf:XX:Xb:XX:Xc:XX:XX:XX:XX:XX:cd:Xa:aX:XX:XX:cX:XX:XX:XX:Xe:XX:XX:XX:fX:XX;
send dhcp6.client-id 00:03:00:01:XX:XX:XX:XX:XX:XX; <<== Adresse MAC de l'ER6 eth5.832
request dhcp6.name-servers, dhcp6.vendorclass, dhcp6.userclass, dhcp6.auth;
}
La valeur de "dhcp6.client-id" est bien celle reprise de la conf "rfc3118-auth", j'ai vérifié
-
curieux que les journaux soit vides.
y'a networkctl ?
networkctl status eth5.832
tu peux eventuellement copier le fichier de config (/var/run/dhclient6_eth5_832.conf) quelque part puis arreter le service dhclient6 (systemctl stop dhclient6).
puis lancer manuellement avec affichage détaillé pour voir ce qui se passe:
/sbin/dhclient -6 -P -d -v -cf /chemin/vers/copie_de_dhclient6_eth5_832.conf eth5.832
(ctrl-c pour arreter)
-
networkctl status eth5.832
WARNING: systemd-networkd is not running, output will be incomplete.
* 19: eth5.832
Link File: /lib/systemd/network/99-default.link
Network File: n/a
Type: ether
State: n/a (unmanaged)
Driver: 802.1Q VLAN Support
HW Address: XX:XX:XX:XX:XX:XX
Address: 86.249.YY.YY
fe80::......
Gateway: 86.249.YY.Y
fe80::ba0:bab
Si j'ai bien compris
tu peux eventuellement copier le fichier de config (/var/run/dhclient6_eth5_832.conf) quelque part puis arreter le service dhclient6 (systemctl stop dhclient6).
puis lancer manuellement avec affichage détaillé pour voir ce qui se passe:
J'obtiens la même chose que pour ma commande précédente dans le post:
dhclient -6 -P -d -v eth5.832
-
J'obtiens la même chose que pour ma commande précédente dans le post:
dhclient -6 -P -d -v eth5.832
donc tu as aussi les
send_packet6: Operation not permitted
? du coup t'as un filtrage quelque part. probablement firewall. il faut laisser passer les paquets dhcpv6 :
un client DHCPv6 (ton syno donc) émet en UDP port 546 et le serveur (ou relai) a l'autre bout lui répond en UDP port 547.
il faut aussi laissé passer les ICMPv6 (tous au debut puis tu peux restreindre le ping si tu ne le veux pas) (a la fois en input et en forward)
-
Un grand merci kgersen, c'est fonctionnel
J'ai ajouté ces règles :
set firewall ipv6-name local-to-wan-6 rule 40 action accept
set firewall ipv6-name local-to-wan-6 rule 40 description 'allow DHCPv6 client/server'
set firewall ipv6-name local-to-wan-6 rule 40 destination port 547
set firewall ipv6-name local-to-wan-6 rule 40 protocol udp
set firewall ipv6-name local-to-wan-6 rule 40 source port 546
je n'avais mis que celles-ci :
set firewall ipv6-name wan-to-local-6 rule 40 action accept
set firewall ipv6-name wan-to-local-6 rule 40 description 'allow DHCPv6 client/server'
set firewall ipv6-name wan-to-local-6 rule 40 destination port 546
set firewall ipv6-name wan-to-local-6 rule 40 protocol udp
set firewall ipv6-name wan-to-local-6 rule 40 source port 547
Et effectivement c'est beaucoup mieux, j'obtiens enfin mon IPV6 :) :) :) ;)
Je rajoute mon fichier corrigé avec notamment le firewall par zone, pour ceux qui sont tentés