pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


OpenWrt 19.07 + asterisk でひかり電話ホームゲートウェイ経由の発着信を設定する

フレッツ光ひかり電話を契約している場合は、ひかり電話ホームゲートウェイと同一の内部ネットワークに接続しているスマートフォンに AGEPhone などの SIP アプリをインストールすることで固定電話の発着信が行えます。

しかしフレッツ光回線で DS-Lite による IPv4 接続を行う場合は、これができません。DS-Lite の場合はひかり電話ホームゲートウェイDS-Lite 対応のルータを接続し、そのルーターの内部ネットワーク側に PC やスマートフォンを収容します。しかしこの構成だと、ルーターの内部ネットワークからひかり電話ホームゲートウェイに接続する際に NAT が発生します。SIP は NAT を超えることが難しいため、このような構成の場合は SIP クライアントでひかり電話を利用できません。

そこで OpenWrt で構成した DS-Lite のルータに Asterisk を導入し、SIP の接続を中継する PBX を構成した際の設定をログとして残します。

前提の構成

以下の構成を前提に設定しました。

  • OpenWrt 19.07.x
  • OpenWrt の外部セグメントには WAN(IPv4 DHCP) と WAN6(IPv6 DHCP) を設定しておく

パッケージのインストール

OpenWrt 19.07.x では Asterisk 16 が利用できるので、今回の構成にあたり次のパッケージを追加しました。

libxml2
libcap
libedit
libsqlite3
jansson
asterisk16
asterisk16-cdr
asterisk16-chan-sip
asterisk16-pjsip
asterisk16-codec-ulaw
asterisk16-res-rtp-asterisk
asterisk16-codec-gsm
asterisk16-format-pcm
asterisk16-res-agi

基本的な挙動を内線通話で確認する

ベースとなる設定ファイルは、次のページで配布されている Asterisk 13 向けの設定を用います。

voip-info.jp

この設定ファイルには、内線番号 201 - 208 で相互に内線通話できる設定例が含まれています。また sip.conf では permit=192.168.0.0/255.255.0.0 が設定されているので、Asterisk は Class C Private IP address からの接続のみを受け入れるように設定されています。

そこで、この設定ファイルを適用し、2台のスマートフォンタブレットに AGEphone をインストールして相互に内線通話できることを確認しておきます。

AGEphone への設定は次のように行います。

ドメイン = OpenWrt の LAN 側 IPアドレス
ユーザID = 201 - 208 のいずれかの番号
認証ID = ユーザIDと同じ
パスワード = pass

ひかり電話ホームゲートウェイを使用する設定を追加する

Asterisk 経由で内線通話の発着信が行えることが確認できたら、ひかり電話ホームゲートウェイ経由で外線の発着信を行う設定を追加します。

これも基本的には「Asterisk 13 サンプル設定ファイル」で示されている例を参考に修正するだけの簡単な作業です。

voip-info.jp

ただし、この設定例を用いると、外線発信の際に 0 発信が必要となるため、たとえば 03-nnnn-nnnn の番号にかける際には 003-nnnn-nnnn とダイヤルしなければなりません。これはスマートフォンの電話帳に登録した番号にひかり電話でかけるときに面倒なので、0 で始まる市外局番はすべて 0 発信なしに掛けられるように設定変更します。

以下には作業記録をざっくりまとめました。

extensions.conf

  • MYNUMBER1 に はひかり電話の番号に変更する。

  • [defaults]exten => _0.,n,Dial(PJSIP/${EXTEN:1}@hikari-trunk)exten => _0.,n,Dial(PJSIP/${EXTEN}@hikari-trunk) に変更する。(0 で始まる番号はそのまま、ひかり電話でかけるようにする)

[from-hikari][from-hikari-hgw] に変更する(他の設定ファイルでも from-hikari-hgw と表記しているため)

pjsip.conf

sip.conf

  • [general] セクションに register => 7:password@hikari-hgw を記入する。

  • 次のセクションを追加する。(secret, username, fromuser, domain, host は適切に修正する)

[hikari-hgw]
context=from-hikari-hgw
type=peer
secret=XXXXXXXX
username=XXXN
fromuser=N
domain=192.168.X.1
fromdomain=192.168.X.1
host=192.168.x.1
insecure=port,invite
disallow=all
allow=ulaw
dtmfmode=inband
  • 201 から 208 の内線番号のパスワードは適切に変更する。