Salut tout le monde,
j'essaye d'implémenter un encapsulateur IPv4 in IPv6. Je sais que les tunnels IP4IP6 existe sous linux mais j'ai besoin de le faire moi-même pour y apporter quelques modifications. Pour faire ça, j'utilise libipq (qui est un peu obsolète je sais).
Le principe est le suivant:
L'Host A ping l'host B en IPv4 (ping @IPv4B).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 IPv4/IPv6 IPv4/IPv6 Host A ---------------> Host B @IPv4A @IPv4B @IPv6A @IPv6B
Avec libipq, j'encapsule le ping V4 dans un paquet IPv6 ce qui donne une représentation du paquet suivante: [@IPv6A @IPv6B][@IPv4A @IPv4B][ICMPv4].
L'host B reçoit bien le ping IPv4 in IPv6. Je décaspule toujours grace à libipq l'en-tête IPv6. Cela donne le echo request IPv4 suivant: [@IPv4A @IPv4B][ICMPv4].
Ensuite, avec un raw socket ou je met sin->addr à @IPv4B, "j'envoi" le IPv4 echo request afin d'avoir un echo reply en réponse.
Le noyau me répond bien avec un echo reply mais c'est là que les soucis commencent.
L'echo reply a comme source address @IPv4B (logique) mais aussi comme destination address @IPv4B alors qu'évidemment, j'attends @IPv4A pour répondre au ping. Je pense que ça a quelque chose à voir avec le fait que mon echo request est "envoyé localement" au moment de la decapsulation mais j'arrive pas à voir vraiment pourquoi et surtout comment résoudre le þroblème.
Veuillez notez aussi que je fais que décapsuler/encapsuler les headers, je ne modifie jamais la source ou destination address.
Si quelqu'un a des infos, ça serait vraiment sympa.
Merci d'avance,
Tanguy
Partager