« 光回線の導入 | メイン | 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