梅本肇 / ume@mahoroba.org
FreeBSDでもようやくXCAST6が利用できるようになり
ました。XCAST6はNetBSDをメインターゲットとして開発
がおこなわれており、これまでFreeBSD版がなく寂しい
状態でした。
そこで、今回はXCAST6について紹介したいと思います。
XCAST6では、ROUTINGヘッダに参加している全てのメ
ンバのアドレスを持っています。XCAST6独自のヘッダは
IPv6の拡張ヘッダを使用しています。
拡張ヘッダはIPv6の特長のひとつで、通信経路上に理
解できないルータがあったとしても、そのまま素通しさ
せることができます。これにより、柔軟にプロトコルを
拡張できるようになっています。
図1はXCAST6のヘッダの例で、送信者AがB, C, D宛に
送信する場合をあらわしています。
パケットがXCAST6に対応したルータを通過すると、宛 先に応じて分割されフォワードされます。XCAST6に対応 していないルータを通過した場合、拡張ヘッダは処理さ れず、IPv6ヘッダのデスティネーションにそのままフォ ワードされます。これにより、経路上の全てのルータが XCAST6に対応していなくても、余計な経路は通りますが、 全てのメンバにパケットが届くことになります。
図1 ヘッダの構造 IPv6ヘッダ
src=A, dst=BHop-by-Hopヘッダ
tail=DROUTINGヘッダ
[B, C, D]Destination
ヘッダUDP
ヘッダ
例えば、帯域が細くなる境界であるプロバイダのカス タマ・エッジなど、経路上に適切にXCAST6対応ルータを 設置することで効率良くパケットを配送できることがお 分かり頂けると思います。
図2 XCAST6パケットのフォワード ![]()
現在、XCAST6はドラフトの段階であり、
draft-ooms-xcast-basic-spec-03.txt*1)に記述され
ています。
XCAST6の情報は
http://www.xcast.jp/から得ることができます。
また、XCAST6の実験・検証および普及を目的として 『WIDE X6-Bone接続実験サービス』がおこなわれていま す。WIDE pTLA 3ffe:051b::/32を使った、XCAST6のため の仮想トンネルv6網を構築しています。興味のある方は
http://www.xcast.jp/rule-j.htmlを参照ください。
http://sourceforge.net/projects/xcast6/で配布がおこなわれています。本稿執筆時点での最新版 は0.1.2-1となっています。
XCAST6はkernelに対するパッチと、アプリケーション に対するAPIを提供するライブラリ、そして、アプリケー ションから構成され、それぞれ別のアーカイブとして提 供されています(表1)。
バージョン0.1.2からFreeBSDもサポートされるように なりました。FreeBSDの対象バージョンは4.6.2-RELEASE ですが、4.7-RELEASEでも問題なくパッチが当たります。
表1 FreeBSDで必要なXCAST6の配布アーカイブ xcast6-0.1.2-1-freebsd-sys-4.6.2.diff.gz FreeBSD 4.6.2-RELEASE kernel用パッチ xcast6-0.1.2-1-xcgroup.tar.gz xcgroup xcast6-0.1.2-lib.tar.gz libem6, libxcast xcast6-0.1.2-rat-4.2.22.diff.gz rat用パッチ xcast6-0.1.2-tcpdump-3.7.1.diff.gz tcpdump用パッチ xcast6-0.1.2-usr.sbin.tar.gz ping6x, tracecoute6x xcast6-0.1.2-vic-2.8ucl-1.1.3.diff.gz vic用パッチ
まずはkernelをXCAST6対応にしましょう。 /usr/src/sys/以下にFreeBSDのカーネルのソースを展開 しておきます。そして、 xcast6-0.1.2-1-freebsd-sys-4.6.2.diff.gz*2)を当て ます。
XCAST6関連のカーネルの設定項目は以下の2つです。
使用しているコンフィグファイルにこれらを加えます。
- ・options XCAST6
- XCAST6を組み込みます。
- ・pseudo-device xcst 1
- XCAST6 用仮想ネットワークインタフェースを組み込みます。
なお、正式に配布されているパッチは4.6.2-RELEASE に対するものですので、別途5-CURRENTに対するパッチ を用意しています*3)。
図3 XCAST6 対応kernelの作成 # cd /usr/src # zcat xcast6-0.1.2-1-freebsd-sys-4.6.2.diff.gz | patch -p1 # make buildkernel KERNCONF=GENERIC_XCAST6 # make installkernel KERNCONF=GENERIC_XCAST6
http://www.imasy.or.jp/~ume/FreeBSD/xcast6-0.1.2-1-freebsd-sys-5-current-20021114.diff.gzまた、今野元之氏が
http://motoyuki.bsdclub.org/BSD/xcast6.htmlでFreeBSDおよびNetBSD用のバイナリを配布されており、 コンパイルする手間を省くことができます。
図4 /etc/rc.confの設定例 ifconfig_xcst0="up" ipv6_static_routes="xcast" ipv6_route_xcast="ff05::10 ::1 -ifp xcst0"
http://www.imasy.or.jp/~ume/FreeBSD/xcast6-lib-port.tar.gzに置いてあります。これを展開し、xcast6-libでmake installすることでlibxcastのインストールは完了です。
グループマネージャのサーバおよびクライアントは
xcast6-0.1.2-1-xcgroup.tar.gzに入っています。
サーバはCGIですので、別途ApacheなどのHTTPサーバ
が必要です。HTTPは必ずしもIPv6対応でなくても構いま
せんが、実際のXCAST6による通信はIPv6を用いますので、
Apache2などIPv6対応のものにし、IPv6だけで完結させ
たいところです。
xcgroupがクライアントになります。
サーバ、クライアント共、Rubyで書かれています。
インストールを簡便にするためにportにしたものを、
http://www.imasy.or.jp/~ume/FreeBSD/xcgroup-port.tar.gzに置いてあります。これを展開し、xcgroupでmake installすることでxcgroupのインストールは完了です。 デフォルトではxcgroupsrv.cgiはインストールしないよ うになってます。サーバも必要な場合は XCGROUP_WITH_SERVER=yesを指定してください。
XCAST6を使う際には、まずxcgroupを起動し、グルー
プに参加します。そして、vicやratなどのアプリケーショ
ンを使用します。
xcgroupは-bオプションでxcgroupサーバのURLを、-g
オプションで参加するグループ名を指定して起動します。
xcgroupを起動すると、自ノードのIPアドレスがサー
バに登録されます。明示的に登録するIPアドレスを指定
したい場合は、-Aオプションで登録するIPアドレスを指
定します(図5)。
終了時は、xcgroupを停止します。xcgroupを起動して
いる間はグループに参加していることになりますのでパ
ケットが流れてきます。xcgroupの停止は、Ctrl-Cを押
すか、kill -INTです。-INTを指定せずkillをおこなう
とグループに参加したままになりますのでご注意くださ
い。
グループに参加しているメンバの一覧は、「cmd=show」 および「group=グループ名」を指定してxcgroupsrv.cgi を起動すると見ることができます。図6の例ではw3mを使っ て確認しています。
図5 xcgroupの起動例 $ xcgroup -b http://xcast6.example.com/cgi-bin/xcgroupsrv.cgi -g FreeBSDPress -A 3ffe:505:2:8000::1
図6 グループ参加者の確認 $ w3m 'http://xcast6.example.com/cgi-bin/xcgroupsrv.cgi?cmd=show&group=FreeBSDPress'
以下のratとvicに対するパッチが提供されています。
xcast6-0.1.2-rat-4.2.22.diff.gzrat, vicについてもportを用意してあります。
xcast6-0.1.2-vic-2.8ucl-1.1.3.diff.gz
http://www.imasy.or.jp/~ume/FreeBSD/rat+xcast6-port.tar.gzからインストールすると良いでしょう。
http://www.imasy.or.jp/~ume/FreeBSD/vic+xcast6-port.tar.gz
xcast6-0.1.2-usr.sbin.tar.gzにはping6と traceroute6をXCAST6対応にしたping6xとtraceroute6x が入っています。こちらについてもportを用意してあり ます。
http://www.imasy.or.jp/~ume/FreeBSD/xcast6-usbin-port.tar.gzからインストールすると良いでしょう。
また、tcpdumpをXCAST6対応にするパッチが提供されていま す。
xcast6-0.1.2-tcpdump-3.7.1.diff.gzなお、FreeBSDではxcast6-0.1.2-sbin.tar.gzは必要 ありません。
| Explicit Multicast (XCAST) Basic Specification | |
| 最近の4-STABLEにはm_tagの導入が MFC されましたので適用できません。代わりに、 http://www.imasy.or.jp/~ume/FreeBSD/xcast6-0.1.2-1-freebsd-sys-4-stable-20030126.diff.gz を御使用下さい。 | |
| 5.0-RELEASEでは本文中のパッチで問題ありませんが、 最近の5-CURRENTではmallocまわりの修正のためコンパイルできなくなってしまいました。 http://www.imasy.or.jp/~ume/FreeBSD/xcast6-0.1.2-1-freebsd-sys-5-current-20030126.diff.gz を御使用下さい。 |