「利用者:Pin ptr」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(おまけ:IPv6)
 
(同じ利用者による、間の12版が非表示)
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でひかり電話を直収するのに試したことメモ。
5行目: 25行目:
 
=== 接続 ===
 
=== 接続 ===
  
  <nowiki>壁| -- |VDSLモデム| -- |Raspberry Pi3| -- |KX-UT123N|</nowiki>
+
  <nowiki>NTT東日本| -------- |壁| -- |VDSLモデム| -- |Raspberry Pi3| -- |KX-UT123N|</nowiki>
  
 
=== DHCP ===
 
=== DHCP ===
19行目: 39行目:
 
* /etc/dhcp/dhclient.conf
 
* /etc/dhcp/dhclient.conf
  
  <nowiki># デフォルトのdhclient.conf に追加する
+
  <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 code 210 = string;
+
option vendor-class.ntt code 210 = string;
  
option space ntt code width 1 length width 1 hash size 3;
+
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;
32行目: 52行目:
  
 
interface "eth0" {
 
interface "eth0" {
   also request ip-sip-servers, vivso;
+
   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>
  
 
うまくいくと、dhclient.eth0.leases に設定が入っているのが確認できる。
 
うまくいくと、dhclient.eth0.leases に設定が入っているのが確認できる。
 
=== 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 に出力されるので、適当に移動したり…
 
  
 
=== ntt.conf ===
 
=== ntt.conf ===
63行目: 63行目:
 
dhclientが起動するスクリプトからasteriskの設定を作る。
 
dhclientが起動するスクリプトからasteriskの設定を作る。
  
$interfaceをチェックしたり、bindaddrも書き換えた方がいいかも…
+
* /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; }')
  
* /etc/dhcp/dhclient-exit-hooks.d/sip-configuration
+
                        if [ -n "$domain" ] && [ -n "$number" ] && [ "$is_ip" = 'true' ] && [ -n "$server" ]; then
<nowiki>case $reason in
+
                                cat /etc/asterisk/ntt.conf.up | \
        BOUND|RENEW|REBIND|REBOOT)
+
                                sed \
                domain=$(echo "$new_ntt_domain" | sed -e 's/[.]$//')
+
                                        -e "s/DOMAIN/$domain/g" \
                number="$new_ntt_number"
+
                                        -e "s/NUMBER/$number/g" \
                is_ip=$(echo "$new_ip_sip_servers" | awk '{ print $1; }')
+
                                        -e "s/SERVER/$server/g" \
                server=$(echo "$new_ip_sip_servers" | awk '{ print $2; }')
+
                                        > /usr/local/etc/asterisk/ntt.conf
 +
                                service asterisk reload
 +
                        fi
 +
                        ;;
  
                 if [ -n "$domain" ] && [ -n "$number" ] && [ "$is_ip" = 'true' ] && [ -n "$server" ]
+
                 EXPIRE|FAIL|RELEASE|STOP)
                then
+
                         cp /etc/asterisk/ntt.conf.down /usr/local/etc/asterisk/ntt.conf
                         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
 
                         service asterisk reload
                fi
+
                        ;;
                ;;
+
         esac
 
+
fi</nowiki>
         EXPIRE|FAIL|RELEASE|STOP)
 
                cp /etc/asterisk/ntt.conf.down /usr/local/etc/asterisk/ntt.conf
 
                service asterisk reload
 
                ;;
 
esac</nowiki>
 
  
 
* /etc/asterisk/ntt.conf.up
 
* /etc/asterisk/ntt.conf.up
98行目: 97行目:
 
host=SERVER
 
host=SERVER
 
context=fromntt
 
context=fromntt
nat=never
 
 
fromdomain=DOMAIN</nowiki>
 
fromdomain=DOMAIN</nowiki>
  
105行目: 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)

たぶん意図した通りに動いていると思う。