rmd: attivit sperimentale
TRANSCRIPT
![Page 1: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/1.jpg)
RMD: Attività Sperimentale
Esercitatori: Ing. Stefano Paris
E-Mail: [email protected]
Ing. Alberto Pollastro E-Mail: [email protected]
Materiale Course Website:
http://antlab.elet.polimi.it
Netkit Website:
http://wiki.netkit.org/index.php/Main_Page
![Page 2: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/2.jpg)
Copyright Notice
All the pages/slides in this presentation, including but not limited to, images, photos, animations, videos, sounds, music, and text (hereby referred to as “material”) are protected by copyright.
This material, with the exception of some multimedia elements licensed by other organizations, is property of the authors and/or organizations appearing in the first slide.
This material, or its parts, can be reproduced and used for didactical purposes within universities and schools, provided that this happens for non-profit purposes.
Information contained in this material cannot be used within network design projects or other products of any kind.
Any other use is prohibited, unless explicitly authorized by the authors on the basis of an explicit agreement.
The authors assume no responsibility about this material and provide this material “as is”, with no implicit or explicit warranty about the correctness and completeness of its contents, which may be subject to changes.
This copyright notice must always be redistributed together with the material, or its portions.
![Page 3: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/3.jpg)
How to Perform Experiments in Computer Networks?
Computer networks are tipically quite complex several devices (computers, routers, etc.) several interfaces several protocols running physical interconnections originate complex
topologies
Performing experiments may be unfeasible
![Page 4: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/4.jpg)
How to Perform Experiments in Computer Networks?
The currently used network cannot be exploited for experiments it hosts services that are critical for the company it would be necessary to coordinate different
departments of the company
Network equipments are expensive sometimes, even for performing simple
experiments, several equipments should be available in the same testbed
![Page 5: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/5.jpg)
Simulation vs. Emulation
Emulation and simulation systems put at user’s disposal a virtual environment that can be exploited for tests, experiments, measures
Simulation systems aim at reproducing the performance of a real-life system (latency time, packet loss, etc.) NS-2, NS-3, Omnet++, QualNet, etc.
Emulation systems aim at accurately reproducing the functionalities of a real-life system (configurations, architectures, protocols), with limited attention to performance Netkit, Marionnet, etc.
![Page 6: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/6.jpg)
Netkit: An Emulation Tool
Based on uml (user-mode linux) http://user-mode-linux.sourceforge.net/
Each emulated network device is a virtual Linux box
a virtual linux box is one that is based on the uml kernel
The linux os is endowed with software supporting most of the network protocols Any linux machine can be configured to act as a
bridge/switch or as a router
![Page 7: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/7.jpg)
UML: User Mode Linux
User-Mode Linux is a linux kernel (inner part of the linux os) that can be executed as a user process on a standard linux box
A user-mode linux process is called virtual machine (vm)
The linux box that hosts a virtual machine is called host machine (host)
Several virtual machines can be executed at the same time on the same host
![Page 8: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/8.jpg)
UML Virtual Machines
Each virtual machine has: a console (a terminal window) a memory (“cut” into the memory of the host) a filesystem (stored in a single file of the host
filesystem) (one or more) network interfaces
Each network interface can be connected to a (virtual) collision domain
Each virtual collision domain can be connected to several interfaces
![Page 9: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/9.jpg)
UML Virtual Machines
![Page 10: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/10.jpg)
Emulating a Computer Network using UML
Basic Idea: Several virtual machines are created inside a single
host machine Virtual machines are connected to virtual collision
domains and thus can communicate with each other
Each virtual machine can be configured to play the role of a regular host, of a router, or even of a switch
![Page 11: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/11.jpg)
Emulating a Computer Network using UML
![Page 12: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/12.jpg)
What is Netkit?
Netkit is a set of tools and commands that can be used to easily set up a virtual computer network (most) commands are implemented as scripts
A ready-to-use filesystem that is exploited as a pattern for creating the file system of each vm Most commonly used networking tools are already
installed in this filesystem
A uml kernel that is used as kernel for the virtual machines
![Page 13: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/13.jpg)
Netkit Setup
![Page 14: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/14.jpg)
Netkit Setup (1/4)
Download at http://www.netkit.org/
HW requirements:
i386 32 bit architecture
a 600 MHz cpu
~10 MB of memory for each vm (depending on the vm configuration)
~600 MB of disk space + ~1-20 MB for each vm (depending on the usage of the vm)
SW requirements:
a linux box
works fine on many distributions, see http://www.netkit.org/status.html
standard, commonly available system tools (awk, lsof, etc.)
![Page 15: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/15.jpg)
Netkit Setup (2/4)
Download the three files that make up the distribution netkit-X.Y.tar.bz2 netkit-filesystem-FX.Y.tar.bz2 (warning: >100MB) netkit-kernel-KX.Y.tar.bz2
Unpack them in the same location tar xjf netkit-X.Y.tar.bz2 tar xjf netkit-filesystem-FX.Y.tar.bz2 (this may take a
while; warning: decompressed size exceeds 600MB) tar xjf netkit-kernel-KX.Y.tar.bz2
![Page 16: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/16.jpg)
Netkit Setup (3/4)
Configure your shell to set the following environment variables NETKIT_HOME must be set to the directory containing
the decompressed version of netkit “$NETKIT_HOME/bin” must be appended to the PATH “:$NETKIT_HOME/man” must be appended to the
MANPATH For example (assuming bash is being used)
export NETKIT_HOME=~/netkit2 export PATH=$PATH:$NETKIT_HOME/bin export MANPATH=:$NETKIT_HOME/man
![Page 17: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/17.jpg)
Netkit Setup (4/4)
you can check your configuration by entering the netkit directory… cd $NETKIT_HOME
…and running the check_configuration.sh script ./check_configuration.sh
if all the checks succeed, then you are ready to use netkit
![Page 18: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/18.jpg)
Using Netkit
![Page 19: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/19.jpg)
Netkit Commands
Netkit provides users with two sets of commands v-prefixed commands (vcommands) l-prefixed commands (lcommands)
vcommands act as low level tools for configuring and starting up single virtual machines
lcommands provide an easier-to-use environment to set up complex labs consisting of several virtual machines
![Page 20: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/20.jpg)
Netkit vcommands
vcommands allow to startup virtual machines with arbitrary configurations (memory, network interfaces, etc.) vstart: starts a new virtual machine vlist: lists currently running virtual machines vconfig: attaches network interfaces to running vms vhalt: gracefully halts a virtual machine vcrash: causes a virtual machine to crash vclean: “panic command” to clean up all netkit
processes (including vms) and configuration settings on the host machine
![Page 21: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/21.jpg)
Netkit lcommands
lcommands ease setting up complex labs consisting of several virtual machines lstart: starts a netkit lab lhalt: gracefully halts all vms of a lab lcrash: causes all the vms of a lab to crash lclean: removes temporary files from a lab directory linfo: provides information about a lab without
starting it ltest: allows to run tests to check that the lab is
working properly
![Page 22: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/22.jpg)
Preparing a Lab
![Page 23: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/23.jpg)
Accessing the “external world” from a Virtual Machine
Two ways of doing this the directory /hosthome inside a virtual machine
directly points to the home directory of the current user on the real host
read/write access is allowed vstart can automatically configure tunnels (“tap
interfaces”) by which a virtual machine can access an external network
see man vstart for more information
![Page 24: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/24.jpg)
Preparing a lab
A netkit lab is a set of preconfigured virtual machines that can be started and halted together
It may be implemented in (at least) two ways: by writing a single script lab-script that invokes
vstart for each virtual machine to be started by setting up a standard netkit lab that can be
launched by using the lcommands (recommended)
![Page 25: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/25.jpg)
Lab using vcommands
A script (e.g., lab-script) invokes vstart with some options to start up each virtual machine
By using the --exec option of vstart, the same script can be invoked inside vms (e.g., in order to automatically configure network interfaces)
A check inside lab-script can be used to test if we are in the real host or inside a vm
![Page 26: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/26.jpg)
Lab using vcommands
vstart pc1 --eth0=0 --eth1=1 --exec=this_script
vstart pc2 --eth0=0 --exec=this_script
vstart pc3 --eth0=1 –exec=this_script
if [ `id –u` == “0” ]; then
case “$HOSTNAME” in
pc1)
ifconfig eth0 10.0.0.1 up
ifconfig eth1 10.0.0.2 up ;;
pc2)
ifconfig eth0 10.0.0.1 up ;;pc3)
ifconfig eth0 10.0.0.1 up ;;esac
fi
![Page 27: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/27.jpg)
Lab using lcommands
A standard netkit lab is a directory tree containing: a lab.conf file describing the network topology a set of subdirectories that contain the configuration
settings for each virtual machine .startup and .shutdown files that describe actions
performed by virtual machines when they are started or halted
[optionally] a lab.dep file describing dependency relationships on the startup order of virtual machines
[optionally] a _test directory containing scripts for testing that the lab is working correctly
![Page 28: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/28.jpg)
Configuration (lab.conf)
This file describes: the settings of the vms that make up a lab the topology of the network that interconnects the vms
of the lab list of machine[arg]=value assignments
machine is the name of the vm (e.g., pc1) if arg is an integer number (say i), then value is the
name of the collision domain to which interface ethi should be attached
if arg is a string, then it must be the name of a vstart option and value is the argument (if any) to that option
![Page 29: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/29.jpg)
Configuration (lab.conf)
Example:
pc1[0]=A
pc2[0]=A
pc2[1]=B
pc2[mem]=256
pc3[0]=B
pc2 is equipped with 256MB of (virtual) memory
![Page 30: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/30.jpg)
lab.conf
Other optional assignments:
machines=“pc1 pc2 pc3…”: explicitly declare the virtual machines that make up the lab
by default, the existence of a subdirectory vm_name in the lab directory implies that a virtual machine vm_name is started
Ddescriptive information displayed when the lab is started:
LAB_DESCRIPTION LAB_VERSION LAB_AUTHOR LAB_EMAIL
LAB_WEB
![Page 31: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/31.jpg)
Lab Subdirectories
Netkit starts a virtual machine for each subdirectory, with the same name of the subdirectory itself unless lab.conf contains a machines=statement
The contents of subdirectory vm are mapped (i.e., copied) into the root (/) of vm’s filesystem for example, vm/foo/file.txt is copied to /foo/file.txt
inside virtual machine vm this only happens the 1st time the vm is started; in
order to force the mapping you have to remove the vm filesystem (.disk file)
![Page 32: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/32.jpg)
Startup and Shutdown Files
shell scripts that tell virtual machines what to do when starting up or shutting down
they are executed inside virtual machines
shared.startup and shared.shutdown affect all the virtual machines
upon startup, a vm named vm_name runs
shared.startup vm_name.startup
upon shutdown, a vm named vm_name runs
vm_name.shutdown shared.shutdown
![Page 33: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/33.jpg)
Startup and Shutdown Files
A typical usage of a .startup file is to configure network interfaces and/or start network services
Sample of vm_name.startup
ifconfig eth0 10.0.0.1 up
/etc/init.d/httpd start
![Page 34: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/34.jpg)
lab.dep
Multiple virtual machines can boot at once (parallel startup)
-p option of lstart
The startup order of virtual machines can be influenced by establishing dependencies
e.g., “pc3 can only boot after pc2 and pc1 are up and running”
A lab.dep file inside the lab directory describes dependencies and automatically enables parallel startup
file format is similar to that of a Makefile Example
pc3: pc2 pc1
![Page 35: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/35.jpg)
Launching/Stopping a lab
lcommand -d <lab_directory> [machine...]
or
enter the lab directory (cd lab_directory) lcommand
where lcommand can be one of the following:
lstart, to start the lab lhalt, to gracefully shut down the virtual machines of a lab lcrash, to suddenly crash the virtual machines of a lab
optionally, a list of machine names can be given on the command line, in which case only those machines will be affected by the command
![Page 36: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/36.jpg)
Removing Temporary Files
A running lab creates some temporary files inside both the current directory and the lab directory
To get rid of them all, use lclean after the lab has been halted/crashed notice: lclean also removes virtual machine
filesystems (.disk files); do not use it if you are going to launch your lab again using the same filesystems
![Page 37: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/37.jpg)
Experiments (ltest)
Makes it easier to check that distributed labs work properly
ltest starts a lab and dumps information about each virtual machine vm the output goes into _test/results/vm.default
[optionally] a script _test/vm.test may contain additional commands to be run inside vm in order to dump other information the output goes into _test/results/vm.user
![Page 38: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/38.jpg)
Experiments (ltest)
When preparing a lab launch ltest to dump lab information move files _test/results/* to a subdirectory
_test/results/good
When testing a lab launch ltest to dump lab information compare (e.g., using diff) files _test/results/* with
_test/results/good/* check if they all match
![Page 39: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/39.jpg)
Getting information about a lab
linfo prints summary information about a lab without running it
Option -m allows to create a sketch of the link-level topology of the lab
Requires the GraphViz library to be installed http://www.graphviz.org/
![Page 40: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/40.jpg)
First ExperimentSingle Host Scenario
![Page 41: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/41.jpg)
Step 1: Creating a virtual machine
Netkit little by little: just a single virtual machine
Suggestion: before setting up a netkit lab, always make a clear diagram of the scenario that you are going to emulate!
A simple scenario:
vstart pc1 --eth0=A
pc1
Collision Domain ”A”
10.0.0.0/24
eth0
10.0.0.1
![Page 42: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/42.jpg)
Step 2: Logging on pc1
A window containing pc1’s console pops up Once the bootstrap of pc1 is terminated, a shell
prompt is automatically displayed Now you are the administrator (root) of pc1
![Page 43: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/43.jpg)
Step 3: Back to the host machineconsole
![Page 44: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/44.jpg)
Step 4: Configuring the networkinterface of pc1
![Page 45: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/45.jpg)
Step 5: Checking the routing table
The routing table has been automatically updated when the interface has been brought up:
Other labs show how to manually alter the routing table
![Page 46: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/46.jpg)
Step 6: Shutting down the vm
Three possibilities: from inside → halt from outside → vhalt pc1 from outside, brute force → vcrash pc1
Unless you chose to use vcrash, pc1’s filesystem is still stored in file pc1.disk, so it will be used again when pc1 is restarted
![Page 47: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/47.jpg)
Step 7: Permanent configuration
After halting pc1, if you want to restart it you also have to reconfigure its network interface eth0
A permanent configuration can be obtained, e.g., by editing /etc/network/interfaces (inside the vm pc1)
Tips: you can use an editor like vi or mcedit the permanent settings of a vm can be configured
inside the same files that would be used in a real linux box
Removing the vm filesystem (pc1.disk) removes any permanent configuration as well
![Page 48: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/48.jpg)
Step 8 – restarting networkservices
At next boot pc1 will be automatically configured by the os which will perform the suitable ifconfig and route commands based on the contents of /etc/network/interfaces
The new configuration can also be fetched, without rebooting by restarting network services using the following command:
/etc/init.d/networking restart
![Page 49: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/49.jpg)
Second ExperimentTwo Hosts Scenario
![Page 50: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/50.jpg)
Two Hosts
A simple network with two hosts connected to the same collision domain
pc2
Collision Domain ”A”
eth0
pc1
10.0.0.0/24
eth0
10.0.0.1
10.0.0.2
![Page 51: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/51.jpg)
Step 1: Creating the vms
![Page 52: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/52.jpg)
Step 2: Configuring networkinterfaces
![Page 53: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/53.jpg)
Step 3: Test connectivity
The network connectivity can be checked using ICMP messages The ping command sends ICMP Echo Request to
network hosts
From pc1 type ”ping 10.0.0.2” pc1 and pc2 can reach each other if ICMP
Echo Replies are received by pc1
![Page 54: RMD: Attivit Sperimentale](https://reader031.vdocuments.mx/reader031/viewer/2022021209/62063aa78c2f7b173005ab58/html5/thumbnails/54.jpg)
Step 4: a Look at the packets
Let’s look at the packets exchanged on collision domain A
We use tcpdump, a network sniffer that is widely available on linux boxes
Store sniffed packets into file capture.pcap (on the host machine) the (real) home directory of the current user is
made available inside the vm under /hosthome
Open capture.pcap on the real host machine using a packet dissector (e.g., wireshark)