Static routing vs Dynamic Routing (Quagga: RIPv2)
[topology]
p.s.
1. In ubuntu, you can use “sudo apt-get install traceroute” to install traceroute.
2. In dynamic routing, r1, r2, r3 is a docker node (So you need to use Containernet to run this example) Use “docker pull kathara/quagga” to download the quagga image for r1,r2,and r3.
[Static routing]
#!/usr/bin/env python from containernet.cli import CLI from containernet.link import TCLink,Link from containernet.net import Containernet if '__main__' == __name__: net = Containernet(link=TCLink) h1 = net.addHost('h1') h2 = net.addHost('h2') r1 = net.addHost('r1') r2 = net.addHost('r2') r3 = net.addHost('r3') Link(h1, r1) Link(h2, r2) Link(r1, r2) Link(r1, r3) Link(r2, r3) net.build()
r1.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward") r2.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward") r3.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward") r1.cmd("ifconfig r1-eth0 0") r1.cmd("ifconfig r1-eth1 0") r1.cmd("ifconfig r1-eth2 0") r2.cmd("ifconfig r2-eth0 0") r2.cmd("ifconfig r2-eth1 0") r2.cmd("ifconfig r2-eth2 0") r3.cmd("ifconfig r3-eth0 0") r3.cmd("ifconfig r3-eth1 0") r1.cmd("ip addr add 192.168.1.254/24 brd + dev r1-eth0") r1.cmd("ip addr add 12.1.1.1/24 brd + dev r1-eth1") r1.cmd("ip addr add 13.1.1.1/24 brd + dev r1-eth2") r2.cmd("ip addr add 192.168.2.254/24 brd + dev r2-eth0") r2.cmd("ip addr add 12.1.1.2/24 brd + dev r2-eth1") r2.cmd("ip addr add 23.1.1.2/24 brd + dev r2-eth2") r3.cmd("ip addr add 13.1.1.3/24 brd + dev r3-eth0") r3.cmd("ip addr add 23.1.1.3/24 brd + dev r3-eth1") r1.cmd("ip route add 192.168.2.0/24 via 12.1.1.2") r2.cmd("ip route add 192.168.1.0/24 via 12.1.1.1") h1.cmd("ifconfig h1-eth0 0") h1.cmd("ip address add 192.168.1.1/24 dev h1-eth0") h1.cmd("ip route add default via 192.168.1.254 dev h1-eth0") h2.cmd("ifconfig h2-eth0 0") h2.cmd("ip address add 192.168.2.1/24 dev h2-eth0") h2.cmd("ip route add default via 192.168.2.254 dev h2-eth0") CLI(net) net.stop() |
[Dynamic Routing]
#!/usr/bin/env python from containernet.cli import CLI from containernet.link import TCLink,Link from containernet.net import Containernet if '__main__' == __name__: net = Containernet(link=TCLink) h1 = net.addHost('h1') h2 = net.addHost('h2') r1 = net.addDocker('r1', dimage="kathara/quagga:latest") r2 = net.addDocker('r2', dimage="kathara/quagga:latest") r3 = net.addDocker('r3', dimage="kathara/quagga:latest") Link(h1, r1) Link(h2, r2) Link(r1, r2) Link(r1, r3) Link(r2, r3) net.build()
r1.cmd("ifconfig r1-eth0 0") r1.cmd("ifconfig r1-eth1 0") r1.cmd("ifconfig r1-eth2 0") r2.cmd("ifconfig r2-eth0 0") r2.cmd("ifconfig r2-eth1 0") r2.cmd("ifconfig r2-eth2 0") r3.cmd("ifconfig r3-eth0 0") r3.cmd("ifconfig r3-eth1 0") r1.cmd("ip addr add 192.168.1.254/24 brd + dev r1-eth0") r1.cmd("ip addr add 12.1.1.1/24 brd + dev r1-eth1") r1.cmd("ip addr add 13.1.1.1/24 brd + dev r1-eth2") r2.cmd("ip addr add 192.168.2.254/24 brd + dev r2-eth0") r2.cmd("ip addr add 12.1.1.2/24 brd + dev r2-eth1") r2.cmd("ip addr add 23.1.1.2/24 brd + dev r2-eth2") r3.cmd("ip addr add 13.1.1.3/24 brd + dev r3-eth0") r3.cmd("ip addr add 23.1.1.3/24 brd + dev r3-eth1") h1.cmd("ifconfig h1-eth0 0") h1.cmd("ip address add 192.168.1.1/24 dev h1-eth0") h1.cmd("ip route add default via 192.168.1.254 dev h1-eth0") h2.cmd("ifconfig h2-eth0 0") h2.cmd("ip address add 192.168.2.1/24 dev h2-eth0") h2.cmd("ip route add default via 192.168.2.254 dev h2-eth0") CLI(net) net.stop() |
[Execution]
(static routing)
(dynamic routing: ripv2)
Run the script
Open three terminals for r1, r2, and r3.
Modiy the /etc/quagga/daemons for r1, r2, and r3 (the same setting for r2 and r3)
Modify the /etc/quagga/zebra.conf for r1, r2, and r3
Modify the /etc/quagga/ripd.conf for r1, r2, and r3
Start the quagga daemon for r1,r2, and r3
You can log in to r1 to show the ip routing tables. (password is “zebra”) From the following figure, we can see that r1 can learn 192.168.2.0/24 and23.1.1.0/24 through RIPv2.
Ping and traceroute test
Dr. Chih-Heng Ke (smallko@gmail.com)
Department
of Computer Science and Information Engineering,
National
Quemoy University, Kinmen, Taiwan.