大規模ネットワークエミュレーションにおけるトポロジ構成と経路制御
2006MI031 星野 聡介
指導教員

1 はじめに近年，インターネットの普及に伴い，情報社会の根底を支えるネットワーク技術者の養成が急務となっている．しかし，当該技術者教育に実際のネットワークを利用した場合，多大なコストを要する．その解決策として，ネットワークエミュレータの適用がある．これにより低コストでネットワークを試行的に構築することが可能になる．現在，ネットワークエミュレータである GINE
（Goto’s IP Network Emulator）[6] には，静的経路制御を行う機能は存在するが，動的経路制御を行う機能は存在しない．本研究の目的は，GINE とルーティングソフトウェアである Quagga[3] を利用することによって，動的経路制御を施した大規模仮想ネットワークを 1 台のPC 上で実現することである．その結果として低コストでネットワークをエミュレート可能であることを確認す
る．本研究実施にあたり，星野はプログラム及びネットワークモデルの作成を担当し，石野は仮想ネットワークの構築を担当する．

2 システム概要
本節では，大規模ネットワークをエミュレートするために使用する GINE，仮想ネットワークスタック及びQuagga の概要について述べる．

2.1 GINE
GINE とは，南山大学後藤邦夫教授考案のネットワークエミュレータであり，多数のルータやリンクで構成される広域ネットワークを模倣する．各リンク毎に与えられた確率分布に従って，遅延やパケットロスなどの通信障害を容易にエミュレートすることができる．またC++ クラスライブラリを用いたユーザインタフェースプログラムで記述されているため，自由に機能追加ができ，IPv6 にも対応している．また，GINE は高解像度タイマの利用や仮想スイッチの使用が可能であり，本研
究では当該機能をネットワーク構築に利用している．
2.2 仮想ネットワークスタック
本研究では，仮想ネットワークホストの作成に GINE内の Network Name Space(以下 NSpace)[1] を用いた．
NSpace は，Linux-2.6.26 から標準搭載されたネットワークスタックを仮想化する機能である．ネットワークスタックとは, ネットワークの構造を抽象化し階層化した OSI 参照モデルのように，ネットワークの処理が階層化されたものをいう．１台の PC 内で複数のネットワークホストを構築する場合，TCP や UDP でのポート番号を変えることで最大ポート番号分のホストをエミュレー

2006MI043 石野 佑弥

後藤 邦夫
トすることができる．しかしこの方法では，アプリケーション間の通信パラメータ設定や通信の独立性を保つことができない．そこで使用されるのが，仮想ネットワー
クスタックである．仮想ネットワークスタックを用いることで，前述の問題を解消しつつ，複数のネットワークインタフェースを１台の PC 上で同時動作させることができる．仮想ネットワークスタックは Linux-2.6.26以降標準搭載され，Linux-2.6.29 から sysfs 機能が利用可能になった．そのため本研究では Linux-2.6.29 を用いた．

2.3 Quagga
Quagga とは，RIP，RIPng，OSPFv2[4] 等のルーティングプロトコルに加え，BGP-4[5] 等の EGP もサポートしている高機能なルーティングデーモンである．
Quagga の特徴として TCP/IP の統合的な設定ができるフレームワークとなるよう設計されている．さらにQuagga はモジュラー構造をとっており，本体の zebradが OS との設定情報のやりとりやユーザインタフェースを担当し，ripd，ospfd 等のデーモンはルーティングプロトコルのみを担当する．Cisco 社のルータに似たユーザインタフェースを持っており， Cisco 社のルータの操作の学習にもよく利用されている．本研究では，ルーティングソフトウェアである Quagga を使って，仮想動的ルータを作成した．Quagga を利用した理由を以下に記す．

• 導入が容易である．
• ユーザインタフェースが Cisco に似ており，使いやすい．

• IPv6 ルーティングも完全ではないがサポートしている．
特に，ユーザインターフェースが既存のものと似ている
ことは，技術者の教育という観点から見て，最大の利点であると考える．

3 仮想ネットワークの構築
本節では，仮想ネットワークの構築方法について述べる．通常，Quagga を利用してルーティングをする場合，複数の PC を用意して接続し，それぞれの PC においてQuagga を起動させることにより，それらの PC をルータとする．しかし，本研究では一つの PC 内において複数の NSpace を作りだし，ホストを仮想化する．そして，各 NSpace において Quagga を起動させることで，仮想的にネットワークを構築する．また，Quagga を起動しない NSpace は，仮想クライアントホストとして扱う．

3.1 ルーティングデーモンの起動
Quagga を通常起動し，本研究で用いる場合の問題点として，以下の点が挙げられる．

• BGP，OSPF 等の各デーモンを一つずつしか起動することができない．よって，各々の仮想ルータに対して，デーモンを割り当てることができない．
• デフォルトの config ファイルが読み込まれるため，各仮想ルータの設定を独立して行うことが難しい．
前者の問題は、各ルータ上でデーモンを各個に起動させることによって解決した．また，後者の問題は，それぞれのデーモンを起動する際に指定の config ファイルを読み込ませるコマンドオプションを用いることにより解決した．図 1 に，システムの図を示す．

図1

仮想ネットワークルーティングデーモンの設定仮想動的ルータのルーティングデーモンにおいて設定を追加するには，以下の二つの方法がある．

3.2• 設定を記述したコンフィグファイルを起動するルーティングデーモンの数だけ用意し，その設定を読み取らせる．
• ルーティングデーモンを起動した後，telnet コマンドによってデーモンプロセスにログインし，手動で設定する．
これらの方法を用いることによって，技術者は経路設定について学ぶことができると考える．しかし，これらの方法はどちらも予めコンフィグファイルを用意する必要がある．実際の設定は手動で行う後者の方法においても，最低限の設定を記述したコンフィグファイルをルーティングデーモンの数だけ用意する必要がある．これでは作業効率に問題があるので，本研究では経路設定を行い易くするために，プログラム上で Quagga を起動する
時に必要なコンフィグファイルを作成し，また設定を加える機能を作成した．これにより，予めコンフィグファイルを用意する必要がなくなり，作業の削減に繋がると考える．
3.3 DynamicRouter クラス
前述の 3.1 の方法により，各 NSpace においてルーティングデーモンを起動することができた．しかし，この方法で起動したルーティングデーモンは自動的に終了することはなく，バックグラウンドでメモリを消費し続ける．そのため，コマンドによって Quagga 全体を停止させるか，kill コマンドによりデーモンを停止させる必要がある．しかし，ルーティング実験をする度に手動で一つずつデーモンを削除するのは効率的に問題がある．
また，全てのデーモンを終了してしまうと別のプログラ
ムで利用している Quagga のデーモンも削除してしまう可能性がある．この問題を解決するために，GINE における NSpace2 クラスを拡張した DynamicRouter クラスを作成した．このクラスのオブジェクトを生成すると，NSpace をルータとして扱うために必要なコマンドが自動的に入力される．また，利用者がエミュレートを行いやすくするために，NSpace 接続メソッド，仮想動的ルータ設定追加メソッド等を作成した．以後，ルーティングデーモンを起動した NSpace を仮想動的ルータ，仮想動的ルータに接続する NSpace を仮想クライアントホストとする．
3.4 AS クラス
次に，BGP における AS 管理のために，AS クラスを作成した．BGP は，ネットワークに存在するルータではなく，それらの集合である AS(Autonomous System)を単位として経路を制御するルーティングプロトコルである．このクラスは，AS の機能をクラス化したものであり，AS 内の仮想動的ルータ，仮想クライアントホストを追加，管理し，必要に応じて仮想動的ルータに設定を加えることができる．また，AS 内の各仮想動的ルータが広告するネットワークの出力，及び外部 AS に接続している仮想動的ルータの情報を出力することが可能である．

4 ネットワーク実験と評価
本節では，仮想ネットワークスタックを用いたシステ
ムのエミュレーションと評価を行う．構築実験では技術者教育の観点から，CCNA のための Cisco 学習 [2] を参考にした．このサイトでは実際に実機を操作しネットワーク構築することを想定している．本研究では，それらの構築実験を仮想的に行えることを確認した．
初めに，一つの PC において最大何個の仮想端末を起動可能であるかを実験した．次に，各ルーティングプロトコルによって経路制御を行うネットワークをエミュレートした．最後に，実ネットワークを想定した，Webサーバ等の存在を考慮する大規模ネットワークのエミュレートを行った．
4.1 仮想動的ルータの起動実験
実験には，Quad-core 2.4GHz の CPU，2GB のメモリを搭載し，Ubuntu Linux 8.10(64bitOS) をインストールした PC を利用した．指定した数の仮想端末を作成し, 直列に接続して各端末上で BGP デーモンを起動するプログラムを作成し，前述の環境における最大起動数を確認した．実験の結果を表 1 に示す．
表 1 の結果から，前述の環境では BGP デーモンを起動した仮想ルータを最大 800 個起動できることがわかった．しかし，800 個を起動した場合は，メモリ不足によ表1仮想 BGP ルータの起動実験

ルータ数

使用メモリ

使用 swap メモリ

300 個目
400 個目
500 個目
600 個目
700 個目
800 個目

182331616511121355600
2036164204282464206013834762386560
20675362825632

測定不可
測定不可
メモリ：2059176 (単位：Byte)

りほとんど操作が不可能であるという結果を得た．よって，実際に仮想ネットワークを構築する際は約 700 個が妥当であると考える．
次に，OSPF デーモンを起動した場合の最大起動数を確認した．環境，プログラムは前述のものと同様である．実験の結果を表 2 に示す．
表2

図 2 RIP，OSPF 併用ネットワーク

仮想 OSPF ルータの起動実験

ルータ数

使用メモリ

使用 swap メモリ

300 個目
400 個目
500 個目
600 個目
700 個目

18301762027884
1877692
19162720130624
7470281164848

測定不可
測定不可
メモリ：2059176 (単位：Byte)

表 2 の結果から，実際に仮想ネットワークを構築する
際に OSPF ルータを利用する場合，起動数の上限は約600 個であると考える．
4.2 単一のルーティングプロトコルによる経路制御
次に，RIP，RIPv6，OSPF 及び BGP によって経路制御をするネットワークをエミュレートした．本実験では，GINE 及び本研究で作成したネットワーク構築補助機能によって構築したネットワークトポロジにおいて，各々のルーティングデーモンを起動し，個々のルータの設定を記述したコンフィグファイルを読み込ませることで仮想ネットワークを構築した．
4.3 複数のルーティングプロトコルにおける経路制御
次に，複数のルーティングプロトコルによって経路制御をする RIP，OSPF 併用ネットワーク及び EGP，IGP 併用ネットワークをエミュレートした．
RIP，OSPF 併用ネットワークは，RIP ネットワークから将来的に OSPF ネットワークに完全移行することを目的とした移行手段として用いるネットワーク構成である．図 2 は，RIP ネットワークと OSPF ネットワークのネットワーク結合を想定した RIP 及び OSPF 併用ネットワークのモデル図である．次に，EGP，IGP 併用ネットワークのエミュレートとして，ISP を通じた企業間のネットワークを想定した．図 3 はエミュレートしたネットワーク構成である．サブルーティングの主な役
割は，AS 内部のローカル経路の制御，iBGP 接続用のループバックアドレスと eBGP 経由受信の経路情報のネクストホップアドレスの解決である．

図3

EGP-IGP 併用ネットワーク

大規模ネットワークのエミュレート
最後に，これまでのルーティングプロトコルを利用した大規模ネットワークのエミュレートした．本節の実験
では，予めルータのコンフィグファイルを用意する方法
ではなく，仮想ルータ設定追加メソッドを利用して経路設定を行う方法を使用した．これにより，以前よりも容易に大規模ネットワーク構築が可能であることを確認した．また，実際の BGP のオペレーティングに近付けるために，「BGP-TCP/IP ルーティングとオペレーションの実際」[7]，「@IT BGP 運用の基礎」[8] を参考にトポロジ構成を行った．ネットワークの構成を下記に記す．

4.4• 5 つの AS から構成され，IPv4 を用いた大規模ネットワーク．AS50 を上位 ISP，AS20，AS30，AS40をそれに連なる下位 ISP，AS10 をマルチホームの企業であることを想定する．

• 各 AS は BGP によって経路情報を交換し，上位ISP から経路情報を受け取る．
• AS10 は，RIP，OSPF で内部の経路を交換し，BGPで AS20，AS40 から外部の経路情報を得る．
• AS10 の内部には 2 つのスイッチがあり，クライアントホストはスイッチを介してルータに接続する．

• AS20，AS30，AS40 は内部ネットワークを省略し，BGP のみを起動する．
• AS50 は，OSPF によって内部の経路を交換し，AS30，AS40 へ経路情報を流す．
• AS50 の内部には，WEB サーバ，DNS サーバが存在し，外部 AS からアクセスが可能とする．
• AS50 の内部には 2 つのスイッチがあり，クライアントホスト，及び各サーバはスイッチを介してルータに接続する．
• AS50 の内部ネットワークは，OSPF の設定により2 つのエリアに分かれている．
• 図 4 に，ネットワークのモデル図を示す．

図 4 大規模ネットワーク

次に，各仮想動的ルータに対して行った経路設定について説明する．
AS10 は，AS20，AS40 から外部の経路情報を受け取っている．しかし，今回の実験において，AS10 はマルチホーム接続を行っている一般的な企業を想定している．
よって，AS10 では一方の AS から受け取った経路情報を他方の AS にアナウンスしないように設定する必要がある．以上の理由から，AS10 における BGP デーモンを起動した 2 つのルータには，AS-Path によるフィルタを施した．すなわち，AS20 から受け取った経路情報はAS40 に流れないように，また AS40 から受け取った経路情報は AS20 に流れないように経路制御を行った．
AS50 は，OSPF を IGP としており，また内部のエリアを 2 つに分けている．これは，経路情報の増大によるルータに対する負荷を軽減するためにである．また，異なるルーティングプロトコル間の経路情報の交換方法に関しては，エリアの中間となるルータにおいてそれぞれ二つのルーティングデーモンを起動し，経路情報を再配布する方法を利用している．この方法は，大量の経路情報を扱う場合においてはメモリが少ない機器に障害が発生する可能性があるが，基本的で簡易な方法であるために本実験ではこの手法を選択した．
エミュレーション実験の結果，実機を使用せずに，1台の PC 上で大規模なネットワーク構築実験が可能であることを確認した．また，本研究で作成した機能を用いることで，容易に仮想ネットワークが構築できることを確認した．しかし，実験では次の問題が発生した．

• 仮想ルータ設定追加メソッドを利用して設定を追加した場合，設定する順序に制限が発生した．

• 構築した仮想ネットワーク上の経路情報が，実験の毎に変化する事があった．

• 全ての仮想ネットワークホストが実機の/etc/resolve.conf ファイルに指定された DNS サーバを利用した．

5 おわりに本 研 究 で は ，動 的 経 路 制 御 を 施 し た 大 規 模 仮 想 ネットワークを 1 台の PC 上で実現することに成功した．仮想動的ルータの起動実験においては Quad-core
2.4GHz の CPU，2GB のメモリを搭載し，Ubuntu Linux8.10(64bitOS) をインストールした PC を利用した場合，BGP デーモンでは約 700 個 OSPF デーモンでは約 600個の起動が可能であることを確認した．また，技術者教育を想定し，RIP，OSPF，BGP 等のルーティングプロトコルによって経路制御を行うネットワークを 1 台のPC 上で構築できることを確認した．仮想ネットワーク構築においては，ネットワーク構築及び経路制御の補助機能を実装し，技術者教育の利便化を図った．さらに，その機能を利用して実ネットワークを想定した大規模ネットワークを構築し，容易にネットワーク構築が行えることを確認した．以下に今後の課題を述べる．

• IPv6 ネットワークを想定した大規模な仮想ネットワークの構築実験• より現実に近い仮想ネットワークの構築実験• 経路制御補助機能の改良• ユーザインターフェースの改良

参考文献[1] Network Namespace (accessed Apr. 2009).
http://lxc.sourceforge.net/network.php.
[2] ＠ network Cisco・アライド実機で学ぶ (accessedApr. 2009). http://atnetwork.info/.
[3] Quagga Software Routing Suite (accessed June.
2009). http://www.quagga.net/.
[4] Moy, J.: OSPF Version 2 RFC2328 (Apr. 2009).
[5] Rekhter, Y., L. T. and Hares, S.: A Border Gateway Protocol 4 (BGP-4) RFC4271 (Jan. 2009).
[6] Sugiyama, Y. and Goto, K. (Eds. Zhang, S. e. a.:
Design and Implementation of a Network Emulator using Virtual Network Stack, Proc. of the Seventh International Symposium on Operations Research and Its Applications (ISORA2008), World
Publishing Corporaiton, pp. 351–358 (2008).
[7] van Beijnum, I.: BGP-TCP/IP ルーティングとオペレーションの実際，オーム社 (2004).
[8] ＠ IT：BGP 運 用 の 基 礎 (accessed Apr. 2009).
http://www.atmarkit.co.jp/fnetwork/rensai/iprt0
3/iprt01.html.