| ■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 
          | 
    
     
       | 
    
     
      | ■後記 | 
    
     
      とりあえず動いたが、改めて見直していると、かもしれんという文章が多すぎる。 
        書いてて自分でもよく判ってないんです。 |