6rdによるIPv6接続(Linux編その1)

  • ohkubo
at
    Tags:
  • IPv6
  • Network

当ブログをご覧の皆様こんにちは。さくらインターネット研究所の大久保です。

前回は、FreeBSDで6rdを使う方法を解説しましたので、今回は引き続きLinuxで6rd接続する方法について説明したいと思います。

対応しているディストリビューション

概要編でも紹介しましたが、当方ではUbuntu10.10とFedora14が標準で対応していることを確認しています(詳細は以下で説明)。ひとつ前のバージョン、Ubuntu10.04やFedora13は対応していません。

対応状況の確認

6rdを動作させるためには、カーネルとiproute2パッケージが6rdに対応している必要があります。対応状況は以下のコマンドで確認できます。

  • カーネルの対応状況
    # uname -r
    2.6.35-22-generic

    # grep 6RD /boot/config-`uname -r`
    CONFIG_IPV6_SIT_6RD=y

    カーネルのバージョンが2.6.33以降で、CONFIG_IPV6_SIT_6RDがyとなっていれば、カーネルは6rdに対応しています。

  • iproute2の対応状況

    iproute2パッケージのバージョンとip tunnelのhelpを確認します。

    # ip -V
    ip utility, iproute2-ss100519

    # ip tunnel help
    Usage: ip tunnel { add | change | del | show | prl | 6rd } [ NAME ]
    [ mode { ipip | gre | sit | isatap } ] [ remote ADDR ] [ local ADDR ]
    [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
    [ prl-default ADDR ] [ prl-nodefault ADDR ] [ prl-delete ADDR ]
    [ 6rd-prefix ADDR ] [ 6rd-relay_prefix ADDR ] [ 6rd-reset ]
    [ ttl TTL ] [ tos TOS ] [ [no]pmtudisc ] [ dev PHYS_DEV ]

    Where: NAME := STRING
    ADDR := { IP_ADDRESS | any }
    TOS := { NUMBER | inherit }
    TTL := { 1..255 | inherit }
    KEY := { DOTTED_QUAD | NUMBER }

    バージョンがss100224以降で、helpに6rdに関するオプションが表示されれば、インストールされているiproute2パッケージは6rdに対応しています。

以下では、この2つのディストリビューション、Ubuntu10.10とFedora14での設定方法を説明します。

Ubuntu10.10での設定方法

今回もComcast社の6rd Border Relayを経由してIPv6インターネットに接続してみます。Comcast社の6rdのパラメータを以下に再掲します。

6rdプレフィックス
2001:55c::/32
埋め込むIPv4アドレス
32bit全て
Border Relayアドレス
69.252.80.66 (6rdアドレス=2001:55c:45fc:5042::)
委譲空間
/64

参考:Comcast 6RD Configuration Instructions for IPv6

設定手順は以下の通りです。ここでは、61.211.224.125のIPv4アドレスをもったUbuntuサーバでの設定例を紹介します。

  1. IPv6アドレスの算出

    上記の通りカーネルとiproute2は対応していますが、initスクリプトは正式に対応していないため、IPv6アドレスは手動で算出することになります。以下のように、IPv4アドレスをスペース区切りで引数に指定します。

    # printf "2001:55c:%02x%02x:%02x%02x::1\n" 61 211 224 125
    2001:55c:3dd3:e07d::1
  2. /etc/network/interfaces ファイルの編集

    viでファイルを開き、以下の内容を追加します。青文字の部分はそれぞれの環境に合わせて書き換えてください。

    # vi /etc/network/interfaces (以下を追加)
    auto tun6rd
    iface tun6rd inet6 v4tunnel
    address 2001:55c:3dd3:e07d::1
    netmask 32
    local 61.211.224.125
    endpoint any
    gateway ::69.252.80.66
    ttl 64
    up ip tunnel 6rd dev tun6rd 6rd-prefix 2001:55c::/32
    up ip link set mtu 1280 dev tun6rd
  3. 再起動

    設定を反映させるために一度再起動します。

    # reboot
  4. 設定反映を確認

    起動後に設定が反映されていることを確認します。

    $ ifconfig tun6rd
    tun6rd Link encap:IPv6-in-IPv4
    inet6アドレス: ::61.211.224.125/128 範囲:Compat
    inet6アドレス: 2001:55c:3dd3:e07d::1/32 範囲:グローバル
    UP RUNNING NOARP MTU:1280 メトリック:1
    RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
    TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
    衝突(Collisions):0 TXキュー長:0
    RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)

    $ ip tunnel show
    sit0: ipv6/ip remote any local any ttl 64 nopmtudisc 6rd-prefix 2002::/16
    tun6rd: ipv6/ip remote any local 61.211.224.125 ttl 64 6rd-prefix 2001:55c::/32

    $ ip -6 route show | grep default
    default via ::69.252.80.66 dev tun6rd metric 1024 mtu 1280 advmss 1220 hoplimit 0

Fedora14での設定方法

Ubuntuと同様、Comcast社の6rd Border Relayを経由してIPv6インターネットに接続する方法を説明します。設定手順は以下の通りです。ここでは、61.211.224.124のIPv4アドレスをもったFedoraサーバでの設定例を紹介します。

  1. IPv6アドレスの算出

    Ubuntu同様、initスクリプトは正式に対応していないため、IPv6アドレスは手動で算出することになります。以下のように、IPv4アドレスをスペース区切りで引数に指定します。

    # printf "2001:55c:%02x%02x:%02x%02x::1\n" 61 211 224 124
    2001:55c:3dd3:e07c::1
  2. /etc/sysconfig/network-scripts/ifcfg-sit1 ファイルの作成

    viでファイルを開き、以下の内容を追加します。青文字の部分はそれぞれの環境に合わせて書き換えてください。

    # vi /etc/sysconfig/network-scripts/ifcfg-sit1
    DEVICE=sit1
    IPV6INIT=yes
    IPV6_MTU=1280
    IPV6_DEFAULTGW=::69.252.80.66
    IPV6TUNNELIPV4=any
    IPV6TUNNELIPV4LOCAL=61.211.224.124
    IPV6ADDR=2001:55c:3dd3:e07c::1/32
  3. /etc/rc.local ファイルの編集

    上記で作成したトンネルインターフェイスsit1に対して6rd-prefixオプションを設定しなければなりませんが、ifcfgファイルでは指定できませんので、ちょっと汚いですがとりあえず/etc/rc.localに記載し、起動時にipコマンドで設定することにします。

    # vi /etc/rc.local (以下をファイルの末尾に追加)
    ip tunnel 6rd dev sit1 6rd-prefix 2001:55c::/32
  4. 再起動

    設定を反映させるために一度再起動します。

    # reboot
  5. 設定反映を確認

    起動後に設定が反映されていることを確認します。

    # ifconfig sit1
    sit1 Link encap:IPv6-in-IPv4
    inet6 addr: 2001:55c:3dd3:e07c::1/32 Scope:Global
    inet6 addr: ::61.211.224.124/128 Scope:Compat
    UP RUNNING NOARP MTU:1280 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

    # ip tunnel show
    sit0: ipv6/ip remote any local any ttl 64 nopmtudisc 6rd-prefix 2002::/16
    sit1: ipv6/ip remote any local 61.211.224.124 ttl 64 6rd-prefix 2001:55c::/32

    # ip -6 route show | grep default
    default via ::69.252.80.66 dev sit1 metric 1 mtu 1280 advmss 1220 hoplimit 0

疎通性の確認

設定が完了したら、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=1 ttl=52 time=347 ms
64 bytes from 2001:240:bb42:b000::1:80: icmp_seq=2 ttl=52 time=347 ms
64 bytes from 2001:240:bb42:b000::1:80: icmp_seq=3 ttl=52 time=348 ms
64 bytes from 2001:240:bb42:b000::1:80: icmp_seq=4 ttl=52 time=347 ms
^C
--- www.iij.ad.jp ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 347.571/348.009/348.987/0.713 ms

上記のようにpingが返ってくれば成功です。

まとめ

今回も設定例として、Comcast社の6rd Border Relayを使う方法をとりあげたため、IPv6アドレスにIPv4アドレスを32bit全て埋め込む方式となりました。しかし、Linuxの6rdの実装はRFCに準拠しており、IPv4アドレスの全部ではなく一部のみをIPv6アドレスに埋め込むこともできます(結果としてクライアントが使えるIPv6アドレス空間を増やすことができます)。

次回はそのあたりの設定について解説したいと思います。