# DUNDi

DUNDi (del inglés Distributed Universal Number Discovery) es un protocolo de enrutamiento VoIP que proporciona un servicio de directorio similar al de ENUM. DUNDi permite a los nodos enlazados compartir información sobre sus respectivos dialplans entre ellos. No es un transporte de llamadas, sino que proporciona información de direccionamiento de números. Por poner un ejemplo, nos permite preguntar a tu nodo vecino si sabe cómo contactar con una extensión telefónica concreta o un cliente de VoIP. Una especie de agenda de teléfonos P2P.
El protocolo fue inventado por Mark Spencer quien además hizo el sistema de telefonía PBX llamado Asterisk. Por tanto, la sintaxis de una búsqueda DUNDi puede utilizarse directamente en los comandos de llamada de un dialplan de Asterisk.

## Nodos

Para que DUNDi funcione, cada cliente DUNDi tiene que conocer por lo menos otro cliente DUNDi. Como estos clientes DUNDi pertenecen a la misma red, se les llama nodos. Además, al menos uno de los nodos alcanzables deben conocer cómo llegar a la extensión consultada.
En una configuración DUNDi se puede limitar el número de búsquedas consecutivas entre nodos estableciendo un In the DUNDi configuration one can limit the number of consecutive lookups between peers by setting the TTL.
* Un TTL de 1 significa que sólo puedes preguntar a los nodos con los que estás enlazado y no más allá.
* Un TTL de n significa que el nodo al que le haces la pregunta puede redirigir tu consulta a otros nodos que conozca, con un TTL de n-1.

## Anuncio de extensiones

Cada nodo DUNDi puede anunciar sus propias extensiones y su contexto. Por ejemplo, si puedes conectar algunos números locales E.164, puedes anunciarlos.
Cada extensión anunciada (también se puede anunciar un rango de extensiones) tiene su propia prioridad. Valores bajos representan una alta prioridad y deben elegirse primero cuando más de una respuesta se recibe de una consulta.

## Ejemplo

En la línea de comandos Asterisk se puede hacer una búsqueda a mano para probar si la configuración DUNDi funciona.
La anterior búsqueda DUNDi está pidiendo al PBX que pregunte a los nodos conocidos si saben cómo llegar a la extensión 301 en la red "priv".
La respuesta consiste de 6 partes:
* El protocolo utilizado para comunicarse es IAX2.
* El nombre del contexto es "priv".
* La clave secreta del PBX, que puede redirigirte a la extensión 301 es ByW[...]HSZw (esta clave cambia periódicamente).
* La dirección de este PBX es 192.168.1.2.
* La extensión a llamar es la 301 (esto puede ser diferente de la que se preguntaba. Por ejemplo, cuando llamas desde el exterior no están permitido acceder directamente a una extensión interna).
* "EXISTS" nos dice que el PBX está anunciando este número. Es posible que el PBX anuncia más extensiones que las realmente conectadas, así que no se garantiza que la extensión sea alcanzable.
Para prevenir que la red sea sobrecargada, y al mismo tiempo mantener las respuestas lo más rápidas posibles, los nodos participantes cachearán las consultas que se les haga. Dado que las claves utilizadas pueden ser invalidadas al cabo de un tiempo, cada consulta tiene un TTL que por defecto es una hora.
Cuando no se proporciona un contexto en la consulta, DUNDi establece por defecto el contexto E.164. Esto significa que estás consultando números de teléfono normales (internacionales), como por ejemplo 0034964221100 (un número de Castellón de la Plana, España). Para conseguirlo, tienes que enlazar con al menos un nodo que pertenezca al E164 trust group. Los nodos de este grupo están ligados al Digium GPA (Digium General Peering Agreement) (PDF)