• Stars
    star
    173
  • Rank 215,664 (Top 5 %)
  • Language
    Shell
  • License
    GNU General Publi...
  • Created over 4 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The official repository of the mini-Internet exercise.

An Open Platform to Teach How the Internet Practically Works

Welcome in the official repository of the mini-Internet project.

The mini-Internet project

A mini-Internet is a virtual network mimicking the real Internet. Among others, there are routers, switches and hosts that are located in different ASes. A mini-Internet runs in a single server and is tailored to teach how the Internet practically works. Each component of the network is running in its own dedicated linux container, that are remotely accessible by the students with simple ssh connections.

The mini-Internet project is the flagship piece of our Communication Networks course at ETH Zurich since 2016. The concept is rather simple: we let each student group operate their own AS. Their goal? Enabling Internet-wide connectivity.

We find this class-wide project to be invaluable in teaching our students how the Internet infrastructure practically works. Among others, our students have a much deeper understanding of Internet operations alongside their pitfalls. Besides students tend to love the project: clearly the fact that all of them need to cooperate for the entire Internet to work is empowering

How we use the platform at ETH

  • We use the platform in our introductory course to Communication Networks. In the communication_networks_course directory, we detail the mini-Internet project and show what we ask our students to do. We also show the configuration files that we used so that you can run the same project in your computer network classes.

  • We use the platform in our Advanced Topics in Communication Networks course so that students can have hands on experience on more advanced concepts and protocols such as MPLS, LDP, BGP Free Core, BGP VPN, VRF and Multicast. In the advanced_networks_course directory, we detail the different mini-Internet-based exercises that we give to our students.

Build your mini-Internet

With this platform, you can easily build your own mini-Internet, tailored for your teaching objectives. The documentation is available in the wiki and the code of the platform is in the platform directory. In a nutshell, after defining your topology in configuration files, you can build your mini-Internet with a bash script and use it for your networking class.

If you use the platform, please cite our SIGCOMM CCR'20 paper. Here is the bibtex:

@article{10.1145/3402413.3402420,
author = {Holterbach, Thomas and B\"{u}hler, Tobias and Rellstab, Tino and Vanbever, Laurent},
title = {An Open Platform to Teach How the Internet Practically Works},
year = {2020},
issue_date = {April 2020},
publisher = {Association for Computing Machinery},
url = {https://doi.org/10.1145/3402413.3402420},
journal = {SIGCOMM Comput. Commun. Rev.},
}

News

05/05/22: Added our assignment for 2022! You can find it here. This year, we added RPKI and developed a website that is built automatically at startup that students can use to look at the matrix, looking glasses and register their ROAs for RPKI.
20/05/21: Added our assignment for 2021! You can find it here. This year, we added support for IPv6 and asked our students to configure 6in4 tunnels.
3/12/20: Added the BGP VPN MPLS and Multicast exercises of our Advanced Topic in Computer Networks course.
29/09/20: Changed the Dockerfile for the router image. Now FRR is compiled from the source with a particular version of the libyang library so that VRF are supported.
08/07/20: Added the docker image to use for the hosts in the config files.
29/06/20: Added support for MPLS and Multicast.
15/04/20: Fixed a security issue with the docker containers. Now students' containers only run with limited capabilities.
18/03/20: Several fixes (e.g., prevent containers to crash because too many processes are running) and improvements (e.g., configure different internal topologies).

Useful links

  • We presented the mini-Internet at NANOG 78 in February 2020. The talk is available on youtube.

  • We presented the mini-Internet at SIGCOMM'20 in the "Best of CRR" session. The virtual talk is available on youtube.

  • We wrote a blogpost on the APNIC website about the mini-Internet.

  • We presented the mini-Internet at the AIMS-KISMET workshop. Our slides are available online.

Contacts

Acknowledgment

We are grateful to everyone who contributed to improve the platform.

We thank our ETH colleagues:

  • Alexander Dietmuller, who implemented the website and helped us as a teaching assistant.
  • Rudiger Birkner, for all his work as a teaching assistant and his feeback on the platform.
  • Roland Meier, for the connectivity matrix (prior 2022).

We are thankful to the following ETH students who helped us developping the platform during their studies:

  • Martin Vahlensieck, 2021. He implemented the BGP policy analyzer and the auto-completion in the SSH container.
  • Sandro Lutz, 2021. He continued the work of Denis and managed to make RPKI work within the mini-Internet. Besides, he improved the docker images that are used within the platform.
  • Denis Mikhaylov, 2020. He was the first student who worked on implementing RPKI within the mini-Internet.
  • Tino Rellstab, 2019. He implemented some of the core features of the platform needed to move from a VM-based platform to container-based platform.

Disclaimer

This platform has been tailored to teach how the Internet works in our Communication Networks lecture at ETH Zurich. Although this platform may be useful for other kind of purposes (research, experiments, etc), it has not been designed for them.

If you want to use this platform for your networking class, we recommend that you spent some time understanding the code and how we build the mini-Internet, and we recommend you to try it first before using it with actual students. We assume no responsibility or liability for any problem you may encounter while using the platform.

More Repositories

1

p4-learning

Compilation of P4 exercises, examples, documentation, slides for learning or teaching
Python
502
star
2

p4-utils

Extension to Mininet that makes P4 networks easier to build
Python
169
star
3

SP-PIFO

Approximating Push-In First-Out Behaviors using Strict-Priority Queues
Java
50
star
4

ACC-Turbo

Aggregate-Based Congestion Control for Pulse-Wave DDoS Defense
Shell
45
star
5

hijack-btc

Python
36
star
6

synet-plus

Practical Network-Wide Configuration Synthesis with Autocompletion
Python
33
star
7

netdice

A scalable and accurate probabilistic network configuration analyzer verifying network properties in the face of random failures.
Python
30
star
8

ditto

ditto: WAN Traffic Obfuscation at Line Rate (source code belonging to the NDSS 2022 paper)
P4
26
star
9

synet

SyNET Network-wide Configuration Synthesis
Python
24
star
10

Blink

Blink: Fast Connectivity Recovery Entirely in the Data Plane
Python
24
star
11

config2spec

Mining Network Specifications from Network Configurations
Python
22
star
12

FANcY

FANcY: FAst In-Network GraY Failure Detection for ISPs
Python
18
star
13

Metha

A framework for automated testing of network analysis and verification tools.
Python
15
star
14

snowcap

Synthesizing Network-Wide Configuration Updates
Rust
14
star
15

O4

Reducing P4 Language’s Voluminosity using Higher-Level Constructs
Racket
12
star
16

Chameleon

Taming the transient while reconfiguring BGP (SIGCOMM'23)
Rust
9
star
17

tekton

A library to create networks and to generate network configurations
Python
8
star
18

swift

SWIFT: Predictive Fast Reroute
Python
8
star
19

net2text

Net2Text (NSDI'18)
Python
6
star
20

trace-get

Tool to download caida traces
Python
6
star
21

SIFT

"Is my Internet down?" Sifting through User-Affecting Outages with Google Trends
Python
4
star
22

Magnifier

Official repository for the Magnifier paper (NSDI'23)
Python
4
star
23

minigenerator

Simple udp/tcp traffic generator for mininet-based prototypes
Python
3
star
24

supercharged_router

Boosting Routers Convergence with SDN
Python
3
star
25

SIDR

Python
2
star
26

ns3-fancy

C++
2
star
27

atlas_interference

Quantifying interference between measurements on the RIPE Atlas platform
Python
1
star
28

PowerDB_Datasheets

1
star
29

PowerDB_Scrappers

1
star
30

iTAP-controller

iTAP prototype implementation
Java
1
star