La Fibre

Datacenter et équipements réseaux => Routeurs => Bouygues Telecom Remplacer la Bbox par un routeur => Discussion démarrée par: eahlys le 01 février 2020 à 23:41:19

Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: eahlys le 01 février 2020 à 23:41:19
Hello !

Je suis client BT FTTH depuis quelques mois et j'ai remplacé la Bbox par un Ubiquiti Edgerouter et ça marche super.
En rebranchant la box hier pour tester quelque chose j'ai remarqué avec grand plaisir que j'avais enfin accès à l'IPv6, la box récupère bien un préfixe et il est advertisé sur son lan.
Je cherche donc à récupérer ce préfixe sur mon routeur.

Une capture wireshark entre la box et l'ont montre qu'elle envoie une requête dhcpv6 avec son adresse mac en DUID, préfixée d'une partie fixe.

Sauf que je me casse les dents sur la config. Le client dhcpv6 intégré dans l'edgerouter ne parvient pas à récupérer de préfixe, de même pour dibbler client. Il n'y a aucune réponse après le Sollicitation en fait.
Pourtant, j'ai recopié chaque option envoyé par la Bbox.

Est-ce que quelqu'un en ADSL ou FTTH qui a réussi à récupérer un préfixe IPv6 avec son propre routeur peut m'êclairer ? :)
Merci beaucoup !
Titre: Aide pour la délégation de préfixe IPv6
Posté par: kgersen le 02 février 2020 à 00:30:43
poste ta capture ici (ou message privé direct si tu veux pas l'anonymiser).
Titre: Aide pour la délégation de préfixe IPv6
Posté par: mirtouf le 02 février 2020 à 17:32:05
Voilà un topic à surveiller. ::)
Titre: Aide pour la délégation de préfixe IPv6
Posté par: eahlys le 03 février 2020 à 13:25:06
Hello ! Au final j'ai réussi à avoir de l'IPv6. J'ai du tester trop de configs et me faire "blacklist" pendant un temps, je ne sais pas.
Toujours est-il que dans mon cas, la seule config à faire est d'envoyer "00:03:00:01"+@MAC Bbox en DUID et j'ai récupéré mon préfixe /60.
D'après mes captures Wireshark entre la Bbox et l'ONT, elle semble envoyer d'autres infos dans son Sollicit envers le serveur DHCPv6 mais elle n'ont pas l'air nécessaires.

Attention, vous n'allez obtenir un préfixe IPv6 si et seuelement si votre ligne est provisionnée pour cela. Certaines zones de la France le sont, c'est très "timide" chez Bouygues Telecom l'IPv6 sur la fibre pour l'instant. J'ai fait partie des chanceux !
Pour savoir si vous êtes provisionné IPv6, branchez la Bbox et regardez si elle vous indique un préfixe IPv6 dans l'interface de configuration (qui est indiqué juste en dessous de l'IPv4 publique).

Je poste ma config ci-dessous, il s'agît d'un Ubiquiti EdgeRouter :

ethernet eth1 {
     duplex auto
     speed auto
     vif 100 {
         address dhcp
         description "eth1.100 ONT ByTel"
         dhcp-options {
             client-option "send vendor-class-identifier "BYGTELIAD";"
             default-route update
             default-route-distance 210
             name-server update
         }
         dhcpv6-pd {
             duid 00:03:00:01:XX:XX:XX:XX:XX:XX // Mac Bbox
             pd 0 {
                 interface eth0 { //Ici, je délègue le premier /64 dispo dans le /60 qui m'est assigné et je mets ::ffff comme adresse à l'interface eth0 de mon routeur (LAN)
                     host-address ::ffff
                     prefix-id :0
                 }
                 prefix-length /60
             }
             prefix-only
             rapid-commit disable
         }
         firewall {
             out {
                 ipv6-name 6WAN_OUT
                 name WAN_OUT
             }
         }
         mac XX:XX:XX:XX:XX:XX //Mac Bbox
     }
 }

Petites explications : eth1 est l'interface connectée à l'ONT, eth1.100 correspond au VLAN 100 sur lequel Internet est distribué par Bouygues Telecom.
eth0 est mon interface "LAN".

Après plusieurs tests infructueux en utilisant diverses configs, le serveur DHCPv6 ne répondait plus. J'ai rééssayé le lendemain avec cette config et tout est fonctionnel.

A noter une curiosité de mon côté : j'arrive à pinguer en IPv6 des machines distantes, mais je ne vois rien dans les traceroute. Exemple :
root@beesly:~# ping6 google.fr
PING google.fr(2001:4860:4802:38::75 (2001:4860:4802:38::75)) 56 data bytes
64 bytes from 2001:4860:4802:38::75 (2001:4860:4802:38::75): icmp_seq=1 ttl=57 time=4.25 ms
64 bytes from 2001:4860:4802:38::75 (2001:4860:4802:38::75): icmp_seq=2 ttl=57 time=4.39 ms
64 bytes from 2001:4860:4802:38::75 (2001:4860:4802:38::75): icmp_seq=3 ttl=57 time=4.39 ms

Mais, lors d'un traceroute, toujours vers google.fr :
Host                                Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 2001:861:3840:1830::ffff          0.0%     9    0.5   0.5   0.4   0.5   0.0
 2. ???
 3. ???
 4. ???
 5. ???
 6. ???
 7. 2001:4860:4802:38::75             0.0%     8    4.3   4.5   4.3   4.7   0.1

Cela se produit même sans aucun firewall sur mon routeur. En utilisant la Bbox, j'ai le même comportement. J'ai testé avec plusieurs devices (Raspberry Pi, téléphone Android, Mac, PC) ils ont tous le même problème. Quand j'étais chez Free FTTH, je voyais bien les traceroute. Aussi, cela se produit quelque soit la destination (Google, Facebook, OVH, Online.net, etc.).
Par contre, le traceroute inverse (depuis mon serveur Online.net vers chez moi) est bien visible, lui :
Host                                Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. AS12876  2001:bc8:6005:19::1      0.0%    66    0.8   0.7   0.6   0.9   0.1
 2. AS12876  2001:bc8:400:100::b2     0.0%    66    0.7   0.7   0.6   1.2   0.1
 3. AS12876  2001:bc8:400:1::124      0.0%    66    1.1   1.4   1.1   1.8   0.2
 4. AS12876  2001:bc8:0:1::7          0.0%    66    1.5   1.5   1.2   1.8   0.2
 5. AS5410   2001:860:bbe1:67::       0.0%    66    1.7   1.5   1.4   1.9   0.1
 6. AS5410   2001:860:bbee:c6::1     95.4%    66  8403. 8402. 8402. 8403.   0.7
 7. AS5410   2001:861:XXXX:XXXX::fff  0.0%    66    4.9   4.7   4.5   5.0   0.1
 8. AS5410   2001:861:XXXX:XXXX::bee  0.0%    66    4.8   4.9   4.6   5.3   0.2
Mais à la limite c'est pas si grave, j'ai un préfixe IPv6 fixe et j'ai acces à tout Internet en IPv6 malgré ce soucis de traceroute invisibles :)
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: buddy le 03 février 2020 à 13:38:52
Et si tu fais un traceroute vers ipv6.lafibre.info ? ipv6.bhs.proof.ovh.net (Canada Est)
pour voir si ce n'est pas juste Bouygues qui a désactivé la réponse au ping v6 sur ses routeurs "internes".
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: eahlys le 03 février 2020 à 13:45:15
Voilà ce que ça donne :
root@beesly:~# mtr -zrwc4 ipv6.lafibre.info
Start: 2020-02-03T13:43:21+0100
HOST: beesly                            Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. AS5410   2001:861:XXXX:XXXX::ffff   0.0%     4    0.5   0.5   0.5   0.5   0.0
  2. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  3. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  4. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  5. AS43142  lafibre.info               0.0%     4   10.5  10.4  10.4  10.5   0.1
root@beesly:~# mtr -zrwc4 ipv6.bhs.proof.ovh.net
Start: 2020-02-03T13:43:49+0100
HOST: beesly                            Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. AS5410   2001:861:XXXX:XXXX::ffff   0.0%     4    0.6   0.5   0.5   0.6   0.0
  2. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  3. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  4. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  5. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  6. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  7. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  8. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
  9. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
 10. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
 11. AS???    ???                       100.0     4    0.0   0.0   0.0   0.0   0.0
 12. AS16276  2607:5300:60:44a5::1       0.0%     4   87.1  86.8  86.5  87.1   0.3

C'est uniquement quand je traceroute des hosts distants depuis chez moi. Quand c'est un traceroute de l'extérieur vers chez moi, ça fonctionne bien (comme indiqué à la fin de mon message precédent)
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: doctorrock le 03 février 2020 à 14:44:58
Essaye un MTR en UDP, et non ICMP ( mtr  -u )

C'est possible que des routeurs filtrent ICMP, auquel cas un MTR en UDP le montre rapidement
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: mirtouf le 04 février 2020 à 21:39:16
Plop, j'ai une question sur les services Bouygues, est-ce que certains services :
- TV (multicast)
- téléphonie (SIP)
- pings sur les principaux sites au démarrage de la bbox
- requêtes DNS
se font en IPv6 avec la box ?
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: eahlys le 04 février 2020 à 21:50:59
Le mtr en udp ne m'indique que le premier hop, c'est tout :(
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: nague le 04 février 2020 à 23:01:03
Je viens d'essayer chez moi avec mon OpenWRT, aucune réponse à mon dhcpv6-solicit pour l'instant, j'ai vérifié, le duid est correctement calculé à partir de la MAC de l'interface (qui spoof déjà la MAC de la BBox pour l'IPv4). Il y a peut-être d'autres options qui ne vont pas, typiquement, j'ai une liste "Requested Option" longue comme le bras par défaut, cela ne plait peut-être pas....
Avant de perdre mon temps, je vais rebrancher ma Bbox, dès que je peux me permettre de tout couper.
Edit: testé avec la BBox, pas d'IPv6 pour le moment  :(
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: jeanbaptistep le 06 juin 2022 à 18:37:51
Bonjour,

Je n'arrive pas à obtenir d'IPv6 avec l'edge router X, alors que la bbox me permet d'en obtenir une.
J'ai à peu près les mêmes éléments dans ce fil :https://lafibre.info/remplacer-bbox/edge-router-ouverture-des-ports-ipv6-ne-fonctionne-pas-ipv4-ok/ (https://lafibre.info/remplacer-bbox/edge-router-ouverture-des-ports-ipv6-ne-fonctionne-pas-ipv4-ok/), mais sans succès.
Je joint ci-dessous la capture wireshark pour la demande DHCPv6.

Par contre, avec wireshark je ne vois aucune demande entre l'ERX et l'ONT
La commande show dhcpv6-pd log me renvoie des erreurs :
show dhcpv6-pd log
Jun/06/2022 18:14:11: get_duid: DUID file corrupted
Jun/06/2022 18:14:11: client6_init: failed to get a DUID

Merci d'avance pour votre aide.
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: eahlys le 07 juin 2022 à 09:27:41
Hello,

Rebranche ta Bbox, puis initie un reboot de la Bbox depuis son interface web. Dès qu'elle est éteinte, débranche là avant qu'elle se rallume, qu'elle release proprement le bail DHCPv6.
Puis rebranche ton ERX et retente, ça devrait aller mieux :)
Tu peux essayer et me dire ce que ça a donné ?
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: jeanbaptistep le 07 juin 2022 à 21:55:18
Bonjour,

Merci pour la réponse.
J'ai essayé, je n'ai pas plus de succès. Je ne vois toujours aucune requête concernant DHCPv6 entre l'ERX et l'ONT (pleins pour l'ICMPv6 par contre).

Comment est-il possible de consulter les log du firewall, afin de voir que la règle allow dhcpv6 est bien prise en compte ?
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: jeanbaptistep le 17 juin 2022 à 01:00:49
J'ai trouvé ceci qui ressemble tout à fait au problème :
https://community.ui.com/questions/DHCPv6-PD-stop-dor-set-DUID/79aa052b-0933-434c-b2ef-3d0275a10eeb (https://community.ui.com/questions/DHCPv6-PD-stop-dor-set-DUID/79aa052b-0933-434c-b2ef-3d0275a10eeb)

Je rejouterai un message si j'arrive faire fonctionner le routeur.
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: jeanbaptistep le 17 juin 2022 à 15:17:48
Bingo ! L'IPv6 est bien obtenue !
En modifiant le fichier /opt/vyatta/sbin/dhcpv6-pd-duid.pl comme indiqué dans ce post, ça fonctionne :

https://community.ui.com/questions/DHCPv6-PD-stop-dor-set-DUID/79aa052b-0933-434c-b2ef-3d0275a10eeb (https://community.ui.com/questions/DHCPv6-PD-stop-dor-set-DUID/79aa052b-0933-434c-b2ef-3d0275a10eeb)

Modifier la section sub set_duid par ces éléments :
sub set_duid {
    my ($duid) = @_;

    open(my $FH, '>', $dhcp6c_duid) || die "Error opening [$dhcp6c_duid]: $!\n";
    binmode($FH);

    $duid =~ s/://g;
    my $len = length($duid) / 2;
    my $buf = pack("v", $len);
    my $buf;+    my $endian = $Config{byteorder};
    if ($endian == 1234 or $endian == 12345678) {
    $buf = pack("v", $len);
    } else{
        $buf = pack("n", $len);
    }
    print $FH $buf || die "duid length write failed: $!\n";

    my $bin_duid = pack("H*", $duid);
    print $FH $bin_duid || die "duid write failed: $!\n";
    close($FH);
}
La modification semble persister au redémarrage, mais je n'ai aucune idée si elle persiste indéfiniment.

Il reste une erreur sur la commande show dhcpv6-pd duid :
"my" variable $buf masks earlier declaration in same scope at /opt/vyatta/sbin/dhcpv6-pd-duid.pl line 45.
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: zoc le 17 juin 2022 à 18:18:02
Les modifications effectuées sur les scripts du système persistent jusqu’à l’installation d’une mise à jour firmware.
Titre: Obtenir un préfixe IPv6 /60 en FTTH avec un Ubiquiti Edgerouter
Posté par: tivoli le 30 décembre 2022 à 18:51:44

Après avoir changé d'IPv4 2 fois en un mois, j'ai rebranché la box pour vérifier si j'avais maintenant IPv6 et miracle ...

merci pour cela, je me suis permis de mettre au propre (car il y a des + qui trainent)

Voici la version complete du fichier

#!/usr/bin/perl

use strict;
use warnings;

use Getopt::Long;
use Config;

my $dhcp6c_duid = '/var/lib/dhcpv6/dhcp6c_duid';


sub show_duid {

    die "No DUID found\n" if ! -e $dhcp6c_duid;

    open(my $FH, '<', $dhcp6c_duid) || die "Error opening [$dhcp6c_duid]: $!\n";
    binmode($FH);
    my ($buf, $val, $len);
    read($FH, $buf, 2);
    my $endian = $Config{byteorder};
    if ($endian == 1234 or $endian == 12345678) {
        $len = unpack("v", $buf);
    } else {
        $len = unpack("n", $buf);
    }
    for (my $i = 0; $i < $len; $i++) {
        read($FH, $buf, 1);
        $val .= unpack("H", $buf);
        $val .= unpack("h", $buf);
        $val .= ':' if $i + 1 < $len;
    }
    close($FH);
    print "DUID $val\n";
}

sub set_duid {
    my ($duid) = @_;

    open(my $FH, '>', $dhcp6c_duid) || die "Error opening [$dhcp6c_duid]: $!\n";
    binmode($FH);

    $duid =~ s/://g;
    my $len = length($duid) / 2;
#    my $buf = pack("n", $len);
    my $buf;
    my $endian = $Config{byteorder};
    if ($endian == 1234 or $endian == 12345678) {
        $buf = pack("v", $len);
    } else{
        $buf = pack("n", $len);
    }


    print $FH $buf || die "duid length write failed: $!\n";
    my $bin_duid = pack("H*", $duid);
    print $FH $bin_duid || die "duid write failed: $!\n";
    close($FH);
}

sub set_duid_bin {
    my ($duid) = @_;

    open(my $FH, '>', $dhcp6c_duid) || die "Error opening [$dhcp6c_duid]: $!\n";
    binmode($FH);

    $duid =~ s/://g;
    my $len = length($duid);
    my $buf = pack("n", $len);
    print $FH $buf || die "write failed\n";

    print $FH $duid;
    close($FH);
}

sub get_mac {
    my ($intf) = @_;

    return if !defined $intf;
    my $path = "/sys/class/net/$intf/address";
    return if ! -e $path;
    open my $FH, '<', $path or return;
    my $mac = <$FH>;
    close $FH;
    chomp $mac;
    return $mac;
}

sub gen_duid {
    my ($intf) = @_;

    $intf = 'eth0' if !defined $intf;
    my $mac = get_mac($intf);
    if (!defined $mac) {
        $mac = get_mac('eth0');
    }
    my $duid;
    my $duid_type = 1;
    my $duid_intf = 6;  # ethernet
    my $duid_time = time();
    my @duid_mac = split(/:/, $mac);
    $duid  = chr(0);
    $duid .= chr($duid_type);
    $duid .= chr($duid_type);
    for (my $i=24; $i >= 0; $i -= 8) {
$duid .= chr(($duid_time >> $i) & 0xff);
}
    foreach my $b (@duid_mac) {
        $duid .= chr(hex($b));
    }
    $duid  = chr(0);
    $duid .= chr($duid_type);
    $duid .= chr($duid_type);
    for (my $i=24; $i >= 0; $i -= 8) {
$duid .= chr(($duid_time >> $i) & 0xff);
}
    foreach my $b (@duid_mac) {
        $duid .= chr(hex($b));
    }
    set_duid_bin($duid);
}


my ($action, $duid, $intf);

GetOptions("action=s" => \$action,
           "duid=s"   => \$duid,
           "intf=s"   => \$intf,
);

if (! defined $action) {
    print "Must define action\n";
    exit 1;
}

if ($action eq 'show') {
    show_duid();
    exit 0;
}

if ($action eq 'set') {
    if (! defined $duid) {
        print "Must define DUID to set it\n";
        exit 1;
    }
    set_duid($duid);
    exit 0;
}

if ($action eq 'gen') {
    if (! defined $intf) {
        print "Must define intf\n";
        exit 1;
    }
    gen_duid($intf);
    exit 0;
}

if ($action eq 'delete') {
    die "No DUID found\n" if ! -e $dhcp6c_duid;
    system("sudo rm -rf $dhcp6c_duid");
    exit 0;
}

exit 0;