■Linux+SwichingHUBでする理由 |
Bフレッツは、論理上100Mbpsは出る事になっている。
そして、Bフレッツ対応のブロードバンドルータがNTTから出ているわけですが(WebCaster
100)
「最大30Mbpsの高速インターネット」と堂々と宣伝してるわけです。商売はこうで無くてはいけません(w
普通なら、なんやそれは!!
となると思いますが、わたしは営業もほんの少しかじった事があるので、これはこれで良いと思っています。
余談は置いておいて・・使う側からしてみれば納得はいきません。
そこで、Linuxは、チューニングにより速度が改善されるわけですから、100Mbps対応のHUBにVoIPアダプタを刺して、Linux側でUPnPを再現させてあげれば、家内では、100Mbpsを保ちつつ、外にもある程度の速度を持って通信ができるようになります。
こういったことから、Linux+SwichingHUBでIP電話をしようと思い立ったわけです。
(実は新しくルータ買うのもったいないとか言うのも内心・・・)
使用している、スイッチングHUBは、プラネックスのFX-16HNという商品です。
細かいデータもこちらに表示されてますが、勉強不足で単位がわかりません(汗
そして、無職のため面接に行き不採用も頂きました(w
それもさておき商品は性能良いし3,4年たったような気がしますが異常はありません。
|
|
■必要なモジュール(2004/01/21現在) |
upnpsdk-1.0.4.tar.gzをダウンロード。http://upnp.sourceforge.net
linuxigd-0.92.tgzをダウンロード。http://linux-igd.sourceforge.net
reaim-0.8.tar.gzをダウンロード http://reaim.sourceforge.net
|
|
■各モジュールの機能と必要と思われる用語 |
各モジュールの機能 |
|
UPnP |
ようは、UPnPに対応した機器であれば、伝送経路を問わずに情報交換が出来るというもの。無線だろうがLANだろうが電力線でもなんでも |
UUID |
世界中で重複することが無い事を保証した数値。
UPnP SDKをコンパイルする時に必要になってくる。
これらは、128bitのランダムな数値で構成されている。 |
linuxigd |
UPnP SDKとiptablesを使用し、Linuxルーター上でUPnPを実行するモジュール。 |
ReAIM |
AOL、ICQ、MSN などで、ファイル転送をする時に必要。IP電話とは直接には関係してないが、音声チャットの時も必要と思われる。
ICQでは、ダイヤル機能を持った特殊な通話もあるので、そういったときに必要になってくるかもしれないが、日本でのサービスは確認できなかった。
IP電話では特に必要ないので、インストール方法は省く。 |
IP電話で使われる用語 |
SIP |
Sesson Initiation Protocolの略。
VoIP通話を実現する手段を規定したプロトコル(国際標準規格) |
VoIP
|
Voice over IPの略。
IPパケットに音声や発信、切断などの電話操作、接続先の電話番号などの接続先と交換する情報を載せ、IP網を経由して通話を実現する技術 |
|
|
■各種コンパイル |
Intel UPnP SDKをコンパイルする(libupnp.so)
# tar zxvf upnpsdk-1.0.4.tar.gz
cd upnpsdk-1.0.4
vi src/ssdp/ssdplib.c の406行目(MSNを正しく動作させるために、以下の部分を書き換える)
SelfAddr.sin_addr.s_addr = inet_addr(SSDP_IP);
↓
SelfAddr.sin_addr.s_addr = htonl(INADDR_ANY);
変更後、upnpsdk-1.0.4のディレクトリ上で
# gmake
# gmake install を行う。
※uuid.hが無いと言われてエラーが出る場合、e2fsprogs-develパッケージを入れなおすと、uuid.hがインストールされる。
|
|
UPnP Gatewayをコンパイルする
# tar zxvf linuxigd-0.92.tgz
# cd linuxigd
# gmake
# gmake install
作成されたファイル
|
/usr/bin/upnpd |
(daemon) |
/etc/linuxigd |
(directory) |
|
|
■ルーティングの設定 |
# route add -net 239.0.0.0
netmask 255.0.0.0 <内側(LAN側)のインターフェース>
# route add -net 239.0.0.0 netmask 255.0.0.0 eth1 (実際に追加したルーティング)
#route
Destination |
Gateway |
Genmask |
Flags |
Metric |
Ref |
Use |
Iface |
192.168.1.0 |
* |
255.255.255.0 |
U |
0 |
0 |
0 |
eth1 |
239.0.0.0 |
* |
255.0.0.0 |
U |
0 |
0 |
0 |
eth1 |
127.0.0.0 |
* |
255.0.0.0 |
U |
0 |
0 |
0 |
lo |
以下 ppp0は、外に設定されている。 |
|
UPnPはルーティングにマルチキャストアドレスを使用するので、ルーティングテーブルに静的ルーティングを設定する
マルチキャストアドレスとはクラスDのアドレスであり、このクラスには224.0.0.1から239.255.255.255の範囲のIPアドレスが含まれる。
クラスDはアドレス一つが、一つのホストグループを表します。
|
|
■FireWallの設定(とりあえず繋がったので自己流に判断) |
//example(ルールででOUTPUTをDROPしてる場合に必要と思われる設定)
iptables -I OUTPUT -s $external_ip -d 239.255.255.250/32 -j ACCEPT
iptables -I OUTPUT -s $local_ip -d 239.255.255.250/32 -j ACCEPT
linux-igd/pmlist.cpp に下記の設定を追加する。: ///addPortForward に追記
特に必要ないと思われるが、どこのサイトもこう書いてあったので・・(うちは、変更してない)
sprintf(command, "/usr/sbin/iptables -I FORWARD -p %s -d %s --dport
%d -j ACCEPT", prt, IntIP, IntPort);
system(command); ///delPortForward に追記
sprintf(command, "/usr/sbin/iptables -D FORWARD -p %s -d %s --dport
%d -j ACCEPT", prt, IntIP, IntPort);
system(command);
//iptablesの設定(これを設定しない場合上記の改造が必要とも思われる)
//udpの5060は、IP電話へかける時に必要(VoIPアダプタが、102.168.1.201になってると仮定)
iptables -t nat -A PREROUTING -i ppp0 -p udp -m udp --dport 5060 -j
DNAT --to-destination 192.168.1.201
//udp5090-5091は一般電話へかける際に必要
iptables -t nat -A PREROUTING -i ppp0 -p udp -m udp --dport 5090:5091
-j DNAT --to-destination 192.168.1.201
//VoIPを、グローバルから発信してるようにさせるため必要かと思った(いらないかもしれん)
iptables -t nat -A POSTROUTING -s 192.168.1.201/32 -o ppp0 -j SNAT --to
[ppp0のIP]
2004/01/24日現在では、携帯電話への発信は不可、携帯からの着信も不可
※一部、ぷららでは、ドコモの携帯のみ対応すると発表している。今後、各プロバイダへの普及も見込まれると思われる。
|
|
■実行 |
#/usr/bin/upnpd ppp0 eth1
4〜5分で、VoIPのランプがつく。10分立ってもつかなければ、どこか設定がおかしい。
特に一般加入件と併用しなくても使うことは出来るが、アラームランプは始終点滅しまくる。
おそらく、一般回線をつなげば、アラームランプの点滅はなくなると思われ。 |
|
■UPnP関連の開発ライブラリ |
http://www.soba-project.org/jp/
|
|
■参考ページ |
http://kinneko.homelinux.net/wiki/LinuxUPnP
|
|
■後記 |
とりあえず動いたが、改めて見直していると、かもしれんという文章が多すぎる。
書いてて自分でもよく判ってないんです。 |