Introducción

En este post voy a intentar explicar brevemente que es NPT, por qué es útil y finalmente dejaré un pequeño ejemplo que espero sea de utilidad.

¿Que es NPT?

NPT por sus siglas en Inglés significa Network Prefix Translation, algunos lo podrás comparar con NAT en IPv6.., y bueno,., es medianamente cierto. Siendo la palabra “medianamente” perfectamente utilizada en la oración previa.

En NPT básicamente lo que se busca es traducir la dirección origen en un datagrama IPv6, pero particularmente la sección del prefijo de red (NET ID) dejando la parte del IID (Host ID) sin modificación.

¿Por qué hacer NPT?

Existen varias razones. Voy a mencionar solo dos.

1) Estoy en una red con dos proveedores de Internet (no tengo IPs propias ni ASN), pero necesito alguna redundancia para salir a Internet. El equipo de borde en vez de realizar un NAT con sobre de carga de puertos a una sola dirección IP (con todos los problemas y limitantes que esto ocasiona) solo modifica los primeros bits del la dirección (digamos, los primeros 64 bits solo como manera de ejemplo). 

2) Si necesitar hacer “renumbering” de tu red pero tienes IPs del tipo ULA (u otra propia quizas) tu vida será mucho más sencillo al solo tener que modificar el traductor NPT y no hacer re-enumeración de toda la red.

Diagrama ejemplo

Configurando un equipo Linux para hacer NPT

Los pasos para configurar NPTv6 (o NPT) en Linux son muy sencillos. Debes hacerlo tanto de paquetes salientes como de paquetes entrantes.

#From internal network to external Network

ip6tables -t nat -A POSTROUTING -d 2000::/3 -s 2001:db8:AAAA:AAAA::/64 -j NETMAP --to 2001:db8:CCCC:CCCC::/64;

#From external network to internal network

ip6tables -t nat -A PREROUTING -s 2000::/3 -d 2001:db8:CCCC:CCCC::/64 -j NETMAP --to 2001:db8:AAAA:AAAA::/64;

Más info:

https://dn42.net/howto/IPv6 http://www.howfunky.com/2012/02/ipv6-to-ipv6-network-prefix-translation.html

Y por supuesto el RFC mismo: https://tools.ietf.org/html/rfc6296