Sakura VPS でIPv6を使ってみた。
方法としては 6to4 と 6rd という方法がとれるらしいが、6rdはCentOSだとカーネル入れ替えが必要になるので、今回は6to4というトンネルを選択。接続先はTokyo6to4です。
方法はいたって簡単。
# vi /etc/sysconfig/network ~ 以下を追加 ~ NETWORKING_IPV6=yes IPV6_DEFAULTDEV=tun6to4
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 ~ 以下を追加 ~ IPV6INIT=yes IPV6TO4INIT=yes IPV6TO4_RELAY=192.88.99.1
後は一端ネットワークを再起動。
# /etc/init.d/network restart
再起動すると、以下のようなインタフェースが表示されます。
# ifconfig tun6to4 tun6to4 Link encap:IPv6-in-IPv4 inet6 addr: 2002:xxxx:xxxx::1/16 Scope:Global UP RUNNING NOARP MTU:1480 Metric:1 RX packets:89 errors:0 dropped:0 overruns:0 frame:0 TX packets:86 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:13543 (13.2 KiB) TX bytes:14628 (14.2 KiB)
ちなみにLinuxでは、ipv6でpingを打つには、ping6を使います。
# ping6 www.iij.ad.jp PING www.iij.ad.jp(2001:240:bb42:b000::1:80) 56 data bytes 64 bytes from 2001:240:bb42:b000::1:80: icmp_seq=0 ttl=58 time=10.2 ms
さらに、 手元のPCからこのサーバに対して、IPv6通信してみたかったので、Softether社提供の実験を使わせてもらい、手元からも無事接続できました。 Windowsの場合、pingコマンドは、IPv4もIPv6も同じpingコマンドを使います。IPv6で強制的にpingを使いたい場合は、-6オプションを使いましょう。
C:\>ping -6 www.iij.ad.jp www.iij.ad.jp [2001:240:bb42:b000::1:80]に ping を送信しています 32 バイトのデータ: 2001:240:bb42:b000::1:80 からの応答: 時間 =60ms
ちなみに、IPv6の場合、IPv4のようにarpがありません。iptablesでファイアウォールを設定している場合、最低限pingなどに応答するには以下のように設定するとよいと思います。マルチキャストなども通したい場合は、適宜 --icmpv6-type の定義を増やしてあげてください。全タイプのicmpを通したいならば、--icmpv6-type ○○○ は必要ありません。
# ip6tables -A INPUT -s ::/0 -d ::/0 -i lo -j ACCEPT # ip6tables -A INPUT -s ::/0 -d ::/0 -m state --state RELATED,ESTABLISHED -j ACCEPT # ip6tables -A INPUT -s ::/0 -d ::/0 -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT # ip6tables -A INPUT -s ::/0 -d ::/0 -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT # ip6tables -A INPUT -s ::/0 -d ::/0 -p ipv6-icmp -m icmp6 --icmpv6-type 133 -j ACCEPT # ip6tables -A INPUT -s ::/0 -d ::/0 -p ipv6-icmp -m icmp6 --icmpv6-type 134 -j ACCEPT # ip6tables -A INPUT -s ::/0 -d ::/0 -p ipv6-icmp -m icmp6 --icmpv6-type 135 -j ACCEPT # ip6tables -A INPUT -s ::/0 -d ::/0 -p ipv6-icmp -m icmp6 --icmpv6-type 136 -j ACCEPT
これで終了と思いきや、これだけではパケットは通らないかもしれません。実は、今回は6to4トンネルを使っているので、IPv4側でファイアウォールが動いている場合は、IPv6がカプセル化されたパケットを許可する必要があります。よって以下のようにipv6パケットは、IPv4側では通過させてあげます。
# iptables -A INPUT -p 41 -j ACCEPT
41というのは、IPv6のプロトコル番号です。これは、/etc/protocols ファイルに記述されていますので、気になる人は覗いてみてください。