Raspberry PiとAsteriskでIP電話システムの構築(その1)

Raspberry PiとAsteriskを使用して自宅の電話をIP電話化したときのメモ
ここでは、Raspberry PiのインストールからAsteriskのインストール～発信の確認までに関する内容を記述します。

##【用意】
- Raspberry Pi Model B
- microSD 16G class10
- microSD->SD変換アダプタ
- LANケーブル
- auの充電器
- 適当なWindowsマシン

※HDMIケーブルが無い為、sshで接続

##【構築環境】

- Raspbian (Kernel version 3.18)
- Asterisk 13.5.0

##【手順】

### OSのインストール
[Rasbian](https://www.raspberrypi.org/)を入手して、[Win32 Disk Imager](http://sourceforge.net/projects/win32diskimager/)でダウンロードしたRasbianを解凍して、microSDに焼きます。

書き込みが完了するとそのままRaspberry PiにSDカードを差し込むだけでOSを読み込みます。

### Asteriskのインストール
LANケーブルを下記のように接続します。

 【Windowsマシン】
　　　｜
　LANケーブル
　　　｜
　 【Hub】
　　　｜
　LANケーブル
　　　｜
【Raspberry Pi】

コマンドプロンプトで「ipconfig」を実行して使用しているPCのIPアドレスを確認します。自分のPCは192.168.0.18でした。

[teraterm](http://ttssh2.osdn.jp/)でRaspberry Piに接続するために
Raspberry PiのIPアドレスを探します。

192.168.0.1
192.168.0.2
192.168.0.3
   ・
   ・　
といった具合に探します。自分は192.168.0.19で見つかりました。
[Nmap](https://nmap.org/)など接続されている機器のIPアドレスを探してくれるソフトもあります。


Asteriskのインストールは[Asterisk 13 - VOIP-Info.jp Wiki](http://www.voip-info.jp/index.php/Asterisk_13)を参照。
「yum install」の箇所を「apt-get install」に置き換えてパッケージをインストールすれば問題なくできます。

### IPアドレスの設定

/etc/network/interfacesファイル編集
    
    - iface eth0 inet manualをコメント
    - 下記のように設定を変更。これでRaspberry PiのIPアドレスが142.11.0.23固定になります。
      - iface eth0 inet static
      - address 142.11.0.23
      - network 142.11.0.0
      - netmask 255.255.0.0
      - broadcast 142.11.255.255
      - gateway 142.11.0.1

- reboot実行。
- 再起動後、ifconfig実行してIPアドレスが反映されていれば成功

### ユーザー作成

sip.confのgeneralセクションに下記の内容を追記します。

ast_user201、passwordha201の箇所はSIPのユーザー名とパスワードです。
__必ずコピペで終わらず、ユーザー名とパスワードを変更してください。__
ユーザー名、パスワードはランダム英数字15文字以上にすることを強くおすすめします。

参考サイト：[ランダム文字列ジェネレーター](http://app.nanoway.net/random/)

```sip.conf 
[general]
　・
（省略）
　・
[ast_user201]
type=friend
defaultuser=ast_user201
secret=passwordha201
context=default
canreinvite=no
host=dynamic
dtmfmode=rfc2833

```

AsteriskのCLIを起動して、sip.confを再読み込みするためにsip reloadを実行します。

    root@(none):/home/pi# asterisk -r vvvvvc
    (none)*CLI> sip reload

### ソフトフォンの設定

先ほど作成したユーザーで接続するためにSIPソフトフォンを導入します
[X-Lite](http://www.counterpath.com/)や[Zoiper](http://zoiper.cba-japan.com/)などSIPソフトフォンをインストールします。

今回はAndroid版Zoiperを使用します。

Config -> Accounts -> Add account を選択して
Manual configuration -> SIP を選択します。
sip.confで追加したユーザーの設定値を入力します。

    - Account name       :任意
    - Host               :142.11.0.23
    - User name          :ast_user201
    - Password           :passwordha201
    - Authentication user:ast_user201
    - Caller ID          :(任意)

    最後にSaveで保存します。

「Account is Ready」表示があれば接続成功です。

Asterisk側で接続の確認をとる場合
Raspberry Pi側でAsteriskのCLIを起動して、sip show peersを実行します。

    root@(none):/home/pi# asterisk -r vvvvvc
    (none)*CLI> sip show peers

Host欄に接続しているマシンのIPアドレスが表示すれば接続成功です。
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/32122/c761d27f-5950-fde4-fd39-4230b0c0667d.png)


### ダイヤルプラン作成

電話の発着信時の挙動(ダイヤルプラン)を設定します。

```extensions.conf
[default]
include => demo
　・
（省略）
　・
exten => 1290,1,Playback(queue-thankyou)
```

AsteriskのCLIを起動して先ほど編集したextensions.confを再読み込みするためにdialplan reloadを実行します。

    root@(none):/home/pi# asterisk -r vvvvvc
    (none)*CLI> dialplan reload


### 発信確認

1290をダイヤルすると英語で
「Thank you for your なんちゃら」と英語のアナウンスが流れれば成功です

### 内線通話

おまけで内線ユーザーをもう1つ作成して、2者間通話をします。

sip.confを編集してSIPユーザーをもう1つ追加します。
しつこいようですが__必ずユーザー名とパスワードを変更してください。__
ユーザー名、パスワードはランダム英数字15文字以上にすることを強くおすすめします。

```sip.conf 
[general]
　・
（省略）
　・
[ast_user202]
type=friend
defaultuser=ast_user202
secret=passwordha202
context=default
canreinvite=no
host=dynamic
dtmfmode=rfc2833
```

続いてダイヤルプランを追加します。

```extensions.conf
[default]
include => demo
　・
（省略）
　・
exten => 1290,1,Playback(queue-thankyou)

exten => 201,1,Dial(SIP/ast_user201,30,r)
exten => 202,1,Dial(SIP/ast_user202,30,r)
```

もう1つスマホ端末またはPCなどを使用してユーザー ast_user202 のREGISTをします。

AsteriskのCLIを起動して、sip.confとextensions.confを再読み込みします。

    root@(none):/home/pi# asterisk -r vvvvvc
    (none)*CLI> sip reload
    (none)*CLI> dialplan reload

SIPユーザーの一覧を表示します。
sip.confで追加したユーザーのHost欄に接続しているマシンのIPアドレスが表示すれば接続成功です。

    (none)*CLI> sip show peers

ユーザー ast_user201 でREGISTした端末から202を発信してast_user202 に着信がかかること
ユーザー ast_user202 でREGISTした端末から201を発信してast_user201 に着信がかかること
ができれば成功です。

内線同士で通話ができると一気に楽しくなります。