Loading...

2025-04-08(火) 15:00

☁️ Asterisk をNAT超えしてクラウド上で使用するための設定

AsteriskUbuntu
Asterisk をAWSやGCPのようなクラウド上のサーバに構築して使用するための設定を解説します。クラウド上で Asterisk を使用する場合、NAT 配下にある SIP クライアントと通信することになることがほとんどのため、NAT 超えの設定が必要になります。

目次

前提と注意事項

  • この記事では、Google Compute Engine のインスタンス(Ubuntu 24.04 LTS) にインストールした Asterisk を前提にしています。
  • Asterisk のインストールは完了しているものとします。
  • インストールした Asterisk のバージョンは 20.6.0 です。

この記事のゴール

ローカルではなく、クラウド上のサーバに Asterisk を構築した場合は、SIP クライアントが NAT 環境にあることを考慮した設定が必要になります。 また、Asterisk をクラウドのサーバ上に公開すると、色々なところから不正な操作を試みるアクセスが多くきます。したがって、適切なセキュリティ設定も行う必要があります。 そこでこの記事では、クラウドサーバ上の Asterisk と NAT 配下にある SIP クライアントが問題なく通話できるようにするための設定を解説します。


なお、本記事で設定を行うのは、/etc/asterisk/pjsip.conf/etc/asterisk/extensions.conf の2つのファイルになります。これらのファイルについては、以下に記載しましたのでこの記事では NAT 超えに関連する部分のみ説明を記載します。 以下では、LAN や VPN 環境などで Asterisk のインストールから内線通話までの手順を記載しています。

☎️ Ubuntu に Asterisk をインストールして内線通話を行う

Asterisk を Ubuntu にインストールして内線通話を行う方法を解説します。

ritaiz.com

pjsip.conf の設定

pjsip.confでは、NAT 超えをするためのプロパティがいくつか用意されているため、それを使用します。具体的には、pjsip.confの設定を以下のようにします。

/etc/asterisk/pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
allow_reload=yes
local_net=10.100.0.0/20
external_media_address=30.200.1.100
external_signaling_address=30.200.1.100
 
[1001]
type=endpoint
transport=transport-udp
context=internal
disallow=all
allow=g729,ulaw,alaw,ilbc
auth=1001
aors=1001
rtp_symmetric=yes
rewrite_contact=yes
direct_media=no
 
[1001]
type=auth
auth_type=userpass
password=1001test
username=1001
 
[1001]
type=aor
max_contacts=10
qualify_frequency=25
 
[1002]
type=endpoint
transport=transport-udp
context=internal
disallow=all
allow=g729,ulaw,alaw,ilbc
auth=1002
aors=1002
rtp_symmetric=yes
rewrite_contact=yes
direct_media=no
 
[1002]
type=auth
auth_type=userpass
password=1002test
username=1002
 
[1002]
type=aor
max_contacts=10
qualify_frequency=25

上記のうち、NAT 超えに関連する設定は以下になります。

設定項目

設定値

説明

local_net

例:10.100.0.0/20

Asteriskのサーバのローカルネットワーク側のIPアドレス範囲を指定します。これにより、Asteriskはローカルネットワークと外部ネットワークを区別できるようになります。NAT環境では、ローカルネットワークのアドレス範囲を正確に指定することで、適切なルーティングが可能になります。

external_media_address

例:30.200.1.100

音声などのデータの送信元として外部に公開するIPアドレスを指定します。NAT環境では、SIPクライアントがAsteriskサーバーに接続する際に、このIPアドレスを使用してデータを送信します。クラウド環境では、このパラメータにパブリックIPアドレスを設定する必要があります。

external_signaling_address

30.200.1.100

SIPシグナリング(接続確立・切断などの制御情報)の送信元として外部に公開するIPアドレスを指定します。SIPクライアントがAsteriskサーバーに接続する際に、このIPアドレスを使用してシグナリング情報を送信します。クラウド環境では、このパラメータにパブリックIPアドレスを設定する必要があります。

rtp_symmetric

yes

Symmetric RTPを利用するための設定です。Symmetric RTPは、NAT超えの方法の1つです。詳細は割愛します。

rewrite_contact

yes

SIPメッセージ内のContactヘッダーを書き換えるように設定します。NAT環境では、クライアントが送信するContactヘッダーには内部IPアドレスが含まれていますが、これをAsteriskサーバーの外部IPアドレスに書き換えることで、正しいルーティングが可能になります。これにより、NATを超えた通信が正常に行われるようになります。

direct_media

no

直接メディア(音声・映像データ)の送受信を無効にします。通常、Asteriskは通話の確立後、クライアント間で直接メディアを送受信するように設定できますが、NAT環境ではこれが問題を引き起こす可能性があります。direct_media=noに設定することで、すべてのメディアストリームがAsteriskサーバーを経由するようになり、NAT環境でも安定した通信が可能になります。

なお、上記は以下の Asterisk の公式ドキュメントに記載されている内容になります。

Configuring res_pjsip to work through NAT

Here we can show some examples of working configuration for Asterisk's SIP channel driver when Asterisk is behind NAT (Network Address Translation).

docs.asterisk.org

extensions.conf の設定

続いて、extensions.conf を以下のようにします。なお、extensions.conf の設定については、特に NAT 超えのために特別追記は必要ありません。

/etc/asterisk/extensions.conf
[internal]
; 内線 1001
exten => 1001,1,Answer()
 same => n,Dial(PJSIP/1001,30)
 same => n,Hangup()
 
; 内線 1002
exten => 1002,1,Answer()
 same => n,Dial(PJSIP/1002,30)
 same => n,Hangup()

Asterisk の設定ファイルを更新したら、以下で再起動して設定を再読み込みします。

ターミナル
$ sudo systemctl restart asterisk

ファイアウォールの設定

Google Compute Engine のインスタンスで Asterisk が使用するポートを許可しておく必要があります。具体的には、以下のようなプロトコルとポート番号を許可しておく必要があります。

  • UDP 5060
  • UDP 15060
  • UDP:10000-20000

Asterisk が使用するポートについては、以下のサイトに詳しく記載されており大変参考になりました。

Asteriskが使用するポート一覧

Asteriskはデフォルトでは以下のポートを使用します。各ポートは設定ファイル(.conf)で変更可能です。ファイアウォールで何を通すべきで、何を遮断すべきかの判断の参考にしてください。

voip-info.jp

まとめ

Asterisk をクラウド上で構築し、NAT 超えをするための設定を解説しました。この記事では Asterisk の設定のみについて記載しましたが、実際には fail2ban などを使用してセキュリティ面についても最低限の設定が必要です。 Asterisk を外部に公開せずに指定した IP アドレスからのみアクセスを許可したり、SIP クライアントを同じ VPN で接続することで、セキュリティを高めることができます。ちゃんとした形で使えると、Asterisk は SIP を扱う既存の SIP 端末とも当然ながら連携できるため、内線通話網を簡単に構築することができ、便利です。