Asterisco por trás de NAT configura cabeçalho de contato incorreto

2

Estou usando o SIP com o asterisco 13.1.0 por trás de um NAT configurado estaticamente. Os servidores private_ip diferem do public_ip, onde eu posso alcançá-lo. Eu já defini essas opções no arquivo sip.conf .

externaddr=public_ip:5060
media_address=public_ip
localnet=private_ip/24

Se eu tentar iniciar uma chamada, as mensagens funcionarão provavelmente até que o servidor envie a mensagem OK para o cliente. Nesse asterisco, a mensagem define o cabeçalho Contact como seu IP privado e não o IP público.

SIP/2.0 200 OK
From: "Test799" <sip:799@HOSTNAME>;tag=7ajcnltflq
To: <sip:62@HOSTNAME;user=phone>;tag=as08a05471
Call-ID: 54b6479ed3e3-io8z54pk25ve
CSeq: 2 INVITE
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Session-Expires: 1800;refresher=uas
Contact: <sip:62@PRIVATE_IP:5060>
Content-Type: application/sdp
Require: timer
Content-Length: ...

v=0
o=root 1234 1234 IN IP4 PUBLIC_IP
c=IN IP4 PUBLIC_IP
...

O UA agora envia o seguinte ACK para o PRIVATE_IP, por causa do cabeçalho do contato.

O que há de errado com minha configuração? Isso é um bug no asterisco?

    
por Lukas Bernhard 14.01.2015 / 12:05

1 resposta

2

Você tem esse problema, se você usar um externaladdr IPv4 em combinação com a configuração bindaddr IPv6.

;  c) Listen on the IPv4 wildcard.            Example: bindaddr=0.0.0.0
;  d) Listen on the IPv4 and IPv6 wildcards.  Example: bindaddr=::
...
; (Note that using bindaddr=:: will show only a single IPv6 socket in netstat.
;  IPv4 is supported at the same time using IPv4-mapped IPv6 addresses.)

É importante saber que o bindaddr = :: não se liga ao curinga do IPv4. Liga-se a endereços IPv6 mapeados para IPv4!

    
por 11.02.2015 / 15:01