PDA

Voir la version complète : SIP, NAT, et pas d'audio pas de son...



jean
29/01/2015, 15h26
bonjour

je vois régulièrement des messages qui ne comprennent pas pourquoi il n'y a pas de son lors d'un appel.... voici quelques explications, à lire bien au calme:

1/ le nat
https://fr.wikipedia.org/wiki/Network_address_translation

en gros, dans le cas typique d'une installation avec une live/b/free box, l'installation a une seule adresse ip publique (donc, coté WAN, wide area network). chaque pc/tel/etc... connecté à cette box reçoit une ip privée, dans le LAN (local area network). ces adresses sont souvent de la forme 192.168.1.x (ou 192.168.x.y).

quand un pc sur lan accède, par exemple, à un site web, la box assigne un numéro de port aléatoire à cette demande, et l'envoie au serveur avec son ip publique

ex (format ip:port)
pc : 192.168.1.10:1234 veut joindre 1.2.3.4:80 (ou un quelconque serveur)
box : mon.ip.pub.lique:4567 veut joindre 1.2.3.4:80 et mémorise cette association
serveur: recoit une demande de mon.ip.pub.lique:4567
serveur: repond à mon.ip.pub.lique:4567
box: retrouve l'ip locale associée à mon.ip.pub.lique:4567 , donc , envoie à 192.168.1.10:1234

tout ca se fait automatiquement - comme le lan initie la connexion, la box (le routeur en fait) mémorise tout

2/ et le sip alors ?
ben, pour le sip, ca marche pareil - rappel: le sip, c'est la signalisation, pas l'audio
mais, quand on établit un appel, disons A -> B, A envoie un message invite, et indique dans le paquet sip à quelle ip il faut envoyer le media (RTP). c'est pratique, ca permet d'avoir une machine ou plusieurs machines traitant le média, pour une faisant la sig (ou d'avoir des configs bien compliquées). mais souvent, c'est la même machine qui traite le media ET la sig - sip et RTP.

probleme... comme le pc ne connait que son ip privée (192.168....), il met cette adresse, et le serveur distant répond en envoyant le flux à cette adresse. comme ils ne sont pas sur le meme lan, ben ca marche pas.

note: lorsque A envoie l'invite, il met donc son adresse dans le paquet - après un ack, et eventuellement un ringing, B répond avec un simple message OK pour dire que c'est décroché. dans ce message OK, il indique AUSSI SA PROPRE adresse ip - le problème est donc des deux coté si les deux cotés sont nattés

3/ les solutions
y'en a plusieurs
- le stun: le client interroge un serveur externe (stun server) qui lui répond en donnant son adresse publique. il la met comme adresse de media

- SIP ALG - certaines box/routeur ont une fonction alg, qui inspecte les paquets, et fait cette translation. mais souvent, c'est mal fait et ca casse le sip, et pas grand chose ne marche. a desactiver systematiquement

- en asterisk pur:
pour les clients
l'option nat=force_rport (anciennement nat=yes), permet de forcer asterisk à ignorer l'adresse dans le invite, et à envoyer le media sur l'@ ip ou il a reçu l'invite

et si le serveur est lui meme derrière un nat:
le paramètre localnet permet de dire quelles @ ip sont en local. si asterisk doit envoyer du media à une adresse qui rentre dans ce masque, il ne change rien. en revanche, si le destinataire ne match pas, il indique que son adresse pour le media est externip (ou externhost).

4/ comment debugger
une facon simple,
rtp set debug on
sip set debug on

après, on regarde defiler les messages RTP "Got" ou "Sent RTP packet to" - si on voit des adresses locales et que le client est distant, pas de bol (attention, quand on appelle d'un poste sur le lan, via asterisk, vers un poste hors lan, on a deux appels, donc deux jeux de traces qui se mélangent)

seb
04/02/2015, 12h54
Salut,

Quelque chose m'échappe...

En utilisant le mode NAT dans Asterisk (force rport+comedia) j'ai quand même l'adresse IP interne du poste (10.0.0.84) qui apparait puis ensuite l'adresse publique (XXX.XXX.XXX.XXX) :



[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029237, ts 004160, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029238, ts 004320, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029239, ts 004480, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029240, ts 004640, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029241, ts 004800, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029242, ts 004960, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029243, ts 005120, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029244, ts 005280, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029245, ts 005440, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029246, ts 005600, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029247, ts 005760, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029248, ts 005920, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029249, ts 006080, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029250, ts 006240, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029251, ts 006400, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029252, ts 006560, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029253, ts 006720, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029254, ts 006880, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029255, ts 007040, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029256, ts 007200, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029257, ts 007360, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029258, ts 007520, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029259, ts 007680, len -000013)
[Feb 4 10:48:24] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029260, ts 007840, len -000013)
[Feb 4 10:48:25] Sent RTP packet to 10.0.0.84:62544 (type 00, seq 029261, ts 008000, len -000013)
[Feb 4 10:48:34] > 0xb494fd98 -- Probation passed - setting RTP source address to XXX.XXX.XXX.XXX:44259
[Feb 4 10:48:34] Got RTP packet from XXX.XXX.XXX.XXX:44259 (type 126, seq 000000, ts 080033, len 000068)
[Feb 4 10:48:34] NOTICE[32276][C-000000a0]: res_rtp_asterisk.c:4365 ast_rtp_read: Unknown RTP codec 126 received from 'XXX.XXX.XXX.XXX:44259'
[Feb 4 10:48:35] -- Incorrect password '' for user '301' (context = default-b)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029262, ts 088328, len 000160)
[Feb 4 10:48:35] -- <SIP/ze03p9-000000ca> Playing 'vm-incorrect.slin' (language 'fr_FR')
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029263, ts 088488, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029264, ts 088648, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029265, ts 088808, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029266, ts 088968, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029267, ts 089128, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029268, ts 089288, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029269, ts 089448, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029270, ts 089608, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029271, ts 089768, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029272, ts 089928, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029273, ts 090088, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029274, ts 090248, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029275, ts 090408, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029276, ts 090568, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029277, ts 090728, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029278, ts 090888, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029279, ts 091048, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029280, ts 091208, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029281, ts 091368, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029282, ts 091528, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029283, ts 091688, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029284, ts 091848, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029285, ts 092008, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029286, ts 092168, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029287, ts 092328, len 000160)
[Feb 4 10:48:35] Sent RTP packet to XXX.XXX.XXX.XXX:44259 (type 00, seq 029288, ts 092488, len 000160)


As-tu une idée du pourquoi ?

jean
04/02/2015, 14h26
A voir, c'est la réception du paquet de media qui déclenche ce changement - si tu es curieux, essaie de mettre directmedia=no - ca pourrait rester sur la premiere ip, ou directrtpsetup=no

intéressant aussi, sur la sécurité:

; IT IS IMPORTANT TO NOTE that if the nat setting in the general section differs from
; the nat setting in a peer definition, then the peer username will be discoverable
; by outside parties as Asterisk will respond to different ports for defined and
; undefined peers. For this reason it is recommended to ONLY DEFINE NAT SETTINGS IN THE
; GENERAL SECTION. Specifically, if nat=force_rport in one section and nat=no in the
; other, then valid peers with settings differing from those in the general section will
; be discoverable.

mistergorgo
04/02/2015, 16h28
hello,
j'ai été confronté à ce problème et je l'ai résolu en configurant mon firewall.
J'utilise freepbx, et le nat=yes est configuré sur chaque extension.
Les paramètres ip sont également configurés dans freepbx avec localnet et publique ip.
Nat=yes également dans mon trunk avec le sip provider.

Et pourtant, problème de coupure de son endéans un délai aléatoire, pas de détection de raccroché et autres joyeusetés.
Jusqu'au jour où j'ai ouvert 5060 pour le sip provider (et uniquement lui je vous rassure).

Problème uniquement de freepbx? j'ai pas bien configuré quelque chose? en tout cas maintenant ça fonctionne.

heymaneti
09/08/2019, 19h38
Bonjour Jean,
Merci pour ton message détaillé. Je ne m'y connais pas trop et je pense que tu peux m'aider. Je cherche également à me connecter via un softphone à distance. Mon compte SIP s'enregistre bien dans le softphone à travers le NAT. Cependant, il n'y a pas de tonalité lorsque je passe un appel vers un autre téléphone interne au réseau local.

Dans l'extension, j'ai bien configuré le NAT Mode sur Yes (force rport - Comedia) le port en dessous est celui par défaut.
Dans mon routeur, (Livebox Pro), j'ai ouvert le port 5160. Dois-je en ouvrir un autre ?

D'avance, je te remercie.

Bonne journée.

Etienne Heyman