NUCマシンでスマートフォンを内線電話にしてみる

省スペースなPCでIP-PBXを構築

 「NUCマシンを貸しますので、何か面白いことをやってください」。そんな電話を、ある日、編集部からいただいた。

 NUC(Next Unit of Computing)とは、インテルが提唱する、手のひらサイズPCの規格(フォームファクター)だ。4×4インチという超小型のマザーボードを中心に、メモリやmSATA SSDなどを組み合わせて完成させるベアボーンキットの形で販売されている。

NUC Kit DC3217IYE(左)とピノーのSizka Basic(右)を並べてみる

 今回借りたのは、インテルの「NUC Kit DC3217IYE」。CPUにCore i3-3217Uを搭載し、ギガビットEthernetポート1つと、HDMIポート2つ、USB 2.0ポート3つを備える。あとは、SO-DIMMスロットにメモリを、mini PCI ExpressスロットにmSATA SSDを取り付ければ、動作する。

 サイズは116.6×112.0×39.0mmという手のひらサイズ。ちなみに、筆者宅では自宅内のちょっとしたサーバーに、ピノーのSizka Basicを動かしているが、並べてみるとだいたい同じぐらいの大きさだ。比較するのはどちらにも恐縮だが、Sizka BasicはCPUがGeode LX800という非力なマシンで、それに比べると、DC3217IYEは今どきのPCのスペックを持ったマシンという違いがある。

ひかり電話+AsteriskでIP-PBX

 さて今回は、NUCマシンを使ってIP-PBX(IP電話交換機)を作り、スマートフォンを内線電話にしてみたいと思う。

 IP-PBXとは、その名のとおり、IP電話の交換機だ。アナログ電話では、会社内などに交換機を置いて内線網を作り、社内や外線との電話の呼び出しなどを制御している。同じように、LAN内のIP電話の呼び出しなどを制御するのが、IP-PBXだ。なお、IP電話の呼び出しには、SIP(Session Initiation Protocol)というプロトコルなどが使われる。

 IP電話の電話機の利点として、専用のIP電話機だけでなく、ソフトウェアベースの電話機が使える点がある。特に、社内LANにつないだスマートフォンを内線電話にできるのが便利だ。SIP対応のIP電話機能は、Android 2.3以降では標準機能で、iPhoneでもアプリを入れることで使える。

 実は、家庭用の「ひかり電話」用のルーターにも、簡易的なIP-PBX機能が付いている。これを使うと、通常のアナログ電話のほかに、LAN内のIP電話を子機として接続できるようになっている。

 ただし、ひかり電話ルーターのIP-PBX機能で扱える子機は数台程度。さらに、機能も簡単なもので、どちらかというと親子電話に近い。

 そこでNUCの登場だ。LAN内、つまり家庭内やオフィス内に置いてもじゃまにならないNUCをIP-PBXにすれば、高度な内線網が作れるわけだ。

 IP-PBXには、オープンソースの「Asterisk」をNUCにインストールして使う。AsteriskはオープンソースのIP-PBXとして広く使われているソフトウェアだ。国内でも秋田県大館市やTOHOシネマズなど企業や自治体での採用事例が発表されている。IP-PBXの基本機能だけでなく、ボイスメール(留守番電話)やIVR(自動音声応答)など、多くの機能を持っているのも特徴だ。

 今回、Asteriskを入れたNUCを、ひかり電話に対しては子機として、IP電話機からは交換機として設定する。

 なお、最近はインターネットからのIP-PBXを狙った攻撃も報告されている。この例の構成ではIP-PBXをインターネットに公開していないので、少なくともインターネットからの攻撃は受けないだろう。

IP-PBX用OSをインストール

 まっさらのマシンで簡単にAsteriskのサーバーを建てるときには、Asteriskの公式サイトから配布されている「AsteriskNOW」をインストールする方法がある。AsteriskNOWは、Linuxディストリビューションの一種で、OSをインストールすると最初からAsteriskによるIP-PBXのシステムがインストールされるというものだ。

 AsteriskNOWのサイトに行くと、32bit版または64bit版のインストール用ISOイメージをダウンロードできる。ダウンロードのときに、ファイルサイズやチェックサムが明記されていないので、ちゃんとダウンロードできたか不安だったが、公式フォーラムに有志がMD5チェックサムを公開していたので確認できた。なお、ISOイメージのファイルサイズは、32bit版で約437MBだった。

 ISOイメージをCD-Rなどに焼いておき、NUCマシンに光学ドライブをUSBを取り付けて、CD-RからNUCマシンを起動する。起動画面の「boot:」というプロンプトで「1」と入力してEnerキーを押すと、インストールが開始する。実はAsteriskNOWはCentOS 6がベースになっており、インストーラもほぼCentOS 6のものだ。ただし、CentOSに比べると設定項目が少なく、タイムゾーンとrootのパスワード、ディスクの使い方の3つだけを設定すれば、よいようになっている。

 インストールが完了して、CD-Rをドライブから取り除いて再起動すると、Linuxのコンソールベースのログイン画面が表示される。サーバーとして使うには、ここから最低限、デフォルトでDHCPから取得するようになっているIPアドレスを固定アドレスに変更し、パッケージを最新に更新して、NTPでサーバーの時刻を合わせるとよい。

 なお、筆者宅のひかり電話ルーター「PR-S300NE」では、初期状態でDHCPサーバーがLANのIPアドレスすべてを管理するようになっていた。固定IPアドレスを使うには、ルーターのDHCPサーバーの設定で、管理するIPアドレス範囲を変更しておくとよいだろう。

 比較的簡単といっても、AsteriskNOWでIP-PBXを作るには、Linux(CentOS 6)の管理の知識は必要だ。CentOSについては入門書籍もいろいろ出版されているので、参考にしよう。たとえば、宣伝になるが、Impress Watch社と同じインプレスグループのインプレスジャパン社からは「できるPRO CentOS 6サーバー」が出版されている。

 さて、ここまで簡単と書いてきたが、ひかり電話の子機としてAsteriskを設定するのは、少々手間がかかる。ひかり電話のルーターにAsteriskから接続するときに、認証がうまく通らないためだ。ひかり電話ルーター対応のパッチが公開されているので、Asteriskのソースを取得してパッチを適用し、自分でビルドして、必要なファイルを置きかえる、といった作業が必要で、ハードルが高い。パッチやビルドなしで使うには、実験であれば、ルーター側で認証を使わない設定にすることで、ひかり電話ルーターにAsteriskを接続する方法もある。

AsteriskNOWのサイト。ここからISOイメージをダウンロードできる
AsteriskNOWのインストールCD-RからNUCマシンを起動すると、インストーラが動く
CentOS 6をベースとしたインストーラ
インストールが完了して再起動すると、Linuxのコンソールベースのログイン画面が表示される

内線番号を登録するだけで動いた

 OSがインストールできたら、もうIP-PBXのシステムが動いているので、さっそく設定しよう。

 AsteriskNOWでは、Webベースの管理画面「FreePBX」が採用されている。LAN上のPCのWebブラウザーから、NUCのサーバーを指定すると、FreePBXが表示される。そこから、初期ユーザー名とパスワードを入力して進むと、管理画面のトップ画面になる。ただし、筆者の試したところでは、エラーとともに「“amportal chown”を実行すること」とメッセージが表示されたので、Linuxのコマンドラインから実行したところ、エラーは消えた。

FreePBXにアクセスしたところ。「FreePBX Administration」に進む
管理者の初期パスワードでログイン
最初に管理画面トップにアクセスしたら、エラーが表示された
エラーを解決して管理画面トップを表示

 ひかり電話につなぐ前に、まずスマートフォンを内線電話にして試してみよう。画面上端のメニューから[Applications]→[Extensions]と選んでいくと、Extension(内線)の追加になる。ここで[Generic SIP Device]を選び、スマートフォンに割り当てる内線番号やパスワードを設定すると、IP-PBX側の設定は完了だ。なお、FreePBXでは、設定したあとに画面上端のメニューに現れる[Apply Config]をクリックしないと設定が反映されない点は、要注意だ。

AsteriskNOWで内線電話を登録する。まずメニューから[Applications]→[Extensions]を選んで内線追加の画面を表示し、[Generic SIP Device]を選ぶ
登録内容。最低限、User Extension(内線電話)、Display Name(発信したときに相手に通知する名前)、secret(パスワード)を設定する。secretはデフォルトで非常に長い文字列が付くが、スマートフォンで入力するのが大変なので現実的な長さに

 次にスマートフォン側を設定する。筆者のAndroid 2.3機(Xperia Arc)の場合、設定を[通話設定]→[アカウント]→[通話方法]と進めむ。ここで[着信を受ける]にチェックマークを付けたうでで、[アカウントを追加]で、AsteriskNOWで設定した内線番号やパスワードなどを設定する。また、[通話設定]→[通話方法]の設定を[常に確認する]にすることで、発信するときに携帯電話回線を使うかIP電話(内線)を使うかを聞かれるようになる。

Android側の設定。[通話設定]→[アカウント]→[通話方法]で[着信を受ける]にチェックマークを付ける
[アカウントを追加]をクリックして、IP-PBXの情報を入力
[通話設定]→[通話方法]の設定を[常に確認する]にすると、発信のときにIP電話を選べる

 この状態で、内線を試してみよう。1台だけでも、内線で「*60」に発信すると、Asteriskが受けて、時報を読み上げてくれる(英語)。また、「*43」に発信すると、自分の声を少し遅れて返してくるエコーテストになる。

 また、FreePBXの画面から同じように内線番号の追加を実行して、2つめの内線番号を登録できる。この内線番号をPCなどに設定して、1つめの内線番号を呼び出してみることもできる。

発信のときに、携帯電話回線を使うかIP電話(内線)を使うかを聞かれる
内線のほかのIP電話機から着信した

ひかり電話で外線の発着信

 内線が使えるようになったので、ひかり電話ルーターと接続して、外線の発着信を試してみる。

 まず、ひかり電話ルーター側で、内線設定から「IP端末」を設定する。筆者のところでは、最初から内線番号やID、パスワードが割り振られていたので、それらをメモした。

ひかり電話ルーターでIP端末の設定を確認(ルーターがPR-S300NEの場合)

 Asterisk側では、細かい設定の説明は省くが、まずメニューの[Connectivity]-[Trunk]で[Add SIP Trunk]を選んで、ルーターとの接続を設定する。ここで、接続のための各種情報や、外線発信のときに番号の先頭に付ける数字などを設定する。そして、メニューの[Connectivity]-[Outbound Routes]から外線発信の設定を、[Connectivity]-[Incoming Routes]から外線着信の設定をし、着信通知先にスマートフォンを指定する。

 設定が済んだら、設定した数字を頭に付けた電話番号を指定してIP電話で発信すると、外線に発信できる。また、ほかの携帯電話などを使って外線から電話をかけると、スマートフォンに着信する。

Trunkで外線との接続を設定する
Outbound Routesで外線発信を設定する
Incoming Routesで外線着信を設定する
スマートフォンからAsterisk経由で外線発信する

 以上、NUCマシンを使ってIP-PBXを作り、スマートフォンを内線電話にしてみた。内線電話なのでオフィス内に設置することになり、邪魔にならない小ささのNUCマシンはメリットがある。

 IP-PBXに限らず、ちょっとしたサーバーをオフィス内に設置するケースはある。そのときに、スタンダードなPCの構成を超小型サイズで実現したNUCマシンは、使い道が広がりそうだ。