「ひかり電話 プロトコル」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(0)
(89.133.194.89 (会話) による編集を Gima による版へと差し戻しました。)
1行目: 1行目:
E4ytfa <a href="http://nyhcpwtbgxpu.com/">nyhcpwtbgxpu</a>, [url=http://xwbbkveignwz.com/]xwbbkveignwz[/url], [link=http://ffqwltmrksmk.com/]ffqwltmrksmk[/link], http://rvlwhbhcdhgg.com/
+
[[Category:ひかり電話]]
 +
→[[:Category:ひかり電話]] [[ひかり電話対応]]
 +
 
 +
以下の情報は東日本、特に東京でしか役に立たないかもです。訂正感謝するです。
 +
==設定情報の取得(ひかり電話家庭用・オフィスタイプのみ)==
 +
RT-200NE/RT-200KI/VG820a等は起動時にPPPoE接続を張って設定情報を取得します。<br/>
 +
PPPoE接続先はguest@tk000155で、<nowiki>http://add-con.mcas/</nowiki> に以下の内容をPOSTします。
 +
  CompanyCode=&ServiceCode=&ControlCode=&TerminalID=00022BXXXXXX
 +
ここでTerminalIDはRT-200NE等のMacアドレス(WAN側)です。<br/>
 +
POSTすると、以下の内容が戻されます。取得後はPPPoEは切断され、直接IPv4でSIP/RTPの通信が行われます。
 +
ResultCode=0000
 +
ip_addr=172.20.184.XX1
 +
netmask=30
 +
gateway=172.20.184.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.YYY
 +
sipsv_port=5060
 +
regsv_addr=220.157.56.YYY
 +
regsv_port=5060
 +
sip_domain=220.157.56.YYY
 +
username=
 +
password=
 +
ip_tel_num=036901ZZZ1
 +
ip_tel_num1=036901ZZZ2
 +
ip_tel_num2=036901ZZZ3
 +
area_code=03
 +
url_update=<nowiki>http://www.cpeinfo.jp/</nowiki>
 +
url_update_cas=<nowiki>http://220.216.147.36:50080/verup/notify.cgi</nowiki>
 +
dscp=32
 +
rtpport1=5004
 +
rtpport2=5035
 +
項目はだいたい自明だと思います。dscp値はtos値としては0x80になります。<br/>
 +
dest_nw_addrですが、明らかにおかしいです。(このアドレスレンジはDocomo所有だし…)<br/>
 +
2006/10現在、東京で使用されているのは、
 +
220.157.0.0/18
 +
220.216.128.0/17
 +
220.210.192.0/19
 +
ですが、将来変更されるかもしれません。
 +
 
 +
山梨(甲府)情報ですが、2008/12/26 前後から、どうも、以下のアドレスも利用されているようです。(小西)
 +
123.104.0.0/14
 +
さらに、このあたりも利用されているようです。(小西)
 +
118.177.0.0/16
 +
 
 +
==SIPプロトコル==
 +
ひかり電話家庭用・オフィスタイプとも、SIPプロトコルはビジネスタイプと同様のようです。<br/>
 +
http://www.ntt-east.co.jp/ipc/information/tech/interface.html<br/>
 +
Asteriskから直接レジストする場合は、Session Timerの実装が必要になります。 ナカムラさんのページを参照してください。<br/>
 +
*sip.confの例
 +
[general]
 +
port=5060
 +
bindaddr=0.0.0.0
 +
srvlookup=no
 +
tos=0x80            ;必要(DSCP=32)
 +
disallow=all
 +
allow=ulaw
 +
language=jp
 +
defaultexpirey=3600
 +
register => 036901ZZZ1@ntt  ;複数番号でも親番号のみregister
 +
[ntt]
 +
type=peer
 +
context=fromntt
 +
host=220.157.56.YYY
 +
nat=never    ;viaヘッダにrportをつけないために
 +
;;;;fromuser はSetCallerIDでつける
 +
fromdomain=220.157.56.YYY
 +
canreinvite=no
 +
session-expires=300  ;ひかり電話標準値
 +
dtmfmode=inband
 +
username=nttuser    ;session-expiresのパッチで必要
 +
insecure=very
 +
*extensions.confの例
 +
[fromntt]
 +
exten => 036901ZZZ1,1,Dial(SIP/901,180)    ;電話機
 +
exten => 036901ZZZ2,1,Dial(SIP/999,180)    ;FAX
 +
exten => 036901ZZZ3,1,Ringing()            ;自動応答 まずRinging()
 +
exten => 036901ZZZ3,2,Wait(2)
 +
exten => 036901ZZZ3,3,Answer()
 +
exten => 036901ZZZ3,4,Wait(1)
 +
exten => 036901ZZZ3,5,Playback(beep)
 +
exten => 036901ZZZ3,6,Hangup()
 +
[from901]
 +
exten => _[0-6]X.,1,SetCallerID(036901ZZZ1)  ;発信者番号をセット
 +
exten => _[0-6]X.,2,Dial(SIP/ntt/${EXTEN},180)
 +
[from999]
 +
exten => _[0-6]X.,1,SetCallerID(036901ZZZ2)  ;発信者番号をセット
 +
exten => _[0-6]X.,2,Dial(SIP/ntt/${EXTEN},180)
 +
 
 +
また、Via:ヘッダにreceived=がついていると駄目になったようです(2007/09確認)。1.2系ではchan_sip.cのcopy_via_headers()に、以下の修正を加えてください。
 +
nat=neverのチャネルにはreceived=を付けなくなります。
 +
    char iabuf[INET_ADDRSTRLEN];
 +
+  if(ast_test_flag(p, SIP_NAT) == SIP_NAT_NEVER) copied++;
 +
 
 +
Asterisk 2.6ではchannels/chan_sip.c:~9102
 +
    int start = 0;
 +
+  if(ast_test_flag(&p->flags[0], SIP_NAT) == SIP_NAT_NEVER) copied++;
 +
 
 +
==ルーティング==
 +
SIPパケットはレジストしたSIPサーバとしかやりとりしませんが、 RTPパケットは相手先(の局内NATルータ)と直接通信を行います。そのため、linuxマシンから直接レジストする場合はルーティングが問題になります。
 +
===デフォルトルートとして設定===
 +
一番安全な方法ですが、1台のマシンを通常のインターネットルータと兼用したり、あるいは050系IP電話サービスと兼用できません。
 +
root# vi /etc/network/interfaces
 +
iface eth1 inet static
 +
    address 172.20.184.XX1
 +
    netmask 255.255.255.252
 +
    gateway 172.20.184.XX2
 +
===使われている範囲だけルーティング===
 +
使われている範囲だけルーティングする方法ですが、将来IPアドレス範囲が変更になった場合に追随しないといけません。また、この範囲はフレッツスクエアでも使用されているため、兼用できません。
 +
root# vi /etc/network/interfaces
 +
iface eth1 inet static
 +
    address 172.20.184.XX1
 +
    netmask 255.255.255.252
 +
    up /sbin/route add -net 220.157.0.0/18 gw 172.20.184.XX2 || true
 +
    up /sbin/route add -net 220.216.128.0/17 gw 172.20.184.XX2 || true
 +
    up /sbin/route add -net 220.210.192.0/19 gw 172.20.184.XX2 || true
 +
===特定のSIP端末だけ自アドレスをバインド===
 +
端末ごとにbindaddrを指定できるようにするパッチ[ftp://ftp.voip-info.jp/asterisk/patch/local/1.2/1.2.10_bindaddr.061113-01.patch bindaddr.patch]を当てれば、
 +
以下のようにソースアドレスによるポリシールーティングをかけられます。
 +
root# apt-get install iproute
 +
root# vi /etc/asterisk/sip.conf
 +
register => 036901ZZZ1@ntt  ;registerは @セクション名 で対応付け
 +
[ntt]
 +
bindaddr=172.20.184.XX1
 +
...
 +
root# vi /etc/network/interfaces
 +
iface eth1 inet static
 +
    address 172.20.184.XX1
 +
    netmask 255.255.255.252
 +
    up /sbin/ip route add 172.20.184.XX0/30
 +
                          dev eth1 src 172.20.184.XX1 table 99 || true
 +
    up /sbin/ip route add default via 172.20.184.XX2
 +
                                            dev eth1 table 99 || true
 +
    up /sbin/ip rule add from 172.20.184.XX1 table 99 || true
 +
    down /sbin/ip rule delete from 172.20.184.XX1 || true

2010年6月29日 (火) 02:57時点における版

Category:ひかり電話 ひかり電話対応

以下の情報は東日本、特に東京でしか役に立たないかもです。訂正感謝するです。

設定情報の取得(ひかり電話家庭用・オフィスタイプのみ)

RT-200NE/RT-200KI/VG820a等は起動時にPPPoE接続を張って設定情報を取得します。
PPPoE接続先はguest@tk000155で、http://add-con.mcas/ に以下の内容をPOSTします。

CompanyCode=&ServiceCode=&ControlCode=&TerminalID=00022BXXXXXX

ここでTerminalIDはRT-200NE等のMacアドレス(WAN側)です。
POSTすると、以下の内容が戻されます。取得後はPPPoEは切断され、直接IPv4でSIP/RTPの通信が行われます。

ResultCode=0000
ip_addr=172.20.184.XX1
netmask=30
gateway=172.20.184.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.YYY
sipsv_port=5060
regsv_addr=220.157.56.YYY
regsv_port=5060
sip_domain=220.157.56.YYY
username=
password=
ip_tel_num=036901ZZZ1
ip_tel_num1=036901ZZZ2
ip_tel_num2=036901ZZZ3
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

項目はだいたい自明だと思います。dscp値はtos値としては0x80になります。
dest_nw_addrですが、明らかにおかしいです。(このアドレスレンジはDocomo所有だし…)
2006/10現在、東京で使用されているのは、

220.157.0.0/18
220.216.128.0/17
220.210.192.0/19

ですが、将来変更されるかもしれません。

山梨(甲府)情報ですが、2008/12/26 前後から、どうも、以下のアドレスも利用されているようです。(小西)

123.104.0.0/14

さらに、このあたりも利用されているようです。(小西)

118.177.0.0/16

SIPプロトコル

ひかり電話家庭用・オフィスタイプとも、SIPプロトコルはビジネスタイプと同様のようです。
http://www.ntt-east.co.jp/ipc/information/tech/interface.html
Asteriskから直接レジストする場合は、Session Timerの実装が必要になります。 ナカムラさんのページを参照してください。

  • sip.confの例
[general]
port=5060
bindaddr=0.0.0.0
srvlookup=no
tos=0x80            ;必要(DSCP=32)
disallow=all
allow=ulaw
language=jp
defaultexpirey=3600
register => 036901ZZZ1@ntt   ;複数番号でも親番号のみregister
[ntt]
type=peer
context=fromntt
host=220.157.56.YYY
nat=never    ;viaヘッダにrportをつけないために
;;;;fromuser はSetCallerIDでつける
fromdomain=220.157.56.YYY
canreinvite=no
session-expires=300  ;ひかり電話標準値
dtmfmode=inband
username=nttuser     ;session-expiresのパッチで必要
insecure=very
  • extensions.confの例
[fromntt]
exten => 036901ZZZ1,1,Dial(SIP/901,180)    ;電話機
exten => 036901ZZZ2,1,Dial(SIP/999,180)    ;FAX
exten => 036901ZZZ3,1,Ringing()            ;自動応答 まずRinging()
exten => 036901ZZZ3,2,Wait(2)
exten => 036901ZZZ3,3,Answer()
exten => 036901ZZZ3,4,Wait(1)
exten => 036901ZZZ3,5,Playback(beep)
exten => 036901ZZZ3,6,Hangup()
[from901]
exten => _[0-6]X.,1,SetCallerID(036901ZZZ1)   ;発信者番号をセット
exten => _[0-6]X.,2,Dial(SIP/ntt/${EXTEN},180)
[from999]
exten => _[0-6]X.,1,SetCallerID(036901ZZZ2)   ;発信者番号をセット
exten => _[0-6]X.,2,Dial(SIP/ntt/${EXTEN},180)

また、Via:ヘッダにreceived=がついていると駄目になったようです(2007/09確認)。1.2系ではchan_sip.cのcopy_via_headers()に、以下の修正を加えてください。 nat=neverのチャネルにはreceived=を付けなくなります。

   char iabuf[INET_ADDRSTRLEN];
+  if(ast_test_flag(p, SIP_NAT) == SIP_NAT_NEVER) copied++;

Asterisk 2.6ではchannels/chan_sip.c:~9102

   int start = 0;
+  if(ast_test_flag(&p->flags[0], SIP_NAT) == SIP_NAT_NEVER) copied++;

ルーティング

SIPパケットはレジストしたSIPサーバとしかやりとりしませんが、 RTPパケットは相手先(の局内NATルータ)と直接通信を行います。そのため、linuxマシンから直接レジストする場合はルーティングが問題になります。

デフォルトルートとして設定

一番安全な方法ですが、1台のマシンを通常のインターネットルータと兼用したり、あるいは050系IP電話サービスと兼用できません。

root# vi /etc/network/interfaces
iface eth1 inet static
    address 172.20.184.XX1
    netmask 255.255.255.252
    gateway 172.20.184.XX2

使われている範囲だけルーティング

使われている範囲だけルーティングする方法ですが、将来IPアドレス範囲が変更になった場合に追随しないといけません。また、この範囲はフレッツスクエアでも使用されているため、兼用できません。

root# vi /etc/network/interfaces
iface eth1 inet static
    address 172.20.184.XX1
    netmask 255.255.255.252
    up /sbin/route add -net 220.157.0.0/18 gw 172.20.184.XX2 || true
    up /sbin/route add -net 220.216.128.0/17 gw 172.20.184.XX2 || true
    up /sbin/route add -net 220.210.192.0/19 gw 172.20.184.XX2 || true

特定のSIP端末だけ自アドレスをバインド

端末ごとにbindaddrを指定できるようにするパッチbindaddr.patchを当てれば、 以下のようにソースアドレスによるポリシールーティングをかけられます。

root# apt-get install iproute
root# vi /etc/asterisk/sip.conf
register => 036901ZZZ1@ntt   ;registerは @セクション名 で対応付け
[ntt]
bindaddr=172.20.184.XX1
...
root# vi /etc/network/interfaces
iface eth1 inet static
    address 172.20.184.XX1
    netmask 255.255.255.252
    up /sbin/ip route add 172.20.184.XX0/30
                         dev eth1 src 172.20.184.XX1 table 99 || true
    up /sbin/ip route add default via 172.20.184.XX2
                                            dev eth1 table 99 || true
    up /sbin/ip rule add from 172.20.184.XX1 table 99 || true
    down /sbin/ip rule delete from 172.20.184.XX1 || true