6rdによるIPv6接続(FreeBSD編)

  • ohkubo
at
    Tags:
  • IPv6
  • Network

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

前回は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のソースコードが展開されているものとして説明します。存在しない場合は、あらかじめソースコードを展開しておいてください。

  1. パッチをダウンロード まずはパッチをダウンロードします。ここでは/root/以下にダウンロードします。
    # cd /root
    # fetch http://people.allbsd.org/~hrs/FreeBSD/stf_6rd_20100923-1.diff
  2. パッチをあてる /usr/src/以下のソースコードにパッチをあてます。
    # cd /usr/src
    # patch -p0 < /root/stf_6rd_20100923-1.diff
  3. カーネルモジュールのコンパイル、インストール 以下コマンドで、/boot/kernel/if_stf.ko としてインストールされます。
    # cd sys/modules/if_stf/
    # make
    # make install
  4. マニュアルのインストール 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の設定は以下の手順で行います。

  1. 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
  2. /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::"
  3. 設定を反映させるために一旦リブートします。
    # reboot
  4. 設定反映確認 起動すると、以下のようにstf0インターフェイスと、デフォルトゲートウェイが設定されるはずです。
    # ifconfig stf0
    stf0: flags=1 metric 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
  5. 通信テスト 米国を経由するため、遅延が非常に大きいですが、一応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を使う方法について紹介したいと思います。