FreePBXでひかり電話直接接続

やっとFreePBXでひかり電話直接接続が出来たので記録用に残します。

**※東日本での話になります。西日本も同じ仕様だとは思いますが、当方では分かりかねます。**

この直接接続に関しての注意事項
1.　不正発信防止策を必ずやる。
2.　自己責任

#やってみよう！
##その１　前準備

この章で得られる物　ひかり電話を制御している、IPv4のSIPサーバーアドレス

###必要な物
1.　ひかり電話HGW(以下、HGW)
2.　LANポートが2つあってパケットキャプチャーできる環境(リピーターハブ等々があれば尚良い)
3.　ONUから直結(ルーター介さず)出来る環境
　　↑　一体型ルーターの方は調べて直結してください。簡単です。
  

###実践

パケットキャプチャーの方法は各自お任せ致します。
私は、Windows10でWiresharkを使い、キャプチャーしました。

Winodwsで2つのネットワークアダプタをブリッジして、Wiresharkでどちらかのアダプタをキャプチャーする感じです。リピーターハブが無くてもお手軽に出来ました。おすすめです。
方法としては、

ONU→パソコン→ひかり電話HGW　という形です。

で、ここで注意なのが、**HGWはDHCPによってSIPアドレスを取得**しています。なのでWindows側は本当にブリッジしている状態にします。

**はい、ここでまだHGWを接続してはいけません。**

ブリッジアダプタを開いて、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/323709/52208042-4334-d5f0-6443-a08386578e25.png)
「インターネットプロトコルバージョン4(TCP/IPv4)」のチェックを外します。
(画像ではアダプタが1つだけチェックされていますが、本当は2つチェックが無いとブリッジとしては機能しないので注意です。)
これでブリッジアダプタがDHCPを取りに行かなくなります。

そして、Wiresharkを開いて、どちらかのアダプタを選択しキャプチャーモードにします。
この状態にしてからHGWを接続します。
HGWを接続して、数秒でDHCPが割り当てられて、ひかり電話が使える状態になります。
念のため、HGWのランプをよく見ましょう。HGWのひかり電話ランプが緑になったら接続は成功しており、パケットキャプチャーも成功していると思います。

Wiresharkのプロトコル「DHCP」を探し、詳細で「Option: (120) SIP Servers」を探しましょう。全てのタブを開くのです。
そうすると、
>Length: 5
>SIP Server Encoding: IPv4 Address (1)
>SIP Server Address: 118.177.xxx.xxx

が、見つかるはずです。
SIPサーバーのアドレスを控えておきましょう。

##その２　ネットワーク設定
FreePBXの設定が全て終わっている前提での話になります。ご了承下さい。本稿はあくまでも、「FreePBXでひかり電話直接接続」が目的です。

###必要な物
1.　ONUから直結(ルーター介さず)出来る環境
2.　FreePBXにLANが2ポートある
3.　DHCPを受け取る体制

####まず必要な物の紹介

1が必要な理由は、ルーターを介してしまうとDHCPの取得が出来ないためです。なのでハブを用意して、ひかり電話用LANケーブルと、ルーター用のLANケーブルの2系統が必要になります。

2が必要な理由は、FreePBXがHGWの代わりになります。なのでルーティングをFreePBXにして貰わないと行けません。その為2ポート必要です。

3が必要な理由は、ひかり電話のDHCPを受け取るためです。ルーティング設定もDHCPから降ってくるので必須です。

###実践
まず、FreePBXにLANケーブルが2系統刺さっている前提でお話しします。(通常ネットワークとひかり電話ネットワークの2系統が刺さっている。)

念のため、ひかり電話ネットワークからDHCPで割り当てられているか、確認してください。DHCPでは無い場合は設定を変更し、DHCPを受け取れる状態にしてください。
118.177.zzz.zzz/30の割り当てがあるはずです。

確認出来たら、FreePBXのWebGUIを開き、「設定」→「Asterisk SIP 設定」を開いてください。

NAT設定で「Detect Network Settings」をクリックしてください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/323709/094f410d-fc04-0acc-14e0-125e525c609b.png)

そうすると、
外部IPアドレスがルーターを介して契約しているプロバイダのIPアドレスになるはずです。
ローカルネットワークには

1.　通常ネットワーク
2.　ひかり電話ネットワーク(118.177.0.0/16)
3.　ひかり電話ネットワーク(118.177.zzz.zzz/30)

の3つがあるはずです。(ここのネットワーク環境に違いはあるかも知れませんが、ひかり電話ネットワークの2つが現れれば成功です。)

**適用を忘れずに！**

次にhostsに一文を追加します。
>118.177.xxx.xxx   ntt-east.ne.jp

118.177.xxx.xxxはひかり電話のSIPサーバーです。
保存をし、反映させるために再起動をしてください。


##その３　トランク設定
###前提
chan_sipがポート番号5060になっていることが前提です。(Chan_pjsipだとうまく接続が出来なかったので、)
なっていない人は検索して、変更してください。

###実践
「接続」→「トランク」と進み、トランク設定を開きます。
「トランクを追加」から「SIP (chan_sip)トランクを追加」を選択します。

トランク追加のタブ「Global」画面になったら、
お好みで「トランク名」を設定します。
アウトバウンドCIDにはひかり電話の代表者番号を入れてください。

タブ「sip設定」を次に開きます。
「outgoing」のタブ画面なのを確認し、お好みで「トランク名」を設定します。(Globalタブのトランク名と一緒の方がわかりやすい)
次にピア詳細には以下の文章を、コピペしてお使いください。
>type=peer
session-timers=originate
session-refresher=uas
session-minse=300
session-expires=3600
nat=never
host=ntt-east.ne.jp
fromdomain=ntt-east.ne.jp
dtmfmode=inband
context=
canreinvite=update
disallow=all
allow=ulaw

次に「インバウンド」タブを開き、
「ユーザーコンテキスト」は空白
「ユーザー詳細」は空白
にします。
レジストリ文字列には
>03xxxxxxxx:@ntt-east.ne.jp/03xxxxxxxx

03xxxxxxxxにはひかり電話の代表者番号を入れてください。

ここで「送信」をクリックし適用してください。

登録が出来ているかは、「レポート」→「Asterisk情報」→「レジストリ」→「Chan_Sip Registry」の中を確認してください。

「State」が「Registered」になっていれば問題ないです。

##その４　アウトバウンドとインバウンドルート作成
ここまで来れば他の方が書かれている設定方法で問題はありませんが、何点か補足事項
インバウンドルートで多分、多くの方が「着信グループ」で外線から内線を呼び出すと思います。
その際、作成した「着信グループ」の設定項目に「Send Progress」という設定があります。デフォルトでは「Yes」になっています。この機能はGoogle翻訳曰く
>このリンググループは、サポートされている場合は、デジタルチャネルへのコールの進行状況を示す必要があります。

という機能らしいです。
例えば、着信グループで全ての内線が呼び出されて、その内の1つが応答すれば他の端末には「他端末で応答した」という通知が行き不在着信にはならないシステムです。
が、何故か**これが「Yes」だとうまく着信しないため「No」にしてください。**
超引っかかりました。

あと直で内線をならす際、内線設定の「Find Me/lFollow Me」の「Global Settings」にある「Enabled」が「Yes」でもうまく着信しないので「No」にしてください。(インバウンドルートから直でならすときだけ。着信グループでならすときは「Yes」でも問題無いです。)

アウトバウンドとインバウンドルートの注意点はこれぐらいですかね・・・。
もちろん、アウトバウンドルートのダイヤルパターンは必ず設定してくださいね。

あとはお手持ちの携帯電話から自宅に発信したり着信したりをして問題ないことを確かめてください。

皆さんに快適な電話生活を！
ここまでご覧頂きありがとうございます。