6rdによるIPv6接続(Linux編その1)
当ブログをご覧の皆様こんにちは。さくらインターネット研究所の大久保です。
前回は、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サーバでの設定例を紹介します。
- IPv6アドレスの算出
上記の通りカーネルとiproute2は対応していますが、initスクリプトは正式に対応していないため、IPv6アドレスは手動で算出することになります。以下のように、IPv4アドレスをスペース区切りで引数に指定します。
# printf "2001:55c:%02x%02x:%02x%02x::1\n" 61 211 224 125
2001:55c:3dd3:e07d::1 - /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 - 再起動
設定を反映させるために一度再起動します。
# reboot
- 設定反映を確認
起動後に設定が反映されていることを確認します。
$ 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サーバでの設定例を紹介します。
- IPv6アドレスの算出
Ubuntu同様、initスクリプトは正式に対応していないため、IPv6アドレスは手動で算出することになります。以下のように、IPv4アドレスをスペース区切りで引数に指定します。
# printf "2001:55c:%02x%02x:%02x%02x::1\n" 61 211 224 124
2001:55c:3dd3:e07c::1 - /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 - /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 - 再起動
設定を反映させるために一度再起動します。
# reboot
- 設定反映を確認
起動後に設定が反映されていることを確認します。
# 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アドレス空間を増やすことができます)。
次回はそのあたりの設定について解説したいと思います。