雲の上はいつも青空 -35ページ目

雲の上はいつも青空

不思議な経歴をもつエンジニア!?の徒然なブログです。
お仕事関係の話が多いと思いますが、コメントとかもらえると中の人はとても喜びます(^O^)/

最近は、結構ひんぱんにAsteriskの設定を触っては挙動を確認しています。
実際の動作は、電話をかけてみないと確認できないので、傍で見ていると電話機で遊んでいるように見えるでしょうね(苦笑)。
※なんか受話器を2つ3つ持って、あーあーとかやってますからww

それでは、デフォルト状態では鳴らない保留音について書いてみます。
鳴らない理由は簡単で、/var/lib/asterisk/moh という音源ファイルを入れるディレクトリーの中が、空っぽだからです。
どうやら、DebianのインストールではAsterisk純正(!?)の保留音はインストールされないみたいです。

まずは純正の保留音を入れてみます。

1.Asterisk本家のサイトへ行って、
  最新のソースパッケージ(tarボール)をダウンロードしてくる。
  ※このブログを書いている時点では、1.6.1.4が最新でした。
2.適当なディレクトリーで、展開する。
  tar xvfz asterisk-1.6.1.4.tar.gz
3.できあがったディレクトリーへ入り、
  cd asterisk-1.6.1.4
  その中にある sound というディレクトリーへ入る。
  cd sound
4.asterisk-moh-freeplay-wav.tar.gzというファイルがあるので、このファイルを展開する。
  tar xvfz asterisk-moh-freeplay-wav.tar.gz
5.fpm-calm-river.wav fpm-sunshine.wav fpm-world-mix.wav
  3つのファイルが出来上がるので、
  これを、/var/lib/asterisk/mohへコピーする。
6.保留音に関係する設定ファイルは、
  /etc/asterisk/musiconhold.conf
  内容は以下のように設定する。
    [default]
mode=files
directory=/var/lib/asterisk/moh
random=yes
これで、3つの保留音がランダムに選ばれて流れるようになります。


【mp3の音源】

自分で購入して所有している音楽CDからmp3ファイルを作成し、これをIP電話の保留音として使って良いのかダメなのか(特に法律的に)は、私は知りません。
ですから、保留音として使っても大丈夫なmp3の音源ファイルがあることを前提にします。

1.Linuxで動くmp3プレーヤーをインストールします。
  aptitude install asterisk-mp3

2.次に、mkdir /var/lib/asterisk/mohmp3 で新しいディレクトリーを作ります。
  このフォルダーにmp3ファイルをコピーします
  ※mp3であれば、サンプリングレートとかステレオとかモノラルとか関係ありません。

3.ディレクトリーとファイルのオーナー&グループをasteriskにします。
  chown -R asterisk /var/lib/asterisk/mohmp3
  chgrp -R asterisk /var/lib/asterisk/mohmp3


4.最後に設定ファイルを以下のように変更し、/etc/init.d/astersik restart します。
    [default]
mode=mp3
directory=/var/lib/asterisk/mohmp3
random=yes
  マニュアルとかには、mode=quietmp3がデフォルトと書いてありますが、音量的にはmp3で良いと思います。

■いろいろ試してみたのですが、個人的に音質はwavファイルのほうが良い感じがしました。
 wavファイルの作成方法は、Astersik界では大御所の高橋さんの著書を参考にしました。
Asterisk徹底活用ガイドのp161に載っています。

mp3からwavファイルを作る方法です。
まずは、変換するソフトをインストールします。
aptitude install madplay

次に音源ファイルを変換します。
madplay -m --sample-rate=8000 --attenuate=-5 sample.mp3 --output=wave:sample.wav

--attenuateは出来上がるファイルの音量ですので、大きくしたいときは-2とか-3に、小さくしたいときには-7とか-8にすると良いです。
※高橋さんの本では、-10と記述されています。


■次回は、無線IPフォンの設定を予定しています。
それではオープンソースでIP-PBXを実現する、Asteriskの設定と構築を行います。
その1で書いたように、アジルフォンproの契約を行うと、以下の情報が取得できます。

外線着信番号    これは03から始まるお馴染みの電話番号
アジルフォンNo. 外線着信番号と1対1で発行されます
パスワード アジルフォンのWebサイトにあるmyページのログインパスワードと同じ
sipサーバ名 インターネットのグローバル側に設置されています

雲の上はいつも青空-IPフォン2インターネットを利用してのsipサーバとの接続について、本来、外線着信はインバウンド接続(外からLAN内に設置されているsipサーバにパケットがやってくる)になるのですが、動的IPやNATを越える事を考慮して、利用者のsipサーバが、ITSP(Internet Telephony Service Provider)側のsipサーバへ最初にコネクションを張っておいて、そのコネクションを使ってサーバ間で通信を行うようになっています。
これをAsteriskの世界ではレジストすると表現します。

このため、利用回線のIDであるアジルフォンNo.とパスワードが必要となるわけです。

今回構築するVoIPネットワークは、以下のようになります。

1.外線が着信するITSP側にあるsipサーバ
2.自宅内ネットワーク(ローカル側)にAsteriskで構築したIP-PBX(sipサーバ)
3.iCOM製VP-71:無線LAN接続のコードレスIPフォン
4.X-lite:PCにインストールするソフトウェアIPフォン


3と4のIPフォンには内線番号をふります。200,201,202の三つを割り当てました。

【Asteriskのインストール】
それでは、Windows server 2008 Foundationで動いているVMware Serveで仮想化されたLennyへ、Asteriskをインストールします。

インストール自体は簡単で、aptitude install asterisk だけで、全て必要なプログラムはインストールされます。システム自体も、VoIPカードやISDNカード等の特殊なハードウェアを使わないのであれば、仮想化されたシステムであっても問題なく動作します。

LennyでインストールされるAsteriskは1.4.21というバージョンで、Debian用にチューンされています。本家のサイトからtarボールをもってきて自力でコンパイルというのも良いのですが、ちょっとバージョンが古くてもdebパッケージで運用することをお勧めします。

【Asteriskの設定】
それでは、Asteriskの設定をはじめます。
まずは、動作与件を整理しておきましょう。

1.外線からの着信は全ての内線(200,201,202)を呼び出す
2.発信は電話番号1を優先して使い、ビジーの時に電話番号2を使う
3.着信後の保留が可能(保留音を流す)
4.着信後、内線へ転送が可能
5.着信後、外線へ転送が可能
6.転送が終了するまで保留音を流す


設定するファイルは3つです。
普通にsipというプロトコルだけで構築するなら、sip.confとextension.confの二つのファイルを設定すればおしまいですが、今回、ローカル側のsipサーバとITSP側のsipサーバとの接続に、Asterisk独自のIAX2というプロトコルを使って接続しているので、ちょっと設定内容が一般とは異なります。
※IAX2に関してはこちらが詳しいです。
/etc/asterisk/sip.conf

[general]
allowguest=no
maxexpirey=3600
defaultexpirey=3600
context=extd
port=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
language=jp

[200]
type=friend
username=200
secret=200pass
canreinvite=no
host=dynamic
mailbox=200

[201]
type=friend
username=201
secret=201pass
canreinvite=no
host=dynamic
qualify=4000 ←201に無線IPフォンを設定してます。これは4秒おきのkeep alive!
mailbox=201

[202]
type=friend
username=202
secret=202pass
canreinvite=no
host=dynamic
mailbox=202
無線のIPフォンは省電力の為にスリープすることがあり、そうすると呼び出しに時間がかかるので、4秒おきにパケットを送り眠らないようにしています。

また、mailboxの指定は留守録を使わないときでも設定だけをしておくと、ログがワーニングに埋まることが避けられます。
usernameとsecretは、端末認証に使うIDとパスワードです(上記のは例)。
これはLAN内なので、パスワードは全部同じでも良いですが、無線IPフォンだけはちょっとひねったパスワードにしておくと良いかもしれません。


iax.confで、ITSP側のsipサーバへレジストする設定を記述します。
以下は例として、アジルフォンNO.が899991と899992、パスワードはpasswordとしています。
また、899991が着信電話番号1で、899992が電話番号2に対応しているものとします。
/etc/asterisk/iax.conf

[general]
language=jp
disallow=all
allow=ulaw
jitterbuffer=no
forcejitterbuffer=no

register => 899991:password@sip.agile.ne.jp
register => 899992:password@sip.agile.ne.jp

[899991]
type=user
context=inbound
auth=plaintext

[899992]
type=user
context=inbound
auth=plaintext

次が一番難関だったextension.confです。
この設定ファイルで、子機がダイヤルしたときのAsteriskの挙動を規定します。
/etc/asterisk/extension.conf

[general]
writeprotect=no
priorityjumping=no

[inbound]
exten => s,1,Dial(SIP/200&SIP/201&SIP/202,120,t) ←着信した全部の子機を鳴らす
exten => s,n,Hangup

[extd]
exten => _0.,1,Set(CALLERID(num)=899991)
exten => _0.,n,Dial(IAX2/899991:password@sip.agile.ne.jp/${EXTEN},120,T)
exten => _0.,n,Dial(IAX2/899992:password@sip.agile.ne.jp/${EXTEN},120,T)
exten => _0.,n,Hangup
exten => _1.,1,Set(CALLERID(num)=899991)
exten => _1.,n,Dial(IAX2/899991:password@sip.agile.ne.jp/${EXTEN},120,T)
exten => _1.,n,Dial(IAX2/899992:password@sip.agile.ne.jp/${EXTEN},120,T)
exten => _1.,n,Hangup
exten => _20Z,1,Dial(SIP/${EXTEN},120,tT)
exten => _20Z,n,Hangup
まずは、generalにあるpriorityjumpingに注目してください。
これはAsteriskでも古いバージョンで有効だった機能だそうで、互換性維持のため残っているので、先々なくなるとの事です。
私も最初は、priorityjumpingをonにした設定を書いていたのですが、動作確認が終わった時点でその設定は捨てました。この部分の解説を書き出すと長くなるのですが、priorityjumpingをonにすると、プライオリティーの部分がbusyの時に+101されると記憶しておくと良いかもしれません。
※Dialコマンド発行時のプライオリティーが2だとすると、busyのときは+101されて103になる。

今回は、プライオリティーはnを設定したので自動発番の機能を使っています。

■以上の設定を行いAsteriskを動作させると、一番最初に書いた与件はすべて満たします。
 しかし、回線が2つあるのに電話番号1を使っているときに、その同じ着信電話番号1に電話がかかってくると当然のことながら相手には話中になってしまいます。

独立した2つの番号を持っているので、これは仕方の無い事なんでしょう…
やっぱりITSP側にあるsipトランクを使ってシステムを組んでみたいです。
※3回線くらいでトランクサービス、お願いします>ITSPの中の人

■ちょっと長くなってしまったので、無線IPフォンの設定と、デフォルトでは鳴らない保留音の話は次回に書くことにします。

最後にpriorityjumpingをonにしたときの設定です。ご参考までに…
[general]
writeprotect=no
priorityjumping=yes
[inbound]
exten => s, 1,Dial(SIP/200&SIP/201&SIP/202,120,t)
exten => s, 2,Congestion
exten => s,102,Busy
[extd]
exten => _0., 1,Set(CALLERID(num)=8583553)
exten => _0., 2,Dial(IAX2/899991:password@sip.agile.ne.jp/${EXTEN},120,T)
exten => _0., 3,Congestion
exten => _0.,103,Dial(IAX2/899992:password@sip.agile.ne.jp/${EXTEN},120,T)
exten => _0.,104,Congestion
exten => _0.,204,Busy
exten => _1., 1,Set(CALLERID(num)=8583553)
exten => _1., 2,Dial(IAX2/899991:password@sip.agile.ne.jp/${EXTEN},120,T)
exten => _1., 3,Dial(IAX2/899992:password@sip.agile.ne.jp/${EXTEN},120,T)
exten => _1., 4,Congestion
exten => _1.,103,Busy
exten => _2XX, 1,Dial(SIP/${EXTEN},120,tT)
exten => _2XX, 2,Congestion
exten => _2XX,102,Busy

0から始まる通常の電話番号は、899991の回線で発信を試み、もしbusyだと
プライオリティナンバーに+101されるので、103へ飛びます。
そこで、今度は899992の回線で発信を行う。…という動作をします。

1から始まる特番(117とか177…)は、なぜか二行続けて書いてもうまくいきました。
理由はわかりませんww
雲の上はいつも青空-IPフォンサポート先のお客様が事務所を引っ越すので、それにあわせてIP電話を導入したいのだが、なるべく安くしかも高機能で!
う~む… ということで、まずは自宅で環境を構築してみました。

まずは与件を整理します。
1.公衆回線は引かない。
2.03の番号が欲しい。
3.プロバイダーフリーが良い。
4.無線のIPフォンを使ってみたい。
5.外線転送の機能が是非欲しい。


このなかで、1~3については色々調べてみたのですが、Agilenetworksしか選択肢がみつかりませんでした。
※Agileと最後にeがつくので、エイジルと発音するかと思ったのですが、Webサイトではアジルと書いてあります。

050番号でよければブラステルの回線を使ったBasixが選択肢にあがります。もちろん、ここでも03は使えるのですが、その場合はプロバイダーをBasixにしないとダメみたいです。

以上より、自宅ではお仕事用の電話もかねて、アジルフォンproというサービスで2個番号を取得しました。
初期設定費用は1,000円/番号、また月額の基本使用料は500円/番号になります。
もうすこし人数が多くて(50人以上)で、外線も5回線以上になってくると、外線番号を束ねるSIPトランクサービスが必要になると思いますが、さすがに個人でそこまでの検証環境は作れないので、今回は独立した2つの外線着信番号で、IP電話システムの検証と構築をしてみます。
※5の外線転送をやろうとすると、VoIPの回線が1つでは無理なので2つ回線を契約しました。

次に、4に書いた無線LANに接続するIPフォンです。
デザインや大きさ・値段を考えて、写真にあるiCOM製のVP-71という製品を選びました。
音声からデジタルデータを作るコーデックの部分はハードウェアの高速チップを使っているので音声の品質が良いです。ただ、思ったより大きさが小さいので手が大きい人にはちょっとボタンが押しづらいかもしれません。

ただ、さすがにIPフォンだけあってhttp://の後にVP-71に割り当てられたIPアドレスを入れると、全ての設定がブラウザーからできます! これで、お仕事につかう電話番号とかを全部転送してしまえば、後は楽チンでしょうね。

さて、ここまでの話をまとめてみましょう。
1.ITSP(Internet Telephony Service Provider)はアジルネットワークス
2.使用するサービスはアジルフォンproを2回線
3.無線IPフォンは、iCOM製VP-71
4.IP-PBXは、オープンソース定番のAsteriskを使う


雲の上はいつも青空-x-lite肝心のIP-PBXの部分は、ITSP側で用意されているSaaS(Software as a Service サースと発音)を導入するのが楽ですが、今回は自分の勉強も含めて自宅ネットワーク内にIP-PBXを設置することにしました。

内線に使う電話がないと、いろんなテストが大変なので、PCで動作するタイプのソフトウェアフォンを使います。
今回は、無料で使えるX-liteをインストールします。これはカナダの会社が作ってフリーで公開してくれているソフトで、あちこちのITSP会社でも指定のソフトだったりします。
※インストールや設定方法は、アジルフォンのページが詳しいです。

次回は本題のIP-PBXであるAsteriskのインストールと構築です。