topology | ||
.gitignore | ||
README.md | ||
route-0.py | ||
router.py | ||
scenario.py |
Route 0
Route 0 is a suite for learning about and experimenting with routing protocols. It uses the Free Range Routing (FRR) protocol implementations running on top of a network setup locally using Mininet.
Introduction
Motivation
Mininet is a great tool for teaching, learning, and experimenting with networking. However, there was no coherent framework or easy to examples to follow which would let one use Mininet to setup a network running a bunch of routing protocols. The FRR project actually uses Mininet for running topology tests, but that makes them difficult to learn from and experiment with. As somebody looking for resources to learn about configuring networks to play with on my own computer that seemed like a big gap.
Purpose
The primary purpose of Route 0 is to provide a framework for learning how routing works all the way from setting up IP addresses on individual interfaces up to setting up BGP peering sessions between multiple autonomous systems and setting up VPN tunnels. Therefore, the primary audience are people new to networking. However, even if you already know some routing basics you might still find some of the examples valuable. The repository is structured such that you can start from any point you like.
A secondary purpose is to provide an experimental testbed in which a network running a whole stack of routing protocols can be quickly designed, provisioned, and brought up on a single computer.
Getting Started
Platform
For the best experience it is recommended to run Route 0 experiments using the Virtual Machine (VM) image developed specifically for this project.
TODO: INSTRUCTIONS FOR VM IMAGE
If you would prefer to set up your own environment, you can follow these instructions. They describe the steps needed to produce the exact same VM image available above.
Note that both Mininet and FRR are developed primarily for Linux so if you have a different operating system you will have to use some form of virtualisation. With some effort (and limitations) you might be able to get things running on other Unix-like systems, but that is undocumented.
Running an experiment
Lessons
Structure
Topologies
Scenarios
Contributing
There are many ways to contribute to Route 0. If you are an expert in networking, you can look for and correct errors, improve the existing lessons, or add new lessons. Another way to contribute is to simply add new scenarios or topologies that you feel would be interesting for others.
Adding a new topology
Adding a new topology is straightforward.
- Create a new directory in the
topology
directory. - Create a
topo.py
file and define a classNetTopo
that inherits frommininet.topo.Topo
and build your new topology in its constructor. - Create a
zebra
directory and populate it with configuration files for thezebra
daemon to configure the interfaces in your topology. - Create a
staticd
directory and populate it with configuration files for thestaticd
daemon to configure the default routes on hosts. - Create a
README.md
file to describe your topology. - Add your topology to the
route-0.py
file. By default a topology will support theplain
andbasic
scenarios.
The easiest way to start would be to copy some other topology and customise it as appropriate.
Adding a new scenario
By default all topologies support the plain
and basic
scenarios. Adding a
additional scenarios is also pretty straightforward.
- In the topology's directory, make sure there is a
scenario
directory. Create one if it doesn't exist. - In the
scenario
directory create a new directory for your specific scenario. - In your new directory create one directory for each daemon you intend to
run. You don't need to do this for
zebra
orstaticd
unless you want to override the topology defaults.
Name
I am terrible at coming up with names so I'll at least explain myself. The word "Route" was chosen due to its dual meaning. A route is naturally a central concept in networking, but it in every day English it simply means a path, a track, a road. This repository is a tutorial, a road to learning about routing protocols, hence a "Route". The number 0 is used to indicate that this is the first route one would take in their networking education.