利用者:Pin ptr

2017年4月2日 (日) 21:12時点におけるPin ptr (トーク | 投稿記録)による版

直収

Ubuntuでひかり電話を直収するのに試したことメモ。

接続

壁| -- |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 3;
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" {
  also request ip-sip-servers, vivso;

  send vendor-class.ntt = concat(06, suffix(hardware, 6));
}

うまくいくと、dhclient.eth0.leases に設定が入っているのが確認できる。

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 に出力されるので、適当に移動したり…

ntt.conf

dhclientが起動するスクリプトからasteriskの設定を作る。

$interfaceをチェックしたり、bindaddrも書き換えた方がいいかも…

  • /etc/dhcp/dhclient-exit-hooks.d/sip-configuration
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
  • /etc/asterisk/ntt.conf.up
register => NUMBER@DOMAIN@SERVER/NUMBER

[ntt]
type=peer
host=SERVER
context=fromntt
nat=never
fromdomain=DOMAIN
  • /etc/asterisk/ntt.conf.down
; empty
  • sip.conf
(略)
#include <ntt.conf>