|
1: 2014-10-05 (日) 22:32:34 maruo |
| + | *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 |
| + | でブート時に自動起動するようになります。 |