*** Asterisk を 試すメモシリーズ *** / ひかり電話を直接レジスト…を試す
FreeBSD
ひかり電話
プロトコル
 
 
HOME
設定情報入手
sip.conf
extensions.conf

はじめに

 ひかり電話とAsteriskの連動はかなりスムース。しかしながら、ONU以下に直接接続する方法でやっている人が意外と多いみたいで、その辺りを試してみることにしました。

設定情報をゲット

 ネットで検索してみると ID: guest@tk000155 PASSWORD: guest という形でPPPoE接続を行うことができるそうです。
…なるほど。確かにできますな。RT-200NEにその設定を加えるとうまく接続できてしまいます。

 次に、Windows XPのnotepadを立ち上げて、

http://add-con.mcas/?CompanyCode=&ServiceCode=&ControlCode=&TerminalID=000D02XXXXXX HTTP/1.0

という形をコピペしておきます。上記の 000D02XXXXXX 部分は、ひかりルータの側面に張られている MACアドレスを入力します。
RT-200NE だと 00-0D-02-XX-XX-XX のような内容になっていたと思います。

DOS窓から、

telnet add-con.mcas 80

と、入力すると画面がクリアされ、カーソルが点滅した状態になります。
(IPアドレスは nslookup で見ると 10.139.75.42 というホストみたいけど。)
そして上記の

http://add-con.mcas/?CompanyCode=&ServiceCode=&ControlCode=&TerminalID=000D02XXXXXX HTTP/1.0 (改行)
(改行)

と入力すると設定が見えてきます。

HTTP/1.1 200 OK
Set-Cookie: BIGipServeraddcon_http=xxxxxxxxx.xxxxx.xxxxx; expires=DDD, DD-MMM-YYYY HH:MM:SS GMT; path=/
Date: DDD, DD MMM YYYY HH:MM:SS GMT
Server: Apache/2.0.49 (Unix) mod_jk/1.2.5
Content-Length: 487
Connection: close
Content-Type: text/plain

ResultCode=0000
ip_addr=172.22.228.XX1
netmask=30
gateway=172.22.228.XX2
dest_nw_addr=220.210.59.0/22&220.210.63.0/24&220.210.32.0/24&220.210.33.0/22
sipsv_addr=220.157.56.41
sipsv_port=5060
regsv_addr=220.157.56.41
regsv_port=5060
sip_domain=220.157.56.41
username=
password=
ip_tel_num=03XXXXYYYY
ip_tel_num1=03XXXXZZZZ
area_code=03
url_update=http://www.cpeinfo.jp/
url_update_cas=http://220.216.147.36:50080/verup/notify.cgi
dscp=32
rtpport1=5004
rtpport2=5035



ホストとの接続が切断されました。

なーるほど。RT-200NEはこの情報を得て接続をしていたのだね。
DOS窓のプロパティで範囲指定をして、内容を上記のような感じになるように notepadにペースト(貼付)します。

ここまでわかれば、もうPPPoEの接続は不要なので、切断して接続設定を元に戻します。

ここで、必要な情報は、IPアドレス。SIPサーバ、レジストリサーバなどは 220.157.56.41 だとわかる。
portは5060。自分のアドレスは 172.22.228.XX0/30 というネットワークになっているっぽい。(XX0 = XX1 - 1)

sip.conf

 Asterisk側の設定をしましょう。
QoS制御のTOS(Type of Service)の値が 上記のDCSP(Difserv {Differentiated Services:ディフサーブ} Code Points)値32からどうやって 0x80だと決まるのかがわからなかった。
折角なので検索しつつ意味合いを捜す。DSCPは 0-63 (6bitなので、2**6は64)
TOSの方はプレデンス部分の3bitだけの話っぽいけど、ヘキサの80??
説明ページはこの辺りを参考にしてみた。ここも詳しいけど、理解できなかった。
わからん。ここ見て、眺めても最終的にわからないまま。
0x80 なんだからデシマルだと128って書いてもいいってことだよね?

tos=128

register => 03XXXXYYYY@ntt

を、generalのセクションに追加。それ以外はいままでのまま。
気にしないでいいだろうけど、ワーニングメッセージが出てきた。

chan_sip.c:16742 reload_config: tos value at line 19 is deprecated.  See doc/ip-tos.txt for more information.

tos_sipとかにすればいいってことらしい。読めってことなんで眺めよう。

The tos* parameters also take numeric values.

The lowdelay, throughput, reliability, mincost, and none values are
deprecated because they set the IP TOS using the outdated "IP
precedence" model as defined in RFC 791 and RFC 1349. They still
work in this version of Asterisk, but will be removed in future releases.

===========================================
Configuration   Parameter       Recommended
File                            Setting
-------------------------------------------
sip.conf        tos_sip         cs3
sip.conf        tos_audio       ef
sip.conf        tos_video       af41
-------------------------------------------
iax.conf        tos             ef
-------------------------------------------
iaxprov.conf    tos             ef
===========================================

将来削除されてからでもいいよね?(今はこのままいかせて欲しいっす。やってみるのは簡単なのに…)
次にnttのセクションを書く。

[ntt]
type=peer
context=fromntt
host=220.157.56.41
nat=never
fromdomain=220.157.56.41
canreinvite=no
session-expires=300
dtmfmode=inband
username=nttuser
insecure=very

というそのままにしました。220.157.56.41 はさらしちゃまずいんだっけ?

/etc/rc.conf には

defaultrouter="172.22.228.XX1"
ifconfig_vr0="inet 172.22.228.XX2  netmask 255.255.255.252"

として記述します。(ちなみに、このページに出てきているこの部分のアドレスは実態のものとは変えて記述しています))
これでどうなるかを試せば、レジストできちゃうかをまずは試せますね。
面白いなぁ…。

イメージとしては上記の感じ。Bフレッツ網を通して、2つのIPアドレスがあるネットワーク(/30 なので前後あわせれば4つ)。
こっち側のAsteriskには ip_addr に書かれているののを書いて、相手側(arpで見る限り、シスコ製品)の装置 が gateway のもの。
相手側もシップサーバもpingには応答しないような設定になっているみたいだ。

Retransmitting #4 (no NAT) to 220.157.56.41:5060:
REGISTER sip:220.157.56.41 SIP/2.0
Via: SIP/2.0/UDP *:5060;branch=*
From: <sip:03XXXXYYYY@220.157.56.41>;tag=*
To: <sip:03XXXXYYYY@220.157.56.41>
Call-ID: *@220.157.56.41
CSeq: 258 REGISTER
User-Agent: Asterisk PBX
Max-Forwards: 70
Expires: 3600
Contact: <sip:*>
Event: registration
Content-Length: 0

 とりあえず、こっち側のMACアドレスもネットの対抗側にも見えるわけで、これをこっちのRT-200NEのMACアドレスに同じものにみえるようにします。
(RT-200NEのMACアドレスは最初に telnetで確認した内容のものと同じです)

# ifconfig vr0 ether 000D02XXXXXX
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 172.22.228.145 netmask 0xfffffffc broadcast 172.22.228.147
        ether 00:0d:02:xx:xx:xx
        media: Ethernet autoselect (none)
        status: no carrier

こんな感じ。「User-Agent: Asterisk PBX」となっているのは気持ちが悪いので、変えるべきかも。
いかにもバレバレっぽくて。パケット眺めていれば普段と違うのが流れるのがわかるよねぇ…。
sip.conf の

;useragent=Asterisk PBX

の部分を変更すればいいだけなんだけど、どのように内容になっていたのかは未確認。(誰かわかります?)
RT-200NEは、

2007/06/01 06:00:00 VoIP レジスタ要求
2007/06/01 06:00:00 VoIP レジスタ成功 200OK
2007/06/01 06:30:00 VoIP レジスタ要求
2007/06/01 06:30:00 VoIP レジスタ成功 200OK

とか、30分に1回のタイミングでレジスタ要求しているみたいだ。
何を設定すれば 1800にできるのだろう。個別にはできないものなのかな。(自分で直せ、っていわれるよあなぁ)

Asteriskマシンは、WANとLANという感じに2枚のNICをさして、WAN側には ifconfig_if に ip_addrのアドレスを指定。
LAN側のNICにはハブを入れて、そこに snom220をつないでみた。
ちゃんとレジストできちゃっているかな?

sterisk*CLI> sip show peers
Name/username              Host            Dyn Nat ACL Port     Status
5131/5131                  192.168.10.21    D   N      5060     OK (51 ms)
ntt/nttuser                220.157.56.41               5060     Unmonitored

どっちにもいけちゃっていますねぇ。
ちなみに、このAsteriskには ナカムラさんのパッチがあててある Asterisk 1.4.4 のバージョンで動かしています。
ブログ見た感じだと 1.2系用ってことだったけど、問題なしで使えていました。細かくは確認していないけど、動けばいいや。

では次は、発着信を試すしかないよね。

extensions.conf

 sip.conf のcontextには fromntt というセクションを期待するように書いてある。
要するに、NTT回線側から電話が来た場合には、extensions.conf の最後の方でいいので セクションを記述すればいい。

.
.
[fromntt]
; Line 1
exten => 03XXXXYYYY,1,Dial(SIP/5131,60)

; Line 2
exten => 03XXXXZZZZ,1,Dial(SIP/5131,60)

[from5131]
exten => _[0]X.,1,Set(CallerID(num)=03XXXXYYYY)
exten => _[0]X.,2,Dial(SIP/ntt/${EXTEN},60)

という風に。
発着信をやってみたけど、いい感じ。音もきれいだし、文句なしだった。
なんとも普通に使えてしまうじゃないですか。いいねぇ。


本番運用として設計することを考えると、やっぱりONUの下に HUB入れ、普通にインターネット用のルータとAsterisk にNIC追加して別にネットワーク切るのが簡単そう。
この場合、デフォルトルータは、インターネット用のルータに向くようにつくりたいので、ひかり電話用の回線側には範囲指定のルーチングがいいかな。

dest_nw_addr=220.210.59.0/22&220.210.63.0/24&220.210.32.0/24&220.210.33.0/22

ということなので、この範囲向けのネットワークはそっちに向くように書けばいいだけ。
/etc/rc.conf に defaultrouterレコードを書かずに、

static_routes="0 1 2 3 4"
route_0="-net default 192.168.10.1"
route_1="-net 220.210.59.0/22 172.22.228.XX2"
route_2="-net 220.210.63.0/24 172.22.228.XX2"
route_3="-net 220.210.32.0/24 172.22.228.XX2"
route_4="-net 220.210.33.0/22 172.22.228.XX2"

としてあげればいいだけのはず。そのうちにオフィスで試してみよう、と思う。

2007/6/1 にページを公開しました。若干修正を入れて 2007/6/3に更新しました。

Copyright © 2006-2007 By Yotsuya Group All Rights Reversed.