6rdによるIPv6接続(FreeBSD編)
当ブログをご覧の皆様こんにちは。さくらインターネット研究所の大久保です。
前回は6rdの概要について説明しましたので、今回は実際にFreeBSDを用いて6rdを経由したIPv6接続方法について説明を行いたいと思います。
FreeBSDのソースコードに6rdのパッチをあてる
FreeBSDはまだ標準で6rdに対応していませんが、東工大の佐藤さんが6to4のカーネルモジュールif_stfを6rdに対応させるパッチを以下のサイトで公開されています。 http://people.allbsd.org/~hrs/FreeBSD/stf_6rd_20100923-1.diff
今回は、FreeBSD8.1にこのパッチをあてて6rdをサポートする方法を紹介します。ただし、RFC5969ではIPv6アドレスに任意ビット長のIPv4アドレスの埋め込みができるように定義されていますが、こちらのパッチではその機能がサポートされておらず、IPv4アドレス全て(32bit)埋め込むような動作となります。
以下では/usr/src/配下にFreeBSDのソースコードが展開されているものとして説明します。存在しない場合は、あらかじめソースコードを展開しておいてください。
- パッチをダウンロード まずはパッチをダウンロードします。ここでは/root/以下にダウンロードします。
# cd /root
# fetch http://people.allbsd.org/~hrs/FreeBSD/stf_6rd_20100923-1.diff - パッチをあてる /usr/src/以下のソースコードにパッチをあてます。
# cd /usr/src
# patch -p0 < /root/stf_6rd_20100923-1.diff - カーネルモジュールのコンパイル、インストール 以下コマンドで、/boot/kernel/if_stf.ko としてインストールされます。
# cd sys/modules/if_stf/
# make
# make install - マニュアルのインストール stfのマニュアルが更新されるため、インストールします。
# cd /usr/src/share/man/
# make
# make installこれでman stfとすると、6rdの説明が表示されるはずです。
Comcast社の6rd Border Relayを使う
ここでは、米国のケーブルテレビ事業者であるComcast社が提供しているBorder Relayを経由して6rdを使ってみます。Comcast社の6rdのパラメータは以下のようになります。
6rdプレフィックス | 2001:55c::/32 |
埋め込むIPv4アドレス | 32bit全て |
Border Relayアドレス | 69.252.80.66 (6rdアドレス=2001:55c:45fc:5042::) |
委譲空間 | /64 |
6rdプレフィックス/32の空間にIPv4アドレス32bit全てを埋め込むため、結果としてクライアントで利用可能な空間は/64となります。
参考までに、Comcast社の6rdの説明は以下にあります。 Comcast 6RD Configuration Instructions for IPv6
FreeBSDの設定は以下の手順で行います。
- IPv6アドレスの算出 ここでは、61.211.224.126のIPv4アドレスをもったFreeBSDサーバでの設定例を紹介します。OS側では6rdアドレスの自動設定ができませんので、まずは、自身で使用するIPv6アドレスを算出します。以下のように引数として自身のIPv4アドレスの各オクテットをスペース区切りで指定します。
# printf "2001:55c:%02x%02x:%02x%02x::1\n" 61 211 224 126
2001:55c:3dd3:e07e::1 - /etc/rc.confの編集 上記で表示されたIPv6アドレスを元に、以下のような設定を追記します。青文字の部分は上記で表示されたIPv6アドレスを記入してください。
# vi /etc/rc.conf (以下を追加)
ipv6_enable="YES"
cloned_interfaces="stf0"
ipv6_ifconfig_stf0="2001:55c:3dd3:e07e::1/32"
ipv6_defaultrouter="2001:55c:45fc:5042::" - 設定を反映させるために一旦リブートします。
# reboot
- 設定反映確認 起動すると、以下のようにstf0インターフェイスと、デフォルトゲートウェイが設定されるはずです。
# ifconfig stf0
stf0: flags=1metric 0 mtu 1280
inet6 2001:55c:3dd3:e07e::1 prefixlen 32
nd6 options=3
# netstat -nr -f inet6 | grep default
default 2001:55c:45fc:5042:: UGS stf0 - 通信テスト 米国を経由するため、遅延が非常に大きいですが、一応IPv6インターネットと通信できることが確認できます。
# ping6 www.iij.ad.jp
PING6(56=40+8+8 bytes) 2001:55c:3dd3:e07e::1 --> 2001:240:bb42:b000::1:80
16 bytes from 2001:240:bb42:b000::1:80, icmp_seq=0 hlim=52 time=353.593 ms
16 bytes from 2001:240:bb42:b000::1:80, icmp_seq=1 hlim=52 time=353.682 ms
16 bytes from 2001:240:bb42:b000::1:80, icmp_seq=2 hlim=52 time=353.739 ms
16 bytes from 2001:240:bb42:b000::1:80, icmp_seq=3 hlim=52 time=353.614 ms
^C
--- www.iij.ad.jp ping6 statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 353.593/353.657/353.739/0.058 ms
なお、弊社(さくらインターネット)でも6rdのBorder Relayを設置するべく現在準備を進めており、弊社のネットワーク内、もしくは弊社のネットワークに近いサイトからは快適に6rdを使用してIPv6接続できるようになる予定です。準備が完了しましたら追ってお知らせしたいと思います。
まとめ
今回はFreeBSDにパッチをあてて6rdを有効にする方法について解説を行いました。次回はLinuxで6rdを使う方法について紹介したいと思います。