3 RE-INVITES send for asterisk

UA1-----Router 1 NAT-------Asterisk-------Router 2 NAT----------- UA 2

when try to establish point-to-point communication, there are 3 packages invite
SDP first:

v=0 o=root 639080599 639080600 IN IP4 s=Asterisk PBX 11.14.1 c=IN IP4 t=0 0 m=audio 33214 RTP/AVP 3 0 101 a=rtpmap:3 GSM/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-16 a=ptime:20 a=sendrecv

SDP second:

o=root 639080599 639080601 IN IP4 152.XXX.XXX.XXX (ip public)
s=Asterisk PBX 11.14.1
c=IN IP4
t=0 0
m=audio 33214 RTP/AVP 3 0 101
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16

SDP third

v=0 o=root 639080599 639080602 IN IP4 s=Asterisk PBX 11.14.1 c=IN IP4 t=0 0 m=audio 33214 RTP/AVP 3 0 101 a=rtpmap:3 GSM/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-16 a=ptime:20 a=sendrecv
between the second and third package SDP, works smoothly, as it’s sent to the correct public IP and port, but then asterisk send third package INVITE then send private ip, so the router drops the packet, how do I configure asterisk and not send the third package is bothering.

You tell Asterisk it’'s public address, so that it is aware that it is using NAT.

Typically the first re-invite is enabling direct media and the second re-invite is cancelling it, because the other party has hung up.

In futures, please don’t use discussion forums for support questions.

sorry for put the topic here, but i need tu edit SDP, i need put ip public, how do it?, in fact the second invite is good, but with third came dont work!

There is a lot of information on the web about using Asterisk with NAT. There is also quite a bit in the sample configuration file.

Look for externip,localnet in your sip.conf.

–Satish Barot

;----------------------------------------- NAT SUPPORT ------------------------
; WARNING: SIP operation behind a NAT is tricky and you really need
; to read and understand well the following section.
; When Asterisk is behind a NAT device, the “local” address (and port) that
; a socket is bound to has different values when seen from the inside or
; from the outside of the NATted network. Unfortunately this address must
; be communicated to the outside (e.g. in SIP and SDP messages), and in
; order to determine the correct value Asterisk needs to know:
; + whether it is talking to someone “inside” or “outside” of the NATted network.
; This is configured by assigning the “localnet” parameter with a list
; of network addresses that are considered “inside” of the NATted network.
; Multiple entries are allowed, e.g. a reasonable set is the following:
; localnet= ; RFC 1918 addresses
; localnet= ; Also RFC1918
; localnet= ; Another RFC1918 with CIDR notation
; localnet= ; Zero conf local network
; + the “externally visible” address and port number to be used when talking
; to a host outside the NAT. This information is derived by one of the
; following (mutually exclusive) config file parameters:
; a. “externaddr = hostname[:port]” specifies a static address[:port] to
; be used in SIP and SDP messages.
; The hostname is looked up only once, when [re]loading sip.conf .
; If a port number is not present, use the port specified in the “udpbindaddr”
; (which is not guaranteed to work correctly, because a NAT box might remap the
; port number as well as the address).
; This approach can be useful if you have a NAT device where you can
; configure the mapping statically. Examples:
; externaddr = ; use this address.
; externaddr = ; use this address and port.
; externaddr = mynat.my.org:12600 ; Public address of my nat box.
; externtcpport = 9900 ; The externally mapped tcp port, when Asterisk is behind a static NAT or PAT.
; ; externtcpport will default to the externaddr or externhost port if either one is set.
; externtlsport = 12600 ; The externally mapped tls port, when Asterisk is behind a static NAT or PAT.
; ; externtlsport port will default to the RFC designated port of 5061.
; b. “externhost = hostname[:port]” is similar to “externaddr” except
; that the hostname is looked up every “externrefresh” seconds
; (default 10s). This can be useful when your NAT device lets you choose
; the port mapping, but the IP address is dynamic.
; Beware, you might suffer from service disruption when the name server
; resolution fails. Examples:
; externhost=foo.dyndns.net ; refreshed periodically
; externrefresh=180 ; change the refresh interval
; Note that at the moment all these mechanism work only for the SIP socket.
; The IP address discovered with externaddr/externhost is reused for
; media sessions as well, but the port numbers are not remapped so you
; may still experience problems.
; NOTE 1: in some cases, NAT boxes will use different port numbers in
; the internal<->external mapping. In these cases, the “externaddr” and
; “externhost” might not help you configure addresses properly.
; NOTE 2: when using “externaddr” or “externhost”, the address part is
; also used as the external address for media sessions. Thus, the port
; information in the SDP may be wrong!
; In addition to the above, Asterisk has an additional “nat” parameter to
; address NAT-related issues in incoming SIP or media sessions.
; In particular, depending on the 'nat= ’ settings described below, Asterisk
; may override the address/port information specified in the SIP/SDP messages,
; and use the information (sender address) supplied by the network stack instead.
; However, this is only useful if the external traffic can reach us.
; The following settings are allowed (both globally and in individual sections):
; nat = no ; Do no special NAT handling other than RFC3581
; nat = force_rport ; Pretend there was an rport parameter even if there wasn’t
; nat = comedia ; Send media to the port Asterisk received it from regardless
; ; of where the SDP says to send it.
; nat = auto_force_rport ; Set the force_rport option if Asterisk detects NAT (default)
; nat = auto_comedia ; Set the comedia option if Asterisk detects NAT
; The nat settings can be combined. For example, to set both force_rport and comedia
; one would set nat=force_rport,comedia. If any of the comma-separated options is ‘no’,
; Asterisk will ignore any other settings and set nat=no. If one of the “auto” settings
; is used in conjunction with its non-auto counterpart (nat=comedia,auto_comedia), then
; the non-auto option will be ignored.
; The RFC 3581-defined ‘rport’ parameter allows a client to request that Asterisk send
; SIP responses to it via the source IP and port from which the request originated
; instead of the address/port listed in the top-most Via header. This is useful if a
; client knows that it is behind a NAT and therefore cannot guess from what address/port
; its request will be sent. Asterisk will always honor the ‘rport’ parameter if it is
; sent. The force_rport setting causes Asterisk to always send responses back to the
; address/port from which it received requests; even if the other side doesn’t support
; adding the ‘rport’ parameter.
; ‘comedia RTP handling’ refers to the technique of sending RTP to the port that the
; the other endpoint’s RTP arrived from, and means ‘connection-oriented media’. This is
; only partially related to RFC 4145 which was referred to as COMEDIA while it was in
; draft form. This method is used to accomodate endpoints that may be located behind
; NAT devices, and as such the address/port they tell Asterisk to send RTP packets to
; for their media streams is not the actual address/port that will be used on the nearer
; side of the NAT.
; 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.
; In addition to these settings, Asterisk always uses ‘symmetric RTP’ mode as defined by
; RFC 4961; Asterisk will always send RTP packets from the same port number it expects
; to receive them on.
; The IP address used for media (audio, video, and text) in the SDP can also be overridden by using
; the media_address configuration option. This is only applicable to the general section and
; can not be set per-user or per-peer.
; media_address =
; Through the use of the res_stun_monitor module, Asterisk has the ability to detect when the
; perceived external network address has changed. When the stun_monitor is installed and
; configured, chan_sip will renew all outbound registrations when the monitor detects any sort
; of network change has occurred. By default this option is enabled, but only takes effect once
; res_stun_monitor is configured. If res_stun_monitor is enabled and you wish to not
; generate all outbound registrations on a network change, use the option below to disable
; this feature.
; subscribe_network_change_event = yes ; on by default
; ICE/STUN/TURN usage can be disabled globally or on a per-peer basis using the icesupport
; configuration option. When set to yes ICE support is enabled. When set to no it is disabled.
; icesupport = no

is nothing, dont work, i need to edit header SDP, plz tell me how

Hire a skilled C programmer and ask them to modify the source code to your requirements.

i know c and c++, but need know which is the file that create the invite request