世の中にはCiscoルータのシミュレータがあると聞いたことがあったが、仕事がらCiscoルータは自由に触れるのであまり興味はなかったし、どうせ不完全な動作しかしないのだろうと思っていた。しかしdynamipsというそのオープンソースソフトウェアは、Cisco7200のハードウェアをエミュレートして本物のIOSを走らせるのだという。しかもPCのメモリさえ十分にあれば何台も起動させて、ルーティングプロトコルの動作やパケット転送までできる。さらにPCのLANポートを介して外部の本物のルータと通信もできる。これは検証(おもちゃ)用ML115#2で動かしてみるしかない。
たまたまなのだが、Ubuntuにはdynamipsのパッケージが用意されていて、フロントエンドのdynagenともどもaptitudeコマンド一発でインストールすることができる。インストールは以下のようにする。
ishii@ubuntu:~$ sudo aptitude install dynagen dynamips
dynagenをインストールすると、設定サンプルもインストールされる。内容は以下のような感じ。
ishii@ubuntu:~$ cat /usr/share/doc/dynagen/examples/sample_labs/simple1/simple1.net
# Simple lab
[localhost]
[[7200]]
image = \Program Files\Dynamips\images\c7200-jk9o3s-mz.124-7a.image
# On Linux / Unix use forward slashes:
# image = /opt/7200-images/c7200-jk9o3s-mz.124-7a.image
npe = npe-400
ram = 160
[[ROUTER R1]]
s1/0 = R2 s1/0
[[ROUTER R2]]
# No need to specify an adapter here, it is taken care of
# by the interface specification under Router R1
[[7200]]というのがCisco7200のハードウェアに対する設定。複数のルータをシミュレートする場合でもここの設定は共通だ。image=には自分が持っているIOSイメージのパスを書く。つまりIOSを持っていないとdynamipsは使えない。npe=npe-400というのはCisco7200のCPUボードの型番。特に変える必要はないだろう。ram=はCisco7200に(仮想的に)実装させるメモリ容量で、必要な最小容量はIOSイメージによって決まる。NPE400用のIOSであれば256MBもあれば十分だろう。多くても特にうれしいことはない。
[[Router XX]]というのは各ルータの設定。s1/0というのはシリアルポート名で、=で接続先のルータ名とポート名を書く。これだけでR1のs1/0とR2のs1/0がつながった状態をシミュレートできる。
上記を参考に、私の環境では以下のような設定を用意した。
[localhost]
[[7200]]
image = /home/ishii/dynamips/ios/c7200-adventerprisek9-mz.124-20.T.bin
npe = npe-400
ram = 256
[[ROUTER R1]]
s1/0 = R2 s1/0
[[ROUTER R2]]
いよいよ動かしてみよう。まずdynamipsを起動する。この時点では設定は読み込んでいない。オプションなしでコマンドを打つと利用可能なオプションが表示される。7200はポート番号で任意に選べるが、dynagenが接続するポートは7200(たぶん変更可能)なので、このとおりに打とう。
ishii@ubuntu:~$ dynamips -H 7200 Cisco Router Simulation Platform (version 0.2.8-RC2-x86) Copyright (c) 2005-2007 Christophe Fillot. Build date: Nov 26 2007 06:40:51 ILT: loaded table "mips64j" from cache. ILT: loaded table "mips64e" from cache. ILT: loaded table "ppc32j" from cache. ILT: loaded table "ppc32e" from cache. Hypervisor TCP control server started (port 7200).
dynamipsコマンドはこのままコンソールを開放せず、随時動作状態を表示する。
次に、別のコンソールからdynagenコマンドを設定ファイルを引数として起動する。
ishii@ubuntu:~$ dynagen ~/dynamips/config/simple1.net Reading configuration file... Warning: Starting R1 with no idle-pc value Warning: Starting R2 with no idle-pc value Network successfully loaded Dynagen management console for Dynamips Copyright (c) 2005-2007 Greg Anuzelli => list Name Type State Server Console R1 7200 running localhost:7200 2000 R2 7200 running localhost:7200 2001 =>
=>というプロンプトが出ていくつかのコマンドを使うことができるので、listでシミュレートされているルータを表示させてみた。Consoleと書いてあるのが、そのルータのアクセスするためのTCPポート番号だ。
そうして、R1へのアクセスはまたさらに別のコンソールからlocalhostのポート2000にtelnetする。これは別のPCからでもかまわない。R2へはポート2001だ。
ishii@ubuntu:~$ telnet localhost 2000 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connected to Dynamips VM "R1" (ID 0, type c7200) - Console port Cisco 7206VXR (NPE400) processor (revision A) with 245760K/16384K bytes of memory. Processor board ID 4294967295 R7000 CPU at 150MHz, Implementation 39, Rev 2.1, 256KB L2, 512KB L3 Cache 6 slot VXR midplane, Version 2.1 ...
最初にアクセスしたときは起動画面から表示されるだろう。そのまま待っているとプロンプトが出てきて、普通に設定等ができる。
最後に、笑ってしまうほど簡単な設定だが、R1とR2が通信できていることを確認しよう。
R1#show run Building configuration... Current configuration : 1308 bytes ! .. ! hostname R1 ! ... ! interface Serial1/0 ip address 192.168.0.1 255.255.255.0 encapsulation ppp serial restart-delay 0 ! ... ! line con 0 stopbits 1 line aux 0 stopbits 1 line vty 0 4 login ! end
R2#show run Building configuration... Current configuration : 1323 bytes ! ... ! hostname R2 ! ... ! interface Serial1/0 ip address 192.168.0.2 255.255.255.0 encapsulation ppp serial restart-delay 0 ! ... ! line con 0 stopbits 1 line aux 0 stopbits 1 line vty 0 4 login ! end
この状態でR1からR2へpingを打ってみよう。
R1#ping 192.168.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/12/36 ms
大成功。次はもうちょっと複雑な構成を作ってみよう。