NAT Problem With Recvonly Calls
Hello,
We have a problem with a SIP doorbell device which sends media one way only, and NAT at the receiving device.
When the doorbell button is pressed it makes a call to a configured destination. Since the doorbell only sends and doesn’t receive it sends the INVITE with sendonly in the SDP, and the destination then replies with a
200 OK with recvonly in the SDP.
The problem is that the destination is behind NAT, and its reply contains a private network IP in the SDP. Normally Asterisk when nat=yes works around that by adjusting the destination for RTP to be the address it actually receives audio from, however because this device is recvonly Asterisk never receives audio from it. This means Asterisk keeps trying to send the doorbell’s RTP to the private network IP which of course fails, and the destination never gets the RTP from the doorbell.
Does anyone know how to work around this issue?
Thank you in advance,
4 thoughts on - NAT Problem With Recvonly Calls
David,
Does Asterisk send a 180 or a 183 with SDP? We have found that using these two lines help (where xc is a 500ms blank sound file)
Exten => _X.,n, Progress()
Exten => _X.,n, Playback(xc,noanswer)
Hi Dovid,
We’re using Enswitch so it uses AGI rather than a regular Asterisk dialplan, but perhaps sending it to a custom-made Asterisk context with the lines you suggest could be the best way forward.
Thank you for that.
David,
You should be able to do that via the agi as well.
Hi Dovid,
Thanks for that. Can you explain how the Progress() and/or Playback()
actually help the NAT problem? I’m trying to figure out how it tells Asterisk the correct address to send the RTP to.