¿Cómo hacer un túnel transparente de un puerto de IPv4 a un dispositivo remoto IPv6?

11

En casa, estoy conectado con una dirección IPv6 y, además, mi proveedor proporciona una configuración similar a la NAT a través de la cual recibo una dirección IPv4 pública que comparto con otros clientes (la razón es obviamente que nos estamos quedando sin direcciones IPv4).

Como resultado, no puedo acceder a mis dispositivos en casa (por ejemplo, mi puerta de enlace VPN) cuando estoy en una red IPv4. Sin embargo, tengo un servidor que tiene una dirección IPv4 y una dirección IPv6. Por lo tanto, debería ser posible llegar a mis dispositivos domésticos si paso por mi servidor.

Esto es lo que tengo en mente hasta ahora: dado que en IPv6, cada dispositivo tiene su propia IP, mi servidor en casa recibe una IP estática IPv6. Mi servidor remoto ya tiene IPv4 estático e IPv6.

Cuando ahora quiero llegar a mi servidor OpenVPN en casa, anteriormente abriría el puerto 1194 en mi enrutador y NAT pasaría las conexiones al servidor allí. En mi nuevo escenario, quiero conectarme al puerto 1194 (o diferente, no importa) en mi servidor remoto y debería tomar esa conexión y hacer un túnel a mi servidor doméstico (ya que ambos tienen IPv6).

Gráficamente, esto significaría:

Dispositivo móvil (IPv4) -> Servidor remoto (IPv4 + IPv6) -> Servidor doméstico (IPv6)

Pero esto solo debería suceder en puertos seleccionados (¿o hay incluso una forma más inteligente que seleccionar por puerto?).

Mi pregunta es, ¿cómo puedo lograr esta configuración?

¿A qué nivel debería funcionar esto? Si quiero hacerlo por puerto, obviamente tengo que reenviar el paquete a la capa TCP / UDP. Mi primera idea sería iptables, pero ¿pueden iptables reenviar un paquete a una IP remota? ¿O hay otro software que pueda? ¿O debería crear un túnel entre los dos servidores y luego reenviarlo localmente? ¿Cómo iba a hacer eso?

javex
fuente
1
¿Ha considerado usar un corredor de túnel IPv6 para su computadora portátil?
Michael Hampton
@MichaelHampton agradece la sugerencia, pero prefiero tener una forma que no necesite cambios en el dispositivo, ya que también tengo la intención de hacer la conexión desde mi teléfono (Android) y probablemente otros dispositivos. La configuración debería ser tan simple como antes desde la perspectiva de los dispositivos.
javex

Respuestas:

13

Finalmente encontré una solución con el reenvío de puertos IPv4 a hosts solo IPv6 que básicamente usa socat:

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

Mi solución es básicamente la misma, excepto que uso un nombre de host a excepción de una IP estática allí. Tenga cuidado de no usar corchetes con un nombre de host, ya que lo interpretará como una IP.

javex
fuente