Utilisez iptables pour transférer ipv6 vers ipv4?

15

Actuellement, j'ai une configuration où, en raison d'une configuration qui prendrait une éternité à réparer, j'ai un serveur qui n'est accessible que par ipv4. Cependant, j'ai également un serveur accessible par ipv6. Je me demandais si je pouvais utiliser iptables pour transférer le trafic ipv6 sur un certain port d'un des serveurs vers un autre serveur utilisant le trafic ipv4.

Eli
la source
2
Ce que vous cherchez s'appelle NAT64, ce que je ne pense pas qu'iptables fera (encore).
Chris S
Chris a raison - les RFC NAT64 viennent d'être publiés, je lui donnerais un moment jusqu'à ce que quoi que ce soit le supporte vraiment. Cela dit, vous pourrez peut-être atteindre votre objectif d'une manière différente, mais nous n'avons pas suffisamment de détails pour en être sûr. Par exemple, s'il s'agit d'un serveur HTTP, vous pouvez inverser le proxy des requêtes entre les protocoles.
Shane Madden

Réponses:

16

IPtables ne peut actuellement pas le faire, vous avez donc besoin d'un processus d'espace utilisateur pour proxy les connexions. socat est un outil approprié pour cela:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234
mgorven
la source
1
merci, cela a été utile! Au cas où quelqu'un chercherait une solution UDP: socat UDP6-RECVFROM: 64444, fork UDP4-SENDTO: localhost: 64443 a fonctionné pour moi
Alexander
10

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

Vous pouvez cependant essayer 6tunnel, comme le suggère la perplexité.

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

Construire à partir des sources n'est vraiment pas difficile, et consiste simplement à exécuter certaines commandes (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
  • L' [-4|-6]option est facultative et vous permet de spécifier si vous allez lier (écouter) sur IPv4 ou IPv6 (respectivement).
  • -lest également facultative. Il vous permet de choisir à quelle adresse (IPv4 ou IPv6) vous souhaitez lier.
  • Le port d'origine est le port sur lequel vous allez vous lier.
  • L' hôte de destination est l'endroit où vous transférez le trafic. Cela 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 transféré.

Par exemple, si vous souhaitez autoriser l'accès à un serveur IPv4 uniquement, à l'écoute sur le port 1337, via IPv6, utilisez:

6tunnel -6 1337 localhost 1337

La commande ci-dessus écoutera sur le port 1337 sur IPv6 et transmettra le trafic au port 1337 sur la même machine via IPv4. Il s'exécutera alors en arrière-plan, vous n'avez donc pas à vous en soucier.

En fait, vous devez configurer un travail cron pour vous assurer qu'il est toujours en cours d'exécution. 6tunnelfournit un exemple pour votre commodité! Le lancer au démarrage ne devrait pas non plus être une mauvaise idée.

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

Léo Lam
la source
La publier en tant que nouvelle réponse, car la modification de la réponse actuelle par énigme changerait beaucoup trop et pourrait être rejetée en tant que modification suggérée!
Léo Lam
5

Les versions récentes de xinetdpeuvent également écouter sur IPv6, puis transmettre la connexion à une adresse IPv4.

Un exemple de configuration qui écoute les connexions 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 il xinetdest susceptible d'être installé avec votre système de base ou disponible dans les référentiels de fournisseurs approuvés.

Michael Hampton
la source
3

Je voulais commenter la réponse et le vote positif de Leo Lams, mais je n'ai pas assez de réputation. Tout d'abord: merci beaucoup Leo Lam!

Pour tous ceux qui viennent dans ce fil: Mon FAI a changé ma connexion d'IPv4 en IPv6 avec Dual Stack Lite, ce qui signifie que je n'ai plus ma propre adresse IPv4. C'était un problème car je veux accéder à ma caméra IP à partir de n'importe quel endroit qui ne prend pas en charge IPv6. Pour résoudre ce problème, j'ai essayé ce qui suit:

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

Le préfixe ipv6 a été indiqué dans mon routeur et l'ID d'interface a été mappé dans le processus de transfert IPv6.

Maintenant, je peux accéder à la caméra depuis n'importe où en utilisant le domaine vServer example.com:99 .. Parfait! Je prévois d'obtenir une framboise qui remplira ce rôle ou une banane pi m3 pour d'autres tâches également.

Crumar
la source
1
Vous savez maintenant quoi faire lorsque vous avez besoin d'une autre caméra IP. C'est 2015; en acheter un qui ne prend pas en charge IPv6 est un véritable gaspillage d'argent.
Michael Hampton
ce n'est pas comme si la caméra avait quelques années: p
Crumar
2

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

perplexité
la source