2575
Commentaire: allez zou, une solution qui marche, une ! :-)
|
2743
redémarrer Asterisk
|
Texte supprimé. | Texte ajouté. |
Ligne 7: | Ligne 7: |
En revanche quand Asterisk est derrière un NAT géré par Linux, lui même derrière un NAT non contrôlable (par exemple un modem ADSL), là les choses se corsent... Ça ne marche tout simplement pas car l'IP reçue par le correspondant est soit celle du serveur Asterisk, soit celle de la passerelle NAT (quand on utilise `nf_nat_sip`). | En revanche quand Asterisk est derrière un NAT géré par Linux, lui même derrière un NAT sans support SIP (par exemple un modem ADSL), là les choses se corsent... Ça ne marche tout simplement pas car l'IP reçue par le correspondant est soit celle du serveur Asterisk, soit celle de la passerelle NAT (quand on utilise `nf_nat_sip`). |
Ligne 35: | Ligne 35: |
* Relancer le service Asterisk ! On peut peut-être se contenter de lui faire recharger sa configuration, mais... On est jamais trop sûr avec cette bestiole ! ;-) |
Présentation de la configuration « Asterisk derrière du NAT » au CNF de Hanoï.
Problème
Quand Asterisk a son IP publique, pas de souci. Quand Asterisk est derrière un NAT géré par Linux, ça peut encore passer grâce au module nf_nat_sip des noyaux récents (>= 2.6.20, il me semble).
En revanche quand Asterisk est derrière un NAT géré par Linux, lui même derrière un NAT sans support SIP (par exemple un modem ADSL), là les choses se corsent... Ça ne marche tout simplement pas car l'IP reçue par le correspondant est soit celle du serveur Asterisk, soit celle de la passerelle NAT (quand on utilise nf_nat_sip).
Solution
Il s'agit de configurer Asterisk en mode NAT externe et d'attribuer une plage de ports pour recevoir les flux RTP.
Configuration d'Asterisk
Le support du NAT pour SIP est à activer dans /etc/asterisk/sip.conf :
; envoyer des paquets toutes les 60 secondes pour « conserver la ligne » (timeout NAT) rtpkeepalive=60 ; l'adresse IP publique (la votre) à indiquer dans toutes les requêtes SIP externip = AAA.BBB.CCC.DDD ; les adresses de réseau locaux pour lesquels il ne faut pas utiliser l'IP externe localnet = 10.0.0.0/8 localnet = 172.16.0.0/12 localnet = 192.168.0.0/16 ; ne pas faire de NAT avec les postes clients (ils sont sensés être routés) nat = no
Il faut spécifier une plage de ports dans /etc/asterisk/rtp.conf pour recevoir les flux RTP :
rtpstart=50600 rtpend=50699
Relancer le service Asterisk ! On peut peut-être se contenter de lui faire recharger sa configuration, mais... On est jamais trop sûr avec cette bestiole !
Configuration de la passerelle Linux
Il ne faut surtout pas utiliser le module nf_nat_sip (ou ip_nat_sip dans les anciens noyaux) faute de quoi l'adresse externip indiquée par Asterisk serait remplacée par l'adresse externe de la passerelle Linux !! Donc vérifier qu'il n'est pas chargé dans /etc/modules, le commenter si c'est le cas, voir même le mettre en liste noire en l'ajoutant dans /etc/modprobe.d/blacklist.
- Il faut transférer les demandes de connexions destinées aux ports UDP entre 50600 et 50699 vers le serveur Asterisk, par exemple :
iptables -t nat -I PREROUTING -i $IF_EXTERNE -p udp -m multiport --dports 4569,5060,50600:50699 -j DNAT --to-destionation $IP_ASTERISK iptables -t filter -I FORWARD -d $IP_ASTERISK -p udp -m multiport --dports 4569,5060,50600:50699 -j ACCEPT
Configuration du modem ou autre matériel externe faisant aussi du NAT
- Il faut transférer les demandes de connexions destinées aux ports UDP entre 50600 et 50699 vers la passerelle Linux.