当ブログをご覧の皆様こんにちは。さくらインターネット研究所の大久保です。
前回は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=1<UP> metric 0 mtu 1280 inet6 2001:55c:3dd3:e07e::1 prefixlen 32 nd6 options=3<PERFORMNUD,ACCEPT_RTADV> # 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を使う方法について紹介したいと思います。
[…] This post was mentioned on Twitter by 田中邦裕. 田中邦裕 said: RT @ken_washikita: さくらインターネット研究所ブログ 6rdによるIPv6接続(FreeBSD編) http://research.sakura.ad.jp/2011/01/12/tunnel-6rd-freebsd/ […]