Categories

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

Vyatta で 6rd 環境を構築しよう

6rd の詳細は “RFC 5969: IPv6 Rapid Deployment on IPv4 Infrastructures (6rd) — Protocol Specification” を参照。

概要

FreeBSD のときと同様とりあえずこんな感じを例に説明します。(em0 を eth0 に、em1 を eth1 に、le0 を eth0 に、le1 を eth1 にそれぞれ置き換えてください。)

6rdfig

4 つの 6rd elements はそれぞれ以下の通りとします。

IPv4PrefixLen 20
6rdPrefix fc00:0:0:1000::
6rdPrefixLen 52
6rdBRIPv4Address 10.0.0.1

6rdPrefixLen + (32 – IPv4PrefixLen) = 64 なので CE は fc00:0:0:1xxx::/64 をもらうことになります。 xxx の部分には IPv4 アドレスの下位 12 ビット(32 – IPv4PrefixLen)が埋まります。

ISO イメージの作成

6rd 対応 Vyatta の ISO イメージの作り方です。めんどくさいという方は 私の方で作った ISO イメージ をダウンロードしてください。

まず Debian Squeeze の環境を用意します。

そして Linux Kernel の sit の next-hop に、IPv4 互換アドレス以外に 6rd prefix の IPv6 アドレスも指定できるようにするパッチVyatta の set interface tunnel コマンドに 6rd-prefix と 6rd-relay_prefix を設定できるようにするパッチ を適当に /tmp/ にダウンロードしておきます。

これらの用意ができたら以下のコマンドを実行します。

$ sudo apt-get install git-core
$ git clone http://git.vyatta.com/build-iso.git
$ cd build-iso
$ git checkout --track -b mendocino origin/mendocino

build-iso の中に README というファイルがあるので読みます。とくに “Build Host Setup” には環境構築の方法が書かれているのでその通りに実行します。

環境構築ができたら以下のコマンドを実行します。

$ git submodule init
$ git submodule update pkgs/vyatta-cfg-system
$ git submodule update pkgs/linux-image
$ cd vyatta-cfg-system
$ git checkout --track -b mendocino origin/mendocino
$ patch -p1 < /tmp/vyatta-cfg-system-6rd.patch
$ cd ../linux-image
$ git checkout --track -b mendocino origin/mendocino
$ patch -p1 < /tmp/linux-image-6rd.patch
$ ../
$ autoreconf -i
$ ./configure
$ make vyatta-cfg-system
$ make linux-image
$ sudo make iso

livecd というフォルダの中に binary.iso というファイルで ISO イメージが作成されます。

インストール

用意した ISO イメージで Vyatta をインストールします。

BR 側では以下のように設定します。

# set interfaces ethernet eth0 address 10.0.0.1/24
# set interfaces ethernet eth1 address fc00:1:0:1001::1/64
# set interfaces tunnel tun0
# set interfaces tunnel tun0 encapsulation sit
# set interfaces tunnel tun0 local-ip 10.0.0.1
# set interfaces tunnel tun0 6rd-prefix fc00:0:0:1000::/52
# set interfaces tunnel tun0 6rd-relay_prefix 10.0.0.0/20
# set interfaces tunnel tun0 address fc00:0:0:1001::/52
# commit

CE 側では以下のように設定します。

# set interfaces ethernet eth0 address 10.0.0.2/24
# set interfaces ethernet eth1 address fc00:0:0:1002::1/64
# set interfaces tunnel tun0
# set interfaces tunnel tun0 encapsulation sit
# set interfaces tunnel tun0 local-ip 10.0.0.2
# set interfaces tunnel tun0 6rd-prefix fc00:0:0:1000::/52
# set interfaces tunnel tun0 6rd-relay_prefix 10.0.0.0/20
# set interfaces tunnel tun0 address fc00:0:0:1002::/52
# set protocols static route6 ::/0 next-hop fc00:0:0:1001::
# commit

説明

なんか Linux 6RD HOWTO を見ると、

# ip route add ::/0 via ::10.0.0.1 dev tun0

のように IPv4 互換アドレスを default route に設定するよう書いてあって、実際 Linux Kernel の sit もそのような実装になっています。

一方、 RFC 5969 の方は、

::/0 -> 6rd-virtual-int0 via 2001:db8:0:100:: (default route)
2001:db8::/32 -> 6rd-virtual-int0 (direct connect to 6rd)
2001:db8:6464:100::/56 -> Null0 (delegated prefix null route)
2001:db8:6464:100::/64 -> Ethernet0 (LAN interface)

と書かれていて、なんかこっちの方がいいですよね。

上記のパッチRFC 5969 のように、

# ip route add ::/0 via fc00:0:0:1001::

で default route が設定できるようにするためのパッチです。

しかしなんで IPv4 互換アドレスなんかで指定するようにしたんですかね... まあそっちのほうがわかりやすいっちゃわかりやすいけど...

ちなみに 6to4 は 6rd prefix が 2002::/16 の 6rd と同じなので 6rd-prefix を 2002::/16 にすればそのまま使えるはず。

1 comment to Vyatta で 6rd 環境を構築しよう