Ir al contenido principal

Uso de DNAME para reversos de recursos transferidos inter-RIRs

Los "Regional Internet Registries" (RIRs) son las organizaciones encargadas de administrar y delegar recursos de números IPs (IPv4 e IPv6) y Números Autónomos (ASN) en todo el mundo. Existen 5 en total, cada una a cargo de una región en particular. En el caso de Latinoamérica, el RIR es LACNIC, instalado en Montevideo, Uruguay; y es así como también tenemos APNIC en Asia Pacífico, AFRINIC en África, RIPE en Europa y ARIN en Norteamérica.

Dentro de las labores de cada RIR está el mantener el sub-árbol DNS de los reversos de las direcciones IP que son delegadas a un usuario final. Es así como si por ejemplo NIC Chile recibe el prefijo IPv4 200.7.7.0/24 desde LACNIC, se debe mantener sus nombres reversos bajo 7.7.200.in-addr.arpa, que es hijo de la zona padre 200.in-addr.arpa, administrado por LACNIC. Y así cada asignatario de un prefijo IP en LACNIC puede pedirle la delegación de su segmento.

Para ello, LACNIC dispone de un panel de control donde cada organización puede declarar sus servidores de nombre (NS), y así obtener la delegación en el DNS.

El problema con las transferencias inter-RIR

Hasta acá todo bien, pero ¿qué sucede cuando una organización en LACNIC sub-delega a su vez un trozo de su asignación a una organización que quiere registrarse en otro RIR? Eso es lo que se llama "transferencia inter-RIR". Ocurre cuando por ejemplo una organización europea, que tiene escasez de direcciones IPv4, llega a un acuerdo con alguna organización latinoamericana que tuviera direcciones en desuso, y acuerdan traspasarse un segmento. En este caso, tanto la entidad que cede un segmento, como la destinataria, acuden a LACNIC y a RIPE para dejar registro de la transferencia, y que se actualicen datos de whois, geolocalización, y sobre todo de administración del reverso del segmento, que a partir de esta transferencia aparecerá en el panel de usuario en RIPE del organismo nuevo, y ya no aparecerá en el panel de usuario de LACNIC.

Sin embargo, un problema que se presenta es cómo justamente delegar correctamente el reverso del recurso en el DNS.

En un caso como en el del ejemplo, el nuevo asignatario definirá en RIPE los NS a los que quiere delegar el segmento, pero ese sub-árbol del DNS no pertenece a RIPE sino a LACNIC, por lo que es necesario algún tipo de coordinación para comunicar los datos.

Los zonelets

El mecanismo que se definió en estos casos entre todos los RIRs fue el uso de "zonelets", que son trozos de configuración DNS que cada RIR comunica al RIR que corresponde a la delegación inversa del recurso, mediante un mecanismo automatizado que diariamente comparte esta información.

Volviendo al ejemplo, cuando esta organización defina en RIPE sus NSs, es RIPE el que arma un "zonelet" con estos datos, lo pone en un repositorio privado y compartido entre los distintos RIRs, y es LACNIC el que recoge este trozo de configuración y lo pone en el reverso correspondiente. De esta manera, la consulta DNS que parte en in-addr.arpa, luego se delega al prefijo bajo control de LACNIC, y bajando en el árbol llega un momento en que es delegado finalmente a los NS del cliente final.

El problema con los zonelets

Este mecanismo ha funcionado bien por años, pese a algunos problemas esporádicos que se han debido a mala mantención de sistemas y falta de comprobación, sistemas que han sido mejorados en el tiempo. Sin embargo, el sistema adolece de un problema más intrínseco a la solución, que es el tiempo que tarda un cambio en llevarse al DNS. Un mecanismo del estilo de los zonelets requiere de procesamiento en "batch" y chequeos que no necesariamente son lo suficientemente rápidos.

Por otro lado, en la realidad actual de agotamiento de IPv4 se espera que las transferencias inter-RIR sean cada vez más frecuentes, sometiendo al sistema a cargas mayores.

Es por esto que nuestra propuesta es modificar el mecanismo de re-delegación con una técnica relativamente nueva en el DNS que hace mucho más simple el proceso, quedando todo dentro del protocolo normal del DNS: el uso de DNAMEs. 

Qué es DNAME

DNAME es una técnica de extensión del DNS definida originalmente el año 1999, pero actualizada en el RFC6672 del año 2012, que define un registro que permite delegar un sub-árbol completo a otro nodo del DNS. El nombre hace referencia al registro famoso CNAME (que quiere decir "canonical name"), que hace un alias pero para un "nodo final" del árbol DNS. DNAME lo hace por toda una rama.

Cómo utilizarlo para reversos

Es así como volviendo a nuestro caso, lo único que debiera hacer LACNIC al momento de ceder uno de sus recursos vía transferencia a otro RIR, es definir un registro DNAME apuntando a un "alias" en el RIR de destino, el que a su vez puede volver a definir NS para los nombres inferiores.

Este alias debiera ser un espacio bajo control del RIR de destino, que es acordado previamente. Usaremos como ejemplo in-addr.delegated.<ESPACIO DEL RIR>.

De esta manera, cualquier cambio de los NS del organismo controlador del prefijo lo hace directamente en RIPE, que a su vez lo modifica bajo el árbol in-addr.delegated.ripe.net directamente bajo su control, sin involucrar más al antiguo RIR LACNIC.

El cliente final debe tener cuidado también de cambiar el nombre de su zona final para respetar el nuevo subárbol bajo control de su RIR, y no directamente en in-addr.arpa como es lo normal.

Los cambios en el procedimiento serían:

  1. un RIR que cede un recurso debe agregar un DNAME en el lugar del zone-cut, apuntando a un nuevo nombre que está bajo control del RIR obteniente;
  2. el RIR obteniente pone en ese nuevo nombre los NS del cliente final,
  3. el cliente final se hace autoritativo de ese nuevo nombre dentro del espacio del RIR obteniente.

En el caso de necesitar “anular” una transferencia, basta con quitar el DNAME y volver a la delegación normal original, con los NS del cliente original

En el caso de delegaciones “profundas” el procedimiento es el mismo. Si un padre delega directamente a un nieto, sin referirse al hijo (empty-non-terminal); es en este mismo punto que se reemplazan los NS por el DNAME al árbol externo.


Estudio de la solución

Se realizó un prototipo de esta solución en laboratorio, donde se validó su operación y se realizaron pruebas reales con distintas plataformas de medición y software de resolución de DNS.

Los resultados son bastante promisorios.

Puede acceder al estudio completo en el siguiente documento PDF (en inglés).


Conclusiones

Creemos que esta arquitectura puede ser coordinada entre los RIRs y reemplazar el esquema actual de zonelets. Las mejoras incluyen:

  • solución más simple como concepto, utilizando estándares de DNS;
  • dejar de depender en soluciones ad-hoc sujetos a otro tipo de fallas, y pasar a una solución dentro del DNS;
  • mayor control sobre el cliente final, que vuelve a tener control autoritativo de la zona utilizando el protocolo DNS;
  • cambios se propagan en forma instantánea, dentro de los rangos normales del DNS.

Por supuesto hay consideraciones que deben tomarse en cuenta, donde habrá cambios en la forma de coordinarse entre cada RIR, pero creemos que son menores a las que existen actualmente y por ende pueden ser llevadas a cabo con planificación y coordinación interna.

También debe considerarse el cambio en la configuración del cliente final, que ahora deberá agregar una etiqueta en el padre, a <rir>.in-addr.arpa.

Por último, es importante tomar en cuenta el TTL de los registros. El aumento en la cadena de resolución puede llevar a timeouts, por lo que es importante hacer uso óptimo del cache.

Sobre la solución misma, los experimentos muestran que podría esperarse un aumento de tasa de fallas del 1.1% utilizando la técnica descrita en este documento, producto de resolvers que no sean capaces de seguir el DNAME. Sin embargo podría aventurarse que estas fallas serían de resolvers muy antiguos, mal configurados, o dentro de redes que hacen filtrado excesivo. Esta tasa de falla podría considerarse que es lo esperable en un ambiente tan diverso como Internet, donde es prácticamente imposible esperar tasas de cero errores. De todas formas, también existe la posibilidad que los propios RIRs lleven a cabo pruebas más cercanas al mundo real, utilizando delegaciones “canario” dentro del árbol real, y utilizando otras métricas de éxito.


Con el presente proyecto, NIC Chile busca apoyar a la comunidad y poner a la disposición una técnica y su análisis, que mejore la experiencia de uso de todos los involucrados.


Comentarios

Entradas más populares de este blog

Uso correcto del servicio DNS secundario gratuito

NIC Chile desde hace más de 20 años ha ofrecido el servicio de " Secundario DNS gratuito " para sus clientes. El objetivo siempre fue mejorar la robustez de .CL, ya que disponer de solo 1 NS es demasiado frágil, y este servicio siempre se ha mantenido con los niveles de infraestructura y tiempos de respuesta adecuados a su tiempo. El uso del servicio ha sido sostenido en el tiempo. Actualmente, más de 30 mil de nuestros clientes lo utilizan! Y con la adición de tecnologías como IPv6, se ha permitido que estos miles de dominios CL tengan presencia en la nueva red . Sin embargo, no todo es miel sobre hojuelas. Desde los inicios se ha detectado un problema técnico recurrente. El uso de este servicio, si bien es gratuito para clientes de NIC Chile, requiere una configuración técnica especial para que funcione correctamente. Y esta configuración debe ser realizada por quien administre el servicio DNS del dominio (por ejemplo la empresa de hospedaje (" host

Servicio AS112: atendiendo los reversos de direcciones IP privadas

El uso más común que se le da al servicio DNS es el de "transformar los nombres de dominio en direcciones IP", que permite por ejemplo a los humanos recordar fácilmente una dirección de un sitio web como "www.nic.cl", y dejar que sean las máquinas -mediante el DNS- que lo transformen a una dirección IPv6 como 2001:1398:5::6003, ó 200.7.7.3 en IPv4. Pero no es el único uso del DNS. También existe el llamado "servicio reverso", que como su nombre lo indica, hace lo contrario: transformar una IP en un nombre de máquina. Esto no es usado por los usuarios corrientes, sino por servicios por ejemplo de control de acceso, o registro de logs, etcétera; quienes parten de una dirección IPv6 como 2800:3f0:4003:c00::69 y obtienen como resultado www.google.com. Por otro lado, también existen direcciones IP especiales que se les llama "privadas", o "locales"; que tienen la particularidad que pueden ser usadas libremente por organizaciones en sus

dns-tools: herramienta para verificar zonas (ZONEMD) y firmar DNSSEC en forma distribuida

Actualmente existen diversas soluciones que permiten automatizar la firma DNSSEC de los dominios, integrados a los mismos servicios que normalmente proveen DNS. En el ámbito de código abierto, los más utilizados permiten activar DNSSEC con algunas instrucciones en la configuración, sin preocuparse de llaves ni firmas. Sin embargo, siempre es bueno tener herramientas que permitan hacer verificaciones o incluso firmas de una forma más de bajo nivel. Suelen ocurrir casos de uso donde alguien prefiere tener más control, o integrarse con sistemas internos no estándar. Les presentamos  dns-tools , una herramienta de línea de comandos (CLI), escrita en lenguaje Go, que permite firmar con DNSSEC una zona, crear registros de  integridad  de zona llamados ZONEMD, y a su vez validar estas firmas y registros. Esta herramienta fue creada por NICLabs , el laboratorio de NIC Chile. Es mantenida con código abierto en github , con licencia MIT. Una de las cosas más destacadas, y que lo hace una herrami