Implementando NAT64 / DNS64 Contenido Contenido... 1 Introducción... 1 Que son NAT64 y DNS64?... 1 Implementando DNS64 / NAT64 para clientes... 2 Requerimientos generales... 2 Software... 3 Arquitectura... 3 Enrutamiento:... 4 Resolución DNS:... 4 Instalación y configuración del software... 4 Instalación del modulo de kernel Linux para NAT64... 4 Instalación del Unbound con DNS64... 5 Configuración de los clientes... 5 Verificación del funcionamiento de la solución... 6 Referencias... 7 Introducción Que son NAT64 y DNS64? NAT64 es un mecanismo que permite que hosts que solamente tienen conectividad IPv6 puedan comunicarse con hosts que solamente tienen conectividad IPv4. Para lograr este objetivo se debe contar con un equipo de red que sea capaz de realizar una traslación de protocolos IPv4 <-> IPv6. Entre otras cosas, este mapeo debe incluir el mapeo de las direcciones de capa de red de uno y otro protocolo. Implementando NAT64 / DNS64 1
Del lado de la red solo-ipv6, las direcciones IPv4 se mapean dentro de un prefijo IPv6 el cual debe tener suficientes bits de host para mapear todo el espacio IPv4. Normalmente se utiliza el prefijo 64::ff9b/96. Para que los hosts solo-ipv6 puedan comunicarse con los hosts solo IPv4 hace falta un componente adicional que es una traducción a nivel de DNS. Este es el rol del DNS64, el cual se encarga de recibir las consultas DNS de los hosts solo-ipv6 y modificar las respuestas de tal manera de incluir registros AAAA que mapean las direcciones IPv4 dentro del prefijo NAT64. Ambos procesos están definidos en [RFC6146] y [RFC6147]. Fig. 1: NAT64 y DNS64. Fuente [WIKIPEDIA]. Implementando DNS64 / NAT64 para clientes Requerimientos generales Para poder implementar NAT64 / DNS64 necesitaremos: - Un host, al que llamaremos nat64router con conectividad a Internet IPv4 al que se le pueda asignar una dirección IPv4 dedicada solo para ser utilizada por NAT64 - En el nat64router deberemos instalar: Implementando NAT64 / DNS64 2
o o El software de traslación de puertos El software de resolución de nombres que implemente recursión de DNS y traslación DNS64 - En los routers y firewalls de nuestra red debemos configurar el enrutamiento de tal forma de que el prefijo NAT64, el que asumiremos 64:ff9b/96 en este documento, es alcanzable desde todos los host de nuestra red. Software Existen implementaciones en software y también a nivel de routers de NAT64. Este documento muestra la configuración de NAT64 y DNS64 utilizando la suite de software [ECDYSIS] desarrollado por la empresa Viagenie (Canadá). [ECDYSIS] incluye: - Una implementación de NAT64 como módulo de kernel Linux - Una versión modificada del servidor de nombres recursivo Unbound [UNBOUND] Arquitectura 2 1 Fig. 2: Arquitectura de red con NAT64/DNS64. Implementando NAT64 / DNS64 3
El tráfico (1) es IPv6 nativo y no pasa por el nat64router. El tráfico (2) es IPv4 traducido a IPv6 por el nat64router. Enrutamiento: En el gateway de la red debemos colocar una ruta estática dirigiendo el tráfico del prefijo DNS64 al nat64router, de tal manera que el tráfico dirigido a servidores con direcciones IPv4 mapeadas en el prefijo DNS64 pase por el equipo que realiza la traslación de protocolos. El tráfico IPv6 nativo se va directamente a Internet. Esto quiere decir que cuando los clientes se conectan a servidores que tienen conectividad IPv6 y un registro AAAA ya existente el tráfico no pasará por el nat64router. Resolución DNS: Los clientes NAT64 deben utilizar al nat64router como DNS. El nat64router responde para consultas AAAA: - Si el nombre consultado tiene un AAAA, devuelve el mismo sin modificación alguna - Si el nombre tiene solo un A o un CNAME que resuelve a un A, lo enmascara en un AAAA dentro del prefijo asignado para DNS64 Instalación y configuración del software Instalación del modulo de kernel Linux para NAT64 Se debe bajar el paquete ecdysis-nf-nat64-yyyymmdd.tar.gz desde el sitio [ECDYSIS]. Al momento de escribir este documento la última versión es la ecdysis-nf-nat64-20101117.tar.gz. Se debe instalar también en el sistema todas las dependencias necesarias para poder compilar módulos de kernel. Esto es dependiente de cada distribución, se sugiere consultar la documentación correspondiente. Para compilar e instalar se ejecuta make seguido de make install. Puede ser necesario ejecutar el comando depmod a para que el módulo recién creado sea apropiadamente reconocido por el sistema. El paquete contiene un script en shell llamado nat64-config.sh el cual debe ser modificado para adaptarlo a las características de cada instalación. Implementando NAT64 / DNS64 4
Una vez ejecutado este script el sistema esta listo para realizar la traducción de protocolos. Instalación del Unbound con DNS64 Se debe bajar el paquete ecdysis-unbound-1.4.7.yyyymmdd.tar.gz desde el sitio [ECDYSIS]. Al momento de escribir este documento la última versión es la ecdysis-unbound-1.4.7.20101117.tar.gz. La compilación e instalación es similar a la de cualquier otro paquete en Linux, basada en la secuencia configure, make, make install. Al momento de configurar el servidor, los aspectos relevantes del archivo de configuración unbound.conf son las que se muestran en las siguientes figuras: # module configuration of the server. A string with identifiers # separated by spaces. Syntax: [dns64] [validator] iterator module-config: "dns64 iterator" Fig. 3: Habilitación del módulo dns64 en Unbound # DNS64 prefix. Must be specified when DNS64 is in use. dns64-prefix: 64:ff9b::0/96 Fig. 4: Configuración del prefijo IPv6 para DNS64 Configuración de los clientes Los clientes solo-ipv6 obtendrán su configuración como lo hacen usualmente, ya sea mediante SLAAC 1 o DHCPv6. Los clientes no requieren ninguna configuración especial, salvo que al momento de redactar este documento, no hay una buena forma de entregar automáticamente la configuración del DNS64, y por ello en la mayoría de los casos este deba ser configurado manualmente. 1 SLAAC: Stateless Auto Configuration Implementando NAT64 / DNS64 5
Verificación del funcionamiento de la solución Lo primero que debe hacerse es verificar la conectividad IPv6 nativa, accediendo a sitios web con conectividad IPv6, como ser por ejemplo http://ipv6.google.com o http://www.sixxs.net. En estos casos el funcionamiento tiene que ser el normal y el tráfico NO debe pasar por el nat64router. Luego se puede probar resolución de nombres DNS64 haciendo consultas al servidor DNS del nat64router por nombres que se sabe NO tienen dirección IPv6 nativa (ver figura 3) 85-7-200:~ marcelo$ dig @nat64router.labs.lacnic.net www.google.com AAAA ; <<>> DiG 9.8.0 <<>> @nat64router.labs.lacnic.net www.google.com AAAA ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27402 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.google.com. IN AAAA ;; ANSWER SECTION: www.google.com. 604800 IN CNAME www.l.google.com. www.l.google.com. 300 IN AAAA 64:ff9b::c828:53 ;; Query time: 1317 msec ;; SERVER: 200.7.84.17#53(200.7.84.17) ;; WHEN: Wed May 4 15:35:34 2011 ;; MSG SIZE rcvd: 80 Fig. 5: Consulta DNS64. Se observa el resultado del mapeo de una dirección IPv4 en IPv6 Implementando NAT64 / DNS64 6
Referencias [WIKIPEDIA] IPv6 Transition Mechanisms: http://en.wikipedia.org/wiki/ipv6_transition_mechanisms#nat64. [RFC6146] Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers: http://www.ietf.org/rfc/rfc6146.txt. [RFC6147] DNS64: DNS Extensions for Network Address Translation from IPv6 Clients to IPv4 Servers: http://www.ietf.org/rfc/rfc6147.txt. [ECDYSIS] Ecdysis: An Open Source Implementation of a NAT64 Gateway: http://ecdysis.viagenie.ca/ [UNBOUND]: A validating, caching and recursive name server: http://unbound.net. Implementando NAT64 / DNS64 7