Hola,

El dia de hoy voy a hacer un post el cual no deseo que sea tomado de mala manera. Indiscutiblemente no estoy a favor del NAT pero aun asi pienso que es un mecanismo que no desaparecera en IPv6 (se reducira drasticamente) pero siempre existira. En lo posible recomiendo evitar hacer NAT cuando exista la posibilidad. Lo expresado en este post es mi postura personal.

Introduccion

Pueden haber muchas razones para implementar NAT66, a) seguramente los clientes acostumbrados a hacer NAT querran hacerlo en IPv6 (suene feo o bonito), b) personas que quieran ocultar su topologia a Internet, c) empresas que consideren NAT como mecanismo para cambiar los IPs de sus redes, d) la tendencia mundial de no permitir tethering en los celulares, e) querer ofrecer IPv6 detras de un dispositivo y mi proveedor no tenga DHCPv6-PD o solo me entregue una red /64, f) alguien que piense que NAT sirve de mecanismo de seguridad (uhh, esta ya la dije) g) Realizar renumbering de la red, etc, etc, etc, etc.

En base a lo anterior la intencion de este post no es estar a favor o en contra de NAT, solo deseo indicar que esta disponible en el mundo de IPv6, NAT66 existe y no es un mito. Deseo frecer un sencillo ejemplo. Nuevamente, para bien o para mal puede ser utilizado en algunos escenarios.

Requerimientos

El equipo a realizar el NAT66 debe tener:

  • Kernel > 3.9 (#uname -a)
  • iptables > 1.4.18 (#iptables –version)
  • Ubuntu 14.04 cubre ambos requerimientos “out-of-the-box” y por ello es muy sencillo hacerlo. Sino, logicamente deberas realizar los upgrade/updates correspondientes. Existen patchs para hacer NAT66 en versiones previas pero no lo indicare en este momento.

Escenario

Esta es la topologia en la que estoy trabajando. Deseo que “Device 2” traduzca la direccion IPv6 origen de “Device 1” con la direccion IPv6 de la interfaz saliente (eth2). Con el comando NAT implementado estoy realmente haciendo NAT de toda la subred 2001:db8:12::/48

Configuraciones:

__ En DEVICE 1: __

Configurar la direccion IPv6 en el equipo:

#ifconfig eth0 inet6 add 2001:db8:12::2/48

Configurar la ruta por default:

#route -A inet6 add default gw 2001:db8:12::1

__ En DEVICE 2: __

Configurar las direcciones IPv6 en el equipo

#ifconfig eth1 inet6 add 2001:db8:12::1/48
#ifconfig eth2 inet6 add 2001:db8:23::1/48

Habilitar enrutamiento IPv6 entre las interfaces:

#sysctl -w net.ipv6.conf.all.forwarding=1

Configurar el NAT66:

#ip6tables -t nat -A POSTROUTING -o eth2 -s 2001:db8:12::/48 -j MASQUERADE

(es de notar que existen muchas otras maneras de hacer NAT con ip6tables)

__ En DEVICE 3: __

Configurar la direccion IPv6 en el equipo:

#ifconfig eth1 inet6 add 2001:db8:23::2/48

Configurar la ruta por default:

#route -A inet6 add default gw 2001:db8:23::1

Del lado de Device 3 pueden verificar de muchas maneras que todo funcione, incluso sin ruta por default en Device 3, DEVICE 1 puede llegarle. De igual manera tcpdump, wireshark o una sencilla revision de los logs puedes verificar que efecticamente el NAT esta llevandose a cabo.

Espero sea de tu utilidad.