« 光回線の導入 | メイン | JScriptにはまる »

2006年12月15日

linux-igdでIP電話

カテゴリー: [自宅サーバ]

このまえ,回線を光にしたわけですが,IP電話も先週開通しました.
ルータがLinuxなので,UPnP対応のIP電話アダプタをNTTから借りて使ってます.

というわけで,LinuxルータをUPnP対応にしないといけないわけです.
LinuxルータをUPnPのInternet Gateway Deviceにするには,IntelのUPnP SDKと,linux-igdが必要です.
これらのソフトの導入作業は,光が開通した後で動きませんでした,では困るので,光回線導入のかなり前に済ませていたわけです.MSN Messengerとかで動作確認しました.
あとは,IP電話の開通を待つだけだと思っていたわけですが...

IP電話の開通後,設定をして外部からの着信も確認できて一安心と思っていたら,次の日,家族から電話が着信しなかったという電話が.

うまく動かなかったら,かなりまずいなあと思いながら,原因を調査.
ログを見ると,SIPの通信をnetfilterがはじいている様子.
つまりDNATのルールがちゃんと追加されていないわけです.着信しないのは当たり前...

まあ,結論から言うと非常にばかばかしい原因だったわけですが.

/etc/upnpd.confに,ポートマッピングの有効期間が指定されなかった場合の,デフォルトの有効期間の設定があります.
そこに,こう書いてました.

duration = 3:00

単位が「時間」だと思っていたのが,実は,「秒」になっていたようで...
おかげで3秒でポートマッピングが消えてました...ログにもはっきりそう出てました...
というわけで,とりあえず,1時間=3600秒のつもりで,3600:00 としたら動きました.

でも,何かおかしい.どう見ても書き方が変です.
そのときは,時間がなかったので適当だったんですが,
やっぱり,秒なのに":"を付けるのはどう見ても不自然なので,調べなおしてみました.

設定ファイルの説明には,

# seconds | HH:MM - duration from the time of addition

と書いてありました.
つまり,3:00 ではなく,03:00 と書かないといけなかったようです.
":"があって,2桁以上だと単位が時間になるようで,3600:00は時間と解釈され,内部的には,3600×3600=12960000秒になってました...
長すぎたんで,うまく動いてたんですね.

このあたりは,linux-igd の config.c にデバッグ用と思われる main関数があったので,それを使っていろいろ試してみてわかりました.
というわけで,問題解決.
というか,説明を良く読めと言うことですか...

ちなみに,IP電話アダプタは,30分ごとにポートマッピングを再設定してきますので,それより長ければ問題ないようです.

さて,電話代はどのくらいやすくなるんだろうか.

投稿者 shingo : 2006年12月15日 23:44

トラックバック

このエントリーのトラックバックURL:
http://isolinear.info/cgi-bin/mt/mt-tb.cgi/229

このリストは、次のエントリーを参照しています: linux-igdでIP電話:

» web拍手を作りましょう。 from web拍手って何だろう?これから一緒に作ってみよう。すぐできます。
web拍手を作ってみたいという人のためのサイトです。 お役に立てれば幸いです。 [続きを読む]

トラックバック時刻: 2006年12月16日 09:25

コメント

コメントしてください

コメントスパム等の対策のために,大量のURLを含むコメント,古いエントリーに対するコメント,連続したコメントなどは,一旦保留されます.




保存しますか?