Nat

NAT 後面的星號設置了錯誤的聯繫人標題

  • February 11, 2015

我在靜態配置的 NAT 後面使用帶有星號 13.1.0 的 SIP。伺服器 private_ip 與我可以訪問的 public_ip 不同。我已經在sip.conf文件中設置了這些選項。

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

如果我現在嘗試開始呼叫,則消息可能會工作,直到伺服器將OK消息發送到客戶端。在此消息中,星號將Contact標頭設置為其私有而不是公共 ip。

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
...

由於 Contact 標頭, UA 現在將以下內容髮送ACK到 PRIVATE_IP。

我的配置有什麼問題?這是星號中的錯誤嗎?

如果將 IPv4 externaddr 與 IPv6 bindaddr 設置結合使用,則會出現此問題。

;  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.)

重要的是要知道**bindaddr=::**不綁定 IPv4 萬用字元。它綁定在 IPv4 映射的 IPv6 地址上!

引用自:https://serverfault.com/questions/659384