弊社専用サーバサービス、ハウジングサービス、さくらのVPS等、サーバの管理権限(root権)を使用可能なIPv4サービスをご利用のお客様は、サーバの設定を行うだけで簡単に利用することができます(申し込み不要です)。
とある通り(さくらインターネット研究所 「さくらの6rd(トライアル)」より)、「さくらのVPS」だけではなく、専用サーバやハウジングサービスなどでも利用できるサービスで、申込なしで利用可能で、当面は 3/31 までの試験サービス(必要に応じて短縮や延長される)となっています。
IPv4 アドレスについては先日 IANA が持つ中央在庫が枯渇したというニュースもあり、ちょっとタイムリーなねたでもあるので、私が借りているさくらのVPSでもこの 6rd による IPv6 接続を試してみたいと思います。なお、今回のサービスの仕組や概要については、「6rdによるIPv6接続(概要編)」 ( さくらインターネット研究所 ) を参照してください。
とはいっても、今借りているVPS上で動かしている Ubuntu 10.10 Server での設定についてはすでに「6rd設定方法(Ubuntu10.10編)」( さくらインターネット研究所 ) にまとめられていますので、この手順をなぞる格好になります。
早速設定してみよう
「6rd設定方法(Ubuntu10.10編)」( さくらインターネット研究所 )で書かれていることの重複になってしまいますが、設定手順について簡単に説明してみると、VPS に割り振られた IPv4 アドレスが pp.qq.rr.ss だった場合、これから使う IPv6 アドレスを
$ printf "2001:e41:%02x%02x:%02x%02x::1\n" pp qq rr ss 2001:e41:PPQQ:RRSS::1というふうに計算し、その IPv6 アドレスについて /etc/network/interfaces に
auto tun6rd iface tun6rd inet6 v4tunnel address 2001:e41:PPQQ:RRSS::1 netmask 32 local pp.qq.rr.ss endpoint any gateway ::61.211.224.125 ttl 64 up ip tunnel 6rd dev tun6rd 6rd-prefix 2001:e41::/32 up ip link set mtu 1280 dev tun6rdという内容を追加します ( pp.qq.rr.ss および PPQQ:RRSS の部分は割り当てられた IPv4 アドレスにより変化しますので、適宜読み替えて下さい )。その後再起動して、
# ifconfig tun6rd ... # ip tunnel show ... # ip -6 route show | grep default ...の各コマンドで、設定した内容が正しいと確認できれば IPv6 アドレスが使えるようになったことになります。
ICMPパケットを投げてみたけれども...
しかし、ここで例えば
# ping6 www.kame.netとやってみると、この blog を参考にしてVPSサーバを構築した人は多分
PING www.kame.net( ...... ) 56 data bytes ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permittedと表示され、通信できていない状況にがっかりするのではないかと思います。
ファイヤーウォール設定の再調整
実はこの現象は Ubuntu のファイヤーウォール管理プログラム ufw の標準での振る舞いに起因するもので、 ufw のマニュアルに
IPv6 is blocked by default and only IPv6 traffic on the loopback interface is allowed. To change this behavior, set IPV6 to 'yes' in /etc/defaults/ufw and reload ufw.と書いてあるとおりで、 IPv6 でのトラフィックについてはループバックインターフェイス上のものだけを許可する仕様となっているためです。ip6tables コマンドで確認してみても
# ip6tables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all anywhere anywhere Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination ACCEPT all anywhere anywhereと、ufw による制御が行われていないことが確認できます。マニュアルの記述にもありますが、これについては /etc/default/ufw ファイルの冒頭部分を
1 # /etc/default/ufw 2 # 3 4 # Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback 5 # accepted). You will need to 'disable' and then 'enable' the firewall for 6 # the changes to take affect. 7 #IPV6=no 8 IPV6=yes 9 10 # Set the default input policy to ACCEPT, ACCEPT_NO_TRACK, DROP, or REJECT.いうふうに、「IPV6=yes」と変更して保存した後に
# ufw reload Firewall reloadedとして、変更を反映することによって ufw による制御を IPv6 トラフィックにも適用させることができます。ここまで作業した上であらためて、www.kame.net に対して ping6 をかけてみると
# ping6 www.kame.net PING www.kame.net( ...... ) 56 data bytes 64 bytes from ...... icmp_seq=1 ttl=56 time=2.39 ms 64 bytes from ...... icmp_seq=2 ttl=56 time=2.06 ms ...といった風に、www.kame.net の IPv6 アドレスに対して通信できることが確認できると思います。
なお、ufw の設定については、IPv4 向けの設定のみが有効となっていますので、必要に応じて IPv6 向けの設定を追加する必要があります。とはいえ、以前紹介したような事例
# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22/tcp LIMIT IN Anywhere [ 2] 80/tcp ALLOW IN Anywhereのような場合で、IPv6 での http 入力についても IPv4 同様に許可する場合には、単に ufw allow in http/tcp とすることによって
# ufw allow in http/tcp Skipping adding existing rule Rule added (v6) # ufw status numbered To Action From -- ------ ---- [ 1] 22/tcp LIMIT IN Anywhere [ 2] 80/tcp ALLOW IN Anywhere [ 3] 80/tcp ALLOW IN Anywhere (v6)と、すでに存在する IPv4 のルールを飛ばして IPv6 の許可ルールを追加することができます。IPv4 と IPv6 で許可/拒否の区別を行う際には、IPv4/IPv6 両方について許可するルールを追加した後で、拒否したいルールを番号指定で削除することになります。上の場合で、IPv4での http 入力を拒否する場合には、対象となるのは、2番のルールですので、
# ufw delete 2とします。なお、現在のところ IPv6 での LIMIT IN は利用できないようですので、ALLOW IN や、当面の間 IPv4 のみ LIMIT IN で許可するなどの妥協が必要になります。
実際に作業する前に...
この一連の作業はネットワーク構成を変更する作業で、作業を誤ると通信できなくなってしまう可能性もあります。そういった状況に陥ることを防ぐために、コンソール( VNC もしくは仮想シリアルのどちらでもかまいません ) での作業を行うことや事前にバックアップを取っておくといった準備を行うことをお勧めします。
一応設定はしてみたけれど...
正直現時点では VPS サーバを IPv6 化しても、いつも使うインターネット環境が IPv4 だけだという場合にはなかなか実感がわかない部分がありますが、近い将来に役に立つことがきっと来るのではないかと思います。