概要
フレッツ光ネクストで、ひかり電話オフィスやオフィスAを直接収容する記事は割と見かけるのですが、
OG配下で収容する記事が無かったので試してみました。
(1契約のひかり電話で、FAX用のアナログ回線使いながら、Asteriskで収容するとの需要はあると思うんだけど)
お決まりですが、At your own riskでお願いします。
前提
- Asterisk 16.2.1 + PJSIP
- 手元にサクッと準備出来る環境がこれだっただけ
- NTT西 光ネクスト + ひかり電話 オフィス
- OG410Xi 2.28
設定方法
ほぼ、ONU直結で直収するときと同じだけど、OG配下だとDHCPでひかり電話側のルート情報がもらえないみたいなので、そこだけポイント
OGの設定
この部分はどこまで細かく書いて良いかわからないのでさらっと
- 「電話設定」の「IP端末/GW収容設定」で、Asteriskが動作している機器のMACアドレスを設定し、適当なIPアドレスを割り当てる
※ 当然ながら、OGと接続しているI/FのMACアドレスを登録 - 「着信番号設定」などは必要に応じて行う
DHCPクライアントの設定
/etc/dhcp/dhclient.conf
option ip-sip-servers code 120 = { boolean, array of ip-address };
option vendor-class.ntt code 210 = string;
option space ntt code width 1 length width 1 hash size 7;
option ntt.mac code 201 = string;
option ntt.number code 202 = text;
option ntt.domain code 204 = domain-list;
option ntt.firmware code 210 = domain-list;
option vendor.ntt code 210 = encapsulate ntt;
# インターフェイス名は必要に応じて変更
interface "ethX" {
send dhcp-client-identifier = hardware;
request subnet-mask, routers, ip-sip-servers, rfc3442-classless-static-routes, vivso;
send vendor-class.ntt = concat(06, suffix(hardware, 6));
}
こんな感じで設定して、dhclientを立ち上げると必要な情報が取れる
※ インターフェイス名は必要に応じて変更
/var/lib/dhcp/dhclient.ethX.leases
lease {
interface "eth1";
fixed-address 192.168.52.109;
option subnet-mask 255.255.255.0;
option routers 192.168.52.254;
option dhcp-lease-time 14400;
option dhcp-message-type 5;
option domain-name-servers 192.168.52.254;
option dhcp-server-identifier 192.168.52.254;
option ip-sip-servers true 192.168.52.254;
option dhcp-renewal-time 7200;
option dhcp-rebinding-time 12600;
option vivso 0:0:0:.....:0;
option vendor.ntt c9:.....:0;
option ntt.domain "ntt-west.ne.jp.";
option ntt.mac xx:xx:xx:be:ef:c5;
option ntt.number "054xxxxxxx";
renew 4 2021/06/10 11:47:50;
rebind 4 2021/06/10 13:31:20;
expire 4 2021/06/10 14:01:20;
}
/etc/hosts.
# routers # ntt.domain
192.168.52.254 ntt-west.ne.jp
ちなみに、OG配下でやろうとすると、ひかり電話側の経路情報が取れなくて、RTPが流れないので、デフォルトゲートウェイをOGに向けるのが楽
細かくやるなら、一度 通話してAsteriskで見えているRTPの送信先IPアドレスをOGに向ける
Asteriskの設定
pjsip.conf
[global]
type = global
debug = no
[system]
type = system
disable_rport = yes ;via headerにrportが入らないよう必須
[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0
[reg_HIKARI-DENWA]
type = registration
contact_user = 054xxxxxxx ;電話番号(=DHCPで取得したntt.number)
transport = transport-udp
client_uri = sip:054xxxxxxx@ntt-west.ne.jp ;"電話番号@DHCPで取得したntt.domain"である必要がある
server_uri = sip:ntt-west.ne.jp ;DHCPで取得したntt.domain"である必要がある
[HIKARI-DENWA]
type = aor
contact = sip:192.168.52.254 ;DHCPで取得したip-sip-servers
[HIKARI-DENWA]
type = identify
endpoint = HIKARI-DENWA
match = 192.168.52.254 ;DHCPで取得したip-sip-servers
[HIKARI-DENWA]
type = endpoint
context = incomming ;extension.conf
disallow = all
allow = ulaw
rtp_symmetric = no ;via headerにrportが入らないよう必須
force_rport = no ;via headerにrportが入らないよう必須
rewrite_contact = no ;via headerにrportが入らないよう必須
direct_media = no ;RTPをAsteriskで中継するため必要
from_domain = ntt-west.ne.jp ;DHCPで取得したntt.domain"である必要がある
aors = HIKARI-DENWA
extensions.conf
[incomming]
# ひかり電話では、追加番号の着信も契約番号向けにINVITEされるので、Toヘッダから着信先を取得
exten => _X.,1,Set(TO_DIAL=${PJSIP_HEADER(read,To):5})
exten => _X.,2,Set(TO_DIAL=${CUT(TO_DIAL,@,1)})
exten => _X.,3,Goto(fromHikari,${TO_DIAL},1)
[fromHikari]
exten => _X.,1,Dial(PJSIP/phoneXXX)
[hikari]
exten => _X.,1,Dial(PJSIP/${EXTEN}@HIKARI-DENWA)
参考にさせて頂いた記事
ほぼ丸写しで申し訳ないぐらいですが・・・
- NTT光ネクストのひかり電話へAsteriskを直接接続する - @kmorimoto さん
- 利用者:Pin ptrさん - VoIp-Info.jp