Auteur Sujet: Remplacer la livebox avec DHCP+DHCPv6-pd (linux/openbsd)  (Lu 69767 fois)

0 Membres et 1 Invité sur ce sujet

zommak

  • Client Orange Fibre
  • *
  • Messages: 37
    • Site CV
Remplacer la livebox avec DHCP+DHCPv6-pd (linux/openbsd)
« le: 21 novembre 2015 à 02:07:11 »
Bonjour,

Comme il semble qu'orange commence à modifier deux trois choses pour l'arrivée de l'ipv6, voici les explicatif pour récupérer son ipv4 et son préfix ipv6 en DHCP/DHCPv6-pd. Dans l'ordre explication sous linux - OpenBSD.

Orange utilise l'option 90 mais il l'utilise uniquement pour échanger un token qui contient le nom d'utilisateur du compte orange ( fti/******* )
dhclient ne supporte pas cette option par défaut mais comme orange ne vérifie pas le RDM ni n'utilise aucune des fonctions de hashage que décrit la RFC 3118 on peut simuler l'envoie de l'option, en définissant à la main la séquence en hexadécimal à envoyer. Il vous faudra donc convertir les caractères après fti/ pour les placer à la suite de la séquence que j'ai déjà mise. chaque octet est séparé par :

pour ce qui est du fichier de configuration /etc/dhclient_eth0_832.conf
send vendor-class-identifier = "sagem";
option userclass code 77 = string;
send userclass 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:4c:69:76:65:62:6f:78:33;
option authsend code 90 = string;
send authsend 00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f:*:*:*:*:*:*:*; ## remplacez les étoiles par ce qui suis fti/* convertie en hexadécimal
mon userclass est définit manuellement car il semble qu'il y ai un bug si j'utilise l'option préexistante (en tout cas sur mon ordinateur)
la requête dhcp doit être faite sur le vlan832 avec au moins le vlan835 off sinon la requête n'aura pas de réponse

La priorité doit être de 6 pour les paquets ICMPv6, ARP, DHCP, DHCPv6-pd (!! il semble que certain ont pu se connecter sans passer les prio à 6 !!)
La priorité doit être de 5 pour les paquets VOIP (!! mais si cette prio n'est pas respecté la VOIP passe quand même!!)

Le problème c'est que les paquets envoyé par le client DHCP ne passent pas au travers d'iptables, (une histoire de raw socket) du coups la solution proposé par Zoc est de tagguer par défaut la priorité 6 sur tout les paquets puis d'ajouter un filtre changeant de file tout les autres paquets
A executer à chaque démarrage
for i in 0 1 2 3 4 5 6 7; do
## on définit pour chaque file une priorité
    vconfig set_egress_map eth0.832 $i $i >/dev/null
done
## On modifie la priorité de la file 1 à 0 c'est là qu'on renverra tout nos paquets, la file 0 qui est celle par défaut passe à 6
    vconfig set_egress_map eth0.832 1 0 >/dev/null
    vconfig set_egress_map eth0.832 0 6 >/dev/null

Il faut ajouter des règles à la tables mangle, c'est elle qui remettra tous les paquets or ceux destiné au réseau et à la VOIP dans la file 1
##IPV4
## Tout les protocoles changent de file vers le skb 01 dont on a mis la prio à 0
iptables -t mangle -A POSTROUTING -o eth0.832 -j CLASSIFY --set-class 0000:0001
##On maintient les paquets réseaux dans une file à prio 6
iptables -t mangle -A POSTROUTING -o eth0.832 -p igmp -j CLASSIFY --set-class 0000:0006
iptables -t mangle -A POSTROUTING -o eth0.832 -p icmp -j CLASSIFY --set-class 0000:0006
##Les paquets VOIP(téléphonie orange) sont taggués EF ont les met en prio 5
iptables -t mangle -A POSTROUTING -o eth0.832 -m dscp --dscp 0x2e -j CLASSIFY --set-class 0000:0005
##Si votre client DHCP n'utilise pas les raw socket il faut envoyer les paquet DHCP dans la file 6 (prio 6)
iptables -t mangle -A POSTROUTING -o eth0.832 -p udp --dport 67 -j CLASSIFY --set-class 0000:0006
##IPV6
## Tout les protocoles changent de file vers le skb 01 dont on a mis la prio à 0
ip6tables -t mangle -A POSTROUTING -o eth0.832 -j CLASSIFY --set-class 0000:0001
##On maintient les paquets réseaux dans une file à prio 6
ip6tables -t mangle -A POSTROUTING -o eth0.832 -p ipv6-icmp -j CLASSIFY --set-class 0000:0006
##Si votre client DHCPv6 n'utilise pas les raw socket il faut envoyer les paquet DHCPv6 dans la file 6 (prio 6) (c'est le cas de dibbler)
ip6tables -t mangle -A POSTROUTING -o eth0.832 -p udp --dport 547 -j CLASSIFY --set-class 0000:0006

On démarre le client uniquement en ipv4 pour le moment c'est un autre client qui récupère le préfixe IPV6
dhclient -4 -cf /etc/dhclient_eth0_832.conf eth0.832



Normalement ça permet d'avoir une ipv4 sans pppoe,la configuration de l'ipv6 se fait un peu plus loin.

UPDATE1: SERVEUR DHCP POUR AVOIR LA LIVEBOX EN CLIENT
On peut maintenant utiliser un serveur DHCP pour configurer la box et la mettre en client du serveur. Ici on est plutôt avantagé par le fonctionnement de l'authentification en mode token parce que la séquence renvoyé par le serveur est toujours la même et qu'on peut donc définir la séquence hexadecimal à envoyer. Pour ceux qui veulent aussi donner une ipv6 à la box : https://lafibre.info/remplacer-livebox/remplacer-la-livebox-sans-pppoe/msg283918/#msg283918
voilà la section spécifique à la box dans le fichier de conf pour le serveur dhcp, la section host est nécessaire parce que seule ma box reçoit les DNS d'orange, l'es autres ordis de mon réseaux utilisent d'autres DNS.
Uniquement de l'ipv4 ici de toute façon pour le moment il n'y a pas vraiment besoin de donner une ipv6 à la box.
Si ça ne marche pas pour le téléphone c'est peut être que le serveur SIP renvoyé n'est pas le même pour tout les clients. dans ce cas vous devrez récupérer la séquence hexadecimal avec wireshark
option authsend code 90 = string;
option authsend 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 SIP code 120 = string;
option SIP 00:06:73:62:63:74:33:67:03:41:55:42:06:61:63:63:65:73:73:11:6f:72:61:6e:67:65:2d:6d:75:6c:74:69:6d:65:64:69:61:03:6e:65:74:00;

host livebox { 
        hardware ethernet 00:00:00:00:00:00;   ## adresse mac de la box
        fixed-address 192.168.*.*;  ## adapter selon votre subnet
        option routers 192.168.*.*; ## adapter selon l'adresse de votre routeur
        option domain-name-servers 81.253.149.1, 80.10.246.130;
 }



Zoc propose un script bash pour convertir votre pseudo en hex, et a indiqué la marche à suivre pour ajouter l'authentification dans l'ERL

Hex:
Ci-dessous un script "quick and dirty" en bash (exécution validée sur un ERL) pour générer la séquence d'octets à partir de votre identifiant (il faut passer en paramètre au script ce qui se trouve après "fti/" en respectant la casse:

#!/bin/bash

USERNAME=$1
AUTHSTRING=00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f

for (( i=0; i<${#USERNAME}; i++ )); do
        HEXCHAR=$(echo -n ${USERNAME:$i:1} | od -An -txC | xargs)
        AUTHSTRING=${AUTHSTRING}:${HEXCHAR}
done
echo ${AUTHSTRING}

Exemple d'execution (non, ce n'est pas mon identifiant  :P ):
root@gateway:/config/scripts# ./generator.sh 7kgtyop
00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f:37:6b:67:74:79:6f:70

UPDATE2: IPV6
j'ai utilisé un client qui s'appelle dibbler qui permet aussi d'envoyer des options manuelles. il m'a juste fallut mettre l'option d'authentification en double pour que ça marche (sinon le message REQUEST se faisait sans authentification)
J'ai obtenu mon prefix V6 et je le diffuse sur mon réseau avec radvd

/etc/dibbler/client.conf
downlink-prefix-ifaces "none" #On veut gérer le prefix nous même
script "/etc/dibbler/radvd.sh" #script pour générer la configuration radvd
iface "eth0.832" {
pd ### on demande une délégation de prefix ipv6 (c'est un /56)
option 16 hex 00:00:04:0e:00:05:73:61:67:65:6d
option 15 hex 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:33
option 11 hex 00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f:*:*:*:*:*:*:*
option 11 hex 00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f:*:*:*:*:*:*:*
}

/etc/dibbler/radvd.sh
#!/bin/bash
if [ $SRV_MESSAGE = "REPLY" ]
then
#!/bin/bash
LAN=net0
WAN=eth0.832
taille=${#PREFIX1}
taille=$((taille-4))

cat > /etc/radvd.conf << EOF
interface ${LAN}
{
     AdvSendAdvert on;
     prefix ${PREFIX1:0:taille}10::/64
     {

         AdvOnLink on;
         AdvPreferredLifetime 86400;
         AdvValidLifetime 86400;
         AdvAutonomous on;
   # AdvRouterAddr on;
     };
RDNSS ${PREFIX1:0:taille}10::1
        {
                AdvRDNSSLifetime 30;
        };
};
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 ${PREFIX1:0:taille}10::/64 dev ${LAN}
ip -6 addr add ${PREFIX1:0:taille}10::1/64 dev ${LAN}
systemctl restart radvd ##J'utilise systemd pour gérer mes démons et donc pour redemarrer radvd
EOF
cat > /etc/ip6deconf-new.sh << EOF
ip -6 route del fe80::ba0:bab dev ${WAN}
ip -6 route del default via fe80::ba0:bab dev ${WAN}
ip -6 route del ${PREFIX1:0:taille}10:: dev ${LAN}
ip -6 addr del ${PREFIX1:0:taille}10::1/64 dev ${LAN}
EOF
chmod +x /etc/ip6conf.sh
chmod +x /etc/ip6deconf-new.sh
/etc/ip6conf.sh
else
echo "Warning error" > /etc/dibbler/radvd.cfg
fi

Contrairement à dhclient-isc, dibbler n'utilise pas de raw socket et ses packet passent dans netfilter il faut donc faire attention à ouvrir le bon port pour le client
ip6tables -A INPUT -i eth0.832 -p udp --dport 546 -j ACCEPT

-------------------------------------------------------------------------
Pour l'ERL proposé par zoc, Cette proposition nécessite d'être testé par quelqu'un possédant l'ERL dans une zone basculé en DHCP

Pour l'ERL il suffira donc de patcher le fichier perl qui génère le fichier de configuration DHCP. Pas très difficile.

Update: Alors, pour un firmware 1.7 (et sans doute suivants), il faut modifier le fichier /opt/vyatta/sbin/vyatta-interfaces.pl. Rechercher la ligne

$output .= "option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;\n\n";
et rajouter en dessous

$output .= "option rfc3118-auth code 90 = string;\n\n";
Puis rebooter l'ERL. A partir de ce moment, il devrait (je mets au conditionnel car je n'ai pas encore testé) être possible de faire

set interfaces ethernet eth1 dhcp-options client-option "send rfc3118-auth xx:xx:xx:xx:xx:.....;"
dans le fichier de config de l'ERL ;)

-------------------------------------------------------------------------
Pour OpenBSD Nerzhul propose une configuration pour openbsd
Doc quasi complète, à finaliser

Voici la configuration PF à appliquer pour être optimal avec de la sécurité sur IPv4 et IPv6 en bénéficiant du stateful PF, donc protégeant un maximum les hôtes locaux en IPv6 visibles d'Internet. Pas besoin de marquage ou quoi que ce soit, que ce soit en TCP,UDP,ICMP, IPv4 ou IPv6 le débit est au top avec cette configuration PF
wan_iface="vlan832"
table <lan_v4> { 192.168.1.0/24 172.16.9.0/23 }
# Persist table to change it with dibbler and don't flush it on firewall modification
table <lan_v6> persist

block log               # block stateless traffic
pass keep state         # establish keep-state
block in log quick on $wan_iface inet proto tcp to port { ssh http } # Block ssh and http from WAN
block in log quick on $wan_iface inet proto udp to port { syslog domain } # Block DNS and syslog from WAN
block in log quick on $wan_iface inet6 proto tcp to port { ssh http } # Block ssh and http from WAN
block in log quick on $wan_iface inet6 proto udp to port { syslog domain } # Block DNS and syslog from WAN
block in log quick on $wan_iface inet6 to <lan_v6> # Block incoming IPv6 trafic non sollicited by local LAN hosts

# Tag every TCP packets on wan interface with vlan priority 0 (1 in PF because of 802.1p), in IPv4 & IPv6
match out on $wan_iface proto { tcp udp } set prio 1
# nat clients to wan interface in IPv6
pass out quick on $wan_iface inet from <lan_v4> nat-to ($wan_iface) keep state
pass out quick on $wan_iface inet6 from <lan_v6> keep state

Configuration du dhclient natif OpenBSD
interface "vlan832" {
        send dhcp-class-identifier "sagem";
        send user-class "+FSVDSL_livebox.Internet.softathome.Livebox3";
        send option-90 00:00:00:00:00:00:00:00:00:00:00:66:74:69:XX:XX:XX:XX:XX:XX:XX:XX;
}

Puis activation au boot:
echo "dhclient vlan832&" >> /etc/rc.local

Configuration de dibbler 1.0.1 compilé (/etc/dibbler/client.conf)
downlink-prefix-ifaces "none"
script "/etc/dibbler/rtadvd.sh"
iface "vlan832" {
        pd
        option 16 hex 00:00:04:0e:00:05:73:61:67:65:6d
        option 15 hex 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:xxxx
66:74:61:74:68:6f:6d:65:2e:6c:69:76:65:62:6f:78:33
        option 11 hex 00:00:00:00:00:00:00:00:00:00:00:66:74:xx:xx:xx:xx:xx:xx:xx:xx:xx
        option 11 hex 00:00:00:00:00:00:00:00:00:00:00:66:74:xx:xx:xx:xx:xx:xx:xx:xx:xx
}
Tout comme sous Linux, il est obligatoire d'avoir 2x l'option 11
A revérifier mais pas besoin de mettre la route par défaut dibbler la met automatiquement sous OpenBSD (il faut le lancer en root)
default                            fe80::ba0:bab%vlan832          UG         0    13235     -    56 vlan832

Concernant le router advertisement OpenBSD fournit l'outil natif pour le faire. Voici le script (à améliorer pour ajouter les DNS locaux au routeur dedans). Remplacez vether0 par le nom de l'interface de votre LAN (dans mon cas vether0 est une interface loopback branchée sur un bridge contenant quelques interfaces de mon LAN)

#! /bin/sh
if [ $SRV_MESSAGE = "REPLY" ]; then
cat >/etc/rtadvd.conf <<EOF
vether0:\\
        :addr="${PREFIX1}":prefixlen#64:

EOF

# Set rtadvd starting flags, adding prefix to PF for setting the correct firewall outgoing rules
rcctl set rtadvd flags " vether0"
pfctl -t lan_v6 -T flush
pfctl -t lan_v6 -T add "${PREFIX1}/64"

# restart rtadvd
for P in $(pgrep rtadvd); do
        kill ${P}
done
rcctl start rtadvd



Merci à kgersen et zoc pour leur aide
Merci à Nerzhul pour le tuto openbsd
« Modifié: 16 février 2016 à 22:05:09 par zommak »

zoc

  • Client Orange Fibre
  • *
  • Messages: 1 349
  • FTTH 1000/250 Antibes (06)
Remplacer la livebox sans pppoe
« Réponse #1 le: 21 novembre 2015 à 10:23:33 »
Je me disais bien que c'était trop beau qu'Orange puisse utiliser un client DHCP standard (et en même temps je m'en doutais vu que j'avais déjà remarqué les DHCP discover avec l'option 90 sur mes différentes captures Wireshark)...

Ca promet pour nos ERL (D'autant plus qu'Ubiquiti n'utilise pas DHCPCD mais ISC-DHCP qui ne supporte pas du tout l'authentification par l'option 90)...

Question : Est-ce que PPPoE reste actif. Autrement dit le jour ou DHCP est déployé pour moi mon ERL configuré en PPPoE va-t-il cesser de fonctionner ?

Breizh 29

  • Client Bouygues ADSL +
  • Client Orange adsl
  • *
  • Messages: 4 134
  • FTTNRA sur Guilers 29820 (29N)
Remplacer la livebox sans pppoe
« Réponse #2 le: 21 novembre 2015 à 11:10:39 »
Je me disais bien que c'était trop beau qu'Orange puisse utiliser un client DHCP standard (et en même temps je m'en doutais vu que j'avais déjà remarqué les DHCP discover avec l'option 90 sur mes différentes captures Wireshark)...

Ca promet pour nos ERL (D'autant plus qu'Ubiquiti n'utilise pas DHCPCD mais ISC-DHCP qui ne supporte pas du tout l'authentification par l'option 90)...

Question : Est-ce que PPPoE reste actif. Autrement dit le jour ou DHCP est déployé pour moi mon ERL configuré en PPPoE va-t-il cesser de fonctionner ?


Petrus a dit ici que PPPoE resterai actif.
C'est bien du dhcp + dhcp6-pd.

La possibilité de connexion ppp ne va pas disparaitre comme ça, il y en a encore pour quelques années. Par contre, pas d'ipv6 en ppp. Et je pense pas que ppp pour le v4 et dhcp pour le v6 soit possible (a tester).

kgersen

  • Client Orange Fibre
  • Modérateur
  • *
  • Messages: 4 610
  • FTTH 1Gb/s sur Asnières-sur-Seine (92)
Remplacer la livebox sans pppoe
« Réponse #3 le: 21 novembre 2015 à 11:36:41 »
Ca n'est pas clair si l'OP anticipe l'arrivée de DHCP sur la sa ligne ou si elle est déjà en DHCP et il essai de configurer son ERL en DHCP ?

zoc

  • Client Orange Fibre
  • *
  • Messages: 1 349
  • FTTH 1000/250 Antibes (06)
Remplacer la livebox sans pppoe
« Réponse #4 le: 21 novembre 2015 à 11:43:59 »
Il dit qu'il a des problèmes de débit montant en DHCP sans Livebox. Donc j'imagine que sa ligne est déjà en DHCP. Et rien ne dit qu'il utilise un ERL (J'aurais même tendance à croire qu'il utilise plutôt Linux sur un PC).


zoc

  • Client Orange Fibre
  • *
  • Messages: 1 349
  • FTTH 1000/250 Antibes (06)
Remplacer la livebox sans pppoe
« Réponse #5 le: 21 novembre 2015 à 11:48:34 »
Petrus a dit ici que PPPoE resterai actif.
Oui, je sais, c'est moi qui lui avait posé la question  ;D

Je voulais un retour d'expérience d'un client. Ce n'est pas que je fasse pas confiance à Petrus (au contraire, il nous avait annoncé DHCP + DHCP6-PD depuis longtemps), mais d'un autre coté dans un fil il dit aussi que le bail serait beaucoup plus long que 7 jours, et en pratique tu rebootes la box tu changes d'IP d'après les premiers retours. Maintenant, c'est aussi vrai qu'un reboot ce n'est pas la même chose qu'un renouvellement de bail...

kgersen

  • Client Orange Fibre
  • Modérateur
  • *
  • Messages: 4 610
  • FTTH 1Gb/s sur Asnières-sur-Seine (92)
Remplacer la livebox sans pppoe
« Réponse #6 le: 21 novembre 2015 à 12:14:21 »
Et rien ne dit qu'il utilise un ERL (J'aurais même tendance à croire qu'il utilise plutôt Linux sur un PC).

ah oui exact j'avait complètement zappé ce fait. ;D

BM92

  • Client Orange Fibre
  • *
  • Messages: 764
  • FTTH 1G/200 Mb/s Rueil (92)
Remplacer la livebox sans pppoe
« Réponse #7 le: 21 novembre 2015 à 19:12:37 »
On ne vas quant même pas mettre nos routeurs Ubiquiti a la poubelle !!!  >:( ;D

zommak

  • Client Orange Fibre
  • *
  • Messages: 37
    • Site CV
Remplacer la livebox sans pppoe
« Réponse #8 le: 21 novembre 2015 à 19:18:29 »
Oui l'ordi en question est une carte ARM sous linux ce n'est pas un ERL.
Sur les ERL vous n'avez pas la possibilité de compiler vos propre paquet pour utiliser un client DHCP différent?

Je peux me connecter aussi bien en DHCP qu'en PPP pour le moment par contre pour que le DHCP fonctionne il faut couper la connexion PPP et désactiver le vlan 835 après quelques minutes le serveur DHCP commence à répondre aux requêtes.

Au niveau de l'ip, j'ai commencé mes tests il y a 2  semaines et j'ai l'impression que l'ip qui m'est attribuée est toujours la même. Même quand je retourne à une connexion ppp pendant quelques jours (qui elle a une ip qui change à chaque connexion) quand je reviens sur le dhcp je récupère mon ip d'il y a 2 semaines. Je verrai combien de temps elle m'est reservé, je devrais avoir un peu de temps la semaine prochaine pour essayer d'améliorer tout ça.

Dernière chose, j'ai commencé parce que j'ai vu qu'après un test en rebranchant ma box celle ci était passé en DHCP + DHCPv6, je ne sais pas si la manip est possible pour quelqu'un qui est toujours en PPP avec sa box.

BM92

  • Client Orange Fibre
  • *
  • Messages: 764
  • FTTH 1G/200 Mb/s Rueil (92)
Remplacer la livebox sans pppoe
« Réponse #9 le: 21 novembre 2015 à 19:28:55 »
Je serais surpris qu'ils nous passent en IP fixe  :D
Mais bon c'est bientôt Noël  8)

Breizh 29

  • Client Bouygues ADSL +
  • Client Orange adsl
  • *
  • Messages: 4 134
  • FTTNRA sur Guilers 29820 (29N)
Remplacer la livebox sans pppoe
« Réponse #10 le: 22 novembre 2015 à 11:16:52 »
Je suppose, que l'on est reconnu par @mac qui faut renseigner ?

Breizh 29

  • Client Bouygues ADSL +
  • Client Orange adsl
  • *
  • Messages: 4 134
  • FTTNRA sur Guilers 29820 (29N)
Remplacer la livebox sans pppoe
« Réponse #11 le: 22 novembre 2015 à 12:06:46 »
Au niveau de l'ip, j'ai commencé mes tests il y a 2  semaines et j'ai l'impression que l'ip qui m'est attribuée est toujours la même. Même quand je retourne à une connexion ppp pendant quelques jours (qui elle a une ip qui change à chaque connexion) quand je reviens sur le dhcp je récupère mon ip d'il y a 2 semaines. Je verrai combien de temps elle m'est reservé, je devrais avoir un peu de temps la semaine prochaine pour essayer d'améliorer tout ça.
C'est ça la bonne nouvelle, elle reste à confirmer. Orange ne nous a pas habitué à un "bail" infini.
J'ai envie de dire ENFIN.