IPv6のネットワーク構築 無線LAN

IPv6使ってネットワークを構築しました.

目標

無線LAN(GW-US54Mini2B)を使って,2台のノートPC(Vine Linux "カーネルバージョン2.6.16-0vl68")を繋げる.しかもIPv6で繋げる.
このときアクセスポイントやルータを使わない.GW-US54Mini2B同士を直接繋げる.所謂アドホックネットワークを目指す.

アドホックネットワークとは - IT用語辞典
無線LANのようなアクセスポイントを必要としない、無線で接続できる端末(パソコン、PDA、携帯電話など)のみで構成されたネットワーク。「無線アドホックネットワーク」、「自立分散型無線ネットワーク」とも言われる。

IPv6 - Wikipedia

背景

(中略)
深刻なIPv4アドレスの不足(IPアドレス枯渇問題)が一番の原因と指摘されていた。
また、IPv4では十分な固定アドレスの割り当てを受けるのが難しいことから、末端サイトにおいてはNAPTの利用が常態化し、P2Pアプリケーションの利用に制約が出たり、VPNでサイト間を接続する際にプライベートアドレスが衝突したりといった弊害が起きていた。
(中略)

IPv6導入のメリット

(中略)
DHCPサーバーが無くても、ホストには自動的にIPアドレスとデフォルト経路が設定される。

無線LANを使えるようにする

今回使用したGW-US54Mini2BのドライバはWin用とMac用しか用意されていないので,Linuxで動くようにがんばる.
といってもドライバを一から自作する…なんてことはしなくてすんだ.peugeot405.orgにあるとおりにやればできる.

一応まとめておく
1) http://www.ralinktech.com/ralink/Home/Support/Linux.htmlからRT73_Linux_STA_Drv1.0.4.0.tar.gzをダウンロードし,展開する.
2)

{USB_DEVICE(0x2019,0xab50)}, /* Planex GW-US54MINI2 */ \

の一行をrtmp_defs.h の #define RT73_USB_DEVICES { ... } の中に追加する.
3) あとは中にあるREADMEファイルを参考にしてコンパイルする.

1> $tar -xvzf RT73_Linux_STA_Drv_x.x.x.x.tar.gz
    go to "./RT73_Linux_STA_Drv_x.x.x.x/Module" directory.
    (引用者注:以下のコマンドはこのディレクトリで行う)

2> $cp Makefile.4  ./Makefile       # [kernel 2.4]
   (引用者注:カーネルのバージョンが2.4シリーズの場合はMakefile.4の名前をMakefileに変更する)
    or
   $cp Makefile.6  ./Makefile       # [kernel 2.6]

3> [kernel 2.4]
    $chmod 755 Configure
    $make config         # config build linux os version
    (引用者注:カーネルバージョンが2.4シリーズの場合はバージョンを調べて,configの中身を書き換えてからmakeする必要があると思う)

4> $make all            # compile driver source code
    (引用者注:コンパイルする.エラーがなければすんなり通ります)

5> $cp rt73.bin /etc/Wireless/RT73STA/	    # copy firmware

6>  $dos2unix rt73sta.dat
    $cp rt73sta.dat  /etc/Wireless/RT73STA/rt73sta.dat       
    # !!!check if it is a binary file before loading !!!  

7> $load                
    #[kernel 2.4]
    #    $/sbin/insmod rt73.o 
    #    $/sbin/ifconfig rausb0 inet YOUR_IP up

    #[kernel 2.6]
    #    $/sbin/insmod rt73.ko
    #    $/sbin/ifconfig rausb0 inet YOUR_IP up
    (今回はifconfig rausb0 upって打つだけで良い.インタフェースを立ち上げることができさえすれば…)

4) 7>で起動する前に/etc/Wireless/RT73STA/内のrt73sta.datを編集する必要がある.これもREADMEを参考にする.

# Use "vi -b rt73sta.dat" to modify settings according to your need.
# 
# 1.) set NetworkType to "Adhoc" for using Adhoc-mode, otherwise using Infrastructure
(引用者注:今回はAdhocモードで通信したいのでデフォルトのInfraをAdhocに書き換える)
# 2.) set Channel to "0" for auto-select on Infrastructure mode
# 3.) set SSID for connecting to your Accss-point.
# 4.) AuthMode can be "WEPAUTO", "OPEN", "SHARED", "WPAPSK", "WPA2PSK", "WPANONE"
# 5.) EncrypType can be "NONE", "WEP", "TKIP", "AES"
# for more information refer to the Readme file.
(引用者注:他は別にいじる必要性はなかった)

IPv6

2台のPCともに以上のようにセットアップして,無線LANを使えるようにして…IPv6でネットワークを構築する.
この時点でifconfigしてみると…

rausb0    リンク方法:イーサネット  ハードウェアアドレス **:**:**:**:**:**
          inet6アドレス: fe80::290:ccff:fee5:ed95/64 範囲:リンク (引用者注:このアドレスは勝手に割り振られるみたいだ.MACアドレスとかで計算してるらしい)
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RXパケット:130 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1603 エラー:0 損失:2 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RX bytes:7863 (7.6 Kb)  TX bytes:130812 (127.7 Kb)

こんな感じになっている.これに

[root@localhost root]# ifconfig rausb0 add 2001:240:ff:1::10/64 up

というコマンドでIPv6のアドレスを追加する.

rausb0    リンク方法:イーサネット  ハードウェアアドレス **:**:**:**:**:**
          inet6アドレス: 2001:240:ff:1::10/64 範囲:グローバル
          inet6アドレス: fe80::290:ccff:fee5:ed95/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RXパケット:136 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1817 エラー:0 損失:2 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RX bytes:8157 (7.9 Kb)  TX bytes:148356 (144.8 Kb)

すると,こんな感じになる.これで設定終了だったりします.(もう片方のPCには2001:240:ff:1::11/64というアドレスを与えてやります.)
arpとかDHCPとか無いんですね…つかよくわからん.なんでこれだけで繋がるんだろうか?)
2001:240:ff:1::11/64のPCの方のインタフェース情報

rausb0    リンク方法:イーサネット  ハードウェアアドレス **:**:**:**:**:**
          inet6アドレス: 2001:240:ff:1::11/64 範囲:グローバル
          inet6アドレス: fe80::290:ccff:fee2:a97b/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RXパケット:3291 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:643 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RX bytes:8157 (180.3 Kb)  TX bytes:65472 (63.9 Kb)

接続確認(テスト)

2001:240:ff:1::10/64のPCでping6をリンクローカル/全ノード/マルチキャストアドレス「ff02::1」に飛ばしてみる.

[root@localhost root]# ping6 -I rausb0 ff02::1
PING ff02::1(ff02::1) from fe80::290:ccff:fee5:ed95 rausb0: 56 data bytes
64 bytes from fe80::290:ccff:fee5:ed95: icmp_seq=0 ttl=64 time=0.239 ms
64 bytes from fe80::290:ccff:fee2:a97b: icmp_seq=0 ttl=64 time=7.56 ms (DUP!)
64 bytes from fe80::290:ccff:fee5:ed95: icmp_seq=1 ttl=64 time=0.245 ms
64 bytes from fe80::290:ccff:fee2:a97b: icmp_seq=1 ttl=64 time=7.08 ms (DUP!)
・・・・

--- ff02::1 ping statistics ---
8 packets transmitted, 8 received, +8 duplicates, 0% packet loss, time 7001ms
rtt min/avg/max/mdev = 0.239/3.632/7.563/3.390 ms, pipe 2

正直これもよくわかってない.……どうなってるんだろうか?

[root@localhost root]# ping6 2001:240:ff:1::11
PING 2001:240:ff:1::11(2001:240:ff:1::11) 56 data bytes
64 bytes from 2001:240:ff:1::11: icmp_seq=0 ttl=64 time=4.33 ms
64 bytes from 2001:240:ff:1::11: icmp_seq=1 ttl=64 time=2.01 ms
64 bytes from 2001:240:ff:1::11: icmp_seq=2 ttl=64 time=1.99 ms

--- 2001:240:ff:1::11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 1.998/2.781/4.333/1.097 ms, pipe 2

普通にping6を2001:240:ff:1::10のPCから2001:240:ff:1::11のPCに向かって打ってみるとこんな感じです.
グローバルでないリンクに対してping6を打ってみたがだめだった.(fe80::290:ccff:fee5:ed95→fe80::290:ccff:fee2:a97b)

[root@localhost root]# ping6 fe80::290:ccff:fee2:a97b
connect: 無効な引数です



参考文献
http://www.linux.or.jp/JF/JFdocs/Wireless-HOWTO.html
【 ifconfig 】 ネットワーク・インタフェースの参照・設定・起動・停止 | 日経 xTECH(クロステック)
IPv6コース
http://www2h.biglobe.ne.jp/~hnakamur/technolab/freebsd/os/ipv6/ipv6.htm
http://www.dadd9.com/tech/networkadmin_04.html
http://query.freak.ne.jp/howtouse.html
IPv6ネットワーク構築とパケットフィルタリング (2/3):Linuxで作るIPv6ネットワーク環境(3) - @IT
IPv6 コマンド仕様