In the months since Cisco IOU leaked out, many people have began using it for study purposes instead of or in addition to dynamips. One advantage that dynamips has over IOU is the ability to communicate with a physical network which comes in handy sometimes, like when you want to do pointless things like dumping full BGP routing tables into dynamips.
Cisco IOU has similar functionality, although it requires another binary executable called IOUlive. Unfortunately, like IOU itself, it’s not available to the general public and getting ahold of it isn’t easy. I did manage to acquire a Solaris version which I used to create an example IOU topology but I haven’t yet gotten my hands on an official Linux version.
Fortunately, I don’t need to.
Others have reverse engineered IOU and figured out how to achieve the same result. iou2net.pl is a Perl script that provides the same functionality as IOUlive. I’ve been using it while writing some lab exercises for Free CCNA Labs and it works wonderfully.
I did have problems with it at first, as it wasn’t correctly computing the MAC address of my IOU router’s Ethernet interface (due, I believe, to the fact that I’m using an IOU 15.1(4) image instead of the 12.4 version that everyone else seems to use). I hacked around on the Perl script and added the ability to explicitly specify the MAC address as a command-line parameter and then it worked great. That functionality has now been added into version 0.5 of the iou2net.pl script itself, in case you run into that same issue.
For those interested, you can check out the topology that I’m using on the Free CCNA Labs Topology page. The corresponding NETMAP file, including the instance for iou2net.pl, looks like this:
/* http://freeccnalabs.com/resources/topology/ */ /* Router to frame-relay switch links */ 101:1/0 199:1/3 102:1/0 199:0/2 103:1/0 199:0/3 104:1/0 199:0/0 105:1/0 199:0/1 /* Router to router serial links */ 101:1/1 102:1/1 102:1/2 103:1/2 104:1/1 105:1/1 104:1/2 105:1/2 /* Router to switch ethernet links */ 101:0/2 111:0/2 102:0/1 111:0/1 102:0/2 112:0/2 103:0/1 112:0/1 104:0/3 111:0/3 105:0/3 112:0/3 /* Switch to switch ethernet link */ 111:0/0 112:0/0 /* Used by iou2net.pl to bridge PHOENIX e0/0 to physical network */ 101:0/0@chaos 100:0/0@chaos
Not shown in the topology diagram is the connection to the physical network, which uses the Ethernet 0/0 interface on the PHOENIX router. You’ll need to change the hostname on the last line of the NETMAP file (“chaos”, in my case) to accurately reflect the hostname of the machine you’re running IOU on.
In addition, I have a shell script that I use to start up the IOU instances and the iou2net.pl script:
#!/bin/sh IOURC=/home/jlgaddis/.iourc IOU2NET=/home/jlgaddis/iou/iou2net.pl IOU2NET_ID=100 IOU2NET_IF=eth0 L2IOU=/home/jlgaddis/iou/i86bi_linuxl2-upk9-ms.M L3IOU=/home/jlgaddis/iou/i86bi_linux-adventerprisek9_ivs-ms.151-4.M NETMAP=/home/jlgaddis/iou/freeccnalabs/NETMAP WRAPPER=/home/jlgaddis/iou/wrapper # Start the frame-relay switch $WRAPPER -m $L3IOU -p 50199 -- -e0 -s2 199 -c $NETMAP & # FRSW sleep 2 # Start the routers $WRAPPER -m $L3IOU -p 50101 -- -e1 -s1 101 -c $NETMAP & # PHOENIX sleep 2 $WRAPPER -m $L3IOU -p 50102 -- -e1 -s1 102 -c $NETMAP & # DALLAS sleep 2 $WRAPPER -m $L3IOU -p 50103 -- -e1 -s1 103 -c $NETMAP & # MIAMI sleep 2 $WRAPPER -m $L3IOU -p 50104 -- -e1 -s1 104 -c $NETMAP & # CHICAGO sleep 2 $WRAPPER -m $L3IOU -p 50105 -- -e1 -s1 105 -c $NETMAP & # NEW YORK sleep 2 # Start the switches $WRAPPER -m $L2IOU -p 50111 -- -e1 -s0 111 -c $NETMAP & # SW1 sleep 2 $WRAPPER -m $L2IOU -p 50112 -- -e1 -s0 112 -c $NETMAP & # SW2 sleep 2 # Start iou2net.pl instance sudo $IOU2NET -i $IOU2NET_IF -n $NETMAP -p $IOU2NET_ID -v -m 02:03:e8:00:65:00
Obviously, you’ll want to change the variables at the beginning of the script as appropriate. You’ll probably also need to modify (or remove) the MAC address that’s passed to the iou2net.pl script.