Asterisk pjsip NAT
目次
Asteriskサーバがグローバル、端末がNAT背後の場合
Asteriskサーバ側がグローバルIPアドレスを持ち、それにアクセスする端末側がNAT背後にある場合、pjsip.confのtype=endpoint、type=aorのセクションに次のように記載します。
[201] type = aor max_contacts = 1 qualify_frequency = 1000 [201] type = endpoint context = default disallow = all allow = ulaw rtp_symmetric = yes rewrite_contact = yes direct_media = no auth = 201 outbound_auth = 201 aors = 201
重要なのはdirect_media, rtp_symmetric, rewrite_contactです。direct_mediaをnoにすると、端末間通話で常にAsteriskが映像・音声を中継しますから、NATの背後の端末同士の通話が可能となります。
rtp_symmetric, rewrite_contactの設定は従来のsip.confではnat=yesに相当します。
また相手(端末側)のNATテーブルをキープするためにtype=aorのセクションにqualify_frequency=1000(単位はミリ秒)を記述しておくと良いでしょう。遅延の大きい端末相手ならば2000あたりに設定します。
AsteriskサーバがNAT背後
この場合は、通信相手となる端末または回線(ITSP)の状況にも大きく依存するようですが、下記の手段が有用と思われます。
対応1
pjsip.confのtype=transportのセクションで次のように記載します。
external_media_address=fqdnhostname.example.com external_signaling_address=fqdnhostname.example.com local_net=192.168.0.0/16 local_net=127.0.0.1/32
external_media_address, external_signaling_addressにはグローバルIPアドレス、またはDDNS(Dynamic DNS)サービスを利用しホスト名(FQDN)を記載します。
ルータのNATを調整し、SIP(5060/UDP)とRTP(デフォルトでは10000~20000/UDP)をAsteriskサーバのプライベートIPアドレスに向けます。
ただし、これらの対処を行ってもRegisterできないITSPがあります。
対応2
上記の方法で解決しない場合、SIP-NAT機能を持つルータを使えば解決する場合があるとのことですがpjsipを使用する場合の詳細は未検証。