Comment tunneler de manière transparente un port IPv4 vers un périphérique IPv6 distant?

11

À la maison, je suis connecté avec une adresse IPv6 et, en outre, mon fournisseur fournit une configuration de type NAT à travers laquelle je reçois une adresse IPv4 publique que je partage avec d'autres clients (la raison étant évidemment que nous manquons d'adresses IPv4).

Par conséquent, je ne peux pas atteindre mes appareils à la maison (par exemple ma passerelle VPN) lorsque je suis sur un réseau IPv4. Cependant, j'ai un serveur qui a à la fois une adresse IPv4 et IPv6. Ainsi, il devrait être possible d'accéder à mes appareils domestiques si je passe par mon serveur.

Voici ce que j'ai à l'esprit jusqu'à présent: puisque sur IPv6, chaque appareil obtient sa propre IP, mon serveur à la maison obtient une IP IPv6 statique. Mon serveur distant dispose déjà d'IPv4 et d'IPv6 statiques.

Quand je veux maintenant atteindre mon serveur OpenVPN à la maison, auparavant j'ouvrais le port 1194 dans mon routeur et NAT transmettait les connexions au serveur là-bas. Dans mon nouveau scénario, je veux me connecter sur le port 1194 (ou autre, peu importe) sur mon serveur distant et il devrait prendre cette connexion et la tunneler vers mon serveur domestique (vu qu'ils ont tous les deux IPv6).

Graphiquement, cela signifierait:

Appareil mobile (IPv4) -> Serveur distant (IPv4 + IPv6) -> Serveur domestique (IPv6)

Mais cela ne devrait se produire que sur certains ports (ou existe-t-il même un moyen plus intelligent que de sélectionner par port?).

Ma question est, comment puis-je réaliser cette configuration?

À quel niveau cela devrait-il fonctionner? Si je veux le faire par port, je dois évidemment transmettre le paquet à la couche TCP / UDP. Ma première idée serait iptables, mais iptables peut-il transmettre un paquet à une adresse IP distante? Ou existe-t-il d'autres logiciels qui le peuvent? Ou dois-je créer un tunnel entre les deux serveurs, puis le transmettre localement? Comment pourrais-je m'y prendre?

javex
la source
1
Avez-vous envisagé d'utiliser un courtier de tunnel IPv6 pour votre ordinateur portable?
Michael Hampton
@MichaelHampton merci pour la suggestion, mais je préfère de loin avoir un moyen qui ne nécessite pas de modifications sur l'appareil car j'ai également l'intention de me connecter depuis mon téléphone (Android) et probablement d'autres appareils. La configuration doit être aussi simple qu'avant du point de vue des appareils.
javex

Réponses:

13

J'ai finalement trouvé une solution avec le transfert de ports IPv4 vers des hôtes IPv6 uniquement qui utilise essentiellement socat:

socat TCP4-LISTEN:22,fork,su=nobody TCP6:[2a01:198:79d:1::8]:22

Ma solution est fondamentalement la même sauf que j'utilise un nom d'hôte à l'exception d'une adresse IP statique. Veillez à ne pas utiliser de crochets avec un nom d'hôte car il l'interprétera alors comme une IP.

javex
la source