Android-Asteriskの内線通話が20秒ほどで切れる

Android携帯をAsteriskに登録して内線化を試しています。
エコーテストが20秒ほどで切れてしまいこまっていたのですが、やっと継続するようになりました。

-- Registered SIP '206' at 123.234.111.222 port 5060
-- Saved useragent "3CXPhone for Android 1.2.3" for peer 206
[Sep 19 01:27:12] NOTICE[7578]: chan_sip.c:13404 handle_response_peerpoke: Peer '206' is now Reachable. (125ms / 2000ms)
-- Executing [333@default:1] Answer("SIP/206-00000000", "") in new stack
-- Executing [333@default:2] Wait("SIP/206-00000000", "2") in new stack
-- Executing [333@default:3] Playback("SIP/206-00000000", "demo-echotest") in new stack
-- Playing 'demo-echotest' (language 'jp')
[Sep 19 01:27:46] WARNING[7578]: chan_sip.c:2013 retrans_pkt: Maximum retries exceeded on transmission 6Q.lZQB4kfLjG.EV7Pke3GSVLhBsN9Ju for seqno 14864 (Critical Response) -- See doc/sip-retransmit.txt.
[Sep 19 01:27:46] WARNING[7578]: chan_sip.c:2035 retrans_pkt: Hanging up call 6Q.lZQB4kfLjG.EV7Pke3GSVLhBsN9Ju - no reply to our critical packet (see doc/sip-retransmit.txt).
== Spawn extension (default, 333, 3) exited non-zero on 'SIP/206-00000000'
-- Unregistered SIP '206'
atom*CLI>

Asterisk NAT
http://voip-info.jp/index.php/Asterisk_NAT

対策:
sip.conf にexternhostを追加しました。

追記
じつは、接続が20秒で切れる状態が役立ったことを経験しました。
それは、Asteriskにレジストリされて国際電話を発信されたのですが、通話は全て20秒で切断されたので高額請求を回避できたのです。
会社での昼休み家のサーバーにアクセスしてCDR(通話ログ)を確認したところ、010ではじまる記録が!
帰宅してログを調べたところ、パスワードを突破されていました。
すぐにパスワードの強化、国際通話の禁止、通話時間の制限、レジストリ時間の短縮、発信された番号をブラックリストに登録等の対策を行って様子をみています。
でも、何の意味があってこんなことするのでしょうか。通話相手のことを考えるとはずかしくないんですかね。そのへんの感覚が謎です。

2010.10.3 更新
評価中のアプリ
CSipSimple
3CXPhone
Linphone

CSipSimple
BeagleBoard*CLI> sip show peer 207
* Name : 207
Secret :
MD5Secret :
Context : default
Subscr.Cont. :
Language : jp
Accountcode : 0207
AMA flags : Unknown
Transfer mode: open
CallingPres : Presentation Allowed, Not Screened
Callgroup : 1
Pickupgroup : 1
Mailbox : 207
VM Extension : asterisk
LastMsgsSent : 0/0
Call limit : 0
Dynamic : Yes
Callerid : "@207" <207>
MaxCallBR : 384 kbps
Expire : 288
Insecure : no
Nat : Always
ACL : No
T38 pt UDPTL : No
CanReinvite : No
PromiscRedir : No
User=Phone : No
Video Support: No
Trust RPID : No
Send RPID : No
Subscriptions: Yes
Overlap dial : Yes
DTMFmode : rfc2833
LastMsg : 0
ToHost :
Addr->IP :
Defaddr->IP : 0.0.0.0 Port
Def. Username: 207
SIP Options : (none)
Codecs : 0xe (gsm|ulaw|alaw)
Codec Order : (ulaw:20,alaw:20,gsm:20)
Auto-Framing: No
Status : Unmonitored
Useragent : CSipSimple
Reg. Contact : sip:207@


2011.7.31 更新

http://shanghai.at.webry.info/201107/article_4.html
に記しましたが、「Android-Asteriskの内線通話が20秒ほどで切れる」は続いています。

Windows 3CXPhoneからNTT docomo XCでAsteriskに接続では安定します。同じサーバーで、AndroidアプリではSIP接続が20秒程で切れ、Windowsアプリは問題ありません。

NAT越えの動作や設定に差異があるのか、理由は確認できていません。

現状、Androidで外から接続する時はVPN(PPTP)を利用してローカルに接続するのが解決策となっています。しかし、これはこれで通話後にPPTPの接続が不安定になることがあり、1時間に1回AsteriskをリロードするのとPPTPを再接続することで対策しています。(最大1時間後に利用可能になる対策)3G回線からSIP Phoneが利用できるようになったため、PPTPによる接続は止めました。

AsteriskのIAXプロトコルを利用したAndroidアプリIaxAgentを使用すると、3G回線の接続で通話が切れることはありません。使い方がわかりにくいのとマルチアカウントに対応していません、それと通話後に時々接続が不安定になるので上記と同様の対策が必要です。IaxAgentはAsteriskの再起が必要な状況になるため、使用を止めました。

メモ
- ソフトバンクの3G回線でHTX Desireからpingを実行すると、3割ぐらいロストします。調べたところ、インターネットではpingが通らないこともある様なのですが、一部と言うのは気になります。
- IAX,SIP 共にfail2banを設定

対策
sip.conf にdirectmedia=yesを記述すると、SIP Phoneを3G回線から接続ができました。

; Asterisk 1.8
; 廃止canreinvite ;移行directmedia
directmedia=yes

以上

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック