「利用者:Pin ptr」の版間の差分
(ページの作成:「Ubuntuでひかり電話を直収するのに試したことメモ。 == DHCP == Ubuntu 16.04 Serverのisc-dhcp-clientにはclassless-static-routeのサポートが...」) |
(→おまけ:IPv6) |
||
(同じ利用者による、間の14版が非表示) | |||
1行目: | 1行目: | ||
+ | == Asteriskのインストール == | ||
+ | |||
+ | Ubuntu 16.04のAsteriskは壊れていて面倒そうなので使わない。 https://bugs.launchpad.net/ubuntu/+source/asterisk/+bug/1314058 | ||
+ | |||
+ | install_prereqはX関連のアレコレが入るので使わない。 | ||
+ | |||
+ | <nowiki>$ sudo apt install build-essential libncurses-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev libssl-dev | ||
+ | $ tar xvf asterisk-13.14.0.tar.gz | ||
+ | $ cd asterisk-13.14.0 | ||
+ | $ ./configure --with-pjproject-bundled --prefix=/usr/local | ||
+ | $ make menuconfig # CORE-SOUNDS-JA-GSM | ||
+ | $ make | ||
+ | $ sudo make isntall | ||
+ | $ sudo make config | ||
+ | $ sudo make samples | ||
+ | $ sudo make install-logrotate</nowiki> | ||
+ | |||
+ | * /etc/default/asteriskのALTCONFを/usr/local/etc/asterisk/asterisk.confに変えたり… | ||
+ | * ログが /usr/local/var/lib/log に出力されるので、適当に移動したり… | ||
+ | |||
+ | == ひかり電話直収 == | ||
+ | |||
Ubuntuでひかり電話を直収するのに試したことメモ。 | Ubuntuでひかり電話を直収するのに試したことメモ。 | ||
− | == DHCP == | + | === 接続 === |
+ | |||
+ | <nowiki>NTT東日本| -------- |壁| -- |VDSLモデム| -- |Raspberry Pi3| -- |KX-UT123N|</nowiki> | ||
+ | |||
+ | === DHCP === | ||
Ubuntu 16.04 Serverのisc-dhcp-clientにはclassless-static-routeのサポートが入っている。 | Ubuntu 16.04 Serverのisc-dhcp-clientにはclassless-static-routeのサポートが入っている。 | ||
13行目: | 39行目: | ||
* /etc/dhcp/dhclient.conf | * /etc/dhcp/dhclient.conf | ||
− | <nowiki># | + | <nowiki># 既存の dhclient.conf に追加する |
option ip-sip-servers code 120 = { boolean, array of ip-address }; | option ip-sip-servers code 120 = { boolean, array of ip-address }; | ||
− | option vendor-class.ntt | + | option vendor-class.ntt code 210 = string; |
− | option space ntt code width 1 length width 1 hash size | + | option space ntt code width 1 length width 1 hash size 7; |
option ntt.mac code 201 = string; | option ntt.mac code 201 = string; | ||
option ntt.number code 202 = text; | option ntt.number code 202 = text; | ||
26行目: | 52行目: | ||
interface "eth0" { | interface "eth0" { | ||
− | + | 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)); | send vendor-class.ntt = concat(06, suffix(hardware, 6)); | ||
}</nowiki> | }</nowiki> | ||
33行目: | 59行目: | ||
うまくいくと、dhclient.eth0.leases に設定が入っているのが確認できる。 | うまくいくと、dhclient.eth0.leases に設定が入っているのが確認できる。 | ||
− | == | + | === ntt.conf === |
− | + | dhclientが起動するスクリプトからasteriskの設定を作る。 | |
− | |||
− | <nowiki>$ | + | * /etc/dhcp/dhclient-exit-hooks.d/sip-configuration |
− | $ | + | <nowiki>if [ "eth0" = "$interface" ]; then |
− | $ | + | case $reason in |
− | $ | + | BOUND|RENEW|REBIND|REBOOT) |
− | $ | + | domain=$(echo "$new_ntt_domain" | sed -e 's/[.]$//') |
− | $ | + | number="$new_ntt_number" |
− | $ | + | is_ip=$(echo "$new_ip_sip_servers" | awk '{ print $1; }') |
− | $ | + | server=$(echo "$new_ip_sip_servers" | awk '{ print $2; }') |
− | $ | ||
− | $ | ||
− | + | if [ -n "$domain" ] && [ -n "$number" ] && [ "$is_ip" = 'true' ] && [ -n "$server" ]; then | |
− | + | cat /etc/asterisk/ntt.conf.up | \ | |
+ | sed \ | ||
+ | -e "s/DOMAIN/$domain/g" \ | ||
+ | -e "s/NUMBER/$number/g" \ | ||
+ | -e "s/SERVER/$server/g" \ | ||
+ | > /usr/local/etc/asterisk/ntt.conf | ||
+ | service asterisk reload | ||
+ | fi | ||
+ | ;; | ||
− | + | EXPIRE|FAIL|RELEASE|STOP) | |
− | + | cp /etc/asterisk/ntt.conf.down /usr/local/etc/asterisk/ntt.conf | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
service asterisk reload | service asterisk reload | ||
− | + | ;; | |
− | + | esac | |
− | + | fi</nowiki> | |
− | |||
− | |||
− | |||
− | |||
− | |||
* /etc/asterisk/ntt.conf.up | * /etc/asterisk/ntt.conf.up | ||
87行目: | 97行目: | ||
host=SERVER | host=SERVER | ||
context=fromntt | context=fromntt | ||
− | |||
fromdomain=DOMAIN</nowiki> | fromdomain=DOMAIN</nowiki> | ||
94行目: | 103行目: | ||
* sip.conf | * sip.conf | ||
− | <nowiki>(略) | + | <nowiki>[general] |
− | #include <ntt.conf></nowiki> | + | (略) |
+ | #include <ntt.conf> | ||
+ | |||
+ | [201] | ||
+ | (略)</nowiki> | ||
+ | |||
+ | === 結果 === | ||
+ | |||
+ | <nowiki>eri*CLI> sip show registry | ||
+ | Host dnsmgr Username Refresh State Reg.Time | ||
+ | xxx.xxx.xxx.x:5060 N 0xxxxxxxxx@n 3585 Registered Tue, 04 Apr 2017 04:55:15 | ||
+ | 1 SIP registrations.</nowiki> | ||
+ | |||
+ | === おまけ:IPv6 === | ||
+ | |||
+ | 116に電話したらRAにprefixが含まれなくなった。タイプ2に移行されたらしい。タイプ2ではDHCPv6-PDが使えるようになる。 | ||
+ | |||
+ | client-idは -D LL を指定してdhclientを起動していればいらないと思いきや、うっかりleaseファイルからDUID-LLTを読んでしまうと困るので書いておく。 | ||
+ | |||
+ | * dhclient.conf | ||
+ | |||
+ | <nowiki> | ||
+ | option space my-vsio code width 4 length width 2 hash size 3; | ||
+ | option my-vsio.ntt6 code 210 = string; | ||
+ | option dhcp6.my-vendor-opts code 16 = encapsulate my-vsio; | ||
+ | |||
+ | option space ntt6 code width 2 length width 2 hash size 7; | ||
+ | option ntt6.mac code 201 = string; | ||
+ | option ntt6.number code 202 = text; | ||
+ | option ntt6.domain code 204 = domain-list; | ||
+ | option ntt6.firmware code 210 = domain-list; | ||
+ | option vsio.ntt6 code 210 = encapsulate ntt6; | ||
+ | |||
+ | interface "eth0" { | ||
+ | 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)); | ||
+ | |||
+ | send dhcp6.client-id = concat(00:03:00, hardware); | ||
+ | also request dhcp6.name-servers, dhcp6.domain-search, dhcp6.sntp-servers, dhcp6.sip-servers-addresses, dhcp6.vendor-opts; | ||
+ | send my-vsio.ntt6 = suffix(hardware, 6); | ||
+ | }</nowiki> | ||
+ | |||
+ | * /etc/network/interfaces | ||
+ | <nowiki> | ||
+ | iface eth0 inet6 manual | ||
+ | # (upでip -6 address show dev eth0 の結果がtentativeでなくなるのを待って) | ||
+ | # (upでNGNの経路を足す) | ||
+ | up /sbin/dhclient -1 -6 -P -D LL -pf /run/dhclient6.eth0.pid -lf /var/lib/dhcp/dhclient6.eth0.leases -I -df /var/lib/dhcp/dhclient.eth0.leases eth0 | ||
+ | pre-down /sbin/dhclient -r -pf /run/dhclient6.eth0.pid eth0</nowiki> | ||
+ | |||
+ | うまくいくと /var/lib/dhcp/dhclient6.eth0.leases にIPv4のものと同等の情報が入る。 | ||
+ | |||
+ | IPv6のSIPサーバは REGISTER にも OPTIONS にも応答しない。技術参考資料に | ||
+ | 登録時にはIPv4を用いてSIP信号の送受信を行ってください。 | ||
+ | とある通り、 | ||
+ | <nowiki> | ||
+ | REGISTER sip:ntt-east.ne.jp SIP/2.0 | ||
+ | (略) | ||
+ | Contact: <sip:XXXXXXXXXXXX@XXX.XXX.XXX.XXX:5060> | ||
+ | Contact: <sip:XXXXXXXXXXXX@[2408:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]:5060></nowiki> | ||
+ | のような Contact の2個ついた REGISTER を送りつければいいようだけど、 Asterisk でこれはできないですね。 | ||
+ | |||
+ | == OCNドットフォン == | ||
+ | |||
+ | 月額300円(税抜き)必要かと思いきや、OCNマイページに月額無料プランが隠されている。 | ||
+ | 年に一度でもナビダイヤルにかけることがあればユニバーサルサービス料の元は取れるはず。 | ||
+ | |||
+ | * sip.conf | ||
+ | <nowiki> | ||
+ | register => 050XXXXXXXX@ocn.ne.jp:XXXPASSWORDXXX:XXXUSERNAMEXXX@voip-XXXXXX.ocn.ne.jp/050XXXXXXXX | ||
+ | |||
+ | [ocn] | ||
+ | defaultuser=XXXUSERNAMEXXX | ||
+ | remotesecret=XXXPASSWORDXXX | ||
+ | type=peer | ||
+ | context=from-ocn | ||
+ | host=voip-XXXXXX.ocn.ne.jp | ||
+ | fromuser=050XXXXXXXX | ||
+ | fromdomain=ocn.ne.jp</nowiki> | ||
+ | |||
+ | * extensions.conf | ||
+ | <nowiki> | ||
+ | [select-itsp] | ||
+ | exten => _0033.,1,Goto(call-ocn,${EXTEN:4},1) | ||
+ | exten => _0036.,1,Goto(call-ntt,${EXTEN:4},1) | ||
+ | |||
+ | exten => _11X,1,Goto(call-ntt,${EXTEN},1) | ||
+ | exten => _050.,1,Goto(call-ocn,${EXTEN},1) | ||
+ | exten => _0570.,1,Goto(call-ocn,${EXTEN},1) | ||
+ | exten => _X.,1,Goto(call-ntt,${EXTEN},1)</nowiki> | ||
+ | |||
+ | たぶん意図した通りに動いていると思う。 |
2017年11月18日 (土) 06:55時点における最新版
Asteriskのインストール
Ubuntu 16.04のAsteriskは壊れていて面倒そうなので使わない。 https://bugs.launchpad.net/ubuntu/+source/asterisk/+bug/1314058
install_prereqはX関連のアレコレが入るので使わない。
$ sudo apt install build-essential libncurses-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev libssl-dev $ tar xvf asterisk-13.14.0.tar.gz $ cd asterisk-13.14.0 $ ./configure --with-pjproject-bundled --prefix=/usr/local $ make menuconfig # CORE-SOUNDS-JA-GSM $ make $ sudo make isntall $ sudo make config $ sudo make samples $ sudo make install-logrotate
- /etc/default/asteriskのALTCONFを/usr/local/etc/asterisk/asterisk.confに変えたり…
- ログが /usr/local/var/lib/log に出力されるので、適当に移動したり…
ひかり電話直収
Ubuntuでひかり電話を直収するのに試したことメモ。
接続
NTT東日本| -------- |壁| -- |VDSLモデム| -- |Raspberry Pi3| -- |KX-UT123N|
DHCP
Ubuntu 16.04 Serverのisc-dhcp-clientにはclassless-static-routeのサポートが入っている。 また、dhclient.confで新たなオプションを定義できるので、再コンパイルせずに使う。
- /etc/network/interface
auto eth0 iface eth0 inet dhcp
- /etc/dhcp/dhclient.conf
# 既存の 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 "eth0" { 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.eth0.leases に設定が入っているのが確認できる。
ntt.conf
dhclientが起動するスクリプトからasteriskの設定を作る。
- /etc/dhcp/dhclient-exit-hooks.d/sip-configuration
if [ "eth0" = "$interface" ]; then case $reason in BOUND|RENEW|REBIND|REBOOT) domain=$(echo "$new_ntt_domain" | sed -e 's/[.]$//') number="$new_ntt_number" is_ip=$(echo "$new_ip_sip_servers" | awk '{ print $1; }') server=$(echo "$new_ip_sip_servers" | awk '{ print $2; }') if [ -n "$domain" ] && [ -n "$number" ] && [ "$is_ip" = 'true' ] && [ -n "$server" ]; then cat /etc/asterisk/ntt.conf.up | \ sed \ -e "s/DOMAIN/$domain/g" \ -e "s/NUMBER/$number/g" \ -e "s/SERVER/$server/g" \ > /usr/local/etc/asterisk/ntt.conf service asterisk reload fi ;; EXPIRE|FAIL|RELEASE|STOP) cp /etc/asterisk/ntt.conf.down /usr/local/etc/asterisk/ntt.conf service asterisk reload ;; esac fi
- /etc/asterisk/ntt.conf.up
register => NUMBER@DOMAIN@SERVER/NUMBER [ntt] type=peer host=SERVER context=fromntt fromdomain=DOMAIN
- /etc/asterisk/ntt.conf.down
; empty
- sip.conf
[general] (略) #include <ntt.conf> [201] (略)
結果
eri*CLI> sip show registry Host dnsmgr Username Refresh State Reg.Time xxx.xxx.xxx.x:5060 N 0xxxxxxxxx@n 3585 Registered Tue, 04 Apr 2017 04:55:15 1 SIP registrations.
おまけ:IPv6
116に電話したらRAにprefixが含まれなくなった。タイプ2に移行されたらしい。タイプ2ではDHCPv6-PDが使えるようになる。
client-idは -D LL を指定してdhclientを起動していればいらないと思いきや、うっかりleaseファイルからDUID-LLTを読んでしまうと困るので書いておく。
- dhclient.conf
option space my-vsio code width 4 length width 2 hash size 3; option my-vsio.ntt6 code 210 = string; option dhcp6.my-vendor-opts code 16 = encapsulate my-vsio; option space ntt6 code width 2 length width 2 hash size 7; option ntt6.mac code 201 = string; option ntt6.number code 202 = text; option ntt6.domain code 204 = domain-list; option ntt6.firmware code 210 = domain-list; option vsio.ntt6 code 210 = encapsulate ntt6; interface "eth0" { 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)); send dhcp6.client-id = concat(00:03:00, hardware); also request dhcp6.name-servers, dhcp6.domain-search, dhcp6.sntp-servers, dhcp6.sip-servers-addresses, dhcp6.vendor-opts; send my-vsio.ntt6 = suffix(hardware, 6); }
- /etc/network/interfaces
iface eth0 inet6 manual # (upでip -6 address show dev eth0 の結果がtentativeでなくなるのを待って) # (upでNGNの経路を足す) up /sbin/dhclient -1 -6 -P -D LL -pf /run/dhclient6.eth0.pid -lf /var/lib/dhcp/dhclient6.eth0.leases -I -df /var/lib/dhcp/dhclient.eth0.leases eth0 pre-down /sbin/dhclient -r -pf /run/dhclient6.eth0.pid eth0
うまくいくと /var/lib/dhcp/dhclient6.eth0.leases にIPv4のものと同等の情報が入る。
IPv6のSIPサーバは REGISTER にも OPTIONS にも応答しない。技術参考資料に
登録時にはIPv4を用いてSIP信号の送受信を行ってください。
とある通り、
REGISTER sip:ntt-east.ne.jp SIP/2.0 (略) Contact: <sip:XXXXXXXXXXXX@XXX.XXX.XXX.XXX:5060> Contact: <sip:XXXXXXXXXXXX@[2408:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]:5060>
のような Contact の2個ついた REGISTER を送りつければいいようだけど、 Asterisk でこれはできないですね。
OCNドットフォン
月額300円(税抜き)必要かと思いきや、OCNマイページに月額無料プランが隠されている。 年に一度でもナビダイヤルにかけることがあればユニバーサルサービス料の元は取れるはず。
- sip.conf
register => 050XXXXXXXX@ocn.ne.jp:XXXPASSWORDXXX:XXXUSERNAMEXXX@voip-XXXXXX.ocn.ne.jp/050XXXXXXXX [ocn] defaultuser=XXXUSERNAMEXXX remotesecret=XXXPASSWORDXXX type=peer context=from-ocn host=voip-XXXXXX.ocn.ne.jp fromuser=050XXXXXXXX fromdomain=ocn.ne.jp
- extensions.conf
[select-itsp] exten => _0033.,1,Goto(call-ocn,${EXTEN:4},1) exten => _0036.,1,Goto(call-ntt,${EXTEN:4},1) exten => _11X,1,Goto(call-ntt,${EXTEN},1) exten => _050.,1,Goto(call-ocn,${EXTEN},1) exten => _0570.,1,Goto(call-ocn,${EXTEN},1) exten => _X.,1,Goto(call-ntt,${EXTEN},1)
たぶん意図した通りに動いていると思う。