Utilisez iptables pour transférer ipv6 vers ipv4?

Actuellement, j'ai une configuration où, en raison de la configuration qui prendrait une éternité à réparer, j'ai un server sur lequel ipv4 est accessible. J'ai aussi, cependant, un server auquel on peut accéder par ipv6. Je me demandais si je pouvais utiliser iptables pour transmettre le trafic ipv6 sur un certain port d'un server à un autre server en utilisant le trafic ipv4.

Les IPtables ne peuvent actuellement pas le faire, donc vous avez besoin d'un process d'espace user pour repérer les connections. socat est un outil approprié pour cela:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234 

Comme indiqué dans les commentaires sur votre question , NAT64 est loin d'être prêt, même 3 ans plus tard.

Vous pourriez, cependant, essayer 6tunnel , comme cela a été suggéré par la perplexité.

Heureusement, il est présent dans les repositorys Debian et Ubuntu, donc vous pouvez l'installer très facilement en utilisant sudo apt-get install 6tunnel . Si vous utilisez un autre système, vous devrez le build à partir de la source .

Construire à partir de sources n'est vraiment pas difficile, et il s'agit simplement d'exécuter certaines commands (en tant que root):

 git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install 

Voici sa syntaxe, simplifiée:

 6tunnel [-4|-6] [-l local-host] original-port destination-host destination-port 
  • Le [-4|-6] est facultatif et vous permet de spécifier si vous lieriez (écoutez) sur IPv4 ou IPv6 (respectivement).
  • -l est également facultatif. Il vous permet de choisir sur quelle adresse (IPv4 ou IPv6) vous souhaitez lier.
  • Le port d'origine est le port sur lequel vous lieriez.
  • L' hôte de destination est l'endroit où vous transférerez le trafic vers. Il peut être n'importe où: localhost, ou ailleurs sur votre réseau ou sur Internet.
  • Le port de destination est le port de l'hôte de destination qui recevra votre trafic réapathé.

Par exemple, si vous souhaitez autoriser un server IPv4 uniquement, à l'écoute sur le port 1337, à accéder à IPv6, utilisez:

 6tunnel -6 1337 localhost 1337 

La command ci-dessus écoutera sur le port 1337 sur IPv6 et transmet le trafic vers le port 1337 sur la même machine via IPv4. Il fonctionnera ensuite en arrière-plan, donc vous ne devez pas vous en soucier.

En fait, vous devez configurer un travail de cron pour vous assurer qu'il fonctionne encore. 6tunnel fournit un exemple pour votre commodité! L'exécution sur le démarrage ne devrait pas être une mauvaise idée non plus.

Pour plus de documentation, exécutez 6tunnel -h ou man 6tunnel .

Les versions récentes de xinetd peuvent également écouter sur IPv6, puis transmettre la connection à une adresse IPv4.

Un exemple de configuration qui écoute les connections IPv6 sur le port 3389 et les transmet au port 3389 d'une adresse IPv4 interne:

 service rdp_port_forward { flags = IPv6 disable = no type = UNLISTED socket_type = stream protocol = tcp user = nobody wait = no redirect = 10.187.20.42 3389 port = 3389 } 

Cela peut être utile dans des environnements plus restreints, car xinetd est susceptible d'être installé avec votre système de base ou disponible dans les repositorys de fournisseurs approuvés.

Plus pour le bénéfice des personnes qui trouvent cette page que l'OP nécessairement (je suis venu ici à la search d'une solution à la connectivité IPv6 pour une application IPv4 (Twisted)), une possibilité est l'application 6tunnel, écoute IPv6 et transmet les requests à une autre interface et Port.

Je voulais commenter sur Leo Lams réponse et upvote, mais je n'ai pas assez de réputation. Tout d'abord: Merci beaucoup Leo Lam!

Pour ceux qui arrivent dans ce fil: Mon FAI a changé ma connection de IPv4 à IPv6 avec Dual Stack Lite, ce qui signifie que je n'ai plus mon propre adresse IPv4. C'était un problème car je souhaite accéder à ma camera IP à partir de n'importe quel qui ne supporte pas IPv6. Pour résoudre ce problème, j'ai essayé ce qui suit:

  1. Activation d'IPv6 Forward pour le port 99 dans mon routeur vers mon ordinateur Ubuntu.
  2. Machine Ubuntu (réseau domestique): sudo 6tunnel -6 99 192.168.178.35 80
  3. vServer Debian avec IPv4 statique et adresse IPv6: sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian: Autoriser les connections tcp entrantes sur le port 99 dans iptables

Le préfixe ipv6 a été noté dans mon routeur et l'ID de l'interface a été mappé dans le process d'apathement IPv6.

Maintenant, je peux accéder à la camera de n'importe où en utilisant le domaine vServer example.com:99 .. Parfait! Je prévois soit d'get une framboise qui remplira ce travail ou un banana pi m3 pour d'autres tâches aussi.