-
IPv6 comment faire ?
Salut,
J'ai une petite application serveur qui tourne pour l'instant parfaitement bien en IPv4. J'aimerais faire en sorte qu'elle fonctionne aussi en IPv6, histoire d'être prêt quand ça arrivera.
J'ai fait pas mal de recherches sur le sujet, mais j'en encore quelques questions sans réponse.
Pour commencer, est-ce qu'il est possible de redévelopper l'application pour qu'elle n'utilise que l'IPv6 mais continue de traiter les demandes venant des adresses en IPv4 (soit parce qu'on a pu convertir l'IPv4 en IPv6, soit parce qu'au niveau de la machine serveur on a pu mettre un tunnel ou je ne sais pas trop quoi qui convertit l'IPv4 en IPv6).
Si ce n'est pas possible, y a-t-il un moyen d'écouter sur un port et de ne pas préciser d'IP pour ainsi recevoir les demandes de l'IPv4 et IPv6 ?
Si c'est impossible, quelles sont les recommandations pour faire un serveur qui fonctionne aussi bien en IPv4 qu'en IPv6, faut-il créer 2 sockets serveurs une en IPv4 et une en IPv6 et écouter sur les deux simultanément ?
Bref j'avoue que j'ai du mal à voir comment régler ce problème facilement. Ce que j'aimerais c'est n'avoir plus que l'IPv6 plutôt que de devoir traiter les deux demandes de façon indépendante.
Si ça joue en quoi que ce soit, le serveur est destiné à tourner sur une debian et j'utilise la librairie boost.
Je vous remercie pour les réponses/conseils que vous pourrez m'apporter !
-
En fait c'est un poil compliqué...
Pour des raisons 'historiques', un socket doit être 'bindé' à une address-family (AF_INET pour IPv4, AF_INET6 pour IPv6)
Il me semble que certains OS décident de passer l'IPv4 sur l'IPv6 à travers un "silent" tunnel, mais la recommandation de l'IETF est de ne *pas* le faire (afin de bien séparer distinctement les deux protocoles).
Donc... grosso merdo... Sous windows, il *peut* suffire d'écouter en IPv6 et recevoir les requêtes IPv4 quand même. Mais pas sous Linux par exemple.
Le mieux est encore d'avoir deux sockets, un en IPv4, l'autre en IPv6, et faire soit même les traductions. Cela ne demande pas 2 threads, juste deux sockets.
Quant au "quand ca arrivera", se traduit par *maintenant* :) Tous les windows actuels ont IPv6 installé, et se mettront en IPv6 dès que leur routeur déclarera une route ;) Tous les programmes récents (et correctement réalisés) utilisent indistinctement Ipv6 ou Ipv4... Il ne reste plus que les ISPs donc...
-
Merci d'avoir répondu !
J'avais espéré ne pas devoir conserver les deux interfaces, mais si je n'ai pas le choix, je vais faire comme ça ^^