2014年12月10日水曜日

MVNO(データSIM)で「話し放題」を実現する 【つなぐ】

普通にスマホを使っていると、以下のような2台持ち構成が一番安くなります。(カケホが必要な場合)

1台目:話し放題プランのみ
2台目:データ通信のみ(MVNO含む)

しかし、この構成は、常に2台の端末を持ち歩く必要があります。
これが面倒な人も多いのではないでしょうか。




そこで、2台持ちするケータイを1台に合体させます。(セロテープとかで貼り合わせるわけではありません!)
これで、「MVNO」+「話し放題」を1台のスマホで実現できます。

また、これを利用すれば、DualSIMに対応したスマホを使う必要もなく、1台のみで複数キャリアの同時利用も可能になります。


今回は、簡単に説明できる内容ではなく、かなりの長編になってしまいました。
読んでいて疲れてきたら、一気に読まずにあとでゆっくり読んで頂ければと思います。

なお、これは誰にでも簡単に導入できるシステムではありません。
ですが、誰もに使ってもらいたいと思えるぐらい、素晴らしいシステムでもあります。

このジレンマを解消するために、どうするかを検討中です・・・。

<追記>システム提供フォームを作成しました。(記事最下部)



【 「話し放題+パケット定額」サービス 】

ドコモ、au、ソフトバンクで「カケホーダイ」などの話し放題サービスが開始されました。
しかし、キャリアの「話し放題+パケット定額」プランは高すぎます。 一例として、ドコモの同プランの料金は6,500~8,000円(税抜)です。

これは一部のユーザを除けば、体良く料金が値上げされただけに過ぎません。



【 ケータイの2台持ち 】

そこで、ケータイの2台持ちが推奨されはじめました。
1台を「話し放題」プランのみとし、もう1台をMVNOで「データ通信」のみとします。
そうすることで、「話し放題」+「データ通信」が格安で運用できます。

1台目:話し放題(1,500~2,200円)
2台目:MVNO(900円程度)


これだけでも十分に安くなり、満足できるのですが、常にケータイを2台持ち歩く必要があります。
これでは、数少ないズボンのポケットを2つも消費してしまいます!(私は手ぶら派なので、これは結構重要です。)



【 2台のケータイを合体させる・・・「つなぐ」 】

「ケータイの2台持ちで安くなることはわかる。だけど2台持ち歩くのはイヤだ!」
「1台だけ持ち歩くためにはどうすれば良いか?」
「片方にIP電話を入れて転送させる?いや、それでは同じ番号での発信が出来ない・・・。」

・・・さすがに、この問題を運用で何とかするのは無理な話です。
と言うことで、2台のケータイを合体させて1台にしてしまいます。

これは、決してテープなどでくっつけるわけではなく、ケータイとケータイをネットワーク上で繋げます。
このように、2台のケータイを【つなぐ】ことによって、「話し放題」+「格安MVNO」が1台のスマホで実現できます。


2台のケータイを【つなぐ】ためにはいくつかの方法があります。

1.GP-712、GP-710、GP-708を使う
2.W-SIM機を使う
3.Asteriskサーバで3Gモデムを制御する
4.AsteriskサーバとBT接続する

数十万円かければ「3G VoIP Gateway」と言う選択肢もあるのですが、非現実的なのでここでは触れません。
また、2~4についても、機材の入手性や難易度の観点から除外します。

今回は、比較的容易に導入できる1について説明したいと思います。



【 GP-712、GP-710、GP-708を使う 】

「GP-712」、「GP-710」、「GP-708」はGEMPRO社の「Bluetooth ⇔ VoIP ゲートウェイ」です。
VoIPとは「Voice over Internet Protocol」のことです。
略さずに記載すると、「インターネットを通じて音声を伝送するプロトコル」であることがわかります。

なお、Bluetoothはわかります。
イヤホンやヘッドセットに採用されている、無線規格です。

「Bluetooth ⇔ VoIP ゲートウェイ」とは、ケータイのBluetoothによる通話を、インターネット上の別の機器で利用できるようにする役割を持ちます。
つまり、ケータイ(A)の通話を、別のケータイ(B)で行えるようになります。

これを実情に沿った形に言い変えると、
「家に置きっぱなしにしたケータイの通話及び発着信を、持ち歩いているスマホで行えます。」

便宜上、今後はこれを【つなぐ】と呼びます。

なお、GP-710、GP-712、GP-708の違いは以下のとおりです。

GP-710 : 1台のケータイを収容可能。(【つなぐ】の利用には、別途IP-PBXが必要。)
GP-712 : 2台のケータイを同時に収容可能。(【つなぐ】の利用には、別途IP-PBXが必要。)
GP-708 : 8台のケータイを同時に収容可能。さらに、IP-PBXの機能を併せ持つ。(単体で【つなぐ】利用可。)



【 「つなぐ」の準備をする 】

【つなぐ】に必要な機材はGP-710、GP-712、GP-708のいずれかとIP-PBXです。
なお、GP-708の場合は単体でIP-PBX機能を持っていますので、別途IP-PBXは必要ありません。

自分ひとりなら「GP-710」で十分です。
今後、二人ぐらいは使うかもしれないと思ったら、「GP-712」を選んでおけば間違いありません。
「GP-708」はIP-PBXの構築が不要ですが、その分かなり高価です。

なお、「GP-708」を使った場合は簡単に設定できますので、今回の説明からは除外します。
これからは「GP-712」を例として説明していきます。

<必要な環境>
  • 固定回線(光回線が望ましい)
  • 固定IPアドレス、もしくはDynamicDNS(※)

    <必要な機材>
  • GP-712
  • Linuxが稼働するPC(IP-PBX用)
  • スマホ
  • ケータイ(Bluetoothが使えるもの)

    ※ DynamicDNSを利用する場合は、DiCEなどを用いてリアルタイムにDNSを更新させます。


    ◆ 話し放題プランを契約したケータイを用意する。

    Y!mobileのPHSが最も安価(1500円)で、高音質になります。
    他のキャリアは横並びで2200円です。

    どこのケータイにするかは、現在使っているキャリアや今後を考えて決定します。


    ◆ GP-712を購入する。

    これは日本では発売されておりませんので、海外から購入します。
    私は「eBay」から購入しました。これが今回の中で一番高価です。(約3万円)
    なお、「GP-712」と「GP-712A」とは別物ですのでご注意ください。


    ◆ IP-PBX(Asteriskなど)を用意する。

    私は「CuBox-i2」を使っているのですが、あえてこれを選ぶ必要はないと思います。
    6~7000円程度で買える「Raspberry Pi」がお勧めです。
    これならばIP-PBXの構築も簡単に行えます。

    なお、「Raspberry Pi」はOSをインストールするために、別途MicroSDカードが必要になります。
    本来8GBもあれば十分なのですが、セル寿命の観点から32GBを選びます。

    東芝 microSDHC 32GB
    (これは、私がCuBox-i2で使っているものです。安価な上に高速で、文句なしです。)



    【 「つなぐ」の設定をする 】

    【つなぐ】の設定は次の3部構成から成ります。
    1. GP-712の設定
    2. IP-PBX(Asterisk)の設定
    3. スマホの設定


    1.GP-712の設定

    ◆ 接続編

    これは動画で説明します。
    本来、説明するまでも無いのですが、「GP-712」がどんな代物なのかわからない人も多いと思いますので、ハードウェアの紹介も兼ねます。

    アンテナの接続からBluetoothペアリングまでを紹介します。
    なお、動画中はわかりやすくするためにBluetoothペアリング時にスマホを使用していますが、これはガラケーでも何でも構いません。



    ◆ 設定編

    1つ1つ画面キャプチャで説明すると長くなるため、これも動画で紹介します。



    2.IP-PBX(Asterisk)の設定

    【つなぐ】に必要なAsteriskのコンフィグファイルの記載例です。
    「GP-712」の発着信の考え方が難しく、幾度と無くこれで挫折しそうになりました。

    簡単に説明すると、外部と接続されるのは内線番号「6001」です。
    発信は、VoIP接続された「6001」から、Bluetooth接続先の「6002」に受け渡します。
    受信は、Bluetooth接続された「6002」から、VoIP接続先「6001」に受け渡します。


    以下、「sip.conf」と「extensions.conf」の設定例です。
    わからなければ、必要な部分だけ変更してそのままコピペしてください。(注記は削除してください。)

    「sip.conf」
    [general]
    context=default
    bindaddr=0.0.0.0
    bindport=5062 ← 基本は5060だが、auひかりとセキュリティ上の都合から5062に変更した。
    language=ja
    allowguest=no
    externip=123.456.789.012 ← auひかりなど固定IPの場合に入力。
    externhost=sip.test.jp ← 独自ドメインやDynamicDNSのドメインを入力。
    localnet=192.168.0.0/255.255.255.0

    disallow=all
    allow=ulaw
    allow=alaw
    allow=gsm
    allow=g729
    allow=speex
    allow=opus

    [6001]
    type=friend
    defaultuser=6001
    secret=Kanari_Nagai_Pasu_wo_Ireru ← このパスワードは外部にさらされるため、強固なパスとする。
    canreinvite=yes
    host=dynamic
    context=6001

    [6002]
    type=friend
    defaultuser=6002
    secret=6002
    canreinvite=yes
    host=dynamic
    context=6002

    「extensions.conf」
    [default]

    [6001]
    ; security(kokusai_denwa_no_kinshi)
    exten => _00.,1,Answer()
    exten => _00.,n,Wait(1)
    exten => _00.,n,Hangup()

    exten => _010.,1,Answer()
    exten => _010.,n,Wait(1)
    exten => _010.,n,Hangup()

    ; tuujou
    exten => _0.,1,Set(CALLERID(num)=6001)
    exten => _0.,n,Set(CALLERID(name)=6001)
    exten => _0.,n,Dial(SIP/${EXTEN}@6002,120,T)
    exten => _0.,n,Hangup()

    ; kinkyuu_tuuhou
    exten => _1XX,1,Set(CALLERID(num)=6001)
    exten => _1XX,n,Set(CALLERID(name)=6001)
    exten => _1XX,n,Dial(SIP/${EXTEN}@6002,120,T)
    exten => _1XX,n,Hangup()


    [6002]
    exten => _X.,1,Dial(SIP/6001)
    exten => _X.,n,Hangup()


    3.スマホの設定

    スマホ側での通話は、SIPクライアントを使います。

    通常(3G/LTE)は「CSipSimple」を使います。
    家の中(Wi-Fi)は「Acrobits Softphone」を使います。

    2つのアプリを使い分ける理由はNATを越えるためです。
    今回、GP-712の仕様から、3G/LTE通信時はSTUNサーバが必須となります。
    しかし、ローカル側(Wi-Fi)ではSTUNサーバを経由してしまうと、音声パケットが、LAN側のIP-PBXに到達しません。

    以上の理由により、3G/LTE通信時はSTUNを経由させた「CSipSimple」を使い、Wi-Fi通信時は直通で「Acrobits Softphone」を使います。

    ただし、両アプリが常時通信しているとバッテリー消費が大きくなるため、設定によりこれを回避します。
    もちろん、アプリの切替は自動で行わせます。


    <CSipSimpleの設定>

    SIPアカウントは通常どおり設定します。
    ID:6001
    SIPサーバ:sip.test.jp:5062 ← 固定IPやドメインを入力
    Pass:Kanari_Nagai_Pasu_wo_Ireru


    ※ 以降、「☑」に機種依存文字を使用しているため、見えない環境もあるかもしれません。
    これは、□にレ点の入った「チェック済み」マークを表しています。

    [設定 → ネットワーク]
    ◆トランスポート
     → コネクションキープアライブ
    モバイルUDPキープアライブ:300~3600で環境に応じて数値を入力する。
    これ以外はすべて0(ゼロ)を入力
    (モバイルUDPも0で問題ないかも?未検証。)
    ◆NAT通過
    ☑ ICEを有効
    ☑ Aggressive ICE
    ☑ STUNを有効
      STUNサーバ:stun.l.google.com:19302
    ◆着信通話用
    ☑ 3Gを使用(及びLTE)
      (これ以外のチェックを外す)

    [設定 → メディア]
    ◆オーディオ品質
     エコーや音声検出のチェックは外す
    ◆帯域別のコーデック優先リスト
     チェックを外す
    ◆コーデック
    ☑ speex 8kHz
    ☑ PCMU 8kHz
      (これら以外は外す。)
    ◆ボリューム
     マイク音量:最大


    この設定でCSipSimpleが起動していても、3G接続時以外は通信しません。


    <Acrobits Softphoneの設定>

    SIPアカウントは通常どおり設定します。
    ID:6001
    SIPサーバ:192.168.0.10:5062 ← AsteriskサーバのLAN側のIPを設定する
    Pass:Kanari_Nagai_Pasu_wo_Ireru

    ◆着信
     → 起動を維持し常時着信
    ◆環境設定
     → サウンド
     エコーキャンセル、ノイズ低減のチェックを外す
    ◆WiFi設定
     → Wi-Fiのみ
    ☑ Wi-Fi接続を維持する
    ◆コントロール
     → 電話帳 → Handle outgoing native calls → Ask
     (これで電話帳から発信する際にAcrobitsを選べるようになります。)


    この設定でAcrobits Softphoneが起動していても、Wi-Fi接続時以外は通信しません。


    このように、3G/LTE時は「CSipSimple」を使い、Wi-Fi接続時は「Acrobits Softphone」を使うことを明示的に指定し、【つなぐ】のNAT越えを実現します。

    以上で設定は完了です。



    【 「つなぐ」の発着信テスト 】

    3G/LTE時及びWi-Fi時の発着信をテストします。
    スマホのSIPクライアントから発信すると、GP-712とBluetooth接続しているケータイから発信されます。
    また、ケータイへの着信はGP-712を経由して、スマホが鳴動します。



    【 「つなぐ」の音質検証 】

    【つなぐ】の音質と遅延時間を検証します。
    音質については自分がどう聞こえるかより、自分の声が相手にどのように聞こえているかが重要なため、それを掲載します。

    [使用した端末]
  • WX12K(GP-712とBT接続済)
  • L-01F(つなぐ利用機)
  • SH-07D(遅延計測用)

    [回線種別]
  • Wi-Fi(光回線)
  • LTE(ドコモ)

    [録音環境]
  • 「FUSION IP-Phone SMART」の留守電(128kbps RIFF-WAVE)

    [遅延測定条件]
  • 「L-01Fから音声を発信してから、SH-07Dがそれを受信する」までのタイムラグの測定

    [音声の元データ]


    [検証結果]
    回線種別
    (アプリ)
    コーデック 音質 遅延時間
    Wi-Fi
    (Acrobits Softphone)
    G.711μ

    324ms
    LTE
    (CSipSimple)
    Speex(8kHz)

    387ms


    [検討・考察]

    音声データを聴くと、両アプリの特徴が色濃く出ており、つい聴き比べたくなってしまいます。
    しかし、これら2つの音声データは、条件が全く異なるため、聴き比べには何の意味もありません。
    注目すべくは遅延時間の短さです。

    これだけ低遅延ならば、全く違和感なく会話ができます。
    「違和感なく」と言う表現が、そもそも間違っているぐらいに、これが「普通」です。

    なお、音質についても十分満足できます。
    ドコモ同士の通話品質には敵わないと思いますが、他キャリア程度の品質は保っています。
    特にLTEに関しては、低帯域用コーデック「Speex」で、ここまでの音質であれば文句のつけようがありません。



    【 まとめ 】

    【つなぐ】システム構築にはそれなりに知識を必要とします。

    しかし、私と全く同じシステムで良ければ、本ブログ中にやり方はすべて記載しています。
    参考にして頂ければ、難しいながらもシステム構築まで辿り着けるはずです。

    以下は、わが家の【つなぐ】を使った月額維持費です。

    私:1709円(L-01F)
      <内訳:1500円(Y!mobile・スーパーだれとでも定額)+209円(ドコモ・Xiデータ(7Gまで))>
    妻:2805円(SC-01F)
      <内訳:1500円(Y!mobile・スーパーだれとでも定額)+1305円(BIGLOBE・ライトS(5Gまで))>

    これだけ安価で便利な【つなぐ】ですが、最初に言ったとおり、システム構築は一筋縄では行きません。
    まず、購入のために最低限の英語は必要になります。また、ちょっとしたネットワークの知識も必要です。

    ただし、一度構築してしまえば、MVNOでの話し放題が、スマホ1台だけで実現できます。
    たとえ難しくても、英語が苦手でも、それでも頑張って【つなぐ】を構築する価値は十分にあります。



    【 あとがき 】

    今回はかなり難しかったです。
    GP-712の動きを理解すべく検索しても情報が全然出て来ないのです。
    これが理解できないと、Asteriskも設定できません。

    トライアンドエラーで、徐々に動きがわかってきて、6001⇔6002の発着信の受け渡しに気付いた時には感動モノでした。
    また、NAT越えに四苦八苦し、2つのSIPクライアントの同時使用に行き着いたときは、自分で自分を褒めたくなりましたよ。(〃∇〃)


    わが家は12月からGP-712での【つなぐ】を本格運用し始めました。
    今のところ目立った不具合もなく、順調に稼働中です。
    今後、何か不具合があれば、ここに追記していきたいと思います。



    【 つなぐの提供について 】

    【つなぐ】がどうしても欲しい。
    だけど、英語もネットワークもわからない・・・。
    でも、どうしても使いたい!

    もし、そんな方がいるようであれば、必要機材をすべて揃えて、さらにIP-PBXの設定も済ませた上で、提供できる方法を考えます。
    しかし、かなり手間がかかるので、多少はマージンを頂くことになるとは思います。
    ・・・そもそも、「そんな方がいれば」の話ですが。

    <追記>
    【つなぐ】提供フォーム作成しました。
    ブログ上では情報送信時の暗号化に問題ありなので、外部システム(ネットオウルのもの)を使いました。

    【つなぐ】が欲しい方はこちらからご連絡ください。

    なお、少なからずマージンは頂くので、接続できるようになるまでサポートします。


    <2015.1.4 更新>
    【つなぐ】の設置編として<ガラケー(話し放題)と、スマホ(MVNO)を【つなぐ】>アップしました。
    【つなぐ】で一体何ができるのかを、本記事よりは少しわかりやすく書いたつもりです。


    <2014.12.15 更新>
  • 設定ファイルの整合性が取れていなかったため「extensions.conf」を修正しました。
  • 【つなぐ】提供フォーム作成しました。

    <2014.12.22 更新>
  • 設定ファイルに「抜け」があったため「extensions.conf」を修正しました。