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からもうまく通信できるようになった模様です。あ~、良かった!


トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 11921, today: 1, yesterday: 2
初版日時: 2014-10-05 (日) 22:32:34
最終更新: 2017-06-26 (月) 07:25:10 (JST) (2458d) by maruo
ページ内検索

ログイン

ユーザー名:


パスワード:





パスワード紛失

メインメニュー

サブメニュー
自宅鯖計画

Gentoo Linuxな生活

玄箱HGにGentoo格闘記

航空ショーへ行こう

モータースポーツな世界

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

我思う ゆえに我あり



携帯用QRコード