Dynagen/Dynamips linux上でCisco Router のemulatorを動かす

  • dynagen
  • dynamips

何か会社の自席から半径2メートルぐらいでにわかに盛り上がっていたのでやってみた。GUIが使えるならGNS3というのも使うと、トポロジーが簡単に作れるので良い。

エミュレートするマシンにCatalystはないけど、routerにNM-16ESW モジュールを追加すれば、似たようなことはだいたいできる。

一番の難所はIOSを入手するところだけど、ネットオークションで中古のcisco製品買うなどして気合で手に入れる。

install

configureは必要ないので、dynagenとdynamipsのバイナリを取ってくる。取ってきたものを適当なところに放り込む。

起動

dynamips を起動後、dynagenを起動

dynamips

"-H" で指定したportで起動。--helpのoptionには-H [ip]:port と書いているけど、IPを指定したらdefaultの7200でlistenする。よくわからん。

dynamipsは全interfaceでlistenして認証なしでtelnet接続できるので、インターネット上に公開しているサーバの場合はiptables などでlocalhost以外からの接続はDROPしておくのが良い。

$ dynamips -H 2691 &
# iptables -A INPUT --protocol tcp --source localhost --dport 7200 --jump ACCEPT
# iptables -A INPUT --protocol tcp --dport 7200 --jump DROP
dynagen

設定ファイル作って、それを引数にして起動。console で指定した数値でtcp portがlistenするので、そこにtelnet接続するとrouterにコンソール接続した状態になる。これもdynamipsと同様にlocalhost以外からの接続はDROPしておくのが良い。

$ cat ~/etc/dynagen.net
[localhost:2691]
	  
  [[2691]]
    image = /path/to/ios.bin
    ram = 256
		  
  [[ROUTER Router]]
    model = 2691
    console = 2001

$ dynagen ~/etc/dynagen.net
#### dynagenはフォアグラウンドで起動しているので別のシェルから
$ telnet localhost 2001
dynagen idlepc の設定

dynagenを起動するとモリモリ cpuを消費するのでdynagen のシェルからidlepcを設定する。

=> idlepc get Router
### 数種類表示されるので適当に数字選んで、cpu負荷が下がるものを選択する
### 再度選ぶ場合はshow で
=> idlepc show Router
=> idlepc save Router

dynagen設定

Router間を接続する

ROUTERの中でinterface間の情報を書く。片側のrouterに書くだけで、両方書かなくても良いかも?

[[ROUTER R1]]
  model = 2691
  console = 2001
  idlepc = 0x61475998
  F0/0  = R2 F0/0
		  
[[ROUTER R2]]
  model = 2691
  console = 2002
  idlepc = 0x61475998
  F0/0  = R1 F0/0
L2 Switch のエミュレート

NM-16ESW モジュールを追加する。

[[ROUTER R1]]
  model = 2691
  console = 2001
  idlepc = 0x61473534
  F0/0  = R2 F0/0
  slot1 = NM-16ESW

R1#show interfaces summary 

 *: interface is up
 IHQ: pkts in input hold queue     IQD: pkts dropped from input queue
 OHQ: pkts in output hold queue    OQD: pkts dropped from output queue
 RXBS: rx rate (bits/sec)          RXPS: rx rate (pkts/sec)
 TXBS: tx rate (bits/sec)          TXPS: tx rate (pkts/sec)
 TRTL: throttle count

 Interface              IHQ   IQD  OHQ   OQD  RXBS RXPS  TXBS TXPS TRTL
------------------------------------------------------------------------
* FastEthernet0/0          0     0    0     0     0    0     0    0    0
  FastEthernet0/1          0     0    0     0     0    0     0    0    0
  FastEthernet1/0          0     0    0     0     0    0     0    0    0
  FastEthernet1/1          0     0    0     0     0    0     0    0    0
  FastEthernet1/2          0     0    0     0     0    0     0    0    0
  FastEthernet1/3          0     0    0     0     0    0     0    0    0
  (略)
  Vlan1                    0     0    0     0     0    0     0    0    0

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#interface fastEthernet 0/0
R1(config-if)#switchport ?
% Unrecognized command            ### <= 元からついてるFa0/0 にはswitchport設定できない
R1(config-if)#exit       
R1(config)#interface fastEthernet 1/0
R1(config-if)#switchport access vlan ?  
	<1-1005>  VLAN ID of the VLAN when this port is in access mode
                                  ### 追加した Fa1/0 にはswitchport でvlan設定できる