Maintenant, j'aimerais bien passer en dynamique sur la partie IPv4.
Pour l'adresse IPv4 partagée :
Le préfixe IPv4 se trouve dans la réponse DHCPv6, dans l'option S46 MAP-E Container. Il est peut être possible de récupérer le contenu de cette option dans RouterOS, pour le traiter dans un script. C'est la variable "options" qui contient un tableau des options reçues. Pour demander cette option, utiliser le code option 6 dans le client DHCPv6 avec une chaine hexa pour demander l'option 94.
La chaîne hexa :
0x005e
J'ai vérifié les données reçues dans la variable $options, elles sont utilisables, mais elles sont en hexa brute. Il faudrait créer un script pour parser et mettre en forme.
Le préfixe Ipv4 reçu dans l'option S46 est un /11. Pour obtenir l'IPv4 partagée, il suffit (!) de concaténer ces 11 bits du préfixe IPv4 avec les bits 38 à 58 du préfixe IPv6 en /60 (soit 21 bits) délivré dans la réponse DHCPv6, puis de convertir ces 32 bits en adresse IPv4 décimale.
On déduit qu'il s'agit des bits 38 à 58 parce que l'option S46 reçue indique un préfixe IPv6 en /37. Ce sont donc les (32 - 11 =) 21 bits suivants qui permettent de forger l'IPv4 du client, les 11 premiers bits de l'IPv4 étant fournis par le préfixe /11.
Après vérification cela fonctionne et cela correspond bien à ce qui est expliqué dans la RFC7597.
Pour obtenir l'adresse IPv6 source du tunnel il suffit (!) de concaténer les 64 bits du préfixe IPv6 /60, suivis de 16 bits à zéro, puis les 32 bits de l'adresse IPv4 partagée, puis les 2 bits du PSID (bits 59 et 60 du préfixe IPv6 /60).
Le PSID, donc de 0 à 3 puisque sur deux bits dans cette configuration de mapping, indique la plage de ports allouée :
PSID = 00 -> ports 0 à 16383
PSID = 01 -> ports 16384 à 32767
PSID = 10 -> ports 32768 à 49151
PSID = 11 -> ports 49152 à 65535
L'adresse destination du tunnel (BR, border router) se trouve également dans la réponse DHCPv6 lorsqu'on demande l'option S46 MAP-E container.
Sinon je n'ai toujours pas d'explication à la présence d'un préfixe IPV6 en /80 présenté par NDP ainsi que l'adresse IPv6 incluse dans ce préfixe, obtenue en DHCPv6. Sert-elle pour la configuration de la Freebox (accès distant Freebox OS) ?
Pour l'adresse IPv4 fullstack, comment l'obtenir en dynamique ? J'avais réalisé une capture entre l'ONT et la freebox, mais en mode bridge. Il faudrait peut être faire une capture en mode routeur pour voir ce qu'il se passe au niveau de l'attribution de cette adresse IPv4.
Des infos sur le sujet, pour MAP-T, qui est proche de MAP-E :
https://github.com/openwrt/openwrt/blob/openwrt-22.03/package/network/ipv6/map/src/mapcalc.chttps://nicmx.github.io/Jool/en/map-t.htmlhttps://github.com/ejordangottlieb/pyswmapIci également :
https://www.juniper.net/documentation/us/en/software/junos/interfaces-next-gen-services/topics/topic-map/usf-map-tm.htmlhttps://www.cisco.com/c/en/us/td/docs/routers/asr9000/software/asr9k-r7-9/configuration/guide/b-cgnat-cg-asr9k-79x/cgipv6-without-service-modules.html#id_114607Rien de plus simple le MAP-E !
Ci-dessous la règle de mapping chez Free pour le MAP-E en IPv4 partagée (adresse IPv6 non réelle) :