stunとは
ソフトフォンZoiper5にはstun設定が有ります。
デフォルトでstun.zoiper.comを使用します。
SIPアカウント毎にカスタムstunで任意のstunサーバーを使用する事も出来ます。
stun オン/オフでのSIPパケットの変化
stunオン
stunオフ
PCのソフトフォンは自分の環境のグローバルIPアドレスとIPマスカレードされた際のポート番号を知りません。
PBXの様にグローバルIPアドレスが変わらない場合は固定で設定しておくも可能ですが、ソフトフォンなどは絶えずグローバルIPアドレスが変わる可能性が有ります。
それでSIPの通信とは別にstunサーバーに自分のグローバルIPアドレスとポートを定期的に問い合わせます。
帰ってきたグローバルIPアドレスとポートをSIPヘッダーとSDPに埋め込みます。
なぜstunが必要なのか
インターネット上のSIPサーバーに向けてNAT配下のZoiper5から発信した例です。
stunオフの場合です。
SIPヘッダーのContactにプライベートIPが入っているので、応答がプライベートIP宛になってしまい行き先が無くINVITEの再送が繰り返されています。
SIPのやりとりが成立しないので音声は当然疎通しませんが、SDPもプライベートIPになっているのでRTP(音声)も届きません。
stunに依存しないNAT超え技術も有ります。
例えばAsteriskではnat=yesに設定する事でSIPヘッダー/SDPがプライベートIPでも、SIPヘッダーを無視してIPヘッダーのグローバルIPに応答を返す事が可能です。
Asterisk sip nat
https://www.voip-info.org/asterisk-sip-nat/
ルーターのSIP-NAT機能
ルーターの機能でパケットがNAT超えする際に、SIPヘッダーとSDPをグローバルIPアドレスに書き換えてくれます。この場合stunは不要です。
ただしSIP-NATを無効にする事を推奨している場合も有ります。
Wiresharkで覗く
XOR-MAPPED-ADDRESSに自分のグローバルIPとポートが入ります。
stunの問い合わせをBinding Request, 応答をBinding Success Responseと呼びます。
whatsmydns.netで確認するとSRVレコードで冗長化されていてstun1とstun2のサブドメインにルーティングされている様です。
まとめ
stunはSIPや音声やビデオがNAT超えをする為の技術です。(Session Traversal Utilities for NAT)
stunサーバーに自分のグローバルIPとIPマスカレードされたポートを問い合わせます。
WebRTCやMicrosoft Teamsにも使われています。
stunに依存しないNAT超え技術も有ります。
ルータの機能でパケットを書き換えたり、サーバー側でもNAT超えテクニックが有ります。