#topicpath
IPv6ネタの続き;
前回の日記で、KATOHさんから「カーネルはIPv6に対応しているのでは」
というコメントをいただきましたので、
Plamo 4.6でのIPv6動作状況を調べてみることにしました。
現在、Plamo4.6は、Ubuntu 8.02LTS上のQEMUで
ゲストOSとして動作してます。~
一方、real networkでは、Ubuntuは
家庭内LANのクライアントで、IPv6 internetの
出口はOpenBSD 4.4がルータになっております。
まずは、QEMU上で動いているPlamoを
リアルネットワーク上に参加させます。
ただし、IPv6での通信状況を見たいので、
通常よく使われるQEMUの「-user-net モード」ではなく、
TAP/TUN、およびbridgeデバイスを用い、layer2レベルでの
接続を行ってみます。
接続を図で見ると、以下のようになります;
<Internet>
|
+----pppoe0----+
|gateway |
|OpenBSD | - - - - - -
+-----em0------+ :
| real network
| ethernet
+-----eth0-----+ :
|client \ | :
|Ubuntu \ | :
| br0| - - - - - -
|QEMU / | :
|Host / | :
+-----tap0-----+ QEMU virtual
| network
| :
+-----eth0-----+ :
|Plamo | :
|QEMU Guest |
+--------------+ - - - - - -
この状況でPlamoをブートさせ、
どのようになるのかをUbuntu側でパケットを記録し、見てみました。
Ubuntu # tcpdump -n -i tap0 ip6
tcpdump: WARNING: tap0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 96 bytes
10:48:00.272877 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2,
1 group record(s), length 28
10:48:00.311784 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2,
1 group record(s), length 28
10:48:01.127394 IP6 :: > ff02::1:ff12:3456: ICMP6, neighbor solicitation,
who has fe80::5054:ff:fe12:3456, length 24
10:48:02.147120 IP6 fe80::5054:ff:fe12:3456 > ff02::2: ICMP6, router solicitation,
length 16
10:48:02.380457 IP6 fe80::2a0:24ff:febb:a6b2 > ff02::1: ICMP6, router advertisement,
length 56
10:48:03.252417 IP6 :: > ff02::1:ff12:3456: ICMP6, neighbor solicitation,
who has 2001:3e0:????:1:5054:ff:fe12:3456, length 24
10:53:40.446942 IP6 fe80::2a0:24ff:febb:a6b2 > ff02::1: ICMP6, router advertisement,
length 56
なるほど、Plamoからはルータ要請パケットが出ており、
OpenBSDもそれに対してルータ広告を返しているようです。
今度はPlamo側でネットワーク設定がどうなっているか見てみます。
plamo:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:182 errors:0 dropped:0 overruns:0 frame:0
TX packets:250 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20979 (20.4 Kb) TX bytes:28113 (27.4 Kb)
Interrupt:10 Base address:0xc100
あれ? 設定されていません‥。~
先程のtcpdumpの結果を見るかぎりでは、fe80で始まるリンクローカルアドレスの
付いたパケットが送信されているので、表示されるはずなのですが…。
ルーティングテーブルは、どうなっているでしょうか;
plamo:~# netstat -rn -6
netstat: invalid option -- 6
usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vnNcaeol] [<Socket> ...]
netstat { [-veenNac] -i | [-cnNe] -M | -s }
-r, --route display routing table
(以下略)
netstatコマンドがIPv6に対応していないようです。
先程のifconfigも同様かもしれません。
それでは/proc/netに行き、カーネルインターフェースを直接見てみます。
plamo:~# cd /proc/net
plamo:/proc/net# ls -F
anycast6 ip6_flowlabel netstat route sockstat6 udplite6
arp ip_mr_cache packet rpc/ softnet_stat unix
dev ip_mr_vif pnp rt6_stats stat/ wireless
dev_mcast ipv6_route protocols rt_acct tcp
dev_snmp6/ mcfilter psched rt_cache tcp6
if_inet6 mcfilter6 ptype snmp udp
igmp netfilter/ raw snmp6 udp6
igmp6 netlink raw6 sockstat udplite
if_inet6というのがそれっぽいですね。
plamo:/proc/net# cat if_inet6
00000000000000000000000000000001 01 80 10 80 lo
200103e0????0001505400fffe123456 02 40 00 00 eth0
fe80000000000000505400fffe123456 02 40 20 80 eth0
ビンゴでした。~
fe80で始まるリンクローカルアドレスも、
2001で始まるグローバルアドレスもちゃんと付いています。
本来ならここでping6とかやって、外部到達性を調べればいいのでしょうが、
コマンドが入ってないので、今日はここまでにしておきます。
-まとめ
--カーネルが対応しているので、アドレスの自動設定機能までは働いている((*BSDでは、この部分は一部ユーザランドに任されていて、デーモン(rtsold)を動かしておく必要があります))。 ~
→とりあえずは、エンドノード(クライアント)としては使用可能な状態(おそらく)。
--ユーザランドが対応していないので、それ以上は確認・設定不能 ~
→IPv6ルータとして動作させたり、IPv4トンネル接続をセットアップしたりするには、まだいろいろやる必要あり。
----
-このへん、個人的な優先順位があまり高くないので真面目には調べていないのだけど、最近のLinuxではifconfigとかrouteコマンドはobsoleteで、iproute2由来の ip コマンドに集約しようとしている感じですね。ip コマンドがどこまでv6に対応しているのかは確認してないですが、こんな感じのメッセージは表示されます。
kojima@athlon[~]% /usr/sbin/ip -f inet6 link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:13:d4:de:9b:90 brd ff:ff:ff:ff:ff:ff
分からずに使っているから、「だから何なの?」と言われちゃいそうだけど(^^; -- [[kojima]] &new{2009-03-29 (日) 23:54:09};
----
-いやいやいや、とても参考になります。ipは、ifconfig + netstat + route みたいな感じのコマンドなのですね。こちらの環境でやってみたところ、こんな感じになりました。
plamo:~# ip -f inet6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:3e0:????:1:5054:ff:fe12:3456/64 scope global dynamic
valid_lft 2591744sec preferred_lft 604544sec
inet6 fe80::5054:ff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever
... [[川俣]] &new{2009-03-30 (月) 01:08:56};
----
-FirefoxあたりはIPv6対応してそうな感じなので、やってみたら予想通りOKでした。
#ref(Screenshot-QEMU.png,wrap,33%)
... [[川俣]] &new{2009-03-30 (月) 01:44:23};
-netstat が v6 対応じゃないのは,v4 環境でも不具合が出るので,不具合報告9 を上げてます.:-) -- [[KATOH Yasufumi]] &new{2009-03-30 (月) 11:17:36};
-iproute2 は netlink を使って設定を行うヤツですね.:-) -- [[KATOH Yasufumi]] &new{2009-03-30 (月) 11:18:14};
-ipconfigがobsoteteになりつつあるなどと初めて知りました。変わりつつあるのですね。。。 -- [[通りすがり]] &new{2009-03-30 (月) 21:41:45};