Auteur Sujet: Virtualbox : L'IPv6 ne fonctionne pas en wifi  (Lu 4160 fois)

0 Membres et 1 Invité sur ce sujet

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« le: 01 décembre 2022 à 20:06:46 »
Bonjour,

Je viens de tomber sur vieux bug de virtualbox, non résolu à ce jour, qui fait que l'IPv6 est inopérant en bridge lorsque l'hôte est connecté en wifi. Ça affecte en particulier Linux et appremment (c'est comme ça que je suis tombé dessus) les vieilles versions de windows (XP/2003). Bizarrement, un invité windows (à partir de vista) fonctionne sans problème puisque je ne m'étais rendu compte de rien jusqu'à présent.

A priori, ça serait lié aux paquets NS multicast, qui n’atteignent jamais la VM :
https://www.virtualbox.org/ticket/5503
https://www.virtualbox.org/ticket/14212

Si on se connecte en filaire, tout refonctionne instantanément.

La seule solution que j'ai trouvé et qui débloque la situation est de ping la GUA du routeur. Celui-ci répond à la GUA de la VM et cette fois ça marche.

Existe-t-il une solution plus pratique ? À part espérer une hypothétique correction...

Merci  :)

simon

  • Abonné Orange Fibre
  • *
  • Messages: 935
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #1 le: 02 décembre 2022 à 15:43:36 »
> Bizarrement, un invité windows (à partir de vista) fonctionne sans problème puisque je ne m'étais rendu compte de rien jusqu'à présent

Tu pourrais faire une capture sur une telle VM pour essayer de comprendre pourquoi le bug ne se produit pas ? Je connais bien ce bug (j'ai pas mal travaillé dessus), je serai étonné que ca affecte un guest OS mais pas un autre.

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #2 le: 02 décembre 2022 à 17:48:40 »
Je vois que je ne pouvais pas mieux tomber  :)

Voici les 2 captures :

simon

  • Abonné Orange Fibre
  • *
  • Messages: 935
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #3 le: 03 décembre 2022 à 07:27:01 »
OK, donc dans le cas du guest Windows, on voit bien des NS/NA pour une GUA, ce qu'on ne voit pas dans le cas de Linux.

On voit que les VM solicitent un routeur, recoivent un RA et configurent leurs adresses sur l'interface. Quand tu as fait tes captures, c'était juste après avoir activé la connexion réseau ? La VM démarre avec la connexion réseau désactivée dans ce cas ? Je demande pour savoir si on démarre avec un cache ND vide sur le routeur ou pas.

Je pars du principe que :
- ces captures ont été faites en wifi,
- tu n'as pas généré de traffic intentionnellement depuis les VM (comme faire un ping de la GUA du routeur) depuis le redémarrage de la VM,
- un hote sur le réseau (le routeur?) émet des NS pour la/les GUA/ULA configurées sur les VM.

J'ai bon ?

On ne voit aucun multicast ND de la part du routeur sur ces deux captures, mais on voit bien des échanges NS/NA unicast, ainsi que des router discovery (multicast) et unicast router advertisements. J'en déduis que :
- le patch a finalement été intégré à VirtualBox, car l'adresse MAC de la VM contenue dans les NA est bien remplacée par celle de ton interface Wifi (sinon, les échanges NS/NA unicast ne fonctionneraient pas). Tu devrais d'ailleurs pouvoir le vérifier en comparant les adresses MAC inclues dans les paquets NA émises par le guest de chaque côté du bridge VirtualBox (coté wifi et côté guest, donc) : elles devraient être différentes.
- les RS (router soliciation) émis par le guest en multicast arrivent bien à l'acces point (sinon, il n'y aurait pas de neighbor advertisements en retour),
- le guest ne recoit qu'une partie des paquets multicast recus par ton interface wifi.

Selon moi, ce qui sauve Windows, c'est qu'il émet des unsolicited neighbor advertisements juste après avoir configuré ses adresses (paquets #284 à 296 dans ta seconde capture).
Ces paquets sont émis en multicast et contiennent l'adresse MAC de la VM. Après leur réception par le point d'accès, ils contiennent l'adresse MAC de la carte wifi du host, et peuplent les caches ND de tous les hôtes qui les recoivent, dont le routeur.

Lorsque le routeur veut émettre un paquet vers la GUA du guest, il a déjà dans son cache ND une adresse MAC correspondant. Il peut donc envoyer le paquet en question sans avoir à faire une requête NS préalable, puis revalide périodiquement l'entrée de ce cache en faisant des requêtes NS unicast.
-> Il n'y a donc jamais de NS multicast émis par le routeur, et le traffic est acheminé correctement.

Dans ta capture Linux, ces unsolicited neighbor advertisements ne sont pas émis. Le routeur n'a donc pas d'entrée pour la GUA de la VM dans son cache ND, et doit donc émettre un NS multicast pour savoir à quelle adresse MAC le transmettre.
Ce paquet n'est jamais recu par ton guest, il n'y répond donc pas (logique). Le routeur timeout et jette le paquet original.

Maintenant, cherchons à résoudre le souci.
Normalement, VirtualBox devrait configurer ton interface wifi en "promiscuous", c'est à dire qu'elle désactive son filtre multicast et accepte toute trame multicast recue. Tu peux faire
$ ip link
et regarder les flags de ton interface (par exemple, chez moi, j'ai wlp2s0b1: <BROADCAST,MULTICAST,UP,LOWER_UP>).
Si le flag ALLMULTI n'est pas présent, ca n'a pas fonctionné. Tu peux faire
# ip link set $DEV allmulticast on
pour l'activer. Chez moi, ca donne wlp2s0b1: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP>.

Ensuite, refais une capture sur le guest. Est-ce que les NS multicast traversent le bridge VirtualBox cette fois ci ? Est-ce que ca résoud tes soucis de connectivité non sollicitée ?

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #4 le: 03 décembre 2022 à 17:16:05 »
Ouiiiiiii  8) Merci beaucoup !

En relisant le ticket de virtualbox hier soir, j'allais justement tester en mettant la carte en promiscous, tu m'as devancé^^ Et on a la réponse pour XP : il n'envoie pas non plus de NA en multicast, comme Linux donc.

Pour les paquets multicast sur 10, c'est  les n°213 à 216 plutôt ? (vers ff02::1) Je vois pas de 284 à 296 (ou je regarde pas la bonne colonne ?)

Citer
On voit que les VM solicitent un routeur, recoivent un RA et configurent leurs adresses sur l'interface. Quand tu as fait tes captures, c'était juste après avoir activé la connexion réseau ? La VM démarre avec la connexion réseau désactivée dans ce cas ? Je demande pour savoir si on démarre avec un cache ND vide sur le routeur ou pas.

Je pars du principe que :
- ces captures ont été faites en wifi,
- tu n'as pas généré de traffic intentionnellement depuis les VM (comme faire un ping de la GUA du routeur) depuis le redémarrage de la VM,
- un hote sur le réseau (le routeur?) émet des NS pour la/les GUA/ULA configurées sur les VM.

J'ai bon ?

Yep

Par contre, il me reste toujours un petit soucis : impossible d'avoir de l'ipv6 à travers un routeur supplémentaire. Je voulais faire un sous réseau spécial VM (via pfsense ou un 2nd openwrt) comme sur mon deskop en filaire, sauf que ça marche pas... j'ai  l'impression que c'est également lié au multicast, mais je comprends pas pourquoi ça passe pas. Sachant que je suis en réseau interne entre les VM et le routeur et le routeur en bridge.

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #5 le: 03 décembre 2022 à 20:00:40 »
Concernant mon problème de Pfsense, si je ping à partir d'une VM mon routeur principal :  Les paquets partent bien, reviennent, mais n’atteignent jamais le pfsense.

J'ai essayé de faire des captures en switchant filaire-wifi, mais c'est pas évident...

simon

  • Abonné Orange Fibre
  • *
  • Messages: 935
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #6 le: 03 décembre 2022 à 20:32:45 »
Ouiiiiiii  8) Merci beaucoup !
Nice, donc ca marche. Et ca devrait marcher avec n'importe quel guest.

Pour les paquets multicast sur 10, c'est  les n°213 à 216 plutôt ? (vers ff02::1) Je vois pas de 284 à 296 (ou je regarde pas la bonne colonne ?)
Oui, je ne sais pas d'où viennent mes numéros, j'avais clairement pas les yeux en face des trous :)

Si tu arrives à faire des captures, ca aidera grandement pour debugger ton nouveau souci.

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #7 le: 03 décembre 2022 à 23:35:40 »
Alors, j'ai essayé d'analyser une capture côté hôte, et... je ne vois rien de particulier. Hormis le fait que sur le wifi la MAC soit remplacée le reste semble identique. Je me demande s'il n'y aurait pas un problème avec le mécanisme de VB. Car comment VB détermine s'il faut envoyer le paquet à la VM ou non ? Y'a une correspondance IP <-> MAC ?

Ce que je suppose : comme les paquets retours arrivent avec la MAC de la carte wifi, il doit remplacer celle-ci par la MAC du pfsense en cherchant dans sa table. Sauf que pour les VM situées derrière le pfsense, l'IP étant différente et la MAC wan du pfsense déjà associée à son IP, il considère qu'elle est inconnue et ignore le paquet.

Ça se tient ? ou c'est pas du tout comme ça que ça fonctionne ?

Je te laisse les captures entières, si jamais tu trouves quelque chose... pour t'y retrouver :
-b05b : pfsense
-c2d2 : routeur principal
-9400 : préfixe principal
-9402 : préfixe délégué




renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #8 le: 05 décembre 2022 à 21:27:03 »
À court d'idées, j'ai essayé avec Vmware workstation. Dans le ticket il était évoqué que ça fonctionnait sans problème, et... ÇA MARCHE !

En faisant un capture côté hôte, j'ai trouvé un truc intéressant : les paquets sont "dupliqués" et systématiquement sur le premier on retrouve la MAC de la VM, alors que sur le second apparaît celle de l'interface wifi. Avec vmware, les deux paquets ont tous les deux l'@MAC de la carte wifi, à aucun moment la MAC de la VM n'est visible. Même histoire avec l'échange NS/NA juste avant le ping.

simon

  • Abonné Orange Fibre
  • *
  • Messages: 935
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #9 le: 06 décembre 2022 à 22:29:17 »
J'ai un peu perdu le fil, désolé.

Donc tu veux mettre un pfSense dans une VM et lui router un /64 (je suppose) de ton /56 attribué par Orange.
Derrière ce pfSense (qui aurait deux interfaces: une bridgée à ton LAN, soit par cable, soit en wifi, et l'autre vers un bridge virtuel), il y aurait d'autrs VM, qui seraient uniquement connectées à la seconde interface du pfSense.

Orange <-> routeur physique <-> host <-> pfsense virtualisé <-> autre vm derrière le pfsense

J'ai bon ?

La duplication des paquets, ca sent pas bon. On dirait que les VM sensées être derrière le pfSense étaient bridgées au LAN. C'est possible ? Ou est-ce que ton pfSense a bien deux interfaces réseau différentes ?

simon

  • Abonné Orange Fibre
  • *
  • Messages: 935
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #10 le: 06 décembre 2022 à 22:42:40 »
> Y'a une correspondance IP <-> MAC ?

Yep, c'est du MAC NAT. On ne touche pas aux adresses IP, mais dans le sens vm -> net, on remplace l'adresse source MAC des VM par celle de l'interface wifi du host.
Dans le sens net -> vm. on fait l'inverse : on remplace l'adresse MAC de destination (celle de l'interface wifi du host, donc) par celle de la VM.

Comme VirtualBox a besoin de savoir quelle adresse MAC utiliser pour faire le remplacement dans le sens net -> vm, il lui faut un identifiant qui ne change pas : c'est l'adresse IP. Il maintient donc une table dynamique d'associations entre IP<->MAC, qu'il maintient passivement, en observant le traffic IMCPv6 NS/NA.

En gros, c'est le même principe que du NAT L3 (IP), sauf c'est du NAT au niveau L2.

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Virtualbox : L'IPv6 ne fonctionne pas en wifi
« Réponse #11 le: 06 décembre 2022 à 22:58:04 »
Donc tu veux mettre un pfSense dans une VM et lui router un /64 (je suppose) de ton /56 attribué par Orange.
Derrière ce pfSense (qui aurait deux interfaces: une bridgée à ton LAN, soit par cable, soit en wifi, et l'autre vers un bridge virtuel), il y aurait d'autrs VM, qui seraient uniquement connectées à la seconde interface du pfSense.

Orange <-> routeur physique <-> host <-> pfsense virtualisé <-> autre vm derrière le pfsense

J'ai bon ?

Tout à fait.

La duplication des paquets, ca sent pas bon. On dirait que les VM sensées être derrière le pfSense étaient bridgées au LAN. C'est possible ? Ou est-ce que ton pfSense a bien deux interfaces réseau différentes ?

Les VM ne sont pas connectées au LAN, pas de soucis de ce côté là. La duplication ne se fait que dans le sens pfsense > net. Un coup on a le paquet "original" avec la MAC de pfsense et celui d'après avec la MAC de l'interface. Ça fait pareil en filaire et tout passe sans problème (sans modif de la mac du coup)

Je suis en bridge/réseau interne sur le pfsense, et réseau interne sur les VM.

Yep, c'est du MAC NAT. On ne touche pas aux adresses IP, mais dans le sens vm -> net, on remplace l'adresse source MAC des VM par celle de l'interface wifi du host.
Dans le sens net -> vm. on fait l'inverse : on remplace l'adresse MAC de destination (celle de l'interface wifi du host, donc) par celle de la VM.

Comme VirtualBox a besoin de savoir quelle adresse MAC utiliser pour faire le remplacement dans le sens net -> vm, il lui faut un identifiant qui ne change pas : c'est l'adresse IP. Il maintient donc une table dynamique d'associations entre IP<->MAC, qu'il maintient passivement, en observant le traffic IMCPv6 NS/NA.

En gros, c'est le même principe que du NAT L3 (IP), sauf c'est du NAT au niveau L2.

Je suis pas trop mauvais en déduction à ce je vois  :)