asteriskでSIPサーバ構築

 

■参考図書
 https://www.aska-ltd.jp/jp/blog/151
 Kindle版Asterisk徹底入門:VoIPに関する基礎知識からAsteriskによる内線電話環境を構築
 


■OSインストール

 CentOS7.9をインストール
 インストール時の選択で以下にチェック入れる
  GUI
  開発環境

 

■root

 

su - root

 

■最新化

 

yum -y update

 

■必要なパッケージ追加

 

yum install vim epel-release gcc gcc-c++ wget make bzip2 patch subversion json-c json-c-devel unixODBC unixODBC-devel mysql-connector-odbc libtool-ltdl libtool-ltdl-devel jansson-devel libsrtp-devel openssl openssl-devel dmidecode ncurses-devel libxml2-devel newt-devel kernel-devel sqlite-devel libuuid-devel gtk2-devel binutils-devel libedit libedit-devel svn

 

■SELINUXを無効化


 とりあえず開発フェーズなので無効化して進む。
  必要な穴あけは後でで考える

 

sestatus

 

vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
:wq

 

reboot

 

getenforce

 →disabledになっている


■Pjsipをインストール

 

cd /usr/src/

 

wget https://github.com/pjsip/pjproject/archive/2.10.tar.gz

 

tar zxvf 2.10.tar.gz

 

cd pjproject-2.10

 

./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib64 --enable-shared --disable-video --disable-sound --disable-opencore-amr

 

make dep

 

make

 

make install

 

ldconfig

 

■Asterisk18をインストール

 

cd /usr/src/

 

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz

 

tar xvfz asterisk-18-current.tar.gz

 

cd /usr/src/asterisk-18*/

 

contrib/scripts/install_prereq install

 

./configure --libdir=/usr/lib64 --with-jansson-bundled

 

make menuselect.makeopts

 

menuselect/menuselect --enable chan_ooh323 --enable format_mp3 --enable CORE-SOUNDS-JA-WAV --enable CORE-SOUNDS-JA-ULAW --enable CORE-SOUNDS-JA-ALAW --enable CORE-SOUNDS-JA-GSM --enable CORE-SOUNDS-JA-G729 --enable CORE-SOUNDS-JA-G722 --enable CORE-SOUNDS-JA-SLN16 --enable CORE-SOUNDS-JA-SIREN7 --enable CORE-SOUNDS-JA-SIREN14 --enable app_macro --disable BUILD_NATIVE

 

contrib/scripts/get_mp3_source.sh

 

make

 

途中エラーになる。同じエラーの場合は以下の対処で・・・
chan_iax2.c:418:64: エラー: expected ‘;’, ‘,’ or ‘)’ before ‘buf’
[root@localhost asterisk-18.21.0]# find . -name chan_iax2.c
./channels/chan_iax2.c
[root@localhost asterisk-18.21.0]# vi ./channels/chan_iax2.c
    418 /* static char *auth_method_names(int authmethods, char *restrict buf) */
    419 static char *auth_method_names(int authmethods, char *buf)
    :wq

 

make install

 

make samples

 

make config

 

ldconfig

 

■Asterisk18を有効化

 

systemctl status asterisk
systemctl enable asterisk
systemctl start asterisk

 

■停止する場合
####
# systemctl stop asterisk
#

 

■ファイアウォールも無効化
 とりあえず開発フェーズなので無効化して進む。
  必要な穴あけは後でで考える
####
#
# FW stop
#
#  systemctl stop firewalld
#  systemctl status firewalld
#  systemctl disable firewalld
#  systemctl status firewalld
#

####
#
# SE-LINUX stop
#
#  setenforce 0
#  getenforce
#


■Asteriskの設定

 

内線通話設定する
Asteriskは自動応答とか、番号入力への応答とか
 色々できるソフトなんですけど、今は内線通話さえできればOKなので、
  簡単な内線設定を考える。
 
今回の設定の内容。
 内線番号は3つ。
  6001、6002、6003が存在。
 SIPサーバーのIPアドレスは192.168.10.119

 

内線通話だけなら2つのファイルを変更すれば良い。
 /etc/asterisk配下に存在
  pjsip.conf : [endpoint]は内線番号の数だけ記述する。
          内線間で通話できれば良いので同じ記述の繰り返しになる。
          ずらっと書かなければならないのか
          省略した書き方ができるかは不明。
  
  extensions.conf : 通話開始から、動作のシーケンスを記述。
            通話開始後にメニュー音声を読み上げ後に
            番号を押させて分岐もここで記述可能。

 

vi /etc/asterisk/pjsip.conf

 

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

[6001]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6001
aors=6001
rewrite_contact=yes

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

[6001]
type=aor
max_contacts=2

[6002]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6002
aors=6002
rewrite_contact=yes

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

[6002]
type=aor
max_contacts=2

[6003]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6003
aors=6003
rewrite_contact=yes

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

[6003]
type=aor
max_contacts=2

 

vi /etc/asterisk/extensions.conf

 

[default]
exten => 6001,1,Dial(PJSIP/6001,,r)
exten => 6001,2,Hangup()

exten => 6002,1,Dial(PJSIP/6002,,r)
exten => 6002,2,Hangup()

exten => 6003,1,Dial(PJSIP/6003,,r)
exten => 6003,2,Hangup()

 

[default]ひとつ書いておけばOKで、
 pjsip.confに書いたcontext=defaultに対応している。

 

ex...
 exten => 内線番号,シーケンス,コマンド
 シーケンスは内線番号ごとに1から記述。途中飛ばすと止まる
 Dial()は通話してくれる。
  ()の中身は
   通話するSIP技術の種類,
   タイムアウト(秒)省略可(省略時は無限),
   オプションrはリンクバックトーン有
 Hangup()は通話完了

 

■内線電話機の設定
 
 Zoiperを使用する場合。
 Linux、MacOS、Windows、Android等対応しているみたいです。
  フリーの他にも有料版あります。
   実験で使うだけなので、課金はちょっと無理。
 
 というわけで、設定項目はどのOSでも同じです。
 

 


 設定としては
  アカウント6001@192.168.10.119:5060
  SIPアカウント
   ドメイン :192.168.10.119:5060
   ユーザ名 :6001
   パスワード:6001
 5060はサーバーのポート番号5060がデフォルトみたい。
 ドメインはサーバーのIPアドレス。
  ユーザ名とパスワードはpjsip.confファイルにtype=authで
   指定したものを指定。
 
■通話

 

 上記設定できていれば、
 相手の内線番号=上記のユーザ名を入れて通話可能になります。