利用者:Gima

提供: VoIP-Info.jp
利用者:MR Gから転送)
移動先: 案内検索

OpenWRT

OpenWRTにAsterisk13を入れたあと、ひかり電話に繋がるようになるまでの
必要なパッケージいろいろ

必要

無いと困るパッケージ一覧

asterisk13
Asterisk本体
asterisk13-chan-sip:SIPチャネルドライバ。SIP電話機やひかり電話との通信に必要。
pjsipでも良いかも
asterisk13-codec-ulaw
μ-lawコーデックモジュール。
asterisk13-res-rtp-asterisk
RTPモジュール。これが無いと通話が出来ない


重要

無くても大丈夫だけど、入れるとお得

asterisk13-codec-g722
G.722コーデック
asterisk13-res-musiconhold
保留音モジュール。
保留しない人にとっては不要

微妙

無くても困らないが、一部の人に需要があるモノ(いわゆる、「俺得」)

asterisk13-chan-unistim
Nortel電話機用(秋葉原でNortel i2002を買った人とか)

TFTPサーバー

OpenWRTに入っているTFTP(dnsmasqの一機能)がいうことを聞かないとき

  • Firewallの状態を確認
  • TFTPを有効にするインターフェースを確認
    →/etc/dnsmasq.confの末尾あたりに"enable-tftp=br-lan"を追加しておく


Ciscoの電話機

ACS DATA
CiscoのIP電話機をAsteriskで使うためのノウハウ色々。このページでだいたい事足りる。
Asterisk11.22.0用Cisco patchもあるのでオススメ


ひかり電話用のIP電話機

ひかり電話用の電話機2種類
Hackする労苦に見合うほどのメリットがあるかというとちょっとビミョーなので、
Registできたら満足して倉庫の肥やしになる可能性大

HQ-100

  • HQ-100はナカヨのOEM製品。したがって例のコマンドが効く。
    変更が効くのは固定IPやHGWのアドレス程度
  • FTPの口がある。しかしIDは****_***ではない模様
  • telnetを喋る。ログイン方法やコマンド体系はナカヨ製電話機と一緒
  • NTPを喋らず、ひかり電話ルーターが吐くSIPヘッダから、時間を取得する

ひかりパーソナルフォン WI-200

NTT東西から出ていたWiFi(クセの強さが半端無い)SIP電話機 
パケットから見る起動シーケンスは下記の順のとおり

  1. DHCPサーバーからIPアドレスを取得
    変わったDHCPオプションの要求は特に無し。
  2. ファームウェアのバージョンアップを確認
    "http://www.cpeinfo.jp/?product=WI-200&version=01.02" ←こんなURL
  3. ひかりGWに対し、HTTPのPOSTを投げる
    http://10.0.2.62/cas_tel_conf/ ←こんなURL
    自局のIDや内線番号、SIPポートなどをゲートウェイに対して送信する
  4. ひかりGWに対しSIP REGISTERパケットを投げる

Asteriskにつなげる為には

以上の挙動を見る限り、Asteriskにつなげる為にはDHCPサーバーとHTTPサーバーが必要。

WI-200用のDHCP設定
固定IP不可。
電話がデフォルトデートウェイにHTTPリクエストを投げるので、DHCPサーバーを新たに設けるか、電話機用のDHCP設定を加えること
デフォルトゲートウェイのIPを変更できるタイプが望ましい
HTTPサーバーの設定
電話機が設定ファイルを要求してくるので、POSTで電話機の設定を返す


rtp set debugの使い方

通話時に、片通話状態になったりお互いが無音になってしまうときに、
RTPパケットの状態を"rtp set debug"で見ることが出来る 各IPとのRTPパケット"GotとSent"があれば正常で、片通話の場合はGotまたはSentが欠けている

正常な例 その1

内線相互通話のとき
端末とPBX側で、それぞれRTPによるパケットのやり取りが正常に出来ている例

PBX*CLI> rtp set debug on
(略)
Got  RTP packet from    10.0.1.11:18978 (type 00, seq 000231, ts 1851238948, len 000160)
Sent RTP packet to      10.0.1.11:18978 (type 00, seq 062226, ts 003520, len 000160)
Got  RTP packet from    10.0.1.29:9000 (type 00, seq 036076, ts 003840, len 000160)
Sent RTP packet to      10.0.1.29:9000 (type 00, seq 013446, ts 1851238944, len 000160)

正常な例 その2

ITSPから着信したとき、
端末とITSP側で、それぞれRTPによるパケットのやり取りが正常に出来ている例

PBX*CLI> rtp set debug on
(略)
Got  RTP packet from    10.0.1.29:9000 (type 00, seq 025633, ts 043040, len 000160)
Sent RTP packet to      10.0.1.29:9000 (type 00, seq 006329, ts 3057645360, len 000160)
Got  RTP packet from    219.113.12.175:7670 (type 00, seq 000266, ts 3057645200, len 000160)
Sent RTP packet to      219.113.12.175:7670 (type 00, seq 038682, ts 043040, len 000160)

不具合がある例

ITSPから着信したとき、
端末からの音声は正しく外線(ITSP)に行っているが、ITSPからのRTPパケットが行かない例 ITSPのIPアドレスからRTPパケットが来ない点に注目

PBX*CLI> rtp set debug on
(略)
Got  RTP packet from    10.0.1.29:9000 (type 00, seq 002313, ts 034080, len 000160)
Sent RTP packet to      219.113.11.31:7676 (type 00, seq 053632, ts 034080, len 000160)
Got  RTP packet from    10.0.1.29:9000 (type 00, seq 002314, ts 034240, len 000160)
Sent RTP packet to      219.113.11.31:7676 (type 00, seq 053633, ts 034240, len 000160)
Got  RTP packet from    10.0.1.29:9000 (type 00, seq 002315, ts 034400, len 000160)
Sent RTP packet to      219.113.11.31:7676 (type 00, seq 053634, ts 034400, len 000160)


sipsak

sipsakは内線登録したり大量のSIPパケットを投げつけたりできるSIPのコマンドラインツールである

registerテスト(内線登録)

Asteriskに対してレジストしてみる

sipsak -UI -a pass -s sip:203@127.0.0.1

負荷試験

-Fオプションをつけると、相手先に大量のSIP OPTIONリクエストを投げつける。

sipsak -F -s sip:@10.0.2.1

着信するとZabbixに通知が行くexten 

Zabbixのエラー発報をAsteriskにやらせると
「この電話が鳴ったら不幸が起こる」状態になるので、別のアプローチで遊んでみた

extension

着信時と終話時(Hangup後)にシェルを叩いてZabbix senderを使ってZabbixに通知するexten。
発IDをZabbixに通知する事もできる。

exten => ${Fusion},n,Answer
exten => ${Fusion},n,Wait(1)
exten => ${Fusion},n,SYSTEM(zabbix_sender -z 172.30.255.10 -s OpenWrt -k IncomingCalls -o "Call Start")
exten => ${Fusion},n,Dial(SIP/201&SIP/202,60)

exten => h,1,SYSTEM(zabbix_sender -z 172.30.255.10 -s OpenWrt -k IncomingCalls -o "Call End")

Zabbix

Zabbixに通知が行ったら、Ejectしたり警子ちゃんを泣かすなり、なんなりと。
詳細(または仕事でZabbix連携させたい場合)はZabbixおじさん™に聞いてみてください

音声ファイルを流す

音声ファイルを再生する

Quintumねた

NTTとの契約オプションについて

TenorをNTTにつなげるときはP-P接続にしておくこと。
P-MP接続にしておくとTenorBXがつながらないので注意。
Softbankのおとくラインでも同様に注意すること。

Ciscoの場合

参考資料:外線接続に利用するNTT ISDN回線 契約オプションについて
Ciscoの場合
https://supportforums.cisco.com/docs/DOC-11847


発信者IDと着信先ID

ev quの出力結果

ch       |01/01| 2011/01/04|21:35:18:520 |OBCSM[108]: Release from peer=0x9680c41c cause=0x22 redir=.
                                          TBCSM [108]: Release complete from peer=0x9683d158.
                                          OBCSM[108]: pRouteInfo 9689eee8 state 6 ivrType 0 h323RetCode -1 cause 0x22.
                                          OBCSM[108]: Trying another route.
                                          channel allocated: slot=2 device=0 line=4 chan=2.
                                          PRI() newTermCall pSG 96970af8 pPort 96aef708 pPeer 9683d158 deviceId 20000000 line 3 chan 1.
                                          TBCSM[108]: Setup from peer=0x9683d158 NP=0x0 NT=0x0.
                                          OrigNum= NormNum=0268296204 TranNum=8296204 OrigDest= callingParty=0363676370.
                                          PRI(2,0,4,0x8024): sending SETUP_REQ to L3
callingParty=0312345678.
発信者ID
ev l3 sproto
SIPプロトコルのロギングレベルを最大にする
ev l3 ch
論理的回線ステータス
ev l3 cas
物理的回線ステータス
ev c
ログバッファを消去する
ev qu
ログバッファを全表示する

テスト

debug test r ポート番号(1~6)
debug test e
リングテスト

SIPp

ソースはSIPp 入門
下記は勉強会の内容をメモしたもの

SIPpとは

HPのエンジニアが作成した
XMLでシナリオ作る
PCAPらいぶらりでRTPのストリーミングを流すことができる

いんすこ

ぐぐれ
WIndowsにもいんすこOK
INVITEやReggisterのテストをやる場合は、OpenSSLライブラリが必須
PCAp playサポートする場合は、libpcapもぶち込むこと

簡単な使い方

sipp -uac (XMLシナリオ)

sipp [おぷしょん] 遠隔サイト:ポート


-l 同時発呼数
-r 一秒当たりの通話数

 

シナリオ

鯖とのSIPのやりとりをXMLで表現

<send></send>→パケットぶちこむ
<recev></recev> →パケットげっと

動作としては基本的に二つある

  • UAC クライアント
  • UAS サーバー
正規表現OK
分岐OK
メディア再生OK

PCAP Play

  • PCAPライブラリを使うため、root権限が必要となる
  • こちら(SIPp使ってる方)でPCAPで補足したパケットをつかって音声を発生させることもできる。

認証付き

  • Asteriskが相手のINVITEおよびRegist時には(MD5による暗号化文が混ざるので)組み込みシナリオだけでは無理
  • [authentication username=Uha password=OKewwwwwwwwwww というモノをシナリオにぶち込む

CSVファイルから値を挿入

  • "inf"オプションで指定したファイルから、シナリオに値をぶち込むことができる。
  • 一行目に、ファイルから、データをどのように読むかを記述する(順番に。テキトーにランダム、ユーザー指定)
  • デフォルトのデリミタは";"(セミコロン)になっているので注意すること

負荷をかけてみる

  • csvで準備した番号に対して順にはっこする
  • 単一の番号に(Asteriskで保留音サービスさせてみる。とか)

SIPpで負荷をかけながら、人が通話を行って、通話品質を評価してみる。

  • (Asteriskの)MillWattコマンドを使っみて途切れを検出してみる
  • 音声の途切れ、かすれなどを実際に聞いて評価する。
  • sipp側でレスポンスタイムをcsvにて表示させることができる

ぐるぐる

どーやってググッたか覚えてないものの、有用な資料。

電話機関連

Cisco SIP IP Phone アドミニストレータ ガイド トラブルシューティング
CiscoのIP電話はTelnet経由でCLIに入れるらしく、デバッグコマンドがいくつか用意されているそうな。
ステータス確認には良さげなガイド
Configurable Parameters for the SIP IP Phone
SIPDefault.cnfのいぢり方。CP-7940GおよびCP-7960G用かと思われ。
Cisco Unified IP Phone 7970G/7971G-GEアドミニストレーション ガイド for Cisco Unified CallManager Release 5.0 (SIP)
長いタイトルでちょっと引く
CP-7970G/7971G-GEの設定マニュアル SIP版

OpenblocksAX3ネタ

OpenBlocks AX3でasteriskのパフォーマンス測定
sippを使用したasteriskのパフォーマンス測定が乗ってるのでオススメ

KPML

SIP のダイヤル規則設定
CP-7940,CP-7960のような古いタイプの電話機と、CP-7911、7941、7961、7970および7971に代表される比較的新しい電話機では、発信やDTMFの挙動が違うらしい
Cisco Unified Communications Manager システム ガイド Cisco Unified Communications Manager Business Edition 対応 Release 6.0(1)
SIP ダイヤル規則では、番号のパターンを電話機でローカルに収集してから、Cisco Unified Communications Manager に送信できます。SIP ダイヤル規則が設定されていない場合、KPML が使用されます。らしい。
KPML(keypad markup language)?
Cisco公式のBBSに投稿された質問


ルーター関連

ロード バランシングの機能のしくみ
「OSPFはロードバランシングに云々」の、実際の設定色々。
NBAR によって認識されないトラフィックの識別
IAXをQoS サービス ポリシーとかに紐付けたりとか、そのあたりに役立つ鴨。
ゾーンベースのポリシーのファイアウォールの設計およびアプリケーションのガイド
SDMに出てくるファイアウォール設定のマニュアルと思いねえ。
例によってCisco語
Getting Started with Cisco IOS IPS with 5.x Format Signatures
最近のIOSに付属するIPS機能の設定方法。
実はAsterisk周りのパターンもチョット掲載されていたりする。

電話機用XMLアプリ

HTTP Requests and Header Settings
Voice系ではなくて、CiscoIP電話機でできる付加サービス(XMLアプリなど)の解説。
電話機のスクリーンショットの撮り方も書いてあるが、試したら失敗してしょんぼり(´・ω・`)
CiscoIPPhone XML Object Quick Reference
CiscoIP電話機のXML関連資料(クイックリファレンス)プログラムネタ

Registerについて

Asteriskにおけるレジストというのは、サーバーにログインすることを指す。(ぶっちゃけ表現)
sip.confやiax.confの[general]の項目の直下に書いておくこと。

register => 2345:password123@mysipprovider.com:5060/1234

書き方の例は下記の通り

2345
ユーザーIDとして「2345」でログインしようとしている
password123
パスワードとして「password123」を指定している
mysipprovider.com
ログイン先サーバーとして「mysipprovider.com」を指定する。
5060
SIPパケットのあて先ポートを指定する。
通常はUDPの5060番ポートを使用する。ポート番号は省略可
/1234
SIPサーバーから着信する際の番号(外線番号など)として、「1234」を指定する。
SIPパケット中のContactヘッダに、この番号が追加される。デフォルトでは"s"が入る。

他には、下記のような形でレジスター設定する

register => user[:secret[:authuser]]@host[:port][/extension]
register => fromuser@fromdomain:secret@host
register => fromuser@fromdomain:secret:authuser@host:port/extension


IAXデバッグ

IAXデバッグで頻繁に出てくるACKとかの単語は
http://www.rfc-editor.org/authors/rfc5456.txt を調べるヨロシ
日本語ドキュメントなんぞ無い(´・ω・`)

デバッグ開始(Asterisk1.6)

Halphas*CLI> iax2 set debug on
IAX2 Debugging Enabled
Halphas*CLI>

IAXデバッグ終了(Asterisk1.6)

Halphas*CLI> iax2 set debug off
IAX2 Debugging Disabled
Halphas*CLI>

あじるほんにQualfyしてみた

Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: POKE
   Timestamp: 00008ms  SCall: 00006  DCall: 00000 [122.103.236.237:4569]
Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 001 Type: IAX     Subclass: PONG
   Timestamp: 00008ms  SCall: 00046  DCall: 00006 [122.103.236.237:4569]
Tx-Frame Retry[-01] -- OSeqno: 001 ISeqno: 001 Type: IAX     Subclass: ACK
   Timestamp: 00008ms  SCall: 00006  DCall: 00046 [122.103.236.237:4569]

あじるほんにRegistしてみた

Tx-Frame Retry[000] -- OSeqno: 000 ISeqno: 000 Type: IAX     Subclass: REGREQ
   Timestamp: 00002ms  SCall: 00005  DCall: 00000 [122.103.236.237:4569]
   USERNAME        : 858???
   REFRESH         : 60

Rx-Frame Retry[ No] -- OSeqno: 000 ISeqno: 001 Type: IAX     Subclass: REGACK
   Timestamp: 00003ms  SCall: 00008  DCall: 00005 [122.103.236.237:4569]
   USERNAME        : 858????
   DATE TIME       : 2009-06-17  13:43:42
   REFRESH         : 60
   APPARENT ADDRES : IPV4 222.149.22.251:60003
   MESSAGE COUNT   : 0
   CALLING NUMBER  : 858???

Tx-Frame Retry[-01] -- OSeqno: 001 ISeqno: 001 Type: IAX     Subclass: ACK
   Timestamp: 00003ms  SCall: 00005  DCall: 00008 [122.103.236.237:4569]

Qualify

Qualify(生存確認:王大人パケット)はAsteriskのバージョンおよびプロトコル(SIP or IAX)により
設定内容が異なったりする。

SIP

sip.confに書くとOK

qualify=yes
生存確認パケットを投げる
qualify=4000
生存確認パケットを投げ、4000ms(4秒)以上遅れた場合は王大人により、死亡が認定される。
WiFi電話機はこの値を大きめにしておくこと。(5000ms位でも良いかもしれない)
qualify=no
生存確認パケットを投げない。王大人をクビにする。
qualifyfreq=1
生存確認パケットを秒刻みで設定する。王大人が1秒毎に出現する。デフォルト値は60000 ms(60秒)
Asterisk1.6以降で使用可能

IAX

iax.confに書くとOK
内容としてはSIPと大して変わらないものの、古いバージョンから生存パケットの間隔を設定できるので、パケット増幅スキーな人にIAXオススメ

qualify=yes
生存確認パケットを投げる
qualify=4000
生存確認パケットを投げ、4000ms(4秒)以上遅れた場合は死にかけと判断される。(Status:LAGGEDになる)
qualifyfreqok=400
生存確認パケットをミリ秒刻みで設定する。1に設定すると、アクセスランプが素敵な状態になる。
qualifyfreqnotok=3
生存確認パケットを投げ、3ms(3ミリ秒)以上遅れた場合は王大人により、死亡が認定される。

声優さん

voip-info.jpで配布している日本語音声は竹田えり さんなのはよく聞くが、他の声優さんに頼んだ場合は、いくらかかるのだろうか
という訳で、ぐーぐる先生に聞いてみた。

Asteriskに投資するぜ!イエア!!!という意味で、竹田えりさんバージョン以外に、日本語音声ファイルを作ってみるのも悪くないかもしれないですな!

STARS SYSTEM Ltd.
「電話用音声メッセージをAsterisk等で即利用可能な形式で録音いたします。」らしい。
で、いくらなんだろう。
音響・声優事務所 Sham.Studio.
1日/8時間 \100,000~ らしい。
はてな
Q.声優さんの相場を教えてください。 A.相場はありません。
AtelierPeach-FAQ-
5万円くらいか? 判りやすい。
ネット声優(wikipedia)
その存在を初めて知ってしまった。
個人ベースで依頼するなら、こっちかな(´-`)

余談

  1. 某コールセンターでは、声に定評のある社内オペレータさんにIVRの音声を吹き込んでもらっていたそうな。
  2. 外資系では、有名どころの声優さんに吹き込んでもらったそうな。
  3. 音声カスタマイズの際、(数年経過しても)同じ人に声を吹き込んでもらえるかどうか。が難点らしい。

sip.confのpermit/deny

IPアドレスによるACLが組めるっぽいので試してみた。

書いてみる

こんな感じでsip.confに書いてみた

[503]
; Snom300
type=friend
fromdomain=dynamic
username=503
secret=**************
host=dynamic
canreinvite=yes
language=jp
qualify=3000
insecure=very
deny=0.0.0.0/0
permit=10.0.5.0/255.255.255.192
permit=192.168.0.0/24

確認

ACLで接続制限ができたかどうかを確認してみた。
許可されてないIPアドレス帯からregisterしようとすると、下記のような結果になった。

[Jan 25 20:06:13] NOTICE[1904]: chan_sip.c:15236 handle_request_register: Registration from '"503" <sip:503@Asterisk>' failed for '192.168.5.57' - Device does not match ACL

書き方のコツ

まずはALL Denyで全部不許可にした上で、接続を許可するIPアドレス帯をpermitで指定するのが良さげな感じ
下記のような書き方が宜しい

deny=0.0.0.0/0
permit=10.0.5.0/255.255.255.192
permit=192.168.0.0/24

playtones遊び

テンポ120で四分音符の箔を打つ場合、60000ms(1分)の中で120回リズムを刻むわけで
60000/120=500となる

テンポ120で8分音符の箔を打つ場合は、箔がその倍なので(240個のリズム)
60000/240=250となる
簡単な曲をPlaytonesで演奏する場合は、このような形で書くことになる。

exten => _5,1,Answer
exten => _5,n,Wait(1)
exten => _5,n,Playtones(!293/1000,!440/1000,!391/500,!349/500,!329/500,!261/500,!293/1000,
!523/500,!391/250,!440/250,!349/500,!391/250,!349/250,!329/500,!261/500,!293/8000)
exten => _5,n,Wait(16)
exten => _5,n,StopPlaytones
exten => _5,n,Busy(5)
exten => _5,n,Hangup

実際に書くとしたら、旋律しかない曲(FFの最初の曲とか)に絞って書いてみるとか、
複数の内線(exten複数)に分けて書くとか、そのあたり。
Wait( )でタイミングの同期を取るのは難しいと思われる訳で。

CP-797Xの壁紙設定

Cisco電話機の、SIPファームウェア設定で活きて来るっぽい「壁紙設定の有無」
SCCP電話機にて設定したものの、反応なし。

<commonProfile>
<phonePassword></phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>

IP-24N-ST101Aとテプラ

IP-24N-ST101Aの示名条片をテプラで作成する場合、次の設定でやると上手くいくぽ

  • SS4K(白の4ミリ)を使用する
  • 文字サイズは一行→「大」を設定
  • スペースキーをたくさん入れる

こんな感じで↓

代表1         代表2         代表3         代表4         外線代表         内線代表

スペースは9つくらい挿入しておく

ボタンを4つ使用する場合は、もうちょっと緩めでも気にならない

ぱーく1        ぱ~く2       はーぐ3       ばーく4


AutoAnswer(Astlinux0.4.8限定)

まずは、extension"300"にはモーニングコールなり、MoHなりの処理を設定しておく。
まずは、テキトーに下記のようなテキストファイルを作成しておく

Forneus tmp # cat outband.txt
Channel: sccp/512/aa1w
Callerid: 511
MaxRetries: 1
RetryTime: 5
WaitTime: 3
Context: default
Extension: 300

次に/var/spool/asterisk/outgoing/ に先ほどのファイルをコピーするとOK

Forneus tmp # cp outband.txt /var/spool/asterisk/outgoing/

cronに、コピー処理を埋め込めば定時発信(モーニングコールなど)することができる。

Remote UNIX connection

CLIコンソールに出てくる、下記のメッセージは一体何者か。不届き者か。

   -- Remote UNIX connection
   -- Remote UNIX connection disconnected

で、さっそく調べてみた。
どうやら、他のユーザー、もしくは監視サービス(Zabbix他)がCLI接続したときに出るログらしく、原因は下記の通りとなる

  • 他のユーザーがCLIに入ったかもしれない。
  • asterisk manager (manager.conf)がつなげてるかもしれない。
  • Nagios(のプラグイン)が繋げているかもしれない

対応策としては、下記の通り。

  • こいつは無害なんで気にするな
  • vの数を減らせ(asterisk -vvvvvvvvvvvvvvvvvvvvvrのこと)
  • CLIからログオフしてしまえ