「Asterisk+NVR500」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(/etc/hosts)
 
(同じ利用者による、間の31版が非表示)
1行目: 1行目:
AsteriskとNVR500を組み合わせて使おうという計画。<br>
+
[[カテゴリ:Asterisk]]
 +
[[カテゴリ:pjsip]]
 +
[[カテゴリ:ひかり電話]]
 +
[[カテゴリ:ヤマハ]]
 +
 
 +
AsteriskとNVR500を組み合わせて、ひかり電話で使おうという計画。<br>
 
=大前提の注意!=
 
=大前提の注意!=
 
・このページではAsterisk、ヤマハ NVR500、ひかり電話を組み合わせます<br>
 
・このページではAsterisk、ヤマハ NVR500、ひかり電話を組み合わせます<br>
6行目: 11行目:
 
・契約上の問題、接続承認等は各自で行ってください<br>
 
・契約上の問題、接続承認等は各自で行ってください<br>
 
・何を言ってるのかわからない人はやってはいけません<br>
 
・何を言ってるのかわからない人はやってはいけません<br>
 +
=条件=
 +
Asterisk 20.x.x、libunbound付でコンパイル。ベースはDebian。<br>
 +
Asteriskの設定ファイルのベースは [[Asterisk_20_サンプル設定ファイル]]<br>
 +
NVR500 Rev.11.00.43<br>
 +
===参考===
 +
NVR500でなくともRTXシリーズでSIP-NATが使える機種ならば同様の設定でひかり電話に収容してAsteriskが動作できます。<br>
 +
ただしRTX系はアナログポートを持たないのでAsteriskのATA代わりに使用することはできません。
  
 
=目論見=
 
=目論見=
21行目: 33行目:
 
・NVR500の内線としてIP電話機を接続<strong>できません</strong><br>
 
・NVR500の内線としてIP電話機を接続<strong>できません</strong><br>
 
・NVR500のアナログポートはAsteriskの内線(SIPエンドポイント)に<strong>なれます</strong><br>
 
・NVR500のアナログポートはAsteriskの内線(SIPエンドポイント)に<strong>なれます</strong><br>
いったいどういうことかというと、NVR500は外部のSIPサーバに対してREGISTERする能力はりますが、自身がSIPサーバのように内線をIPで収容するふるまいは持っていないということです。ただヤマハのIP内線機能があるのですが、これはSIPではありません。以前調べた範囲ではMGCPを使ってたと判断できたのですが、今はどうなっているかわかりません。<br>
+
いったいどういうことかというと、NVR500は外部のSIPサーバに対してREGISTERする能力はありますが、自身がSIPサーバのように内線をIPで収容するふるまいは持っていないということです。ただヤマハのIP内線機能があるのですが、これはSIPではありません。以前調べた範囲ではMGCPを使ってたと判断できたのですが、今はどうなっているかわかりません。<br>
 
そこで今回の目論見では呼制御はAsteriskに全て任せます。その上でNVR500のアナログポートをAsteriskの内線として収容します。要するにATAとして使おうという話です。こうすれば物理FAXをAsteriskに収容することもできますし、黒電話機をAsteriskで使うこともできます。<br>
 
そこで今回の目論見では呼制御はAsteriskに全て任せます。その上でNVR500のアナログポートをAsteriskの内線として収容します。要するにATAとして使おうという話です。こうすれば物理FAXをAsteriskに収容することもできますし、黒電話機をAsteriskで使うこともできます。<br>
  
 
     <<******************|NAT|*********ひかり電話  
 
     <<******************|NAT|*********ひかり電話  
 
   ===光回線===[ONU]---[NVR500]---LAN---[Asterisk]
 
   ===光回線===[ONU]---[NVR500]---LAN---[Asterisk]
                           | 内線**|****>>
+
                           |      |
 +
                          |      | 内線****>>
 
                           |      +----[IP Phone]内線
 
                           |      +----[IP Phone]内線
 
                           |
 
                           |
 +
                          |  Asteriskの内線(ATAとして動作)
 
                           +--analog---[phone/fax]
 
                           +--analog---[phone/fax]
  
 
NVR500はいい加減古いのですが、この使い方ならAsteriskを活用できそうですし、市場では中古で安いのが出回っているのでAsteriskで遊びたい向きには最適です。この先、アナログ搭載の新製品は出なさそうな気もしますし。おそらくですがNVR510も同じ方法で使えると思います。<br>
 
NVR500はいい加減古いのですが、この使い方ならAsteriskを活用できそうですし、市場では中古で安いのが出回っているのでAsteriskで遊びたい向きには最適です。この先、アナログ搭載の新製品は出なさそうな気もしますし。おそらくですがNVR510も同じ方法で使えると思います。<br>
 
余談ですが中古でNVR500買った方が新品のATA買うより安いし、DP対応してるしでATA買うよりこっちの方がいいんじゃ?<br>
 
余談ですが中古でNVR500買った方が新品のATA買うより安いし、DP対応してるしでATA買うよりこっちの方がいいんじゃ?<br>
※もしかしてNVR500をB2BUAみたいに使う手段ってあります?知ってる人がいたら教えてください。
+
※もしかしてNVR500をB2BUAみたいに使う手段ってあります?知ってる人がいたら教えてください。<br>
 +
<br>
 +
最終的にこういう接続になります。
 +
===光回線===[ONU]---[NVR500]-----[Asterisk Server]
 +
                    LAN2
 +
                <**PPPoE**>NAT(masquarade)  Internet
 +
                <**DHCP**>NAT/SIP-NAT ひかり電話
 +
Asteriskが入っているサーバはインターネット接続も、ひかり電話接続もNVR500に対して投げる/受けるかたちとなります。
  
 
=ひかり電話情報の取得=
 
=ひかり電話情報の取得=
60行目: 81行目:
 
         Default gateway: デフォルトゲートウェイ
 
         Default gateway: デフォルトゲートウェイ
 
これをメモかキャプチャして保存しておいてください。Asteriskの設定で必要になります。<br>
 
これをメモかキャプチャして保存しておいてください。Asteriskの設定で必要になります。<br>
 +
この情報、要するにひかり電話端末に対するプロビジョン情報で機器類(まあAsteriskとか)の再起動毎に取得が必要なのかと思ってましたが、そんなことはなく基本的に変わらないようなので自動化しない方針にします。なのでもし発着信ができないような状態になった場合には再度この手順を行って設定情報を確認してください。<br>
 
情報が取得できたらNGNを使わないに設定してNVRを再起動します。
 
情報が取得できたらNGNを使わないに設定してNVRを再起動します。
 
  # ngn type lan2 off
 
  # ngn type lan2 off
65行目: 87行目:
 
=NVR500の設定=
 
=NVR500の設定=
 
以下の前提でNVR500を設定します。<br>
 
以下の前提でNVR500を設定します。<br>
 +
・NGN機能は使わない<br>
 
・ヤマハのSIP-NATを使う<br>
 
・ヤマハのSIP-NATを使う<br>
 
・AsteriskサーバのIPアドレスは固定(例示では192.168.200.250とします)<br>
 
・AsteriskサーバのIPアドレスは固定(例示では192.168.200.250とします)<br>
78行目: 101行目:
 
ひかり電話への経路情報を設定します。先ほどメモした情報を元に以下のように設定します。
 
ひかり電話への経路情報を設定します。先ほどメモした情報を元に以下のように設定します。
 
  # ip route ネットワークとサブネットマスク gateway ゲートウェイ
 
  # ip route ネットワークとサブネットマスク gateway ゲートウェイ
 +
ISP接続がある場合、そちらがデフォルトルートとして使用されるので、ひかり電話のネットワークへの経路を明示(静的)指定する必要があります。<br>
 +
AsteriskはNVR500をデフォルトルート(インターネット接続等にも)として使用しているのならば、電話のトラフィックもNVR500に投げるので、NVR500内部で経路が振り分けられるため、Asteriskサーバ側で経路を意識する必要がなくなります。
 +
 
==NAT(マスカレード設定)==
 
==NAT(マスカレード設定)==
 
  # nat descriptor type 2000 masquerade
 
  # nat descriptor type 2000 masquerade
89行目: 115行目:
 
SIPは使うに設定します。アナログポート関連の設定は後で。
 
SIPは使うに設定します。アナログポート関連の設定は後で。
 
  # sip use on
 
  # sip use on
 +
==セキュリティ関連情報==
 +
ここで解説している設定でAsteriskはNVR500の『後ろ』にあるものとしています。インターネット接続もNAT(マスカレード)で接続しているものとしています。グローバルIPアドレスを固定し、Asteriskをインターネット側に出しているような場合には以下の点に注意してください。
 +
*ヤマハのSIP-NATは5060ポート固定のため5060番のトランスポートを開けています
 +
*Asteriskが5060を「開けて」いるため固定IP(グローバル)で外に出していると外から5060が見えます
 +
*5060を外から使用しない場合にはPPに対して5060ブロックフィルタを用いてください
 +
通常のインターネット接続でNATを使用している場合、AsteriskはPPのNATビハインドにあるので通常は注意する必要はありません。ですが、外->内に対して5060を静的マスカレードしている場合にはSIPに対するセキュリティを施してください。もっともこの構成を従前から使用している場合には対策済みかと思います。<br>
 +
LAN2のDHCPで取得したIPアドレスは、ひかり電話のIPアドレスのため、このアドレスに到達できるのは、ひかり電話からだけです。このため、それ以外の外(インターネット等)からは到達できませんので通常は対策不要のはずです。PPのアドレスとLAN2のDHCPアドレスは関係ありません(関係しないので明示的に経路を設定しました)。
  
 
=Asterisk(PJSIP)の設定=
 
=Asterisk(PJSIP)の設定=
 
トランクの設定ファイルは1ファイルとし、pjsip_trunk_hikari-nvr.confとしています。各セクションは以下のように書きます。<br>
 
トランクの設定ファイルは1ファイルとし、pjsip_trunk_hikari-nvr.confとしています。各セクションは以下のように書きます。<br>
注意点としてAsteriskはlibunbound付でコンパイルするか、ローカルDNSの解決能力を持たせてください。いわゆるntt-ほげドメインの解決が必要になります。ここではlinunbound付として設定しています。
+
注意点としてAsteriskはlibunbound付でコンパイルするか、ローカルDNSの解決能力を持たせてください。いわゆるntt-ほげドメインの解決が必要になります。ここではlibunbound付として設定しています。
 
==トランスポート==
 
==トランスポート==
 
5060用のトランスポートを書きますが他に5060のトランスポートがある場合にはそれを利用してもかまいません。
 
5060用のトランスポートを書きますが他に5060のトランスポートがある場合にはそれを利用してもかまいません。
101行目: 134行目:
 
  local_net = 192.168.0.0/16
 
  local_net = 192.168.0.0/16
 
==AOR==
 
==AOR==
;AOR
+
AORの指定で、Qualifyはしてはいけません
; Qualifyはしてはいけない
 
 
  [hikari-nvr]
 
  [hikari-nvr]
 
  type = aor
 
  type = aor
 
  contact = sip:取得したSIPサーバのアドレス
 
  contact = sip:取得したSIPサーバのアドレス
 +
 
==IDENTIFY==
 
==IDENTIFY==
 +
identifyはIPアドレスだけなのでシンプルです。
 
  [hikari-nvr]
 
  [hikari-nvr]
 
  type = identify
 
  type = identify
 
  endpoint = hikari-nvr
 
  endpoint = hikari-nvr
 
  match = 取得したSIPサーバのアドレス
 
  match = 取得したSIPサーバのアドレス
 +
 
==REGISTER==
 
==REGISTER==
 +
認証情報は不要なので単にREGISTERするだけです。
 
  [hikari-nvr]
 
  [hikari-nvr]
 
  type = registration
 
  type = registration
121行目: 157行目:
 
  server_uri = sip:取得したSIPドメイン
 
  server_uri = sip:取得したSIPドメイン
 
  client_uri = sip:自分の電話番号@取得したSIPドメイン
 
  client_uri = sip:自分の電話番号@取得したSIPドメイン
 +
 
==ENDPOINT==
 
==ENDPOINT==
 +
endpointではSIP 5060のトランスポートを明示指定します。contextは着信用(incoming)にしてあります。DTMFモードはinbandです。認証情報が無いのでこちらもシンプルです。
 
  [hikari-nvr]
 
  [hikari-nvr]
 
  type = endpoint
 
  type = endpoint
139行目: 177行目:
 
  from_domain = 取得したSIPドメイン
 
  from_domain = 取得したSIPドメイン
 
  aors = hikari-nvr
 
  aors = hikari-nvr
 +
 
==/etc/hosts==
 
==/etc/hosts==
 
Asteriskの設定ファイルではありませんが、名前解決に使用します。libunbound付の場合には/etc/hostsに以下のようなエントリを書きます。
 
Asteriskの設定ファイルではありませんが、名前解決に使用します。libunbound付の場合には/etc/hostsに以下のようなエントリを書きます。
 
  取得したSIPサーバのIPアドレス  取得したSIPドメイン
 
  取得したSIPサーバのIPアドレス  取得したSIPドメイン
インターネット接続にNVR500を使用し、NVR500をDNSサーバとして使っている場合(まあこの場合が多いのでしょうが)にはNVR500にDNSエントリとして登録すればlinunboundなしでも使えると思います。
+
インターネット接続にNVR500を使用し、NVR500をDNSサーバとして使っている場合(まあこの場合が多いのでしょうが)にはNVR500にDNSエントリとして登録すればlinunboundなしでも使えると思います。例えば
 +
dns static a 取得したドメイン SIPサーバのIPアドレス
 +
のようにNVR500に登録すれば、DNSサーバとしてNVR500を使用することでlibunboundなしでも解決できると思います。
  
 
==pjsip.conf==
 
==pjsip.conf==
158行目: 199行目:
 
トランク設定ファイル(ここではpjsip_trunk_hikari-nvr.conf)を別ファイルにした場合には以下のようにincludeします。
 
トランク設定ファイル(ここではpjsip_trunk_hikari-nvr.conf)を別ファイルにした場合には以下のようにincludeします。
 
  #include "pjsip_trunk_hikari-nvr.conf"
 
  #include "pjsip_trunk_hikari-nvr.conf"
 +
 +
気付いている人もいるかもしれませんが、NVR500用の設定はサンプル設定ファイルにこっそり混ぜてあるRTX用のテンプレートと同じものです。そもそもやり方はRTXと同じです。
 
=Asterisk再起動と確認=
 
=Asterisk再起動と確認=
 
NVR500とAsteriskを設定したら再起動すればたぶん大丈夫なはずです。以下のようにREGISTERを確認します。
 
NVR500とAsteriskを設定したら再起動すればたぶん大丈夫なはずです。以下のようにREGISTERを確認します。
168行目: 211行目:
 
   
 
   
 
  Objects found: 1
 
  Objects found: 1
こんな感じでRegisterdになっていればOKです。
+
こんな感じでRegisterdになっていればOKです。<br>
 +
<br>
 +
何をやったかというと、こういうことで
 +
ひかり電話 =====[ONU]-----[NVR500]-----[Asterisk]
 +
                          NAT/SIP-NAT
 +
                      <--------------------
 +
NVR500のひかり電話機能を使わず、NATとSIP-NATを使ってLAN内のAsteriskをひかり電話のネットワークへ出した(IPv4)わけです。
 +
 
 
=発着信=
 
=発着信=
[[Asterisk_20_サンプル設定ファイル_解説|サンプル設定ファイル]] を使用している場合にはグローバル設定を変更するだけで発着信できると思います。
+
[[Asterisk_20_サンプル設定ファイル|サンプル設定ファイル]] を使用している場合にはグローバル設定を変更するだけで発着信できると思います。
 
  ;
 
  ;
 
  ; グローバル設定(変数類)
 
  ; グローバル設定(変数類)
188行目: 238行目:
 
=謎&お悩み=
 
=謎&お悩み=
 
ちょっと懸念していることがあります。それはヤマハのSIP-UAが「どこ」に居るのかです。<br>
 
ちょっと懸念していることがあります。それはヤマハのSIP-UAが「どこ」に居るのかです。<br>
NGNを使うに設定していると、NVR500内のSIP-UA、要はボイスのUAが応答するのでアナログポートの電話が鳴ります。要はNGNオンの状態だとNVR500が網に対してREGISTERしています。<br>
+
NGNを使うに設定していると、NVR500内のSIP-UA、ボイスのUAが応答するのでアナログポートの電話が鳴ります。要はNGNオンの状態だとNVR500が網に対してREGISTERしています。<br>
 
ところがNGNをオフに設定、NVR500を再起動した場合に、過去、網に対して行ったREGISTERが生きているようで(網が覚えている)、NGNオフであっても着信でき、電話が鳴るという現象が観測されました。たぶんこういうことです。
 
ところがNGNをオフに設定、NVR500を再起動した場合に、過去、網に対して行ったREGISTERが生きているようで(網が覚えている)、NGNオフであっても着信でき、電話が鳴るという現象が観測されました。たぶんこういうことです。
 
   
 
   
205行目: 255行目:
 
今回の設定ではSIP-NATを使って外からの呼制御(5060)は内側のAsteriskに飛ばしています。ではその時、SIP-UAはどこに居るのか?です。NATデスクリプタの後ろに居て、明示的に設定されたデスクリプタ外で存在しているのならば問題はありません。今のところこの動作はうまくいっているようなので(Asteriskに飛ぶ)、目論見通りSIP-NATでAsteriskが使えていますが、SIP-UAは'A'の位置で制御をガメることはないのかが気になっています。時間経過で様子見していますが、今のところは大丈夫そうなのですが、SIPを使いつつ、ひかり電話の機能だけオフにするという設定がない(NGNオフだけども)のでちょっと気になっています。おかしな挙動を発見した場合には教えてください。<br>
 
今回の設定ではSIP-NATを使って外からの呼制御(5060)は内側のAsteriskに飛ばしています。ではその時、SIP-UAはどこに居るのか?です。NATデスクリプタの後ろに居て、明示的に設定されたデスクリプタ外で存在しているのならば問題はありません。今のところこの動作はうまくいっているようなので(Asteriskに飛ぶ)、目論見通りSIP-NATでAsteriskが使えていますが、SIP-UAは'A'の位置で制御をガメることはないのかが気になっています。時間経過で様子見していますが、今のところは大丈夫そうなのですが、SIPを使いつつ、ひかり電話の機能だけオフにするという設定がない(NGNオフだけども)のでちょっと気になっています。おかしな挙動を発見した場合には教えてください。<br>
 
おそらくsip use offにすれば完全にオフになるのですが、今回はアナログポートをATA代わりに使いたいのでオフにできないのです。アナログポートを持たないRTX等であればそれでもかまわないのですが、NVR500にはアナログ付いてますから単にルータとして使うのはもったいないじゃないですか。
 
おそらくsip use offにすれば完全にオフになるのですが、今回はアナログポートをATA代わりに使いたいのでオフにできないのです。アナログポートを持たないRTX等であればそれでもかまわないのですが、NVR500にはアナログ付いてますから単にルータとして使うのはもったいないじゃないですか。
 +
 
=アナログポートを使う=
 
=アナログポートを使う=
 
触ったのが久々すぎて設定がさっぱりわかりません。設定例がありました![[YAMAHA RT57i]] いや~助かります。誰だよこれ書いてくれたの。<br>
 
触ったのが久々すぎて設定がさっぱりわかりません。設定例がありました![[YAMAHA RT57i]] いや~助かります。誰だよこれ書いてくれたの。<br>
212行目: 263行目:
 
  inbound_auth/password = c1a0e843d15fb8c9c6067fc099a302d5
 
  inbound_auth/password = c1a0e843d15fb8c9c6067fc099a302d5
 
  aor/qualify_frequency = 0
 
  aor/qualify_frequency = 0
各ポート毎に1エンドポイントになるので、それぞれ設定してください。<br>
+
NVR500の各FXSポート毎に1エンドポイントになるので、それぞれ設定してください。<br>
細かいところはまだ設定を十分にみていませんが、以下のような設定でアナログでの発着信ができます。
+
細かいところはまだ設定を十分にみていませんが、以下のような設定でAsteriskの内線としてアナログでの発着信ができます。なお、サンプル設定ファイルを使っている場合には内線番号はAsterisk側で設定することをお忘れなく。
 
  analog supplementary-service pseudo call-waiting
 
  analog supplementary-service pseudo call-waiting
 
  analog extension dial prefix port=1 sip server=20001
 
  analog extension dial prefix port=1 sip server=20001
220行目: 271行目:
 
あたりまえですがユーザ名(エンドポイント名)やパスワード、IPアドレスは自分の環境にあわせて書いてください。<br>
 
あたりまえですがユーザ名(エンドポイント名)やパスワード、IPアドレスは自分の環境にあわせて書いてください。<br>
 
※これだけだと、たぶんナンバーディスプレイとかでトラブるかも。うちにナンバーディスプレイ付のデバッグ用電話機がないもんで・・・<br>
 
※これだけだと、たぶんナンバーディスプレイとかでトラブるかも。うちにナンバーディスプレイ付のデバッグ用電話機がないもんで・・・<br>
※RT57iと同様にFXOポートはAsteriskから使えないと思います
+
※RT57iと同様にFXOポートはAsteriskから使えないと思います<br>
 +
<br>
 +
設定が完了している状態では
 +
*CLI> pjsip show contacts
 +
 +
  Contact:  <Aor/ContactUri..............................> <Hash....> <Status> <RTT(ms)..>
 +
==========================================================================================
 +
 +
  Contact:  hikari-nvr/sip:118.xxx.xxx.xxx                327f198732 NonQual        nan
 +
  Contact:  phone1/sip:phone1@192.168.200.240:50803;rinsta 8be6a609b0 Avail        11.260
 +
  Contact:  phone4/sip:phone4@192.168.200.1:5060          e8f6c69c7f NonQual        nan
 +
 
 +
こんな感じでPJSIPのcontactsに各エンドポイントが表示されるはずです。hikari-nvrがトランク、phone1は普通の電話機(ソフトフォン)、phone4がNVR500のアナログポート1です。
 +
 
 +
=そんなこんなで=
 +
この接続方法には前日談があります。[https://note.com/tsq/n/n54ffb5edf451 たかはしのnote] に書いてありますので詳しい話はそちらで。<br>
 +
もともとRTX+Asteriskでやってたのですが、NVR500を使っている人も少なくないのでは?というのとNVR500のアナログ(FXS)ポートが活用できるはずということで試してみたわけです。

2024年11月13日 (水) 17:35時点における最新版


AsteriskとNVR500を組み合わせて、ひかり電話で使おうという計画。

大前提の注意!

・このページではAsterisk、ヤマハ NVR500、ひかり電話を組み合わせます
・いずれもメーカー/ベンダー/キャリアに問い合わせてはいけません
・接続する技術的な観点のみで書いています
・契約上の問題、接続承認等は各自で行ってください
・何を言ってるのかわからない人はやってはいけません

条件

Asterisk 20.x.x、libunbound付でコンパイル。ベースはDebian。
Asteriskの設定ファイルのベースは Asterisk_20_サンプル設定ファイル
NVR500 Rev.11.00.43

参考

NVR500でなくともRTXシリーズでSIP-NATが使える機種ならば同様の設定でひかり電話に収容してAsteriskが動作できます。
ただしRTX系はアナログポートを持たないのでAsteriskのATA代わりに使用することはできません。

目論見

そもそもNVR500は、ひかり電話に対応しているので挿すだけで(いやまあ設定は要るけど)、別途VoIPアダプタを使わなくてもアナログ電話が使えますし何ならISDN(サ終だけど)もつながるので家庭やスモールビジネスならそのままで十分なんであえて変な使い方をしないでしょうよという長ったらしい説明はあるのですが、Asteriskユーザとしては面白くないです。
そこで以下のような目論見で接続します。

 ===光回線===[ONU]---[NVR500]---LAN---[Asterisk]
                         |       |
                         |       +----[IP Phone]
                         |
                         +--analog---[phone/fax]

そんなんで出来るやろ!と思われるかもしれませんが、実は普通にはできません。
・そもそもAsteriskはNVR500の内線にはなれません
・NVR500の内線としてIP電話機を接続できません
・NVR500のアナログポートはAsteriskの内線(SIPエンドポイント)になれます
いったいどういうことかというと、NVR500は外部のSIPサーバに対してREGISTERする能力はありますが、自身がSIPサーバのように内線をIPで収容するふるまいは持っていないということです。ただヤマハのIP内線機能があるのですが、これはSIPではありません。以前調べた範囲ではMGCPを使ってたと判断できたのですが、今はどうなっているかわかりません。
そこで今回の目論見では呼制御はAsteriskに全て任せます。その上でNVR500のアナログポートをAsteriskの内線として収容します。要するにATAとして使おうという話です。こうすれば物理FAXをAsteriskに収容することもできますし、黒電話機をAsteriskで使うこともできます。

   <<******************|NAT|*********ひかり電話 
 ===光回線===[ONU]---[NVR500]---LAN---[Asterisk]
                         |       |
                         |       | 内線****>>
                         |       +----[IP Phone]内線
                         |
                         |  Asteriskの内線(ATAとして動作)
                         +--analog---[phone/fax]

NVR500はいい加減古いのですが、この使い方ならAsteriskを活用できそうですし、市場では中古で安いのが出回っているのでAsteriskで遊びたい向きには最適です。この先、アナログ搭載の新製品は出なさそうな気もしますし。おそらくですがNVR510も同じ方法で使えると思います。
余談ですが中古でNVR500買った方が新品のATA買うより安いし、DP対応してるしでATA買うよりこっちの方がいいんじゃ?
※もしかしてNVR500をB2BUAみたいに使う手段ってあります?知ってる人がいたら教えてください。

最終的にこういう接続になります。

===光回線===[ONU]---[NVR500]-----[Asterisk Server]
                   LAN2
               <**PPPoE**>NAT(masquarade)  Internet
               <**DHCP**>NAT/SIP-NAT ひかり電話

Asteriskが入っているサーバはインターネット接続も、ひかり電話接続もNVR500に対して投げる/受けるかたちとなります。

ひかり電話情報の取得

あらかじめ注意しておきますが、NVR500の設定類はコマンドで行っています。GUIからもできるかもしれませんがGUIの解説はしません。
ISP接続の部分は、この説明では気にしていません。通常はPPPoE(とIPoE)で繋がっているはずなので、WAN(LAN2)インタフェースで以下に示すような設定を行っても影響は与えないはずです。

まずNGNオン、LAN2をDHCPでIPアドレス取得にします。この状態でアナログポートは、ひかり電話の電話機として動くはずです。ようするにひかり電話契約アリの設定と同じはずです。

# ngn type lan2 ntt
# ip lan2 address dhcp

一旦、NVR500を再起動してからDHCPの状態を確認します。

# show status dhcpc

以下のような情報が表示されるはずです。

Interface: LAN2 primary
            IP address: 自分のIPアドレス/30(おそらく通常は/30マスク)
           DHCP server: DHCPサーバのIPアドレス
       Remaining lease: 3hours 59min. 56secs.
      (type) Client ID: (01) クライアントID
         SIP Server[1]: SIPサーバのIPアドレス
       Vender Specific: 210
           MAC address: MACアドレス
            Tel number: 03xxxxxxxx(自分の電話番号)
            SIP domain: SIPドメイン
            HGW server: [ここは気にする必要なし]
       Static Route[1]: ネットワークとサブネットマスク gateway ゲートウェイ
Common information
       Default gateway: デフォルトゲートウェイ

これをメモかキャプチャして保存しておいてください。Asteriskの設定で必要になります。
この情報、要するにひかり電話端末に対するプロビジョン情報で機器類(まあAsteriskとか)の再起動毎に取得が必要なのかと思ってましたが、そんなことはなく基本的に変わらないようなので自動化しない方針にします。なのでもし発着信ができないような状態になった場合には再度この手順を行って設定情報を確認してください。
情報が取得できたらNGNを使わないに設定してNVRを再起動します。

# ngn type lan2 off

NVR500の設定

以下の前提でNVR500を設定します。
・NGN機能は使わない
・ヤマハのSIP-NATを使う
・AsteriskサーバのIPアドレスは固定(例示では192.168.200.250とします)
・NVR500はSIP-NATルータとしてだけふるまい呼制御には関わらない(はず)

LAN2(WAN)の設定

# ip lan2 address dhcp
# ip lan2 rip send off
# ip lan2 rip receive off
# ip lan2 nat descriptor 2000
# ngn type lan2 off

LAN2のアドレスはDHCPで取得し、RIPは送受信とも禁止。LAN2はNATを使用し、その番号は2000。LAN2でNGN機能は使用しない。

経路情報の設定

ひかり電話への経路情報を設定します。先ほどメモした情報を元に以下のように設定します。

# ip route ネットワークとサブネットマスク gateway ゲートウェイ

ISP接続がある場合、そちらがデフォルトルートとして使用されるので、ひかり電話のネットワークへの経路を明示(静的)指定する必要があります。
AsteriskはNVR500をデフォルトルート(インターネット接続等にも)として使用しているのならば、電話のトラフィックもNVR500に投げるので、NVR500内部で経路が振り分けられるため、Asteriskサーバ側で経路を意識する必要がなくなります。

NAT(マスカレード設定)

# nat descriptor type 2000 masquerade
# nat descriptor address outer 2000 primary
# nat descriptor sip 2000 on
# nat descriptor masquerade static 2000 1 192.168.200.250 udp 5060
# nat descriptor masquerade static 2000 2 192.168.200.250 udp 10000-11000

ちょっと注意が必要な点として、ヤマハのSIP-NATはポート5060にしか効かない点です(Asteriskで5060のトランスポートを用意する必要がある)。このNATデスクリプタではSIP-NATを使用し、静的NATでSIP(5060)とRTP(UDP10000-11000)はLAN側のAsterisk(192.168.200.250)へ飛ばすようにしています。RTPはAsteriskのrtp.confで指定した範囲を設定します。

SIP設定

SIPは使うに設定します。アナログポート関連の設定は後で。

# sip use on

セキュリティ関連情報

ここで解説している設定でAsteriskはNVR500の『後ろ』にあるものとしています。インターネット接続もNAT(マスカレード)で接続しているものとしています。グローバルIPアドレスを固定し、Asteriskをインターネット側に出しているような場合には以下の点に注意してください。

  • ヤマハのSIP-NATは5060ポート固定のため5060番のトランスポートを開けています
  • Asteriskが5060を「開けて」いるため固定IP(グローバル)で外に出していると外から5060が見えます
  • 5060を外から使用しない場合にはPPに対して5060ブロックフィルタを用いてください

通常のインターネット接続でNATを使用している場合、AsteriskはPPのNATビハインドにあるので通常は注意する必要はありません。ですが、外->内に対して5060を静的マスカレードしている場合にはSIPに対するセキュリティを施してください。もっともこの構成を従前から使用している場合には対策済みかと思います。
LAN2のDHCPで取得したIPアドレスは、ひかり電話のIPアドレスのため、このアドレスに到達できるのは、ひかり電話からだけです。このため、それ以外の外(インターネット等)からは到達できませんので通常は対策不要のはずです。PPのアドレスとLAN2のDHCPアドレスは関係ありません(関係しないので明示的に経路を設定しました)。

Asterisk(PJSIP)の設定

トランクの設定ファイルは1ファイルとし、pjsip_trunk_hikari-nvr.confとしています。各セクションは以下のように書きます。
注意点としてAsteriskはlibunbound付でコンパイルするか、ローカルDNSの解決能力を持たせてください。いわゆるntt-ほげドメインの解決が必要になります。ここではlibunbound付として設定しています。

トランスポート

5060用のトランスポートを書きますが他に5060のトランスポートがある場合にはそれを利用してもかまいません。

[hikari-tp]
type = transport
protocol = udp
bind = 0.0.0.0:5060
local_net = 192.168.0.0/16

AOR

AORの指定で、Qualifyはしてはいけません

[hikari-nvr]
type = aor
contact = sip:取得したSIPサーバのアドレス

IDENTIFY

identifyはIPアドレスだけなのでシンプルです。

[hikari-nvr]
type = identify
endpoint = hikari-nvr
match = 取得したSIPサーバのアドレス

REGISTER

認証情報は不要なので単にREGISTERするだけです。

[hikari-nvr]
type = registration
contact_user = 自分の電話番号
transport = hikari-tp
expiration = 3600
fatal_retry_interval = 60
forbidden_retry_interval = 60
server_uri = sip:取得したSIPドメイン
client_uri = sip:自分の電話番号@取得したSIPドメイン

ENDPOINT

endpointではSIP 5060のトランスポートを明示指定します。contextは着信用(incoming)にしてあります。DTMFモードはinbandです。認証情報が無いのでこちらもシンプルです。

[hikari-nvr]
type = endpoint
transport = hikari-tp
context = incoming
dtmf_mode = inband
language = ja
disallow = all
allow = ulaw
rtp_symmetric = no
force_rport = no
rewrite_contact = no
direct_media = no
send_pai = yes
tos_audio = 0xb8
from_user = 自分の電話番号
from_domain = 取得したSIPドメイン
aors = hikari-nvr

/etc/hosts

Asteriskの設定ファイルではありませんが、名前解決に使用します。libunbound付の場合には/etc/hostsに以下のようなエントリを書きます。

取得したSIPサーバのIPアドレス  取得したSIPドメイン

インターネット接続にNVR500を使用し、NVR500をDNSサーバとして使っている場合(まあこの場合が多いのでしょうが)にはNVR500にDNSエントリとして登録すればlinunboundなしでも使えると思います。例えば

dns static a 取得したドメイン SIPサーバのIPアドレス

のようにNVR500に登録すれば、DNSサーバとしてNVR500を使用することでlibunboundなしでも解決できると思います。

pjsip.conf

まずrportの設定を確認してください。

[system]
type = system
disable_rport = yes

disable_rport = yes が必要です。
次にACLを設定します。

[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/16
permit=取得したネットワークアドレス/取得したサブネットマスク

トランク設定ファイル(ここではpjsip_trunk_hikari-nvr.conf)を別ファイルにした場合には以下のようにincludeします。

#include "pjsip_trunk_hikari-nvr.conf"

気付いている人もいるかもしれませんが、NVR500用の設定はサンプル設定ファイルにこっそり混ぜてあるRTX用のテンプレートと同じものです。そもそもやり方はRTXと同じです。

Asterisk再起動と確認

NVR500とAsteriskを設定したら再起動すればたぶん大丈夫なはずです。以下のようにREGISTERを確認します。

*CLI> pjsip show registrations

 <Registration/ServerURI..............................>  <Auth....................>  <Status.......>
==========================================================================================

hikari-nvr/sip:ntt-east.ne.jp                           n/a                         Registered        (exp. 2594s)

Objects found: 1

こんな感じでRegisterdになっていればOKです。

何をやったかというと、こういうことで

ひかり電話 =====[ONU]-----[NVR500]-----[Asterisk]
                         NAT/SIP-NAT
                     <--------------------

NVR500のひかり電話機能を使わず、NATとSIP-NATを使ってLAN内のAsteriskをひかり電話のネットワークへ出した(IPv4)わけです。

発着信

サンプル設定ファイル を使用している場合にはグローバル設定を変更するだけで発着信できると思います。

;
; グローバル設定(変数類)
;
[globals]
;外線発信時の自局番号
MYNUMBER=自分の電話番号
;外線発信時のトランク名
MYTRUNK=hikari-nvr
;PPIセット時のドメイン
PPIDOMAIN=取得したSIPドメイン
;外線着信させる内線番号(カンマ区切り)
RINGPHONES=201,202

CIDとか落ち番がおかしい場合は連絡ください。考えますので。
サンプル設定ファイルを使用していない場合には、サンプル設定ファイルを参考にしてください。着信は自局番号に対する番号で落ちてきます。発信時は自局番号をPPIに設定する必要があります。

謎&お悩み

ちょっと懸念していることがあります。それはヤマハのSIP-UAが「どこ」に居るのかです。
NGNを使うに設定していると、NVR500内のSIP-UA、ボイスのUAが応答するのでアナログポートの電話が鳴ります。要はNGNオンの状態だとNVR500が網に対してREGISTERしています。
ところがNGNをオフに設定、NVR500を再起動した場合に、過去、網に対して行ったREGISTERが生きているようで(網が覚えている)、NGNオフであっても着信でき、電話が鳴るという現象が観測されました。たぶんこういうことです。

            [N V R 5 0 0 ]
 網 ========[ Router     ]
    INVITE->[SIP-UA(音声)]

NGNをオフに設定しているとREGISTERは投げないものの、依然、SIPのUA(ボイス)はルータ内部に存在しているので、外からINVITEされると応答するということではないかと推察されます。ここでちょっと心配なのが次の状態

            [N V R 5 0 0   ] 5060
 網 ========[ Router   +-->]------>Asterisk
    INVITE->[A   NAT --+   ]
            [|             }
            [+ SIP-UA(音声)]

今回の設定ではSIP-NATを使って外からの呼制御(5060)は内側のAsteriskに飛ばしています。ではその時、SIP-UAはどこに居るのか?です。NATデスクリプタの後ろに居て、明示的に設定されたデスクリプタ外で存在しているのならば問題はありません。今のところこの動作はうまくいっているようなので(Asteriskに飛ぶ)、目論見通りSIP-NATでAsteriskが使えていますが、SIP-UAは'A'の位置で制御をガメることはないのかが気になっています。時間経過で様子見していますが、今のところは大丈夫そうなのですが、SIPを使いつつ、ひかり電話の機能だけオフにするという設定がない(NGNオフだけども)のでちょっと気になっています。おかしな挙動を発見した場合には教えてください。
おそらくsip use offにすれば完全にオフになるのですが、今回はアナログポートをATA代わりに使いたいのでオフにできないのです。アナログポートを持たないRTX等であればそれでもかまわないのですが、NVR500にはアナログ付いてますから単にルータとして使うのはもったいないじゃないですか。

アナログポートを使う

触ったのが久々すぎて設定がさっぱりわかりません。設定例がありました!YAMAHA RT57i いや~助かります。誰だよこれ書いてくれたの。
さて、そのページで追記してくださった方が書いているように、ヤマハのSIPはOPTIONSに応答しないので、そのまま収容しようとするとPJSIPのQualifyに引っ掛かって着信できなくなります。pjsip_wizardを使用している場合には以下の例のように、NVR500のアナログポートをREGISTERさせるエントリに対してはQualifyさせないようにします。

[phone4](phone-defaults)
inbound_auth/username = phone4
inbound_auth/password = c1a0e843d15fb8c9c6067fc099a302d5
aor/qualify_frequency = 0

NVR500の各FXSポート毎に1エンドポイントになるので、それぞれ設定してください。
細かいところはまだ設定を十分にみていませんが、以下のような設定でAsteriskの内線としてアナログでの発着信ができます。なお、サンプル設定ファイルを使っている場合には内線番号はAsterisk側で設定することをお忘れなく。

analog supplementary-service pseudo call-waiting
analog extension dial prefix port=1 sip server=20001
sip use on
sip server 20001 192.168.200.250:5070 register udp sip:phone4@192.168.200.250 phone4 c1a0e843d15fb8c9c6067fc099a302d5

あたりまえですがユーザ名(エンドポイント名)やパスワード、IPアドレスは自分の環境にあわせて書いてください。
※これだけだと、たぶんナンバーディスプレイとかでトラブるかも。うちにナンバーディスプレイ付のデバッグ用電話機がないもんで・・・
※RT57iと同様にFXOポートはAsteriskから使えないと思います

設定が完了している状態では

*CLI> pjsip show contacts

  Contact:  <Aor/ContactUri..............................> <Hash....> <Status> <RTT(ms)..>
==========================================================================================

  Contact:  hikari-nvr/sip:118.xxx.xxx.xxx                 327f198732 NonQual         nan
  Contact:  phone1/sip:phone1@192.168.200.240:50803;rinsta 8be6a609b0 Avail        11.260
  Contact:  phone4/sip:phone4@192.168.200.1:5060           e8f6c69c7f NonQual         nan 

こんな感じでPJSIPのcontactsに各エンドポイントが表示されるはずです。hikari-nvrがトランク、phone1は普通の電話機(ソフトフォン)、phone4がNVR500のアナログポート1です。

そんなこんなで

この接続方法には前日談があります。たかはしのnote に書いてありますので詳しい話はそちらで。
もともとRTX+Asteriskでやってたのですが、NVR500を使っている人も少なくないのでは?というのとNVR500のアナログ(FXS)ポートが活用できるはずということで試してみたわけです。