Configuration de DUNDI avec Asterisk

Par Sylvain Boily - 20/10/2007

Ce document vous permettra de configurer correctement le protocole DUNDI pour Asterisk avec comme exemple 3 machines qui seront toutes les trois avec un Asterisk. Les versions utilisées d’Asterisk sur chaque machine est 1.2.24. Mais normalement cela devrait valable pour une version 1.4.

DUNDI est un protocol développé par Mark Spencer permettant d’avoir un annuaire type e164 mais en mode peer to peer contrairement à ce que nous pouvons avoir comme solution de type ENUM qui est centralisé. Pour avoir plus d’informations sur DUNDI, il existe le site web http://www.dundi.com.

La configuration du protocole DUNDI se fera par le fichier de configuration dundi.conf situé dans le répertoire /etc/asterisk. Auparavant vous devrez vérifier quelques petits pré-requis. Avoir un jeu de clé RSA produit, avoir le module pbx_dundi.so de charger. Si cela n’est pas le cas vous pourrez le configurer dans le fichier modules.conf situé dans /etc/asterisk. Vous pourrez également le charger en lançant un load pbx_dundi.so depuis la CLI d’Asterisk.

Pour faire votre jeu de clé RSA vous devrait lancer le binaire astgenkey depuis une console bash par exemple.

$ astgenkey

Puis vous devrez alors mettre un nom pour votre clé puis un password que vous répétérez deux fois. Vous aurez alors deux fichiers de génrée. Par exemple si nous avions appelé notre fichier proformatique, nous aurions alors un fichier proformatique.key qui contient notre clé privé et proformatique.pub qui contiendra notre clé publique, celle que nous distruberons à nos amis DUNDI. Une fois que nous aurons ces clés générées, nous les copierons dans le répertoire de clés RSA d’Asterisk.

$ cp proformatique.key proformatique.pub /var/lib/asterisk/keys

Puis nous rechargerons Asterisk pour qu’il prenne en compte nos nouvelles clés.

$ asterisk -r
CLI> reload res_crypto.so
CLI> reload pbx_dundi.so

Nos clés initialisées nous devrons alors initialiser le password de notre clé privé, celui que nous avons mis un peu avant.

$ asterisk -r
CLI> init keys
CLI> show keys

Nous verons alors notre clé publique proformatique et privé.

Maintenant nous allons pouvoir configurer notre fichier de configuration dundi.conf. Dans notre exemple nous allons considérer que nous deux ami DUNDI. Pour cela ils devront nous donner leur clé publique.

$ cp ami_dundi_1.pub ami_dundi_2.pub /var/lib/asterisk/keys/
$ asterisk -r
CLI> reload
CLI> show keys

Configuration de dundi.conf :

[general]
bind=0.0.0.0
port=4520

cachetime=5 ttl=32 autokill=yes

entityid=00:0C:29:0C:AB:C2 ; En général nous mettons la mac addresse de notre machine

[mappings] dundi_proformatique => dundi,0,IAX2,dundi:dundi_password@/$NUMBER,nounsolicited,nocomunsolicit,nopartial

[00:05:46:34:FG:98] ; entityid de notre ami DUNDI (généralement sa mac addresse) model = symmetric host = 192.168.0.2 inkey = ami_dundi_1 outkey = proformatique include = dundi_proformatique permit = dundi_proformatique qualify = yes dynamic=yes

[00:0F:CF:A0:DF:34] ; autre ami DUNDI model = symmetric host = 10.10.1.1 inkey = ami_dundi_2 outkey = proformatique include = dundi_proformatique permit = dundi_proformatique qualify = yes dynamic=yes

Une fois notre fichier de configuration prêt nous avons la partie DUNDI qui est bien configurée.

Nous avons décidé de faire communiqué nos ami DUNDI à travers le protocol IAX2, et nous avons donc fait un mappings dundi_proformatique sur le protocole IAX2 avec l’utilisateur dundi et le password dundi_password. Nous avons aussi mappé dundi_proformatique sur le context dundi. Cela veut dire que nous allons devoir créer un utilisateur IAX et un context avec notre routage téléphone. Le fichier iax.conf qui se situe dans /etc/asterisk sera pour la partie utilisateur IAX et le fichier extensions.conf sera pour la partie routage téléphonique.

Edition du fichier iax.conf :


[dundi] type=user secret=dundi_password context=dundi

Edition du fichier extensions.conf :


[dundi]

exten => 1001,1,Dial(SIP/sylvain,20) exten => 1001,n,Hangup()

Les commandes nous permettant de savoir ce qu’il se passe seront :

$ asterisk -r
CLI> dundi show peers
CLI> dundi debug
CLI> dundi flush cache
CLI> dundi lookup 1001@dundi_proformatique

Maintenant que nous avons la possibilité d’avoir du DUNDI, il serai intéressant lors d’un appel de pouvoir aller chercher chez nos ami DUNDI s’ils connaissent ou non l’extensions demandées. Pour cela nous allons modifier notre fichier extensions.conf et rajouter la fonction DUNDILOOKUP(). La fonction DUNDILOOKUP vous permet d’aller intéroger vos amis afin de savoir s’ils connaissent l’extensions. L’avantage c’est que si votre ami ne le connais pas mais qu’un autre de ces amis le connait, il pourra vous donner l’information et la gardera alors en cache pour la redonner à une autre requète si besoin.

Edition du fichier extensions.conf :


[local-extensions]

exten => _6XXX,1,Set(DUNDI_CALL=$DUNDILOOKUP($EXTEN,dundi_profor,b)) exten => _6XXX,n,Dial($DUNDI_CALL)

Il existe une possibilité d’utiliser le switch du dialplan ce qui nous permettra alors de faire :

switch => DUNDI/dundi_proformatique

Ce document a été écrit par Sylvain Boily (proformatique). Si vous souhaitez avoir plus d’informations, n’hésitez pas à me contacter par email : sboily@proformatique.com. Toute correction ou commentaires sur ce document sont les bienvenues :-).

Version 1 (12/10/2007)

  • Version intiale du document (merci le TGV ;-))

Ce document est sous licence FDL, c’est à dire qu’il peut-être repris, modifié et redistribué. Pour plus d’informations sur les licences libre faite un tour sur le site de la fondation free software ;-).


Warning: touch() [function.touch]: Utime failed: Permission denied in /usr/share/spip/ecrire/inc/genie.php on line 81