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)
参考サイト
- Asterisk pjsip - VoIP-Info.jp
- Hello World - Asterisk Project - Asterisk Project Wiki
- Asterisk 16 Configuration_res_pjsip - Asterisk Project - Asterisk Project Wiki
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: 6001hostname: 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が参考になる。