Utilisation des routeurs Cisco
2007-04-10
Switzernet Sàrl
Exemples/exercices de configuration
A. Connecter un appareil BudgeTone sur les différents serveurs
B. Configuration des dial-peers sur le routeur Cisco
Retrouver des informations sur les appels depuis le routeur
Choix du codec utilisé pour la communication
Ports utilisés par le protocole SIP
Seule l’adresse IP du serveur SIP change. Il faut aussi que le numéro de compte (4121550xxxx) soit déclaré sur le serveur, et que le mot de passe SIP corresponde.
1) Swiss PortaOne (128.179.67.35)

2) Swiss Asterisk (128.179.67.78)

Sur le routeur, les dial-peers servent à indiquer la destination pour un appel (entrant ou sortant) en fonction du numéro composé.
Se connecter au routeur ("telnet <ip_routeur>") et l’activer ("enable"). Le Cisco reconnaît les abréviations non-ambigües.
On affiche la configuration courante avec la commande "sh run" (barre espace ou touche entrée pour faire défiler les lignes) :

Pour éditer la configuration, on doit d’abord passer en mode de configuration :
# conf t
Dans ce mode, on entre les lignes de la configuration comme des commandes (une par ligne). Par exemple ici on va ajouter un nouveau dial peer, mais la modification de configurations existantes se passe de la même façon.
On commence par créer (ou entrer dedans si elle existe déjà, mêmes commandes dans les deux cas) la section du nouveau dial-peer (308) :
dial-peer voice 308 voip
Puis on peut créer ou modifier la configuration (une ligne puis Enter = une ligne de configuration du Cisco) :
destination-pattern 41215500308 le numéro appelé pour ce dial-peer
session protocol sipv2 le protocole utilisé
session target ipv4:128.179.67.78 l’adresse IP du serveur cible
Et enfin on retourne au mode normal :
exit (ou Ctrl-Z pour sortir directement du mode de configuration)
Les modifications seront perdues au prochain redémarrage du routeur, sauf si on les sauve explicitement avec la commande "write memory".

Si on veut effacer une configuration existante, on utilise les mêmes commandes, mais précédées de "no". Par exemple pour supprimer le paramètre destination pattern :
no destination-pattern

Le dial-peer 444 redirige tous les appels entrants (expression régulière .T) reçus du réseau téléphonique vers le serveur SIP 128.179.67.35.
Pour faire des tests sur le serveur Asterisk (128.179.67.78), un second dial-peer (308) redirige les appels à destination du numéro 215500308 sur ce serveur. Ici l’indicatif international 41 est inutile, c'est sous cette forme (215500308) que nous recevons le numéro de l'opérateur. Notons que le dial-peer le plus précis prend le dessus.
On appelle le téléphone SIP 41215500308 depuis une ligne fixe (0216939261). On utilisera ici une commande très utile sur les routeurs Cisco, qui est le "|".
Avec des espaces autour, cela correspond à un pipe, similairement à la commande UNIX. On l’utilise par exemple pour filtrer la sortie d’une commande, de la même façon qu’un grep. Par exemple "sh call act voi | incl PeerAd" affichera uniquement les lignes contenant PeerAd dans la sortie de "sh call act voi".
Sans utiliser d’espaces, le "|" est similaire à un OU. Par exemple la commande "sh call act voi | incl PeerAd|MediaIP" imprimera les lignes contenant "PeerAd" ou "MediaIP"
1) Appels actifs (ne pas raccrocher) sur le routeur entrant :
a) Identifier notre appel
# sh call act voi | incl PeerAd
PeerAddress=021646XXXX
PeerAddress=4121550XXXX
PeerAddress=076376XXXX
PeerAddress=4121550XXXX
PeerAddress=0216939261
PeerAddress=41215500308
On affiche simplement la liste de tous les appels actifs.
b) Trouver sur quel serveur transite le média (càd la voix)
# sh call act voi | incl PeerAd|MediaIP
PeerAddress=021646XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=076376XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=0216939261
PeerAddress=41215500308
RemoteMediaIPAddress=128.179.67.78
PeerAddress=076497XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=0.0.0.0
On voit que notre appel passe bien par le serveur Asterisk, alors que les autres numéros sont dirigés sur le serveur PortaOne.
2) Utiliser l’historique
Pour les appels émis depuis le réseau classique (i.e. Swisscom, …), on commence toujours sur le serveur entrant.
a) Afficher le numéro des 5 derniers appels passés (deux numéros par appel : appelant et appelé) :
# sh call hist voi last 10 | incl PeerAd
PeerAddress=003332672XXXX
PeerAddress=4121550XXXX
PeerAddress=076462XXXX
PeerAddress=4121550XXXX
PeerAddress=
PeerAddress=4121550XXXX
PeerAddress=076497XXXX
PeerAddress=4121550XXXX
PeerAddress=0216939261
PeerAddress=41215500308
b) Retrouver la durée des appels passés :
# sh call hist voi last 10 | incl PeerAd|CallDuration
PeerAddress=076462XXXX
CallDuration=00:01:14 sec
PeerAddress=4121550XXXX
CallDuration=00:01:14 sec
PeerAddress=
CallDuration=00:00:00 sec
PeerAddress=4121550XXXX
CallDuration=00:00:00 sec
PeerAddress=076497XXXX
CallDuration=00:00:00 sec
PeerAddress=4121550XXXX
CallDuration=00:00:00 sec
PeerAddress=0216939261
CallDuration=00:01:06 sec
PeerAddress=41215500308
CallDuration=00:01:06 sec
PeerAddress=027932XXXX
CallDuration=00:00:00 sec
PeerAddress=4121550XXXX
CallDuration=00:00:00 sec
c) Retrouver le serveur de média :
# sh call hist voi last 10 | incl PeerAd|MediaIP
PeerAddress=076462XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=
PeerAddress=4121550XXXX
RemoteMediaIPAddress=0.0.0.0
PeerAddress=076497XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=0.0.0.0
PeerAddress=0216939261
PeerAddress=41215500308
RemoteMediaIPAddress=128.179.67.78
PeerAddress=027932XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=0.0.0.0
Dans ce cas c’est bien notre serveur Asterisk.
d) Retrouver la "Signalling IP" de l’appel :
# sh call hist voi last 10 | incl PeerAd|SignallingIP
PeerAddress=
PeerAddress=4121550XXXX
RemoteSignallingIPAddress=128.179.67.35
PeerAddress=076497XXXX
PeerAddress=4121550XXXX
RemoteSignallingIPAddress=128.179.67.35
PeerAddress=0216939261
PeerAddress=41215500308
RemoteSignallingIPAddress=128.179.67.78
PeerAddress=027932XXXX
PeerAddress=4121550XXXX
RemoteSignallingIPAddress=128.179.67.35
PeerAddress=076497XXXX
PeerAddress=4121550XXXX
RemoteSignallingIPAddress=128.179.67.35
On cherche ici à connaître le serveur qui s’occupe de la signalisation SIP. Dans ce cas, c’est toujours le serveur Asterisk.
e) Retrouver les dial-peers qui ont traité l’appel :
# sh call hist voi last 10 | incl PeerAd|PeerId
PeerAddress=076497XXXX
PeerId=111
PeerAddress=4121550XXXX
PeerId=444
PeerAddress=0216939261
PeerId=111
PeerAddress=41215500308
PeerId=308
PeerAddress=027932XXXX
PeerId=111
PeerAddress=4121550XXXX
PeerId=444
PeerAddress=076497XXXX
PeerId=111
PeerAddress=4121550XXXX
PeerId=444
PeerAddress=4121550XXXX
PeerId=444
PeerAddress=021646XXXX
PeerId=111
On voit que c’est bien le dial-peer 308 défini plus haut qui a été utilisé en sortie du routeur.
3) Appels sortants sur le routeur 1 :
#sh call active voice | include PeerAd|MediaIP
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=26466XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=84880XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=24485XXXX
PeerAddress=021327XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=22321XXXX
4) Appels sortants sur le routeur 2 :
# sh call active voice | include PeerAd|MediaIP
PeerAddress=4121550XXXX
RemoteMediaIPAddress=66.234.138.73
PeerAddress=32861XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=66.234.138.73
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=21316XXXX
PeerAddress=78719XXXX
PeerAddress=4121550XXXX
RemoteMediaIPAddress=128.179.67.35
PeerAddress=21802XXXX
1) Appel d’un téléphone externe (par exemple Swisscom) vers un appareil SIP du serveur Asterisk :

En fonction de sa destination, l’appel est automatiquement dirigé vers le bon routeur par le routage téléphonique. Pour être dirigé ensuite sur le serveur Asterisk, on doit définir un "dial peer" sur le routeur :
!
dial-peer voice 308 voip
destination-pattern 41215500308
session protocol sipv2
session target ipv4:128.179.67.78
!
Ici, on redirige spécifiquement le numéro 41215500308 vers le serveur. Dans un cas plus réel, on utilisera une expression régulière, comme "4121550.T", qui correspond à tous les numéros du type 4121550*. Si plusieurs règles s’appliquent, le routeur choisit la plus précise.
Du côté du serveur Asterisk, le téléphone SIP doit être correctement ajouté dans les extensions, et avoir une route entrante correspondante (voir le howto pour Trixbox).
2) Appel d’un téléphone externe (par exemple Swisscom) vers un appareil SIP du serveur PortaOne :

L’appel passe par le même routeur que précédemment, on doit uniquement changer l’adresse IP de destination du dial peer :
!
dial-peer voice 308 voip
destination-pattern 41215500308
session protocol sipv2
session target ipv4:128.179.67.35
!
Le serveur PortaOne doit aussi être configuré pour accepter l’appel.
3) Appel d’un téléphone branché sur le routeur Cisco (128.179.67.122) vers un appareil SIP du serveur Asterisk :
Le routeur possède des connexions analogiques, qui permettent de brancher directement un téléphone dessus.

Dans ce cas, le routeur doit être configuré pour router l’appel correctement :
!
dial-peer voice 61231 voip
destination-pattern 141216939261
session protocol sipv2
session target ipv4:128.179.67.78
!
dial-peer voice 308 voip
destination-pattern 41215500308
session protocol sipv2
session target ipv4:128.179.67.78
!
Ici on a deux destinations possibles, un téléphone SIP et un téléphone analogique. Les deux renvoient vers le serveur Asterisk (voir config Asterisk pour les indicatifs, ici on a mis 1 pour le Cisco 228).
On doit aussi attribuer un numéro de téléphone à l’appareil dans la configuration du routeur :
!
dial-peer voice 13 pots
destination-pattern 443
port 1/3 (la ligne est donc définie sur le port 3 du Cisco 122)
voice-class codec 1 (ou par exemple codec g723r63)
description texte… ("description" signale le commentaire)
!
Ici on attribue le numéro 443 au téléphone analogique branché sur le port 3 du routeur. On peut ajouter une description du dial-peer, et aussi choisir les codecs utilisés, de deux façons différentes :
!
voice class codec 1
codec preference 1 g729r8
codec preference 2 g723r63
!
Ensuite on spécifie cette classe dans le dial-peer:
voice-class codec 1
codec g723r63
4) Appel d’un téléphone SIP vers un appareil directement connecté au routeur :

Pour cet exemple, la configuration du routeur ne change pas.
Par contre dans la configuration d’Asterisk, on doit spécifier un trunk et une route sortante correspondant au routeur 128.179.67.122.
5) Appel d’un téléphone SIP connecté au serveur Asterisk vers un autre téléphone SIP sur PortaOne :

Dans ce cas, l’appel se déroule de SIP à SIP, et aucune configuration n’est nécessaire sur les routeurs.
Il suffit que le serveur Asterisk ait un trunk et une route qui le relie au serveur PortaOne.
On peut spécifier la préférence du codec utilisé dans le serveur Asterisk, le routeur et directement sur le téléphone. Le serveur va s’occuper de la négociation pour trouver un codec supporté par tous les appareils.
Si possible, Asterisk essaie d’utiliser le même codec pour les deux correspondants, pour éviter de devoir transcoder le signal :

Si on force les deux correspondants à ne pas utiliser les mêmes codecs (par exemple uniquement g723 sur le téléphone et g729 sur le routeur Cisco), le serveur Asterisk effectue le transcodage entre les deux appels :

Mais dans ce cas la charge du serveur monte à 3-6% pour un unique appel.
Si en plus on interdit à Asterisk d’utiliser le codec g729, cette fois les appels n’aboutissent plus (le correspondant est vu comme occupé).
What is port 5060 and what is port 5004
5060: transports sip signals, TCP or UDP
5004: transports media packets (e.g. voice), UDP
syslog server to use :
Kiwi Syslog Daemon
Download from : xxx
How to configure syslog server in BudgeTone?
How to see useful info in syslog (f.e. codec which is used for media flow)?