#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};

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS