UbuntuにAsteriskをインストールしてスマホで内線接続

クラウドのVPS上にAsteriskをインストールしたときの覚書。
Twilioの設定は次回予定。

環境: ubuntu 20.4, Asterisk 16.2.1

参考サイト


1.Ubuntuのインストール

別記事にした。


2. Asteriskのインストール

asteriskパッケージの検索して確認
# apt search asterisk
# apt show asterisk

インストール実行
# apt-get install asterisk

設定ファイル確認
# cd /etc/asterisk/
# ls

よく分からないので後回し。

サービス一覧
# systemctl list-unit-files --type=service

asteriskが追加されている。
# systemctl status asterisk


3.設定の確認

参考サイト

rootになって作業する
$ sudo su -

全体設定の確認
# asterisk -rx "core show settings"

モジュールの一覧
# asterisk -rx "module show"

chan_pjsip.soが有効になっている。

PJSIPはSIPなどの通信プロトコルに対応しているマルチメディアコミュニケーションライブラリ(公式サイト)。
SIPクライアントアプリケーションを作るためのAPIを提供している。
Asterisk16からはSIPチャンネルドライバーとしてpjsipがデフォルトで使われている。


4.SIPの設定(pjsip.conf)

参考サイト

pjsip.confをバックアップして作業
# cd /etc/asterisk/
# cp pjsip.conf pjsip.conf.sample

まずは最低限スマホ2台で内線できる環境を目指す。
# less pjsip.conf

トランスポートセクション(コメントを外しただけ)

[transport-udp]
type=transport
protocol=udp    ;udp,tcp,tls,ws,wss
bind=0.0.0.0

内線6001を記述(公式wikiを参考にコメントを外しただけ)

[6001]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw
auth=6001
aors=6001

[6001]
type=auth
auth_type=userpass
password=6001
username=6001

[6001]
type=aor
max_contacts=1

Asteriskを再読み込み
# systemctl restart asterisk

とりあえずファイヤーウォールを無効にしておく
# ufw disable

さくらのVPSの場合、コントロールパネルでパケットフィルタを無効にしておく。

別サーバーでUDPの5060番が空いているかポートスキャンして確かめる
# nmap -sU -p5060 hoge.co.jp


5.スマホで内線子機として登録

ZoiPerというSIPアプリをインストール(Pro版)。

スマホ①: ASUS ZenFone Max M2(ASUS_X01AD), Android 9, ZoiPer Pro 2.17.6
スマホ②: ASUS ZenFone Live L1(ASUS_X00RD), Android 8, ZoiPer Pro 2.17.6

ZoiPerを起動後、下記情報を入力。

Username: 6001@hoge.co.jp
Password: 6001

hostname: hoge.co.jp

無事登録できたみたい。

もう一つのスマホ用にサーバー側で6001をコピーして6002を作る
# less pjsip.conf

2台目も接続完了。

サーバーでAsterisk CLIを表示しながら内線を掛けてみる()。
# asterisk -rvvvvv

下記エラーで繋がらなかった。

[Feb 12 17:36:31] NOTICE[51605]: res_pjsip_session.c:2991 new_invite: Call from '6002' (UDP:xxx.xxx.xxx.xxx:60601) to extension '6002' rejected because extension not found in context 'from-internal'.

extensions.confの設定が必要らしい。


6.extensions.confの設定

下記サイトを参考に設定。

元ファイルをコピーしておく
# cp extensions.conf extensions.conf.sample

編集
# less extensions.conf

。。。と思ったけどデモ用の記述があるのでextensions.confは一から作ることにした。
# rm extensions.conf
# vi extensions.conf

[general]
static=yes
writeprotect=no

[from-internal]
exten = 100,1,Answer()
same = n,Wait(1)
same = n,Playback(hello-world)
same = n,Hangup()

# 6001
exten = 6001,1,Dial(PJSIP/6001,30,r)
same = n.Hangup()

# 6002
exten = 6002,1,Dial(PJSIP/6002,30,r)
same = n.Hangup()

再起動してCLIモード起動
# systemctl restart asterisk
# asterisk -rvvvvv

スマホのZoiPerで内線電話掛けてみる。

掛かったけど音声が聞こえない。


7.音声が聞こえない

NATの背後にあったのが原因らしい。下記サイトを参考に。

設定変更
# less pjsip.conf

内線番号の各セクションに下記を追記

rtp_symmetric=yes
rewrite_contact=yes

再起動してCLIモード起動
# systemctl restart asterisk
# asterisk -rvvvvv

無事聞こえた。
ひとまずここまで。


設定方法はFreePBXの/etc/asteriskが参考になる。


【関連記事】