1: 2014-10-05 (日) 22:32:34 maruo[5] [6] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | *Asteriskのインストール [#z412b71d] | ||
+ | **Asteriskのパッケージインストール [#oc280d06] | ||
+ | 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 | ||
+ | |||
+ | **日本語音声ファイルのインストール [#n5840cef] | ||
+ | Asteriskをインストールすると、全て英語の音声です。例えば留守録をする際等、メッセージが流れますが、全て英語の音声になってしまいます。それは嫌だなぁ。と、言うことで、[[日本語音声ファイル:http://ftp.voip-info.jp/asterisk/sounds/1_6/]]をダウンロードしてまいります。そして、このファイルを、/var/lib/asterisk/soundsに解凍します。 | ||
+ | |||
+ | *設定 [#zae7eeb8] | ||
+ | 050plusはスマホ用の直通番号、FUSION IP-Phone SMARTは家の固定電話の電話番号として使用します。 | ||
+ | Asteriskの設定ファイルは、/etc/asteriskの配下に格納されております。では、順番にやっていきましょう~。 | ||
+ | |||
+ | **暗号化通信のために、TLSキーを作る [#if09bc1b] | ||
+ | SIPには、暗号化の仕組みがあります。 | ||
+ | -SIPトランスポートのTLSレイヤ | ||
+ | -RTPの暗号化版。SRTP。 | ||
+ | |||
+ | 050plusでは、TLS+SRTPで通信します。TLSで通信するためには、証明書の作成が必要のため、こいつを作成しておきます。 | ||
+ | |||
+ | [[AsteriskのGithubから、証明書を作るスクリプトast_tls_certをダウンロードしてきます。:https://github.com/rillian/asterisk-opus/blob/master/contrib/scripts/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が動作しないので注意してくださいね~。 | ||
+ | |||
+ | **asterisk.conf [#cda9ae2e] | ||
+ | Asteriskの全体を設定するファイルです。以下の設定を追加しましょう。 | ||
+ | |||
+ | defaultlanguage = ja | ||
+ | デフォルトの言語プレフィックスです。 | ||
+ | |||
+ | **rtp.conf [#w019613a] | ||
+ | 音声チャネルを転送する、RTPストリームのポート番号を指定します。初期設定だと10000~20000を使用することになっています。が、なるべく開けるポート数は少なくしたいのと、そもそも家で使用する場合は、一度にそんなに多くの人が同時通話するわけではないですから、なるべく数を絞ります。 | ||
+ | [general] | ||
+ | rtpstart=10000 | ||
+ | rtpend=10009 | ||
+ | 10ポートも空けといてやれば十分でしょう。 | ||
+ | |||
+ | **sip.conf [#c7a0fddf] | ||
+ | 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内で使用します。 | ||
+ | |||
+ | |||
+ | **extensions.conf [#k2bf8e68] | ||
+ | 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は書かないとうまく呼び出されないという謎が。まぁ、今ん所は困ってないのでいいかなと。 | ||
+ | |||
+ | **features.conf [#r8349c8c] | ||
+ | 電話転送用のコマンド定義をします | ||
+ | [featuremap] | ||
+ | blindxfer => #1 | ||
+ | atxfer => *1 | ||
+ | 電話の途中に#1とか*1ってダイヤルすると、転送モードになります。#1だとブラインド転送、*1だとアテンド転送です。この後メッセージが流れるので、内線番号をダイヤルしてやります。この2種類、どう違うの? | ||
+ | -ブラインド転送は、内線回すと、ダイヤル先内線を呼び出します。呼び出した相手が電話を取ると、話中の相手と即時につながります。なので転送した自分は電話を切る。 | ||
+ | -アテンド転送は、内線回すと、ダイヤル先内線を呼び出します。呼び出した相手が電話を取ると、まず呼び出した自分と話します。「誰々さんから電話だよ-」みたいな。で、自分が電話を切ると相手とつながる。要は会社で普通に使う内線転送のケースですね。 | ||
+ | |||
+ | **voicemail.conf [#c41ce906] | ||
+ | ボイスメール機能(要は留守番電話)の設定を行います。 | ||
+ | [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 | ||
+ | |||
+ | 最後のメールボックスの設定、難しいですよね-。 | ||
+ | メールボックス番号 => パスワード,ユーザ名,メール送信先,,オプション | ||
+ | と設定しています。パスワードはそのまま設定しないでね!メール送信先は、録音時にメールを送信する先のアドレスです。すると不在や電波の状態が悪くて着信出来なかった時に、メールで通知してくれるわけですね~。 | ||
+ | |||
+ | *起動 [#g03767e6] | ||
+ | # /etc/init.d/asterisk start | ||
+ | で起動します。 | ||
+ | |||
+ | *自動起動の設定 [#sac0c3d0] | ||
+ | # rc-update add asterisk default | ||
+ | でブート時に自動起動するようになります。 |
(This host) = https://femt.ddo.jp