Asterisk 18 LTSをUbuntu 20.04に導入する手順&ひかり電話HGWに接続して発信者番号を記録する方法

Asterisk 18 LTSをUbuntu 20.04に導入する手順&ひかり電話HGWに接続して発信者番号を記録する方法
Page content

オープンソースのIP-PBXソフトウェアAsteriskを自宅のひかり電話に繋げたくなり、ラズパイ4上のUbuntu 20.04環境にAsteriskをインストールすることにしました。

ちなみに私は、Asteriskで音声応答などを行うつもりは今のところ無く、Asteriskをひかり電話HGW配下での子機としておき、「自宅のひかり電話に着信があった時にAsteriskが外部プログラムをキック (起動) して発信者番号を調べる仕掛け」を作りたいと思っていまして、今回の記事はその下準備となります。

Asteriskをソースからインストール

Asteriskのインストールは次のページをめいっぱい参考にしながら進めます。

“Step 1: Update Ubuntu System”

Ubuntu環境を諸々最新にしておきます。

sudo apt update
sudo apt upgrade
sudo reboot # 必要に応じて

“Step 2: Install Build Dependencies”

Asteriskのビルドに必要となる依存関係パッケージを導入します。

sudo apt update
sudo add-apt-repository universe
sudo apt install build-essential curl git libjansson-dev libncurses5-dev libnewt-dev libsqlite3-dev libssl-dev libxml2-dev subversion uuid-dev wget

“Step 3: Download Asterisk 18 tarball”

Asteriskのソースをダウンロードして、事前処理します。

cd ~/tmp
# https://www.asterisk.org/downloads/ からダウンロードできるLTS版が18系ならば asterisk-18-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
tar xvf asterisk-18-current.tar.gz
cd asterisk-18*/
contrib/scripts/get_mp3_source.sh
sudo contrib/scripts/install_prereq install

「Configuring libvpb1」の画面で「ITU-T telephone code:」の入力を求められたら、「81」を入力します (導入環境が日本国内の場合)。

“Step 4: Build and Install Asterisk 18 on Ubuntu 20.04|18.04”

Asteriskのソースをconfigureします。

./configure

「Error 4」対応

./configureが次の内容でエラー終了してしまう時。私のネットワーク環境の問題なのかタイムアウト (短め?) でエラーになっているようなので、configureの前にあらかじめpjproject-2.10.tar.bz2を手動でダウンロードしておくと良いようです。

[pjproject]  Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2 to /tmp/pjproject-2.10.tar.bz2
[pjproject]  Retrying download
[pjproject]  Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2 to /tmp/pjproject-2.10.tar.bz2
make: *** [Makefile:102: /tmp/pjproject-2.10.tar.bz2] Error 4
make: *** Deleting file '/tmp/pjproject-2.10.tar.bz2'
failed
configure: Unable to configure third-party/pjproject
configure: error: Re-run the ./configure command with 'NOISY_BUILD=yes' appended to see error details.

具体的には次のようにpjproject-2.10.tar.bz2を別途ダウンロードしておいた後、./configureします。

$ wget -O /tmp/pjproject-2.10.tar.bz2 https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2
$ ./configure
(snip)
[pjproject]  Verifying /tmp/pjproject-2.10.tar.bz2
[pjproject]  Verify successful
[pjproject]  Unpacking /tmp/pjproject-2.10.tar.bz2
(snip)

うまく行けば次のようにconfigureは正常終了します。

では、makeしましょう。

$ make menuselect # 何を選んだら良いかよく分からないので事実上pass
$ time make -j4 # 4並列で実行
(snip)
 +--------- Asterisk Build Complete ---------+
 + Asterisk has successfully been built, and +
 + can be installed by running:              +
 +                                           +
 +                make install               +
 +-------------------------------------------+

real	10m50.305s
user	28m12.658s
sys	4m16.878s

次のようにして管理者権限でインストールを進めます。

sudo make install
sudo make progdocs
sudo make samples
sudo make config
sudo ldconfig

“Step 5: Start Asterisk Service on Ubuntu 20.04|18.04”

asteriskを実行するユーザとグループを作成します。

sudo groupadd asterisk
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk
sudo usermod -aG audio,dialout asterisk
sudo chown -R asterisk.asterisk /etc/asterisk
sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
sudo chown -R asterisk.asterisk /usr/lib/asterisk

asteriskを実行するユーザとグループを指定します。

$ sudo cp -a /etc/default/asterisk{,.original}
$ sudo vim /etc/default/asterisk
$ diff /etc/default/asterisk{.original,}
8,9c8,9
< #AST_USER="asterisk"
< #AST_GROUP="asterisk"
---
> AST_USER="asterisk"
> AST_GROUP="asterisk"

$ sudo cp -a /etc/asterisk/asterisk.conf{,.original}
$ sudo vim /etc/asterisk/asterisk.conf
$ diff /etc/asterisk/asterisk.conf{.original,}
75,76c75,76
< ;runuser = asterisk		; The user to run as.
< ;rungroup = asterisk		; The group to run as.
---
> runuser = asterisk		; The user to run as.
> rungroup = asterisk		; The group to run as.

asteriskサービスを起動してみて、とりあえずrunningとなっていればサービスをenableにします。

$ sudo systemctl restart asterisk
$ systemctl status asterisk
● asterisk.service - LSB: Asterisk PBX
     Loaded: loaded (/etc/init.d/asterisk; generated)
     Active: active (running) since Fri 2021-12-31 00:49:31 JST; 24s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1627227 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS)
      Tasks: 73 (limit: 629145)
     CGroup: /system.slice/asterisk.service
             └─1627242 /usr/sbin/asterisk -U asterisk -G asterisk

Dec 31 00:49:31 raspi4 systemd[1]: Starting LSB: Asterisk PBX...
Dec 31 00:49:31 raspi4 asterisk[1627227]:  * Starting Asterisk PBX: asterisk
Dec 31 00:49:31 raspi4 asterisk[1627227]:    ...done.
Dec 31 00:49:31 raspi4 systemd[1]: Started LSB: Asterisk PBX.
Dec 31 00:49:33 raspi4 asterisk[1627242]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory
Dec 31 00:49:33 raspi4 asterisk[1627242]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory

$ sudo systemctl enable asterisk

asteriskのCLIが動作するか確認します。

$ sudo asterisk -rvv
Asterisk 18.9.0, Copyright (C) 1999 - 2021, Sangoma Technologies Corporation and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Running as user 'asterisk'
Running under group 'asterisk'
Connected to Asterisk 18.9.0 currently running on raspi4 (pid = 1627242)
raspi4*CLI> exit
Asterisk cleanly ending (0).
Executing last minute cleanups

asteriskが使用するポートを、必要があれば開放しておきます。

$ sudo ufw status
Status: inactive

# もしufwのStatusがactiveならば
$ sudo ufw allow proto tcp from any to any port 5060,5061

以上で、Asterisk 18をUbuntu 20.04にインストールする手順は終わりです。

Asteriskをひかり電話HGWに接続して発信者番号を記録する方法

次のページをめいっぱい参考にして、構築したasteriskをひかり電話HGWに接続します。

下記の例では、ひかり電話HGWのLAN内IPアドレスを「192.168.2.1」としています。

Step-1: 設定ファイル編集

pjsip.conf

/etc/asterisk/pjsip.confを次の内容のみに編集します。

[simpletrans]
type=transport
protocol=udp
bind=0.0.0.0

[hikari-denwa]
type=registration
transport=simpletrans
outbound_auth=hikari-trunk
server_uri=sip:192.168.2.1
client_uri=sip:【HGWでasteriskに割り当てた内線番号】@192.168.2.1
retry_interval=60

[hikari-trunk]
type=auth
auth_type=userpass
password=【当該内線番号のpassword】
username=【当該内線番号のusername】

[hikari-trunk]
type=aor
contact=sip:192.168.2.1

[hikari-trunk]
type=endpoint
transport=simpletrans
context=from-hikari
disallow=all
allow=ulaw
outbound_auth=hikari-trunk
aors=hikari-trunk
direct_media=no
from_user=【asteriskの内線番号】
from_domain=192.168.2.1
dtmf_mode=inband

[hikari-trunk]
type=identify
endpoint=hikari-trunk
match=192.168.2.1

extensions.conf

続いて、/etc/asterisk/extensions.confを次の内容のみに編集します。

[globals]
COMMAND_TEST=/usr/bin/logger

[from-hikari]
exten => s,1,Ringing()
exten => s,n,System(${COMMAND_TEST} -i -t asterisk 'call_from=${CALLERID(num)}')

Step-2: 動作確認

asteriskサービスを再起動した後、asteriskがひかり電話HGWへ登録できていること (Registered) を確認します。

$ sudo systemctl restart asterisk
$ sudo asterisk -rvv
(snip)
raspi4*CLI> pjsip show registrations

 <Registration/ServerURI..............................>  <Auth..........>  <Status.......>
==========================================================================================

 hikari-denwa/sip:192.168.2.1                            hikari-trunk      Registered

Objects found: 1

この状態で外線から自宅 (ひかり電話) へ電話を掛けてみますと、定義している外部プログラムloggerがキック (起動) され、引数の発信者電話番号 (070********) がasteriskサーバのsyslogに記録されます。これは応用が利きそうで良い感じです。

$ tail -f /var/log/syslog | grep asterisk
Dec 31 03:05:52 raspi4 asterisk[32061]: call_from=070********

追記 [2021-12-31]

Asteriskから外部プログラムを起動する応用として、続きを書きました。

参考リンク