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

0 Membres et 1 Invité sur ce sujet

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 174
J'ai voulu tester le macvlan pour faire cracher tous ses préfixes à la LB. Alors, ça marche, mais on se retrouve coincé à devoir se contenter du routeur.

Vu que c'est /64 par /64 et par interface virtuelle, impossible de déléguer à un autre routeur, même si on assigne pas tous les préfixes au LAN. Y'a une astuce ou c'est mort ?

Par exemple sur la capture, on ne peut pas déléguer ee::/64 à un autre routeur, même en attribuant que c3::/64 au LAN. Par contre attribuer les 2 au LAN marche (mais pas de délégation non plus).

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 625
@renaud07 :

On peut légitiment se demander si les Livebox délégueront un jour d'autres longueurs de préfixe que du /64. Il s'agit peut-être d'une limitation fixée par Orange.
Auquel cas, il serait plus avisé d'intervertir la Livebox et le routeur. Si cela est un challenge, eh bien!... fais comme il te plaît.

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 524
  • Paris (75)
J'ai voulu tester le macvlan pour faire cracher tous ses préfixes à la LB. Alors, ça marche, mais on se retrouve coincé à devoir se contenter du routeur.

Vu que c'est /64 par /64 et par interface virtuelle, impossible de déléguer à un autre routeur, même si on assigne pas tous les préfixes au LAN. Y'a une astuce ou c'est mort ?

Par exemple sur la capture, on ne peut pas déléguer ee::/64 à un autre routeur, même en attribuant que c3::/64 au LAN. Par contre attribuer les 2 au LAN marche (mais pas de délégation non plus).

je ne connais pas assez openwrt a ce niveau. odhcp6c fait serveur de délégation ? ce n'est pas clair dans la doc. si ton interface a une IP dans ee::/64 c'est trop tard effectivement.

au besoin peut-etre un script indépendant peut faire un requete de prefix a la LB et le servir ensuite en delegation sur  une interface lan ? a creuser.

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 174
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, ca 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 :)

Je pense que le soucis vient du fait qu'on ne peut pas avoir tous les /64 sur une seule interface... D’ailleurs, je sais même pas comment configurer le client DHCP pour avoir plusieurs demandes de IA_PD /64 (en admettant que la box accepte, ce qui m'étonnerais)

Si c'est resté comme cela aussi longtemps, on peut penser que c'est bel et bien intentionnel pour segmenter les offres...
Dans ce cas, je me demande juste pourquoi la livebox répond positivement à une seconde requête de délégation.

Croisions les doigts pour que les demandes faites dans le topic des features avancées soient exaucées... Mais à priori, il y a déjà du mieux, puisque on peut désormais avoir 2 préfixes délégués qui fonctionnent, ce n'était pas le cas avant.

je ne connais pas assez openwrt a ce niveau. odhcp6c fait serveur de délégation ? ce n'est pas clair dans la doc. si ton interface a une IP dans ee::/64 c'est trop tard effectivement.

au besoin peut-etre un script indépendant peut faire un requete de prefix a la LB et le servir ensuite en delegation sur  une interface lan ? a creuser.

Yep, odhcp6c fait bien de la délégation. Lorsque je suis en direct, je récupère mon /56 sur le WAN et je peux déléguer un /60 par ex à un autre routeur sans soucis.

Pour le script c'est à creuser effectivement.
« Modifié: 11 mars 2025 à 19:39:14 par renaud07 »

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 625
Même problème en Slovaquie !

Source : https://openwrt.org/docs/guide-user/network/wan/isp-configurations#orange_slovensko

Citer
Downstream configuration for LAN interfaces

ip6assign: Prefix size used for assigned prefix to the interface (e.g. 64 will assign /64-prefixes)

ip6class:
Filter for prefix classes to accept on this interface (e.g. wan6 - only assign prefix from the respective interface, local - only assign the ULA-prefix)

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 174
Effectivement c'est odhcpd, mon doigt a ripé  ;) Je me suis servi de l'exemple AT&T pour la conf.

Et dire qu'il suffirait de mettre la partie firmware qui gère tout ça en opensource ouvert aux contributions pour faire un super truc activable à la demande, mais non...

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 524
  • Paris (75)
Je pense que le soucis vient du fait qu'on ne peut pas avoir tous les /64 sur une seule interface... D’ailleurs, je sais même pas comment configurer le client DHCP pour avoir plusieurs demandes de IA_PD /64 (en admettant que la box accepte, ce qui m'étonnerais)

Testé avec testdhcpv6pd, la lb supporte bien 2 ou plus demandes de prefix en 'meme temps'.

PS T:\dev\testdhcpv6pd> .\testdhcpv6pd -a 14 -p ::/64 -p ::/64 8
2025/03/11 22:01:34 Sending a DHCPv6-PD Solicit on interface Ethernet 10G Intel
[dhcpv6] 2025/03/11 22:01:34 sent message: Message{
  MessageType=SOLICIT
  TransactionID=0xd34841
  Options: [
    Client ID: DUID-LLT{HWType=Ethernet HWAddr=80:61:5f:0a:47:e9 Time=795042094}
    Requested Options: DNS, Domain Search List
    Elapsed Time: 0s
    IAPD: IAID=0x00000001 T1=0s T2=0s Options=[
      IA Prefix: {PreferredLifetime=0s, ValidLifetime=0s, Prefix=::/64, Options={[]}}
    ]
    IAPD: IAID=0x00000002 T1=0s T2=0s Options=[
      IA Prefix: {PreferredLifetime=0s, ValidLifetime=0s, Prefix=::/64, Options={[]}}
    ]
  ]
}
[dhcpv6] 2025/03/11 22:01:34 received message: Message{
  MessageType=ADVERTISE
  TransactionID=0xd34841
  Options: [
    Client ID: DUID-LLT{HWType=Ethernet HWAddr=80:61:5f:0a:47:e9 Time=795042094}
    Server ID: DUID-LL{HWType=Ethernet HWAddr=58:1d:d8:63:ad:c0}
    IAPD: IAID=0x00000001 T1=5m0s T2=8m0s Options=[
      IA Prefix: {PreferredLifetime=10m0s, ValidLifetime=24h0m0s, Prefix=2a01:xxxx:xxxx:78d4::/64, Options={[]}}
    ]
    IAPD: IAID=0x00000002 T1=5m0s T2=8m0s Options=[
      IA Prefix: {PreferredLifetime=10m0s, ValidLifetime=24h0m0s, Prefix=2a01:xxxx:xxxx:78da::/64, Options={[]}}
    ]
    Preference: [255]
    DNS: [2a01:xxxx:xxxx:7800:5a1d:d8ff:fe63:adc0]
    Domain Search List: [home]
  ]
}
2025/03/11 22:01:34 got a prefix = 2a01:xxxx:xxxx:78d4::/64 (pttl=10m0s,vttl=24h0m0s)
2025/03/11 22:01:34 got a prefix = 2a01:xxxx:xxxx:78da::/64 (pttl=10m0s,vttl=24h0m0s)
sauf que parfois ca propose 2 fois le meme .. (bug coté LB?).

du coup il serait plus safe de faire plusieurs demandes l'une a la suite.

selon la norme un meme client (identifié par son DUID) peut demander plusieurs prefixes (séparement ou d'un coup) en variant l'IAID de la demande. l'IAID est propre a chaque client donc 2 clients différents (DUID différents) peuvent avoir des IAID identiques.

concernant odhcpd, a regarder le  code rapidement, il communique par ubus donc on peut éventuellement lui envoyer des commandes par la  (cf doc commande ubus, on peut lister les serveurs inscrits et faire des scripts avec pour piloter les services).

Dans le cas d'une propagation de PD, j'imagine que le client (odhcp6c) signale le lease reçu de la LB au serveur PD (odhcpd) via ubus. Le code ubus coté serveur ne fait état que de leases IPv4 et IPv6 (mais on voit bien "ipv6-prefix" dans l'ubus du code serveur). mais je ne vois rien dans odhcp6c concernant ubus...donc y'a surement un script shell qui gere odhcp6c et agit a la reception des leases. ll faudrait trouver ce script.

bref y'a moyen peut-etre par ce coté (scripts +ubus) mais je n'ai pas de plateforme/vm openwrt sous la main pour creuser plus et faire des tests
« Modifié: 11 mars 2025 à 22:50:28 par kgersen »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 174
Après pas mal de recherches, j'ai enfin trouvé comment personaliser l'IAID : il faut ajouter :X à l'option reqprefix par exemple 64:5 64:4. Par contre, je ne sais pas trop la syntaxe pour le mettre dans le fichier de config. J'ai testé :
option reqprefix '64:4'
option reqprefix '64:5'
ou
option reqprefix '64:4 64:5'

Dans le premier cas seul une valeur est prise, dans la seconde, pas de requête (sans doute il ne faut pas l'écrire comme ça). Par contre en ligne de commande simple :
odhcp6c -P 64:4 -P 64:5 eth0.3
 8)
00:20:26.549744 IP6 (flowlabel 0x629b3, hlim 1, next-header UDP (17) payload length: 181) fe80::a0be:43ff:fec5:8057.546 > ff02::1:2.547: [udp sum ok] dhcp6 solicit (xid=d92492 (elapsed-time 819) (option-request SIP-servers-domain SIP-servers-address DNS-server DNS-search-list SNTP-servers NTP-server AFTR-Name opt_67 opt_94 opt_95 opt_96 opt_82) (client-ID hwaddr type 1 a2be43c58057) (reconfigure-accept) (Client-FQDN)[b] (IA_NA IAID:1 T1:0 T2:0) (IA_PD IAID:4 T1:0 T2:0 (IA_PD-prefix ::/64 pltime:0 vltime:0)) (IA_PD IAID:5 T1:0 T2:0 (IA_PD-prefix ::/64 pltime:0 vltime:0)))[/b]

Maintenant, faut tester avec la box, ce qui ne va pas être simple dans mon cas pour l'instant...

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 524
  • Paris (75)
les scripts pour le client  sont la: https://github.com/openwrt/openwrt/tree/main/package/network/ipv6/odhcp6c/files

ca met ce qui suit "reqprefix" apres "-P" pour le passer a odhcp6c :

[ "$reqprefix" != "no" ] && append opts "-P$reqprefix"

tu peux donc éventuellement essayer:

option reqprefix '64:4 -P 64:5'
c'est un peu cheat mais ca marchera peut-etre ;)


renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 174
Ça marche  :D

01:08:08.439941 IP6 (flowlabel 0x629b3, hlim 1, next-header UDP (17) payload length: 181) fe80::a0be:43ff:fec5:8057.546 > ff02::1:2.547: [udp sum ok] dhcp6 solicit (xid=de0b22 (elapsed-time 0) (option-request SIP-servers-domain SIP-servers-address DNS-server DNS-search-list SNTP-servers NTP-server AFTR-Name opt_67 opt_94 opt_95 opt_96 opt_82) (client-ID hwaddr type 1 a2be43c58057) (reconfigure-accept) (Client-FQDN) (IA_NA IAID:1 T1:0 T2:0) (IA_PD IAID:4 T1:0 T2:0 (IA_PD-prefix ::/64 pltime:0 vltime:0)) (IA_PD IAID:5 T1:0 T2:0 (IA_PD-prefix ::/64 pltime:0 vltime:0)))
01:08:08.457805 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 181) fe80::xxx:1eff:fe6c:xxxx.547 > fe80::a0be:43ff:fec5:8057.546: [udp sum ok] dhcp6 advertise (xid=de0b22 (client-ID hwaddr type 1 a2be43c58057) (server-ID hwaddr type 1 xxxx1e6cxxxx) (IA_PD IAID:4 T1:300 T2:480 (IA_PD-prefix 2a01:cbxx:xxx:x4f0::/64 pltime:600 vltime:86400)) (IA_PD IAID:5 T1:300 T2:480 (IA_PD-prefix 2a01:cbxx:xxx:x4ff::/64 pltime:600 vltime:86400)) (preference 255) (DNS-server 2a01:cbxx:xxxx:xxxx:xxxx:1eff:fe6c:xxxx fe80::xxx:1eff:fe6c:xxxx) (DNS-search-list home.))

Par contre, pas d’affichage du second préfixe dans luci... Bizarre. Mais c'est déjà un bon début.

EDIT : un ifstatus de l'interface remonte bien les deux prefixes, l'affichage dans luci ne doit pas avoir prévu le cas j'imagine...
root@LEDE:~# ifstatus WAN6_LB
{
"up": true,
"pending": false,
"available": true,
"autostart": true,
"dynamic": false,
"uptime": 11,
"l3_device": "eth0.3",
"proto": "dhcpv6",
"device": "eth0.3",
"updated": [
"addresses",
"routes",
"prefixes",
"data"
],
"metric": 0,
"dns_metric": 0,
"delegation": true,
"ipv4-address": [

],
"ipv6-address": [
{
"address": "2a01:cbxx:xxxx:xxxx:a0be:43ff:fec5:8057",
"mask": 64,
"preferred": 589,
"valid": 86389
}
],
"ipv6-prefix": [
{
"address": "2a01:cbxx:xxxx:x4f0::",
"mask": 64,
"preferred": 589,
"valid": 86389,
"class": "00000004",
"assigned": {
"VMs": {
"address": "2a01:cbxx:xxxx:x4f0::",
"mask": 64
}
}
},
{
"address": "2a01:cbxx:xxxx:x4ff::",
"mask": 64,
"preferred": 589,
"valid": 86389,
"class": "00000005",
"assigned": {
"VMs": {
"address": "2a01:cbxx:xxxx:x4ff::",
"mask": 64
}
}
}
],
"ipv6-prefix-assignment": [

],
"route": [
{
"target": "2a01:cbxx:xxx:xxxx::",
"mask": 64,
"nexthop": "::",
"metric": 256,
"valid": 86389,
"source": "::/0"
}
],
"dns-server": [
"2a01:cbxx:xxx:xxxx:xxxx:1eff:fe6c:xxxx",
"fe80::xxxx:1eff:fe6c:xxxx"
],
"dns-search": [
"home"
],
"neighbors": [

],
"inactive": {
"ipv4-address": [

],
"ipv6-address": [

],
"route": [

],
"dns-server": [

],
"dns-search": [

],
"neighbors": [

]
},
"data": {
"passthru": "001700202a01cb140d2a940046a61efffe6cab56fe8000000000000046a61efffe6cab560018000604686f6d6500"
}
}

Et encore mieux, les 2 coquins se sont attribué à l'interface VMS (je n'avais pas fait attention au début). Donc cette partie fonctionne. Reste à vérifier qu'en attribuant qu'un seul, je peux effectivement avoir l'autre sur un routeur différent.
« Modifié: 12 mars 2025 à 02:27:07 par renaud07 »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 4 174
Mauvaise nouvelle, ça ne fonctionne pas plus avec cette méthode même si un seul /64 est attribué au LAN, il me dit toujours NoPrefixAvail... à confirmer chez quelqu’un d'autre cela dit, sur une connexion plus stable...

J'ai également tenté de rajouter l'option ip6prefix au LAN en précisant un des préfixes délégués (on se retrouve donc avec un ipv6-pd sur le LAN), sans succès, après je sais pas si cette option est censé s'utiliser de cette manière ou si c'est juste pour faire du statique côté WAN.

D'après la doc, il faudrait assigner plus qu'un 64 au LAN pour que la délégation soit possible (et c'est bien ce que je fais en temps normal) Dans leur exemple ils assignent un /60 au LAN. Dans ce cas on peut distribuer du /62, /63 ou /64.

EDIT : Autre limitation qui est plus embêtante cette fois : J'ai voulu demander 5 préfixes, la LB me les renvoie pas de soucis, sauf que c'est openwrt cette fois qui n'en prend que 4... On va pas pouvoir déléguer les 255 de cette manière à moins de recourir aux interfaces virtuelles, mais ça va en faire un sacré paquet  :-X
« Modifié: 12 mars 2025 à 04:48:40 par renaud07 »

kgersen

  • Modérateur
  • Abonné Orange Fibre
  • *
  • Messages: 9 524
  • Paris (75)

D'après la doc, il faudrait assigner plus qu'un 64 au LAN pour que la délégation soit possible (et c'est bien ce que je fais en temps normal) Dans leur exemple ils assignent un /60 au LAN. Dans ce cas on peut distribuer du /62, /63 ou /64.


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

j'avoue la doc ici: https://openwrt.org/docs/guide-user/network/ipv6/configuration n'est pas clair clair.

mais le README du serveur a plus d'info: https://github.com/openwrt/odhcpd/blob/master/README

mais concerne /etc/config/dhcp  pas /etc/config/network

il y a une option "dhcpv6_pd" pour mettre le serveur en mode 'serveur de delegation'.

bon apres ton cas d'usage est plutot d'avoir un assignement sur plusieurs  LAN non ? ou tu veux re-deleguer derriere a d'autres routeurs?

poste tes 2 fichiers de config au besoin.

-> ce sujet devient un peu fouillis car le titre est "Remplacement de la Livebox par un routeur Openwrt" et on parle de delegation derriere une livebox ;)