Auteur Sujet: Routeur Openwrt derriere une Livebox - delegation de plusieurs prefixes IPv6  (Lu 4563 fois)

0 Membres et 1 Invité sur ce sujet

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 291
Je crois que ma box a un soucis, impossible d’ouvrir LB monitor... On dirait que l'onglet mes équipements connectés bug sévère, j'ai une page blanche avec juste le bouton back maintenant (ça marchait encore y'a 2 jours).

Ça sent le reset cette histoire  >:(

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 291
Après des heures de galère et la LB reset... J'ai enfin du ping qui arrive sur mon préfixe délégué \o/ J'ai aussi essayé un port sur l'adresse WAN de l'openwrt, ça marche, sauf que là c'est lui qui refuse la connexion (j'ai testé avec SSH, j'ai pourtant bien ajouté la règle dans son parefeu, sans doute un truc qui m'échappe)

Par contre, il y a encore un bug très bizarre, car j'ai cru que ça ne fonctionnait pas au début... Il ne faut pas que je coche tous les protocoles, en particulier AH et GRE pour que ça fonctionne. Dès que un des deux est coché, le ping ne passe plus. Ou alors c'est un spécial Livebox 4 ?

On va finir par leur faire tout le debug gratos  ::)
02:46:42.296795 IP6 2a01:cbxx:xxx:xx00:79c2:8517:3db9:6d8 > 2a01:cbxx:xxx:xxea::1: ICMP6, echo request, seq 1, length 64
02:46:42.297355 IP6 2a01:cbxx:xxx:xxea::1 > 2a01:cbxx:xxx:xx00:79c2:8517:3db9:6d8: ICMP6, echo reply, seq 1, length 64
02:46:43.292621 IP6 2a01:cbxx:xxx:xx00:79c2:8517:3db9:6d8 > 2a01:cbxx:xxx:xxea::1: ICMP6, echo request, seq 2, length 64
02:46:43.293011 IP6 2a01:cbxx:xxx:xxea::1 > 2a01:cbxx:xxx:xx00:79c2:8517:3db9:6d8: ICMP6, echo reply, seq 2, length 64

EDIT : la connexion SSH marche si je joins le routeur par le préfixe délégué, peut-être le fait de l'adresse SLAAC côté WAN (ou une restriction en dur quelque part, car le port est techniquement ouvert, il répond un connection refused, sinon rien ne se passe). Du coup, plus besoin des règles de ports, vu qu'on ouvre tout le préfixe par les protocoles, nickel.
« Modifié: 14 mars 2025 à 03:34:36 par renaud07 »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 291
J'ai des bonnes et des mauvaises nouvelles :

-Bonne : le routage marche sans problème avec 3 préfixes et sans être limité à OWRT.
-Mauvaise : Je n'arrive toujours pas à les déléguer, mais c'est très facilement contourné avec une route statique, un peu moins pratique, certes.

Pour éviter que la box se mélange les pinceaux, je n'envoie qu'un seul préfixe avec le FQDN (le principal pour le LAN dans mon cas) les deux autres sont réclamés par les macvlan sans envoyer l'option (rajouter option noclientfqdn '1') la box leur attribue un nom générique et tout va bien.

Reste à tester avec des hôtes derrières et vérifier la bonne ouverture du pare-feu.

root@debian:~# ping -6 -I 2a01:cbxx:xxx:xxee::1 google.fr
PING google.fr(par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003)) from 2a01:cbxx:xx:xxee::1 : 56 data bytes
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=1 ttl=248 time=33.0 ms
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=2 ttl=248 time=32.2 ms
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=3 ttl=248 time=34.1 ms
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=4 ttl=248 time=32.3 ms
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=5 ttl=248 time=33.2 ms
^C
--- google.fr ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 32.211/32.958/34.113/0.694 ms

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:75:f7:fc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.165/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 2a01:cbxx:xx:xxea:a00:27ff:fe75:f7fc/64 scope global dynamic mngtmpaddr
       valid_lft 86375sec preferred_lft 575sec
    inet6 fe80::a00:27ff:fe75:f7fc/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1540 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:1d:49:4f brd ff:ff:ff:ff:ff:ff
    inet6 2a01:cbxx:xxx:xxee::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe1d:494f/64 scope link
       valid_lft forever preferred_lft forever


root@debian:~# ping -6 -I 2a01:cbxx:xxx:xxc3::1 google.fr
PING google.fr(par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003)) from 2a01:cbxx:xxx:xxc3::1 : 56 data bytes
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=1 ttl=248 time=33.8 ms
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=2 ttl=248 time=33.9 ms
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=3 ttl=248 time=34.4 ms
64 bytes from par10s39-in-x03.1e100.net (2a00:1450:4007:807::2003): icmp_seq=4 ttl=248 time=34.2 ms
^C
--- google.fr ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 33.776/34.089/34.418/0.251 ms

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:75:f7:fc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.165/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 2a01:cbxx:xxx:xxea:a00:27ff:fe75:f7fc/64 scope global dynamic mngtmpaddr
       valid_lft 86081sec preferred_lft 281sec
    inet6 fe80::a00:27ff:fe75:f7fc/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1540 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:1d:49:4f brd ff:ff:ff:ff:ff:ff
    inet6 2a01:cbxx:xxx:xxc3::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe1d:494f/64 scope link
       valid_lft forever preferred_lft forever

/etc/config/network
config device 'vwan1'                                                                                                                                                                                                                                                         
        option name 'vwan1'                                                                                                                                                                                                                                                   
        option type 'macvlan'                                                                                                                                                                                                                                                 
        option ifname 'eth0.3'                                                                                                                                                                                                                                                 
        option macaddr '70:e7:cf:ae:f2:00'                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                               
config device 'vwan2'                                                                                                                                                                                                                                                         
        option name 'vwan2'                                                                                                                                                                                                                                                   
        option type 'macvlan'                                                                                                                                                                                                                                                 
        option ifname 'eth0.3'                                                                                                                                                                                                                                                 
        option macaddr '70:e7:cf:ae:f2:01'

config interface 'WAN6_LB'                                                                                                                                                                                                                                                     
        option ifname 'eth0.3'                                                                                                                                                                                                                                                 
        option proto 'dhcpv6'                                                                                                                                                                                                                                                 
        option reqaddress 'try'                                                                                                                                                                                                                                               
        option reqprefix '64:1'                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                               
config interface 'VWAN_LB1'                                                                                                                                                                                                                                                   
        option ifname 'vwan1'                                                                                                                                                                                                                                                 
        option proto 'dhcpv6'                                                                                                                                                                                                                                                 
        option reqaddress 'try'                                                                                                                                                                                                                                               
        option reqprefix 'auto'                                                                                                                                                                                                                                               
        option noclientfqdn '1'                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                               
config interface 'VWAN_LB2'                                                                                                                                                                                                                                                   
        option ifname 'vwan2'                                                                                                                                                                                                                                                 
        option proto 'dhcpv6'                                                                                                                                                                                                                                                 
        option reqaddress 'try'                                                                                                                                                                                                                                               
        option reqprefix 'auto'                                                                                                                                                                                                                                               
        option noclientfdqn '1'                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                               
config route6                                                                                                                                                                                                                                                                 
        option target '2a01:cbxx:xx:xxc3::/64'                                                                                                                                                                                                                               
        option gateway 'fe80::a00:27ff:fe75:f7fc'                                                                                                                                                                                                                             
        option interface 'lan'                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                               
config route6                                                                                                                                                                                                                                                                 
        option target '2a01:cbxx:xxx:xxee::/64'                                                                                                                                                                                                                               
        option interface 'lan'                                                                                                                                                                                                                                                 
        option gateway 'fe80::a00:27ff:fe75:f7fc'   

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 542
  • Paris (75)
pour résumer:

* entre livebox et openwrt: c'est ok tu as 3 prefixes et ca route bien
* entre openwrt et autre routeur coté lan: tu n'arrives pas a déléguer automatiquement

donc c'est un problème (ou une limitation) d'odhcpd. t'as des logs en principe (logread -e dhcp) ? y'a quoi dans ton /etc/config/dhcp ? que donne 'ubus call dhcp ipv6leases' ?


renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 291
Le néant.

root@LEDE:~# ubus call dhcp ipv6leases
{
"device": {
"eth0.40": {
"leases": [

]
},
"br-lan": {
"leases": [

]
}
}
}

/etc/config/dhcp
config dhcp 'lan'
option interface 'lan'
option ignore '1'
option dhcpv6_pd '1'
option dhcpv6_na '0'
list domain 'dom.lan'
list dns 'fe80::ba27:ebff:xxxx:xxxx'
option ra_management '0'
option ra 'server'
option dhcpv6 'server'


renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 291
Testé avec un 2nd openwrt en VM et une Linux mint derrière ça marche nickel, accès SSH validé. Et après plusieurs essais, j'ai enfin compris la logique du parefeu de la LB : pour que tout marche dans tous les cas il ne faut pas cocher TCP/UDP dans les protocoles sur LB monitor et faire les ouvertures de port une par une... Car si on regarde bien, TCP et UDP ne sont pas dans la liste des protos sur la LB, ceci explique sans doute cela.

Chose que je n'ai pas compris par contre, il a fallut que je définisse manuellement la route par défaut, alors que le SLAAC est bien actif côté WAN. Avec les tests sur ma debian un peu plus tôt, la route était bien mise en place comme n'importe quel hôte. Ou c'est lié au préfixe absent, y'a peut-être une mise en place automatique quand celui-ci est reçu.

EDIT : En comparant avec le routeur principal, il n'y a pas de route par défaut tout court, uniquement en fonction du préfixe, ce qui explique pourquoi elle était inexistante sur la VM. Il faut donc bien que le préfixe soit reçu sur le WAN.

Si j'arrive la mettre en place rapidement, je testerais aussi la délégation derrière la VM, peut-être que la version de mon routeur est trop ancienne (19.07), odhcpd a peut-être eu des MAJ depuis le temps.
« Modifié: 15 mars 2025 à 04:47:54 par renaud07 »

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 673
Si tu obtiens tous les /64, tu as bien un /56 routé en intégralité.
Si tu configures odhcpd pour distribuer des préfixes dans le /56, ça ne marche pas ? Il faudra peut-être scripter pour reconfigurer ce /56 en cas de changement de préfixes délégués par la livebox.

J'aime l'ingéniosité, mais ca fait quand même bricole :)

[...] Si je comprend bien, pour distribuer en PD coté LAN il faut au moins un /63 ? si on a plusieurs /64 non contigues ça ne le fait pas ? [...]

Comment le routeur demandant un préfixe sait-il que d'autres préfixes proviennent tous du même préfixe délégué (par un autre moyen) ?

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 542
  • Paris (75)
Comment le routeur demandant un préfixe sait-il que d'autres préfixes proviennent tous du même préfixe délégué (par un autre moyen) ?

je ne comprend pas bien la question.

le routeur "demandant" ne connait rien. il fait un broadcast sur son interface wan et si y'a au moins un serveur dhcpv6-pd dessus, il aura une réponse.

@renaud07

J'ai testé avec une VM openwrt a jour. il y a bien une limitation : un /64 reçu delegation ne peut être redonné entièrement a un autre routeur.

Si on lui donne un /63 il saura donner 2 /64. c'est une limitation dans le code , le cas n'est pas prévu car en général quand on recoit un /64 c'est pour l'utiliser localement sur un autre interface (en général son LAN) et pas pour la re-déléguer a un autre équipement.

j'ai fait un peu le tour du sujet.
le principe de fonctionnement est:

client dhcpv6 sur wan: odhcp6c, il est basic, a chaque évènement dhcp il reconfigure l'interface.
pour les prefixes reçus en délégation, il appele la function proto_add_ipv6_prefix de netifd

on peut donc retrouver cette info dans netifd avec  ubus:

ubus  call network.interface.wan6 statuson trouvera dans le résultat:
        "ipv6-prefix": [
                {
                        "address": "2a01:xxxx:xxxx:78d1::",
                        "mask": 64,
                        "preferred": 588,
                        "valid": 86388,
                        "class": "wan6",
                        "assigned": {

                        }
                }
        ],

la "class" correspond a "ip6class" dans uci et "IPv6 prefix filter" dans luci.  Ca permet coté downstream de choisir ou pas cet upstream. Dans openwrt c'est le nom de l'interface donc. (cas ou on a plusieurs wan par exemple et qu'on veut controler qui delegue vers ou).

Une delegation s'applique localement sur une interface avec "ipassign".

En server de delegation odhcpd n'a pas beaucoup de configuration et documentation. il lit les infos via ubus mais ce sait pas donner un /64 depuis un /64 (je ne sais meme pas si la norme autorise cela d'ailleurs)

odhcpd a un attribut d'interface non documenté c'est "pd_manager" qui permet de préciser un socket (local ou réseau) vers un autre programme qui va fournit les prefixes a déléguer. Mais je n'ai rien trouver en ligne ou dans les packages openwrt qui correspondrait.
Il serait a priori pas trop compliquer d'écrire un programme compatible avec ce truc...

mais il y aussi les autres packages dhcp server dans openwrt, notamment isc et kia. ce sont un peu les "standards" dans le monde Linux donc ca vaut peut-etre le coup de tenter avec eux plutot que d'utiliser odhcpd. j'ai souvent utiliser isc mais pas dans ce contexte. jamais kia encore.

on peut aussi ouvrir un ticket https://github.com/openwrt/odhcpd/issues (ou voir si y'a deja une demande identique).

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 291
Merci pour tes recherches. C'est bien ce que je pensais : impossible de faire quoi que ce soit si on juste un /64.

ISC, je l'utilise aussi en DHCP principal sur mon LAN, il me servait aussi à adresser la LB quand je faisais mes tests. Niveau config, je sais pas si on peut le faire autant dynamique que odhcpd qui est très intégré au système, c'est plus fait pour de l'assignation statique... Pas testé non plus kea pour l'instant.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 673
@kgersen :

Je croyais que l'idée était de fabriquer un préfixe pour parvenir à le déléguer. Combiner, par exemple, quatre /64 pour former un /62.

Citation de: kgersen
Si on lui donne un /63 il saura donner 2 /64. C'est une limitation dans le code , le cas n'est pas prévu car en général quand on recoit un /64 c'est pour l'utiliser localement sur un autre interface (en général son LAN) et pas pour la re-déléguer a un autre équipement.

Très étrange !

Exemple avec quatre routeurs R0, R1, R2, R3 :

R0 délègue un préfixe /64 à R1.
R1 délègue à nouveau ce préfixe /64 à R2.
R2 ne délègue pas ce préfixe /64 à R3.

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 542
  • Paris (75)
@kgersen :

Je croyais que l'idée était de fabriquer un préfixe pour parvenir à le déléguer. Combiner, par exemple, quatre /64 pour former un /62.

Très étrange !

Exemple avec quatre routeurs R0, R1, R2, R3 :

R0 délègue un préfixe /64 à R1.
R1 délègue à nouveau ce préfixe /64 à R2.
R2 ne délègue pas ce préfixe /64 à R3.

Désolé mais je ne comprend rien a ce que tu essais de dire...


basilix

  • Abonné Orange Fibre
  • *
  • Messages: 673
Citation de: kgersen
Désolé mais je ne comprend rien a ce que tu essais de dire...

Le serveur DHCP de la Livebox délègue un préfixe /64 à OpenWrt. Le serveur DHCP de OpenWrt devrait potentiellement déléguer ce préfixe /64 à un autre routeur.
Donc, le serveur DHCP de ce routeur pourrait-il déléguer à nouveau ce préfixe /64 à un autre routeur ? Et ainsi de suite...

Il me semble qu'il serait impossible de déléguer un préfixe /64 (non assigné à une interface) à plusieurs routeurs successifs. Je ne comprends pas la logique. Dans le
cas d'un préfixe de longueur inférieure à 64 bits, pour du routage statique, chaque interface se voit assigner un préfixe. Une partie de sa plage d'adresse est réallouée
à un client DHCP (requesting router) associé à une de ses interfaces.

P.S. : Si on ne comprend pas ce que j'essaye de dire, alors j'arrête. De mon côté, c'est inutile de persister à tourner en boucle. Et de votre côté, inutile de me répondre.
« Modifié: 16 mars 2025 à 10:41:00 par basilix »