2017/6/26追記

Page Top

Asteriskのパッケージインストール anchor.png

Asteriskは、GentooのPortageに登録されています。なので、USEフラグを設定し、emergeします。私は、以下のUSEフラグを設定しています。

net-misc/asterisk alsa curl doc freetds gtalk http ilbc jabber lua span speex srtp syslog voicemail_storage_file

そして、以下のコマンドを実行します。

# emerge asterisk asterisk-extra-sounds asterisk-moh-opsound asterisk-core-sounds
Page Top

日本語音声ファイルのインストール anchor.png

Asteriskをインストールすると、全て英語の音声です。例えば留守録をする際等、メッセージが流れますが、全て英語の音声になってしまいます。それは嫌だなぁ。と、言うことで、日本語音声ファイルをダウンロードしてまいります。そして、このファイルを、/var/lib/asterisk/soundsに解凍します。

Page Top

設定 anchor.png

050plusはスマホ用の直通番号、FUSION IP-Phone SMARTは家の固定電話の電話番号として使用します。 Asteriskの設定ファイルは、/etc/asteriskの配下に格納されております。では、順番にやっていきましょう~。

Page Top

暗号化通信のために、TLSキーを作る anchor.png

SIPには、暗号化の仕組みがあります。

  • SIPトランスポートのTLSレイヤ
  • RTPの暗号化版。SRTP。

050plusでは、TLS+SRTPで通信します。TLSで通信するためには、証明書の作成が必要のため、こいつを作成しておきます。

AsteriskのGithubから、証明書を作るスクリプトast_tls_certをダウンロードしてきます。で、これを以下の用に実行します。

# mkdir /etc/asterisk/keys
# ast_tls_cert -C example.com -O "Example Company" -d /etc/asterisk/keys

これで作成したキー(/etc/asterisk/keysディレクトリの下に作られています)を、適当なフォルダにコピーします。パーミッションに注意してね!

# chown -R asterisk.asterisk /etc/asterisk/keys
# chmod 700 /etc/asterisk/keys
# cd /etc/asterisk/keys
# chmod 600 *

下手に参照されないように、asteriskさんしかアクセス出来ないように変えておきます。ユーザー所有権がイケてないと、AsteriskでTLSが動作しないので注意してくださいね~。

Page Top

asterisk.conf anchor.png

Asteriskの全体を設定するファイルです。以下の設定を追加しましょう。

defaultlanguage = ja

デフォルトの言語プレフィックスです。

Page Top

rtp.conf anchor.png

音声チャネルを転送する、RTPストリームのポート番号を指定します。初期設定だと10000~20000を使用することになっています。が、なるべく開けるポート数は少なくしたいのと、そもそも家で使用する場合は、一度にそんなに多くの人が同時通話するわけではないですから、なるべく数を絞ります。

[general]
rtpstart=10000
rtpend=10009

10ポートも空けといてやれば十分でしょう。

Page Top

sip.conf anchor.png

SIPのアカウント情報を設定します。

  • 先ほどぶっこ抜いた、外線発信用IP電話事業者への接続情報
  • Asteriskに登録する内線子機の情報

の情報を登録します。

;一般設定
[general]
bindaddr=0.0.0.0
language=ja

;NAT用の設定。Asteriskを動かすサーバが、NATのネットワーク内(ブロードバンドルータの中等)にいるときに指定します。
;ルータに振られている外部アドレス
externip = XXX.XXX.XXX.XXX
;ローカルネットと認識するサブネット
localnet=192.168.X.X/255.255.255.0

maxexpirey=3600
defaultexpirey=3600

;TLSのセッティング
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes

;IP電話のアカウントでSIPを登録する。外線着信用の準備
;050plusの例
register => tls://ニックネーム:SIPパスワード:SIP_ID@60.37.58.170:5061/201
;FUSION IP-Phone SMARTの例
register => SIPアカウント:SIPアカウントパスワード@smart.0038.net

context=default

;050plusの接続情報。 外線発信用の情報
;050plusはTLS/SRTPでないと通信させてくれない
[050plus]
type=friend
secret=SIPパスワード
port=5061
defaultuser=SIP_ID
fromuser=ニックネーム
host=60.37.58.170
;host=kar-f2fcp.050plus.com
fromdomain=050plus.com
context=default
insecure=invite,port
dtmfmode=inband
canreinvite=no
disallow=all
allow=ulaw
transport=tls
encryption=yes

;FUSION IP-Phone SMARTの接続情報。 外線発信用の情報
;FUSION IP-Phone SMARTはTLS/SRTPは対応していない
[FUSION]
type=friend
defaultuser=SIPアカウント
fromuser=SIPアカウント
secret=SIPアカウントパスワード
host=smart.0038.net
fromdomain=smart.0038.net
context=default
insecure=port,invite
canreinvite=no
disallow=all
allow=ulaw
allow=alaw
dtmfmode=inband

;内線200番の設定(自宅の固定電話とする)
;ユーザID200、パスワードは"secret="に記載しているもの。そのまま使わないように!
[200]
type=peer
defaultuser=200
secret=secret200
directmedia=no
;transport=tls
encryption=yes
host=dynamic
mailbox=200
context=context_200

;内線201番の設定(スマホとする)
;ユーザID200、パスワードは"secret="に記載しているもの。そのまま使わないように!
[201]
type=peer
defaultname=201
secret=secret201
directmedia=no
transport=tls
encryption=yes
host=dynamic
mailbox=201
context=context_201

これは、050plus、FUSION IP-Phone SMART、内線200、201の接続情報になります。

  • 200番を固定電話(代表番号)とします。自宅ネットワーク内でしか使用しないので、TLSはなしにしています。
  • 201番はスマホとします。外に持ちだしても使用するので、SIPトランスポートはTLSで暗号化するようにしています。

200番、201番の設定にmailboxを指定しているのは、留守番電話を保存するメールボックス番号、contextは外線発信を別の直通番号で行うための設定で、extensions.conf内で使用します。

Page Top

extensions.conf anchor.png

sip.confで定義した接続情報の端末を用いて、ある電話番号が着信したらどうするか、またある電話番号向けへの発信はどうするか、を定義します。要は電話処理の業務シナリオを記述するわけですね。それぞれの端末は、sip.conf内で[ホゲホゲ]で記載されたホゲホゲで識別されます。

;全体設定
[globals]
;電番の変数を設定しておく。
IP_SUFFIX=050
;050を除いた電話番号をそれぞれ記述しておく
MYNUMBER_FUSION=XXXXXXXX
MYNUMBER_050plus=XXXXXXXX

[default]
;家の電話に着信したら、内線200番、201番を両方共鳴らす
exten => ${MYNUMBER_FUSION},1,Dial(SIP/200&SIP/201)
;電話に出なかったら、200番の留守電に保存
exten => ${MYNUMBER_FUSION},2,Voicemail(200)
exten => ${MYNUMBER_FUSION},3,Hangup()
;話中だったら、200番の留守電に保存
exten => ${MYNUMBER_FUSION},102,Voicemail(200)
exten => ${MYNUMBER_FUSION},103,Hangup()

;内線番号のシナリオ
;30秒、電話を鳴らす。転送可能な状態で。
exten => _20X,1,Dial(SIP/${EXTEN},30,tTr)
;30秒でタイムアウトしたら留守電起動。
exten => _20X,2,Voicemail(${EXTEN})
exten => _20X,3,Hangup()
;話中だったら留守電起動。
exten => _20X,102,Voicemail(${EXTEN})
exten => _20X,103,Hangup()

;内線向け留守電の設定。200*とダイヤルすると、内線200番に留守電を残せます。
exten => _20X*,1,Answer()
exten => _20X*,2,Voicemail(${EXTEN:0:3})
exten => _20X*,3,Hangup()

;留守電を聞く用の特番 18番をダイヤルすると、自分の留守電聞くモードになる。
exten => 18,1,Goto(vm0,1)
exten => vm0,1,Answer()
exten => vm0,2,VoicemailMain(${CALLERID(num)})
exten => vm0,3,Hangup()

;留守電を聞く用の特番 19番をダイヤルすると、内線番号を選んで留守電聞くモードになる。共用の固定電話への留守電聞くときなど
exten => 19,1,Goto(vm1,1)
exten => vm1,1,Answer()
exten => vm1,2,VoicemailMain()
exten => vm1,3,Hangup()

;内線200番用の外線発信設定。FUSION IP-Phone SMARTを用いて発信
[context_200]
exten => _0.,1,Set(CALLERID(num)=${IP_SUFFIX}${MYNUMBER_FUSION})
exten => _0.,n,Set(CALLERID(name)=${IP_SUFFIX}${MYNUMBER_FUSION})
exten => _0.,n,Dial(SIP/${EXTEN}@FUSION,120,T)
include => default

;内線201番用の外線発信設定。050plusを用いて発信
[context_201]
exten => _0.,1,Set(CALLERID(num)=${IP_SUFFIX}${MYNUMBER_050plus})
exten => _0.,n,Set(CALLERID(name)=${IP_SUFFIX}${MYNUMBER_050plus})
exten => _0.,n,Dial(SIP/${EXTEN}@050plus,120,T)
include => default

さて、なんかよく分かりませんよね…ポイントは、exten => なんです。

exten => ダイヤル先番号,優先度,アクション

ダイヤル先番号は、正規表現も使用できます。例えば、_0.だと、頭0で始まる任意の電番、_20X だと、頭20にマッチする3桁の番号(200~209)に対応します。優先度は行番号みたいなもん。アクションは、何をするかです。Dial(XXX)だと、()内の番号にダイヤル発信する、ということです。EXTENとかは、システムで用意される変数で、今発信している内線番号が勝手に入れられます。

感がいい人は、「あれ?050plus用の着信シナリオが無い?」と気づくかもしれません。050plusの場合は、sip.conf内のregister=>に書いてあるのですよ。一番最後の/201が、着信したら内線201番をコールする、という意味。

「じゃあ、FUSIONの方もそう書けばいいじゃん?」と思われるかもしれませんね。これが…FUSIONはその書き方だとうまく呼び出してくれず、050plusは書かないとうまく呼び出されないという謎が。まぁ、今ん所は困ってないのでいいかなと。

Page Top

features.conf anchor.png

電話転送用のコマンド定義をします

[featuremap]
blindxfer => #1
atxfer => *1

電話の途中に#1とか*1ってダイヤルすると、転送モードになります。#1だとブラインド転送、*1だとアテンド転送です。この後メッセージが流れるので、内線番号をダイヤルしてやります。この2種類、どう違うの?

  • ブラインド転送は、内線回すと、ダイヤル先内線を呼び出します。呼び出した相手が電話を取ると、話中の相手と即時につながります。なので転送した自分は電話を切る。
  • アテンド転送は、内線回すと、ダイヤル先内線を呼び出します。呼び出した相手が電話を取ると、まず呼び出した自分と話します。「誰々さんから電話だよ-」みたいな。で、自分が電話を切ると相手とつながる。要は会社で普通に使う内線転送のケースですね。
Page Top

voicemail.conf anchor.png

ボイスメール機能(要は留守番電話)の設定を行います。

[general]
;録音フォーマット。wav49はサイズが小さいWAVファイル
format=wav49
;メールに音声ファイルをつけるかどうか。録音されるとメールが送信されますが、そのメールに録音された音声を添付するかどうか。
attach=no
;メール送信元アドレス
serveremail=asterisk@example.com
;録音する保存メッセージ数
maxmsg=20
;メッセージの秒数
maxsecs=60
[default]
;メールボックスの設定
200 => 1111,home,phoneusers,,tz=japan
201 => 2222,smartphone,smaphousers,,tz=japan

最後のメールボックスの設定、難しいですよね-。

メールボックス番号 => パスワード,ユーザ名,メール送信先,,オプション

と設定しています。パスワードはそのまま設定しないでね!メール送信先は、録音時にメールを送信する先のアドレスです。すると不在や電波の状態が悪くて着信出来なかった時に、メールで通知してくれるわけですね~。

Page Top

起動 anchor.png

# /etc/init.d/asterisk start

で起動します。

Page Top

自動起動の設定 anchor.png

# rc-update add asterisk default

でブート時に自動起動するようになります。

Page Top

設定変更 anchor.png

MVNOのSIMを導入し、IIJmioに変更したところ、どうもモバイルでの通信時、SIP通話が片通話になってしまいました。どうも、NATの設定方法が変更になっているらしく、以下の設定内容に変更しました。

[general]
nat=force_rport,comedia
qualify=10000

で、各端末側の設定からは、nat/qualifyの設定は削除しました。IIJからもうまく通信できるようになった模様です。あ~、良かった!


Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 12120, today: 1, yesterday: 0
Princeps date: 2014-10-05 (Sun) 22:32:34
Last-modified: 2017-06-26 (Mon) 07:25:10 (JST) (2630d) by maruo
ページ内検索

ログイン

ユーザー名:


パスワード:





パスワード紛失

メインメニュー

サブメニュー
自宅鯖計画

Gentoo Linuxな生活

玄箱HGにGentoo格闘記

航空ショーへ行こう

モータースポーツな世界

奥深き写真の世界への誘い

我思う ゆえに我あり



携帯用QRコード