FIXME (à completer)

En suivant les instructions de l'excellent Asterisk, the future of telephony, vous avez certainement reussi en quelques coups de cuiller a pot à monter un simple PBX sur lequel se connectent directement vos clients SIP, typiquement des softphones tels qu'ekiga ou twinkle.

Tahorg et iMil avaient envie de monter un truc qui nous permette :

1. de pouvoir communiquer entre nous et tous les lutins mais aussi 2. de garder nos PBX maison qui relient les differents soft / hardphones au sein de nos demeures et puissent gérer differents accès téléphoniques.

Je me suis incrusté dans l'histoire une fois le début de setup en place, on était déjà passé de SIP à IAX, mais un truc me chiffonait. IAX est un protocole plutot prévu pour un usage sur des réseaux sécurisés, tout passe en clair dessus, dont les info de login. L'auth plaintext mise en place pour les tests n'était donc pas trop recommandée pour un PBX public. IAX offre un début de réponse à ces problèmes de sécurité (bien que tout le monde recommande encore l'utilisation de vpns pour sécuriser les communications): l'authentification par clé rsa.

Nous allons donc voir comment créer un peering IAX avec auth en rsa.

Voici l'architecture simple que nous avons monté :

Premièrement, pour une authentification par clé, il faut générer une paire de clés privée/publique.

Asterisk vient avec un petit script pour gérer cela: astgenkey

lutin% astgenkey ma-clef

Il vous demandera de rentrer la passphrase pour votre jeu de clés.

vous avez donc ma-clef.pub et ma-clef.key dans le répertoire courant. Il vous faut mover la clé publique dans le répertoire $ASTVARLIB/keys/ sur le PBX public, et la clé privée dans le même répertoire, mais dans votre PBX client. (/var/lib/asterisk/keys par défaut, /usr/local/share/asterisk/keys si installé via le port sous FreeBSD).

Les clés générées et mises en place, nous pouvons nous attaquer à la configuration.

Voici le iax.conf d'un PBX client, celui chez soi donc, ne comportant que les informations nécessaires au dialogue avec le PBX “maitre”.

[general]
register => login:[clé-rsa]@host.pbx.public ; on enregistre son serveur IAX comme client sur le serveur PBX public. 
;Les [] sont importants, c'est toute la différence entre une clé et un password.
;Les clés sont indiquées sans leur extension .pub|.key

disallow=all   ; on commence par refuser tous les codecs.
allow=gsm      ; on accepte uniquement des codecs 
allow=speex    ; consommant peu de bande passante

[jardin-iax-out]
type=peer      ; on définit le PBX publique comme peer et non comme user. 
auth=rsa       ; on précise que l'authentification se fait pas clé.
username=user1
outkey=ma-clef
host=host.pbx.public

context=from-jardin-iax ; contexte a renseigner dans extensions.conf

Voici l'extensions.conf correspondant :

[maison]

exten => 100,1,Dial(SIP/user) ; numero local

exten => _88299.,1,Dial(IAX2/${EXTEN}@jardin-iax-out,30,r) ; lorsque je compose un numero qui matche 88299 (voir e164.org), on utilise le lien monpbxpublic-out

; extension raccourcie pour appeler directement un user
exten => 666,1,Dial(IAX2/jardin-iax-out/user2)

[from-jardin-iax]

exten => s,1,Dial(SIP/user1) ; par defaut (entrée "s"), lorsqu'on recoit un call depuis le pbx public, on appelle cette ligne.

Et bien entendu, vous avez déjà défini l'utilisateur correspondant dans le sip.conf.

Maintenant, voici le iax.conf du serveur Asterisk public :

[general]

disallow=all
allow=gsm
allow=speex

[user1]
type=friend ; on peut se connecter ici via un telephone ou via un peer asterisk
auth=rsa
username=user1
inkeys=ma-clef
host=dynamic
context=pbxpublic

[user2]
type=friend
username=user2
inkeys=sa-clef
host=dynamic
context=pbxpublic

Et l'extensions.conf correspondant (les numeros ne sont pas les bons evidemment…) :

[pbxpublic]
exten => 8829900349801,1,Dial(IAX2/user1)
exten => user1,1,Dial(IAX2/user1)

exten => 8829900349802,1,Dial(IAX2/user2)
exten => user2,1,Dial(IAX2/user2)

Reste maintenant à démarrer votre asterisk sur le pbx public (préferablement en mode console pour le debug: asterisk -cvvv) et de placer les variables suivantes :

*CLI> set debug 25
*CLI> set verbose 25

Faites de même sur votre PBX maison, avec une petite différence: asterisk -civvv, le -i est là pour initialiser votre clé privée et vous deviez voir apparaitre :

-- Registered IAX2 to 'XX.XX.XX.XX', who sees us as XX.XX.XX.XX:4569 with no messages waiting

…Et c'est maintenant que le cauchemar commence ;)

adapté de peering SIP avec asterisk la partie auth par clé est basée sur l'excellent article de voip-info.org.

unix/peering_iax_asterisk.txt · Last modified: 2010/01/12 13:29 (external edit)