VineでAsterisk

Vinelinux4.1を使って、Asteriskのサーバを構築
ひかり電話、ISPのIP電話に接続する

タバコの葉は、食べても毒ではないのだろうか?

2008-05-18 18:00:40 | Weblog
たばこの葉を食べ飲尿…サバイバル100時間 四川大地震 「極限」生き延びた(産経新聞) - goo ニュース

タバコの葉は、食べても毒ではないのだろうか?

極限状態で精神力をつなぐために、
多少食したとしても、タバコの葉が栄養源に
なったとは思えないですが、
このあたり、ちゃんと調査されないかなぁ..

PR-200NE SIPの動作変わった?

2007-12-22 15:30:49 | Weblog
PR-200NEをひかり電話でつかっている。
先日、ヴァージョンアップがあった。

Asteriskへの着信がおかしくなってしまった。
確認してみた。
;Hikari-Denwa Incoming Call
exten => ${HIKARI_TEL_NUMBER},1,Dial(SIP/201,10)
exten => ${HIKARI_TEL_NUMBER},n,Goto(rusuden,s,1)
exten => ${HIKARI_TEL_NUMBER},n,Hangup
exten => ${HIKARI_TEL_NUMBER},102,Wait(10)
exten => ${HIKARI_TEL_NUMBER},n,Goto(rusuden,s,1)
exten => ${HIKARI_TEL_NUMBER},n,Hangup

上記のように、通常は201番のSIP電話にかかるように
なっているが、SIP電話で応答しないときや、
SIP電話を使っていないときなどは、10秒待って、
留守電用のアプリケーションに入るようにしていた。
(10秒待つのは、アナログポートの普通の電話を
 とるのを待っていて、狭い部屋では10秒で十分としているから)

これが、突如動かなくなった。

sip debug peer hikaridenwa

なんと、CANCELで切られている。
どうやら、即座に180 Ringingを返答しないと、
CANCELされてしまうようになってしまったようだ。

Ringingを戻すように修正。
;Hikari-Denwa Incoming Call
exten => ${HIKARI_TEL_NUMBER},1,Dial(SIP/201,10)
exten => ${HIKARI_TEL_NUMBER},n,Goto(rusuden,s,1)
exten => ${HIKARI_TEL_NUMBER},n,Hangup
exten => ${HIKARI_TEL_NUMBER},102,Ringing()
exten => ${HIKARI_TEL_NUMBER},n,Wait(10)
exten => ${HIKARI_TEL_NUMBER},n,Goto(rusuden,s,1)
exten => ${HIKARI_TEL_NUMBER},n,Hangup

OKでした。
なんで、こんなところ、変わったんだろう....

携帯電話へのコールバック

2007-09-12 00:05:25 | Weblog
携帯電話へのコールバックをすれば、海外からのアクセスも安くなるか..

ナンバーディスプレーを利用する。
また回線も2本ないとですが...

-----extensions.conf-----------------------------
INPUT_HIKARITEL=ひかり電話電話番号
;@hikari_line3 は、ひかり電話へのREGISTER
;@hikari_line4 は、ひかり電話へのREGISTER

[hikari_input]
exten => ${INPUT_HIKARITEL},1,GotoIF($[ ${CALLERIDNUM:-10} = 90XXXXXXXX]?callback,s,1:2)
exten => ${INPUT_HIKARITEL},2,Dial(SIP/201,120)
exten => ${INPUT_HIKARITEL},3,Hangup
exten => ${INPUT_HIKARITEL},103,Hangup

[callback]
exten => s,s,Busy()
exten => s,n,Hangup
exten => h,1,DeadAGI(callback.agi)
exten => h,2,Hangup

[calltrans]
exten => s,1,DISA(no-password)

exten => _0.,1,Set(CALLERID(num)=${INPUT_HIKARITEL})
exten => _0.,2,Set(CALLERID(name)=${INPUT_HIKARITEL})
exten => _0.,3,Dial(SIP/${EXTEN}@hikari_line3,120)
exten => _0.,4,Playtones(congestion)
exten => _0.,5,Congestion()
exten => _0.,6,Hangup
exten => _0.,104,Playtones(congestion)
exten => _0.,105,Congestion()
exten => _0.,106,Hangup

exten => _ZX.,1,Goto(default,${EXTEN},1)
exten => _ZX.,2,Playtones(congestion)
exten => _ZX.,3,Congestion()
exten => _ZX.,4,Hangup
exten => _ZX.,102,Playtones(congestion)
exten => _ZX.,103,Congestion()
exten => _ZX.,104,Hangup
-----extensions.conf-----------------------------



-----callback.agi(755)---------------------------
#!/usr/bin/perl
sleep 10;
system ("cp /home/asterisk/app_root/var/spool/asterisk/callback.call /home/asterisk/app_root/var/spool/asterisk/outgoing/ n");
exit;
-----callback.agi(755)---------------------------



-----callback.call(644)--------------------------
Channel: SIP/090XXXXXXXX@hikari_line4
Context: calltrans
Extension: s
Priority: 1
CallerID: "03XXXXXXXX" <03XXXXXXXX>
Account: callback
-----callback.call(644)--------------------------

インターネットプロバイダのIP電話に接続する

2007-09-11 03:07:08 | Weblog
わたしは、ぷららを利用しています。
下記を参考に発着信とも動作しました。

参考にさせていただいたページ
 http://www.voip-info.jp/wiki2/index.php/ITSP_%E3%81%B7%E3%82%89%E3%82%89
ありがとうございました。

NATの外側のアドレスを登録するために
externhostで、DynamicDNSのホスト名を指定しています。
http://www.voip-info.org/wiki/index.php?page=Asterisk+SIP+externip
を参考にみると、Asterisk 1.2.xから、externhostがexternipに加えて
使えるようになって、DynamicDNSでの利用が考慮されているようです。
これによると、externhostは、externrefreshや、localnetとともに、
[general] に記載するようです。(localnetは複数書けるよう)
そうすると、REGISTER先がlocalnetの範囲で指定されない場合は、
externhostが有効になるようです。

ところで、個別のClientでのnatオプション指定はViaのrhostに関係するところ
みたいですので、相手が対応していないとちゃんと動作しないかもしれません。

以上で、わたしのところは、発着信とも上手くいっています。

■ Asteriskでのデバッグ
asteriskのコンソールでのデバッグは便利でした。

vine41*CLI> sip debug peer (ipphone.plala.or.jp)
SIP Debugging Enabled for IP: xxx.xxx.xxx.xxx:5060
~~~~~~~~~
vine41*CLI> sip no debug
SIP Debugging Disabled

()のところは、登録されているチャネル識別子
これで、SIP信号がずらずらと表示されました。





IAXで拠点間を接続する

2007-09-10 01:58:59 | Weblog
OpenVPNで2拠点間を接続して、内線などを作っていたのですが、
OpenVPNが何故か安定しないので、相互の拠点にAsteriskをおいて、
IAX2で接続することにしました。

インターネットへはDynamicDNSを利用してアドレスを広告しています。
そして、どちらの拠点もひかり電話を利用しており、
Asteriskはひかり電話ルータのNATの内側にあるという状況です。

参考にさせていただいたページ:
 http://www.voip-info.org/wiki/view/IAX
 http://www.voip-info.org/wiki/view/Asterisk+config+iax.conf
 http://www.voip-info.org/wiki/view/Asterisk+-+dual+servers

■拠点A
----iax.conf--------------
[general]
~~~
register => iaxbridge_name:password@siteB.dynamicDns.example.com
~~~
[iaxbridge_name]
type=friend
host=dynamic
context=iaxcall
auth=md5
secret=password
username=iaxbridge_name
--------------------------
----extensions.conf------------
~~~
exten => _88X.,1,Dial(IAX2/iaxbridge_name/${EXTEN:2})
~~~
[iaxcall]
exten => 1,1,Dial(SIP/1@siteA-hikari,120)
-------------------------------

■拠点B
----iax.conf--------------
[general]
~~~
register => iaxbridge_name:password@siteA.dynamicDns.example.com
~~~
[iaxbridge_name]
type=friend
host=dynamic
context=iaxcall
auth=md5
secret=password
username=iaxbridge_name
--------------------------
----extensions.conf------------
~~~
exten => _88X.,1,Dial(IAX2/iaxbridge_name/${EXTEN:2})
~~~
[iaxcall]
exten => 1,1,Dial(SIP/1@siteB-hikari,120)
-------------------------------

ひかり電話ルータでIAXのポートを開放してから、
Asteriskで設定をreloadしてから
しばらくして開通しました。
上手く動いています。

それぞれの拠点で、
881
とダイヤルすると、相手の拠点のひかり電話のアナログポート1番に
接続している電話機がなるようになっています。


留守番電話をWebで見る( webvmail / vmail.cgi )、電子メールで受ける

2007-09-02 08:41:09 | Weblog
留守番電話も動いたので、もう少し便利に使えるように
したいので、Webページで留守番電話を聞けるようにして、
さらに、電子メールでも電話があったことを送信するように
しました。

参考にさせて頂いたページは、
http://www.aconus.com/~oyaji/suse9.3/asterisk_suse9.3_2.htm
のところです。大変有難うございます。

●WebVoiceMailのインストール
 Asteriskのパッケージに同梱されています。

[asterisk@vine41 asterisk]$ cd ~/src/asterisk-1.2.24
[asterisk@vine41 asterisk-1.2.24]$ su
[root@vine41 asterisk-1.2.24]# make HTTP_DOCSDIR=/home/asterisk/public_html HTTP_CGIDIR=/home/asterisk/public_html/cgi-bin webvmail
[root@vine41 asterisk-1.2.24]# chown -R asterisk.asterisk /home/asterisk/public_html
[root@vine41 asterisk-1.2.24]# exit
[asterisk@vine41 html]$ cd ~/public_html
[asterisk@vine41 public_html]$ ls -R
.:
_asterisk/ cgi-bin/

./_asterisk:
animlogo.gif play.gif

./cgi-bin:
vmail.cgi*
[asterisk@vine41 public_html]$ cd cgi-bin
 ☆ユーザホーム内のpunlic_html、わたしのasterisk環境で動作するように、
  ディレクトリを修正
[asterisk@vine41 cgi-bin]$ sed "s/_asterisk/~asterisk\/_asterisk/" vmail.cgi > vmail.txt
[asterisk@vine41 cgi-bin]$ sed "s/etc\/asterisk/home\/asterisk\/app_root\/etc\/asterisk/" vmail.txt > vmail.cgi
[asterisk@vine41 cgi-bin]$ sed "s/var\/spool/home\/asterisk\/app_root\/var\/spool/" vmail.cgi > vmail.txt
[asterisk@vine41 cgi-bin]$ mv vmail.txt vmail.cgi
[asterisk@vine41 cgi-bin]$ chmod 755 vmail.cgi

●Apacheの設定
 まずは、こっちが動いていないと。
[asterisk@vine41 cgi-bin]$ su
[root@vine41 cgi-bin]# vi /etc/apache2/conf/httpd.conf
-------httpd.conf(の一部)----------------------------------
<IfModule mod_userdir.c>
    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    #UserDir disable

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disable" line above, and uncomment
    # the following line instead:
    #
    UserDir public_html

</IfModule>

#
# Control access to UserDir directories.  The following is an example
# for a site where these directories are restricted to read-only.
#
<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

<Directory /home/*/public_html/cgi-bin>
       Options ExecCGI
       SetHandler cgi-script
</Directory>

-------httpd.conf(の一部)----------------------------------

これで、Apacheの設定も動作するはず

[root@vine41 cgi-bin]# /etc/init.d/apache2 restart
[root@vine41 cgi-bin]# /sbin/chkconfig apache2 on
[root@vine41 cgi-bin]# exit

●ディレクトリが読めるように、
[asterisk@vine41 cgi-bin]$ chmod 755 ~

●これで、ブラウザからアクセスします。
 「ありゃ?!」
Software error:
Can't locate DBI.pm in .......

どうやら、perlのモジュールが足りなかったようです。
[asterisk@vine41 cgi-bin]$ su
[root@vine41 cgi-bin]# apt-get install perl-DBI
[root@vine41 cgi-bin]# exit

動作しました。

●留守番電話のユーザ名とパスワード
留守番電話の留守番電話ボックス番号は、
extension.confによって、exten => _20Z,n,Voicemail(${EXTEN})と
指定されているので、201で着信する場合は、201が
voicemail.confの指定に基づいて動作しているはずです。


●メールで留守番電話を受け取る
voicemail.confを修正することで可能になります。
[asterisk@vine41 asterisk]$ cd ~/app_root/etc/asterisk
[asterisk@vine41 asterisk]$ vi voicemail.conf
--------voicemail.conf(の一部)-------------------------
[general]
format=wav49|gsm|wav    <-- ファイルとして保存するのは左記の3つのフォーマット全部
serveremail=asterisk    <-- メール送信者のアドレスに
attach=no    <-- グローバル設定ではメール送信はしないことにして、個別で設定する。
maxmessage=180
;minmessage=3
;maxgreet=60
skipms=3000
maxsilence=10
silencethreshold=128
maxlogins=3
mailcmd=/usr/sbin/sendmail -t    <-- メールの送信プログラムを指定して有効に

;;~~~~~~
[default]
201 => 1234,UserName,mail_get_user_mail_address@localhost,,attach=yes|format=wav49|saycid=no|maxmsg=10|tz=japan
メールボックス番号 =>パスワード,ユーザ名,メールの受信アドレス,,オプション設定
--------voicemail.conf(の一部)-------------------------

受け取れたので、成功です。

ひかり電話PR-200NEへの接続

2007-09-01 17:54:11 | Weblog
ひかり電話との接続については、参考にさせていただいている
http://www.voip-info.jp/
ページでのサンプル設定ファイルに、詳しいサンプルが含まれているので、
それを編集します。

[asterisk@vine41 asterisk]$ cd ~/app_root/etc/asterisk
[asterisk@vine41 asterisk]$ vi sip.conf
-----sip.conf(の一部)------------------------
[general]

;;;~~~~~

;RT-200NE Sample
rt200ne=192.168.1.1
;HIKARI-denwa register Sample
register => 5:password:0005@192.168.1.1/201

;;;~~~~~

; HIKARI-denwa
[192.168.1.1]
type=friend
secret=password
port=5060
username=0005
fromuser=5
host=192.168.1.1
context=default
insecure=very
dtmfmode=inband
canreinvite=no
disallow=all
allow=ulaw
-----sip.conf(の一部)------------------------

register => 5:password:0005@192.168.1.1/201
の最後の201は、このREGISTERにより着信するCallの
Asterisk内での接続先を示しています。
[192.168.1.1]の中でcontext=defaultとなっていますので、
つまりは、extensions.confの[default]設定内での
extenに201とマッチするところに着信する内容になっているようです。

●PR-200NEの方の設定は、次のようになります。
まずは、左側のメニューから「電話設定」「内線番号設定」を選択し

右下のメニューから利用する内線番号を選択します。
わたしは、他でも利用しているので5番を選択しました。
(なお、1,2番は、アナログポートになっていますので、選択しません)

設定の記載内容は、次のとおりです。
端末属性を「音声端末」にセットです。


PR-200NEでは、この設定を有効にするために次の手順を踏まないと
いけないようです。右上の画面を「最新状態に更新」を押して、

内線の5番のチェックボックス(左側)をチェックして、
右上の「適用」を押下することで反映されるようです。

そうしたら、左下のメニュから「登録」を押下して再起動で
設定が反映されます。

●着信させてみる。
 いきなり留守番電話につながってしまいました。
 着信した電話は、201に接続していましたが、
 201のSIP端末は使っていなかったのが原因でした。
 201をX-Liteなどを持ってきてやればよいのでしょうが、
 常にPCの電源を入れているとは限りません。
 そこで、extensions.confを修正しました。
[asterisk@vine41 asterisk]$ cd ~/app_root/etc/asterisk
[asterisk@vine41 asterisk]$ vi extensions.conf.conf
-----extensions.conf.conf(の一部)------------------------
; Local SIP/IAX phones 201-209
exten => _20Z,1,Dial(SIP/${EXTEN}&IAX2/${EXTEN},20,tT)
exten => _20Z,n,Answer()
exten => _20Z,n,Wait(1)
exten => _20Z,n,Voicemail(${EXTEN})
exten => _20Z,n,Hangup
exten => _20Z,102,Wait(20)
exten => _20Z,n,Answer()
exten => _20Z,n,Wait(1)
exten => _20Z,n,Voicemail(${EXTEN})
exten => _20Z,n,Hangup
-----extensions.conf.conf(の一部)------------------------
とりあえず、20秒も着信を待てばよいでしょう。
最初のDialアプリケーションのタイムアウトは20秒、
もし、接続先がすべて未登録状態であれば、
1+101=102のプライオリティに飛びますので、
20秒待たせておいて、応答すれば、その間、ひかり電話のルータの
アナログポートに接続された電話が鳴るという寸法です。
(ひかり電話のルータのアナログポートを利用しないのであれば、
 この修正は必要ないですね。)


●ファイヤーウォールの設定解除
 なお、Vineのファイヤーウォールの設定が有効になっていると
 パケットが通りませんので、
 SIPポート 5060
 RTPポート rtp.conf で範囲を指定
 を通るようにしました。

asteriskインストール

2007-08-31 23:55:11 | Weblog
Vine Linux 4.1をインストールしている環境(基本的にデフォルトのパッケージインストール)にAsteriskをインストールしていくときの私的なメモです。

インストールと運用用に新しいユーザ(asterisk)を作りました。
今後のAsteriskとWebとの連携やメールとの連携するときに便利かと思っています。
セキュリティのことは、とりあえず、よくわかっていないので、
ご指摘いただけるとありがたいです。

参考にさせて頂いた、そして更にパッチも頂いたページは、
http://www.voip-info.jp/
http://www.voip-info.jp/wiki2/index.php/%E7%B0%A1%E6%98%93%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB
のところです。大変有難うございます。

●インストールに必要になるものの事前インストール
[asterisk@vine41]$ su
[root@vine41]# apt-get install openssl-devel
[root@vine41]# apt-get install zlib-devel

●ソースファイルのGET
とりあえずまだ、1.2系をつかいます。
Zaptelもいれておきます。(Zaptelの詳細な使い方はよくわかりませんが..)
[asterisk@vine41 src]$ wget http://ftp.digium.com/pub/zaptel/releases/zaptel-1.2.20.1.tar.gz
[asterisk@vine41 src]$ wget http://ftp.digium.com/pub/asterisk/releases/asterisk-1.2.24.tar.gz
(なお、作業しているディレクトリは、asteriskユーザのホームのsrc配下)

●Zaptelのインストール
[asterisk@vine41 src]$ tar zxvf zaptel-1.2.20.1.tar.gz
[asterisk@vine41 src]$ cd zaptel-1.2.20.1
[asterisk@vine41 zaptel-1.2.20.1]$ make
 (compile....)
[asterisk@vine41 zaptel-1.2.20.1]$ su
[root@vine41 zaptel-1.2.20.1]# make install
 (install....)
[root@vine41 zaptel-1.2.20.1]# make config
[root@vine41 zaptel-1.2.20.1]# /etc/init.d/zaptel start
[root@vine41 zaptel-1.2.20.1]# /sbin/chkconfig zaptel on
[root@vine41 zaptel-1.2.20.1]# exit
[asterisk@vine41 zaptel-1.2.20.1]$ cd ..

●Asteriskのインストール
[asterisk@vine41 src]$ tar zxvf asterisk-1.2.24.tar.gz
[asterisk@vine41 src]$ cd asterisk-1.2.24
[asterisk@vine41 asterisk-1.2.24]$ wget ftp://ftp.voip-info.jp/asterisk/patch/scripts/ja_autopatch.sh
 ☆日本語関連のパッチを頂きました http://voip-info.jp/index.php?%A5%CA%A5%AB%A5%E0%A5%E9
 ☆パッチを頂きました http://blog.zzaj.net/index.php?catid=10&blogid=1
[asterisk@vine41 asterisk-1.2.24]$ cd channels/
[asterisk@vine41 channels]$ wget http://zzaj.net/chan_sip-se-timer-20070522.diff
[asterisk@vine41 channels]$ patch -p0 <chan_sip-se-timer-20070522.diff  ☆パッチの構造により元のディレクトリに戻ります。
[asterisk@vine41 channels]$ cd ..
 ☆パッチを頂きました http://www.voip-info.jp/wiki2/index.php/RT-200NE%E5%AF%BE%E5%BF%9C%E3%83%91%E3%83%83%E3%83%81
[asterisk@vine41 channels]$ wget ftp://ftp.voip-info.jp/asterisk/patch/local/1.2/channels/chan_sip.c.rt200ne.070719-01.patch
[asterisk@vine41 channels]$ patch -p0 <chan_sip.c.rt200ne.070719-01.patch [asterisk@vine41 asterisk-1.2.24]$ make mpg123
 ☆小細工してインストール先をasteriskユーザのディレクトリ配下に
  変更してしまいます。WebやMailとの連携を簡単にするのに便利と思っています。
[asterisk@vine41 asterisk-1.2.24]$ make INSTALL_PREFIX=/home/asterisk/app_root
 ☆ただし、asteriskユーザのままだと、mpg123が上手くインストールできないので、
  インストールはrootで行って、chownしました。
[asterisk@vine41 asterisk-1.2.24]$ su
[root@vine41 asterisk-1.2.24]# make INSTALL_PREFIX=/home/asterisk/app_root install
[root@vine41 asterisk-1.2.24]# chown -R asterisk.asterisk /home/asterisk/app_root
[root@vine41 asterisk-1.2.24]# exit
[asterisk@vine41 asterisk-1.2.24]$ cd ..
 ☆次に、各種設定ファイルと、日本語音声ファイルを入れます。
  こちらも以下のところを利用させて頂きました。
  http://www.voip-info.jp/wiki2/index.php/Asterisk_%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
[asterisk@vine41 src]$ wget ftp://ftp.voip-info.jp/asterisk/conf/conf_sample2_1.tar.gz
[asterisk@vine41 src]$ wget ftp://ftp.voip-info.jp/asterisk/sounds/1_2/asterisk-sound-jp-0
60317.tar.gz
[asterisk@vine41 src]$ tar zxvf conf_sample2_1.tar.gz -C /home/asterisk/app_root/etc/asterisk
[asterisk@vine41 src]$ tar zxvf asterisk-sound-jp-060317.tar.gz -C /home/asterisk/app_root/var/lib/asterisk/sounds

●設定ファイルの修正
 インストール環境をデフォルトから変えてしまったので、
 設定ファイルを修正します。
[asterisk@vine41 src]$ cd ~/app_root/etc/asterisk
[asterisk@vine41 asterisk]$ vi asterisk.conf
-----asterisk.conf---------------------------
[directories]
astetcdir => /home/asterisk/app_root/etc/asterisk
astmoddir => /home/asterisk/app_root/usr/lib/asterisk/modules
astvarlibdir => /home/asterisk/app_root/var/lib/asterisk
astagidir => /home/asterisk/app_root/var/lib/asterisk/agi-bin
astspooldir => /home/asterisk/app_root/var/spool/asterisk
astrundir => /home/asterisk/app_root/var/run
astlogdir => /home/asterisk/app_root/var/log/asterisk
-----asterisk.conf---------------------------
[asterisk@vine41 asterisk]$ vi musiconhold.conf
-----musiconhold.conf-------------------------
[default]
mode=quietmp3
directory=/home/asterisk/app_root/var/lib/asterisk/mohmp3
random=yes ; Play the files in a random order
-----musiconhold.conf-------------------------

●asteriskの起動
 エリアスを通すか、パスを通して、利用するのがよいと思います。
  alias asterisk='/home/asterisk/app_root/usr/sbin/asterisk'
  export PATH=$PATH:/home/asterisk/app_root/usr/sbin
[asterisk@vine41 asterisk]$ asterisk -cvvvvvvv
で起動できたので、インストールは完了。