WindowsXPでIPv6を使ってみる

WindowsXPの場合は簡単です。今回は、Tokyo6to4 PROJECTのページの記載と、アクセンステクノロジー社のWebの記述を参考にしました。

コマンドプロンプトで「ipv6 install」と入力します。「Installing…」と表示され、しばらくすると「Succeeded.」と表示されます。

次に、teredoのサーバを教えてやります。(Miredoの開発者が提供しているサーバではうまくいかないようです)

netsh interface ipv6 set teredo enterpriseclient teredo.ipv6.microsoft.com

その後、ポリシーテーブルを変更してIPv6を優先で使うために、以下の内容を入力します。

netsh interface ipv6 set prefixpolicy ::1/128 50 0
netsh interface ipv6 set prefixpolicy ::/0 40 1
netsh interface ipv6 set prefixpolicy 2002::/16 30 1
netsh interface ipv6 set prefixpolicy ::/96 20 3
netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 10 4
netsh interface ipv6 set prefixpolicy 2001::/32 30 1

赤字の部分はtokyou6to4のサイトの記述から変更した部分です。変更しないとブラウザでhttp://www.kame.netにアクセスしても亀さんが踊ってくれませんでした。本当はもうちょっとちゃんと設定値を考えないといけないのでしょうが、とりあえずここまでということで。

・・・というわけで、あっさり完了です。

元に戻すときは、

  • 「ipv6 reset」でIPv6の設定を初期化
  • 「ipv6 uninstall」でIPv6をアンインストール
  • 「netsh interface ipv6 reset」でポリシーテーブルをデフォルトに戻す

ということのようです。

・・・・と思ったら、一度アンインストールしたら同じ手順では動かなくなってしまいました。tracert6などは正常に動作していますが、なぜかブラウザではアクセスできません。

で、いろいろ1時間くらい悩んだ結果、一瞬だけKerperskyの動作を禁止し、その間にアクセスすると、その後は大丈夫(再起動しても大丈夫でした)、ということがわかりました。一体何なんでしょうね・・・。

UbuntuでIPv6対応する手順のまとめ

先の記事では作業過程で書いていたので、結局何が必要なのかわかりにくくなってしまいました。他のPCでもIPv6対応するときのために、NAT環境下のUbuntu10.04LTSでIPv6対応する手順をまとめておきます。(自分では確認していませんので、そのつもりで見てください)

  1. Gufwをインストールして起動する(これはIPv6のためではありません)
    クライアントPCなら設定はそのまま(受信はすべて拒否)でOK
  2. ufwの設定として、/etc/ufw/ufw.conf に
    IPV6=yes
    と書き足して、IPv6を使うことを知らせる。
  3. Synapticパッケージマネージャでmiredoを選択してインストールする
  4. Teredoサーバを選択するなら、/etc/midero.conf を編集する
  5. ネットワークマネージャの接続情報で、ターゲットとなる設定のIPv6設定の「メソッド」を「無視」に設定する
  6. ホスト名の解決のため、/etc/gai.confの
    #label 2001:0::/32 7
    という行を、
    label 2001:0::/32 1
    に修正する
  7. 再起動する
  8. ブラウザで http://www.kame.net に接続し、踊る亀が見えればOK

と、意外にあっさりしたものになりました。

UbuntuにIPv6パッケージ(miredo)を入れる

FireWallも入ったので、いよいよIPv6にトライしていきます。

  1. まず、Ubuntu用のTeredoパッケージ(という位置づけでいいのかな?)のmiredoを入れます。例によってSynapticから検索してインストールするだけです。
  2. pingを打ってみます。
    ~$ ping6 www.kame.net
    PING www.kame.net(2001:200:xxx:xxxx:xxx:xxxx:xxxx:xxxx) 56 data bytes
    ping: sendmsg: Operation not permitted
    ping: sendmsg: Operation not permitted

    ということで、名前解決はできているようなのですが、ping自体がエラーになります。うーん。

  3. その他情報取得
    ・インタフェース情報: $ ifconfig teredo
    ・設定情報: /etc/miredo.conf にある
    (デフォルトでは、teredo-debian.remlab.net がteredo serverのようである)
    ・Routing Tableの表示:
    $ ip -6 route show
    $ route -A inet6
    $ netstat -rn -net6
  4. Gufwでファイヤウォールの動作を停止すると、ping6が通ることがわかりました。
    そこから、ufwの設定として、/etc/ufw/ufw.conf に
    IPV6=yes
    と書き足してやることが必要なことがわかりました。
  5. 次に、ネットワークマネージャのアイコン(通常だと右上のネットワーク状態を示すアイコン)を右クリックして、「接続情報」を選択します。
  6. ターゲットの無線接続(もちろん有線でもいいはず)を選択し、「編集」を押す。
  7. その中の「IPv6設定」タブを選び、「メソッド」を「自動」に変更して、「適用」を押す。
    →ここは再起動するとこれではダメで、「無視」にしておかないと再起動時に一切通信できなくなってしまう。「無視」のままでもTeredoにはつながっている。
  8. なぜか一旦Gufwの動作中を外してやると、その後はping6が通るようになった。(戻しても大丈夫だった)
  9. ダイレクトにURLに「http://[2001:200:dff:fff1:216:3eff:feb1:44d7]/」といれてやると、www.kame.netの踊る亀(これはIPv6で接続すると踊る亀になり、IPv4で接続すると踊らない亀になる)を見ることができた!
  10. ホスト名の解決について、

    /etc/gai.conf の
    #label ::1/128       0
    #label ::/0          1
    #label 2002::/16     2
    #label ::/96         3
    #label ::ffff:0:0/96 4
    #label fec0::/10     5
    #label fc00::/7      6
    label 2001:0::/32   1

    の最後の行が元々7になっているのを1にしてコメントアウトするとホスト名が引ける、という情報があったが、(試している時点では)うまくいっていない。

再起動してみたところ、 IPv4のアドレスすら取得できず、一切通信ができなくなってしまった。syslogを見ると、IPv6のアドレス取得に失敗してすべてを放棄してしまっているようなので、ネットワーク設定で「『IPv6設定』タブを選び、『メソッド』を『自動』に変更」したところを、『無視』に変更したところ、アドレス取得がうまくいくようになった。そして、そのまま http://www.kame.net にアクセスしたところ、踊る亀が見えるようになった!(嬉しい!)

参考にしたページ
UbuntuでIPv6(とある技術屋の戯言さん)・・・設定情報を参考にさせていただきました
・その他ググったら出てきたページ(あっちこっち見てたのでわからなくなりました。ごめんなさい。)

Ubuntuで802.11nを動かす(4)Gufwの導入

よくみるとわけのわからないタイトルだった前回ですが、気を取り直して(?)Ubuntuに戻ります。

IPv4プライベートアドレスの元でも、IPv6の導入によって(たぶん)外界に晒されることになるのでFireWallくらいは設定しておくことにします。

調べると、UbuntuではGufwというのが定番なようなので、これを導入します。導入にあたっては、「Gufw Ubuntuのファイアウォールで外部からのアクセスを拒否する」のページを参考にさせていただきました。

  1. 例によって、Synapticパッケージマネージャで検索すると、一発で見つかりますので、インストールします。
  2. インストールが完了すると、「システム」→「システム管理」→「ファイアウォールの設定」で設定を確認できるようになります。初回起動時は、
    となっていて、動作していません。
  3. そこで、「□ 動作中」にチェックを入れると、となって動作を開始します。デスクトップ環境なので、とりあえず設定はこれだけです。

Ubuntuで802.11nを動かす(3)WindowsXPで動かしてみる

USBメモリ上のUbuntuで動くようになったところで、ついでにHDDにインストールされているWindowsXPでも動くようにすることにしました。

#USBメモリで動かすからといって、遅い以外は作業は何も変わらないんですけどね。

添付されている説明によると、CD-ROMのインストーラに沿って作業するだけ・・・のはずです。

アダプタを接続する前にCD-ROMのインストーラを起動して、指示にしたがえ、とのことなので、そのようにしました。

・・・・・・

しかし、最後に「ドライバをインストールできませんでした」と表示してそれっきり・・・。

・・・・・・

結局、PLANEXのホームページから最新版のドライバをダウンロードしてインストールしたら動くようになりました。添付CDROMの意味無いじゃん・・・。

USBメモリへのLinuxインストールの落とし穴

先にPuppyLinuxをUSBメモリにインストールする方法を書きましたが、超小型のMicroSDカードリーダ用に余ったMicroSDで1つ仕立てようとしたらうまく行きません。作ったものが「Boot Error」と表示されるばかりで起動できません。

なぜかと3時間くらい試行錯誤してしまったのですが、なんどか試しているうちに突然ひらめきました。パーティションを生成する際に、bootflagをセットするのはあちこちで指摘があるのですが、LBAに関してはあまり記載がありません。しかし、普通のMicroSDはすでに1GB以上のものも当たり前になっていて、パーティションを切るならLBAモードでなければなりません。

GPartedは特に指摘してくれるでもないので、何も考えずにパーティションテーブルの生成とパーティションの生成をすると、LBAのflagがセットされていません。この状態で作業を進めると当然アクセスできないはずなのですが、実際にエラーになるのは起動するときだったりします。しかも、メッセージも単純なので悩んでしまうことになります。

というわけで、生成したパーティションがLBAモードかどうかはよくチェックしましょう、という日記でした。

★元ネタの部分にも追記しました

Ubuntuで802.11nを動かす(2)無事に動いた!

≪前回のUbuntuでPlanexのGW-US300MinSを動かす件の続きです≫

で、気を取り直して、ドライバのコンパイルにかかります。

Ralink社のホームページからソフトウェアのダウンロードページに移動します。

名前とメールアドレスを記入すると、ダウンロードがスタートします。(が、異常に時間がかかります。600kB程度で10分くらいかかりました。台湾との線が細いんですかね??)

今回ダウンロードしたのは、「2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2」というファイルで、これを適当なディレクトリに展開しました。

さっそくreadmeを見ると、”MODE = STA”にセットしろ、と書いてありますが、先頭の行は”RT28xx_MODE = STA”だったりします。サーチすると、RT28xx_MODEを使っているところがあるので、そっちが正しいのでしょう(つまり、多分readme.txtがいい加減)。

次に、os/linux/config.mk を修正します。

HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

これらの行はもともと”n”なので、”y”に変更します。

次に、common/rtusb_dev_id.cにデバイスIDを追加します。

{USB_DEVICE(0x2019,0xAB24)}, /* Planex GW-US300MiniS */

という感じです。

$ sudo make
(中略)
$ sudo make install
make -C /home/usb/rt2870/2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux -f Makefile.6 install
make[1]: ディレクトリ `/home/usb/rt2870/2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux’ に入ります
rm -rf /etc/Wireless/RT2870STA
mkdir /etc/Wireless/RT2870STA
cp /home/usb/rt2870/2010_0709_RT2870_Linux_STA_v2.4.0.1/RT2870STA.dat /etc/Wireless/RT2870STA/.
install -d /lib/modules/2.6.32-28-generic/kernel/drivers/net/wireless/
install -m 644 -c rt2870sta.ko /lib/modules/2.6.32-28-generic/kernel/drivers/net/wireless/
/sbin/depmod -a 2.6.32-28-generic
make[1]: ディレクトリ `/home/usb/rt2870/2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux’ から出ます
$

完了後、

$ cd os/linux
$ sudo insmod rt2870sta.ko

した後、 『新しい無線ネットワークを作成』で、WPA-PSKの設定をしてやると認識でき、IPアドレスの取得まではできました。

$ modinfo
filename:       /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko

ということで、読み込まれているのは、stagingの下のファイルのようです。で、rt2870sta.koを検索してタイムスタンプを見ると、

$ ls -la /lib/modules/2.6.32-28-generic/kernel/drivers/net/wireless/rt2870sta.ko
-rw-r–r– 1 root root 688693 2011-02-13 03:04 /lib/modules/2.6.32-28-generic/kernel/drivers/net/wireless/rt2870sta.ko
$ ls -la /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
-rw-r–r– 1 root root 576072 2011-01-11 10:19 /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko

となっており、インストールしたものではないようです。ですので、

$ sudo make uninstall

として、一旦アンインストールした後、makefileを

ifeq ($(PLATFORM),PC)
# Linux 2.6
LINUX_SRC = /lib/modules/$(shell uname -r)/build
# Linux 2.4 Change to your local setting
#LINUX_SRC = /usr/src/linux-2.4
##LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/
LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/staging/rt2870/
CROSS_COMPILE =
endif

と修正しました。(青字がコメントアウトした元の行、赤字が修正後の行です)
改めて、

$ sudo make install

としてインストールすると、

$ ls -la /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
-rw-r–r– 1 root root 688693 2011-02-13 03:32 /lib/modules/2.6.32-28-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
$

となり、タイムスタンプが反映され、以下のようにモジュールとして認識されるようになりました。

$ modinfo rt2870sta | grep 2019
alias:          usb:v2019pAB24d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2019pED06d*dc*dsc*dp*ic*isc*ip*
$

しかし、ifconfigなどで見るとIPアドレスが取れるようになったのですが、外部への接続はまだうまくいきません。なぜか、クラスAのプライベートアドレスを取得しています。(本来はプロバイダから配布されるクラスBのプライベートアドレスのはずなのですが・・・)

が、ネットワークアイコンから再度アクセスポイントを選択したら、なぜか快調につながるようになりました。・・・が、再起動するとNG。

読み込まれているドライバをみると、やはりrt2800usbが読み込まれているようです。ですので、/etc/modprobe.d/blacklist.confに、

# Planex USB Wifi
blacklist rt2800usb
blacklist rt2x00usb
blacklist rt2x00lib

と書き足して再起動しましたが、やはりクラスAのプライベートアドレスを取りに行ってしまいます。

ここで設定をよくみると、adhocモードになっていましたので、一旦無線の設定を消して改めて利用可能なアクセスポイント(AP)を選択して設定し直したら再起動しても安定して動作するようになりました。

・・・というわけで、Ubuntu10.04でPlanexの1000円USB無線LANアダプタ GW-US300MinSが使えるようになりました。802.11nがLinuxで1000円で使えるなんていい時代になったものです。

Ubuntuで802.11nを動かす(1)うまく動かない・・・

外部(といってもクラスBのプライベートアドレスですが・・・)と接続する環境ができたところで、1台のPCを外部向けに使用することにしました。

スペックは、
CPU:Atom330(DualCoreのAtomです)
メモリ:1GB(初期のAtomマザーなので仕方ない・・・)
外部記憶:HDDは160GB(WindowsXPインストール済み)、USBメモリ8GB(Ubuntu10.04)
といった感じです。

このPCに無線LANアダプタを追加します。あきばお~で1000円で売っていたGW-US300MiniSという802.11n(300Mbps対応)のUSB無線LANアダプタです。

Googleさんに聞いてみると、ドライバをコンパイルしてやらなければならないとかいろいろあるようなのですが、とりあえず無線LANアダプタを挿してlsusbしてみます。すると、

~$ lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 2019:ab24 PLANEX
Bus 001 Device 002: ID 090c:6200 Feiya Technology Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
~$

という感じで、デバイス自体は認識しているようです。次に、dmesgして最後の部分を見ると、

[   27.629045] eth4: no IPv6 routers present
[ 2030.498246] lo: Disabled Privacy Extensions
[ 2062.932026] usb 1-6: new high speed USB device using ehci_hcd and address 3
[ 2063.080180] usb 1-6: configuration #1 chosen from 1 choice
[ 2063.142880] cfg80211: Calling CRDA to update world regulatory domain
[ 2063.154160] cfg80211: World regulatory domain updated:
[ 2063.154169] (start_freq – end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[ 2063.154177] (2402000 KHz – 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 2063.154183] (2457000 KHz – 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[ 2063.154190] (2474000 KHz – 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[ 2063.154196] (5170000 KHz – 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 2063.154203] (5735000 KHz – 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 2063.277850] phy0: Selected rate control algorithm ‘minstrel’
[ 2063.279622] Registered led device: rt2800usb-phy0::radio
[ 2063.279699] Registered led device: rt2800usb-phy0::assoc
[ 2063.279763] Registered led device: rt2800usb-phy0::quality
[ 2063.280280] usbcore: registered new interface driver rt2800usb
[ 2063.335154] udev: renamed network interface wlan0 to wlan2
[ 2063.343298] rt2800usb 1-6:1.0: firmware: requesting rt2870.bin
[ 2063.622999] ADDRCONF(NETDEV_UP): wlan2: link is not ready

ということで、なんか認識してるっぽいです。

「システム」→「システム管理」→「ネットワークツール」でみると、なんと認識しています。

「システム」→「設定」→「ネットワーク接続」と進んでみますが、何か変です。普通はAP一覧などがみえると思うのですが、そんな感じではありません。

で、Googleさんに聞いてみると、Ubuntu日本語フォーラムでまったく同じ議論がされているようで、正しいドライバはrt2870staなのに、rt2800usbがロードされてしまう、という問題のようです。

~$ lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 2019:ab24 PLANEX
Bus 001 Device 002: ID 090c:6200 Feiya Technology Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
~$ modinfo rt2800usb | grep 2019
alias:          usb:v2019pAB25d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2019pAB24d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2019pED06d*dc*dsc*dp*ic*isc*ip*
~$ modinfo rt2870sta | grep 2019
alias:          usb:v2019pAB25d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2019pED14d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2019pED06d*dc*dsc*dp*ic*isc*ip*
~$

ということで、rta2870staの方にはv2019pAB24がないので、うまくロードされないようです。

自宅のネットワーク環境更新

IPv6をいじってみることはWindowsでもLinuxでもToredoサービスを使えばできそうなことはわかりました。

具体的にIPv6対応(いじり)を考えた場合、いろんな心配が出てきます。例えば、

  • IPv6では基本的にプライベートアドレスは存在しない(みたいだ)。従来は、ある意味NATルータで外部からのIPアドレス指定攻撃を回避できていたのだが、IPv6では従来のNAT内のPCも外部に見えてしまう。
  • WindowsはKaspersky Internet Securityを入れてあるが、これがIPv6でどこまで対応しているのかわからない(調べればわかるのかもしれないけど)
  • Linuxに関しては、KlamAVしか入れてない(これまではローカルセグメントの下だったので)。UbuntuではGufwというiptablesベースのfirewallが使えるようだ。

などなど、考えるともっとでてくるでしょう。

ここで出てくるもっともシンプルな対策は、

慣れるまで侵入されても深刻な影響がないようにしておく

ということで、実験用のPCは別セグメントに置くことにして、以下の様にすることにしました。

上位のネットワークからはクラスBのプライベートアドレスが振られていますので、すでにNATがかかっています。しかし、この上位のルータの処理はよくわからない(加入者間は分離されていると思うけど、どこにも書いていない)ので、通常使うネットワークは従来通りさらにもう1段ルータを置いた下に置いています。したがって、2段のNATがかかった構成になっています。こちらは万が一の設定ミスなどによるセキュリティ事故を考え、全て有線での接続にしています。

一方で、自宅は壁の中にカテゴリー5eのLANケーブルが配電盤のところから各部屋に通っています。その壁の中のケーブルは通常使うネットワークを優先したい、ということで、実験用のネットワークは従来から無線にしていました。従来は無線ルータでしたので、同様に2段のNATがかかっていましたが、今回はこれを無線アクセスポイントに変更し、ついでに802.11bから設備の更新をすることにしました。実験用のPCは無線APの下にいるAtomPCです。これにUSB無線アダプタを追加します。

で、購入したのが、PLANEXのMZK-W300NH2です。802.11nの無線ルータですが、設定変更でルータ機能の無いアクセスポイントにもなります。一世代前のモデルのようですが、あきばお~で2780円でした。(ちなみに、ジャンク扱いで付属品がACアダプタのみの状態で1000円でも売ってましたが、ジャンクというと動かないジャンクもあるので今回はきちんとした箱に入った状態で購入しました)

早速、設定するとあっさりAndroidからつながるようになりました。しかも、電波も結構強力です。

☆誤って下書きのままになっていたのを公開しました・・・

IPv6に向けて何ができるか?

今年(2011年)の2月3日にIANAの管理するIPv4のクラスAアドレスが残り5個となり、その残り5個を地域インターネットレジストリに割り振った、というニュースが出ました。簡単に言うと、IPv4のアドレス枯渇が目前に来ましたよ、ということです。

IPv4のアドレスが足りなくなるという話は石油の枯渇と同じく1990年代始め頃から聞いていて、その頃はIPngという名称で現在のIPv6プロトコルの検討が行われている、ということを当時のUNIX USERかUNIX MAGAZINEで読んだように記憶しています。その後、NAT(IPマスカレード)の一般化などでどんどんIPアドレス枯渇は先延ばしになり、忘れかけていたところに今回のニュースが飛び込んできました。

というわけで、忘れかけていたところに急に現実味を帯びてきたIPv4アドレスの枯渇とIPv6への本格移行ですが、今なにができるのか調べてみました。(というより、これから使わなければならない新しいものを使ってみておきたい、というだけなのですが。)

ずいぶん昔には、v6 over v4 とか、そんな名前でIPv6パケットをIPv4パケットで包んで送る、というようなこともやられていたようですが、どうやらそれも終わっているようです。じゃあ、プロバイダからのサービスを受けなければIPv6を使ってみることができないのか、と諦めかけていたところ、一つのキーワード「Toredo」が浮かんできました。

☆ちなみにISPのIPv6対応がどうなっているのかはこちらを参照。自分は自力でプロバイダ契約をしているのではなく、マンション丸ごとでプロバイダ契約しているので自力ではプロバイダを選べません・・・。

早速「Toredoサービス」で検索をしてみると、

ということで、とりあえずWindowsでもLinuxでも試してみることはできそうです。