2011年3月1日火曜日

「さくらの6rd(トライアル)」が提供開始されたので設定してみた(Ubuntu 10.10)

サービス提供開始以来、様々なところで話題になっている「さくらのVPS」ですが、この 3/1 から「さくらの6rd(トライアル)」と銘打ち、6rd による IPv6 接続サービス実験を開始しました( プレスリリース )。このサービスを利用できるのは、

弊社専用サーバサービス、ハウジングサービス、さくらの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 だけだという場合にはなかなか実感がわかない部分がありますが、近い将来に役に立つことがきっと来るのではないかと思います。