「ひかり電話 プロトコル」の版間の差分
(0) |
細 (89.133.194.89 (会話) による編集を Gima による版へと差し戻しました。) |
||
1行目: | 1行目: | ||
− | + | [[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時点における版
以下の情報は東日本、特に東京でしか役に立たないかもです。訂正感謝するです。
目次
設定情報の取得(ひかり電話家庭用・オフィスタイプのみ)
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