PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
TEL141 - INGENIERÍA DE REDES CLOUD
Laboratorio N°: 2 Semestre: 2023-2
Tema: Aprovisionamiento de un slice de VMs en un solo host
Profesor: César Santiváñez Alumno: Miguel Ahumada Código: 20190050
INDICACIONES GENERALES
● Durante el laboratorio se puede usar el material provisto por los docentes y blogs de internet.
● Seguir atentamente las indicaciones de los jefes de práctica.
● Cualquier tipo de plagio será reportado a facultad.
OBJETIVOS
● Comprender y utilizar Linux Network Namespace, Linux Bridge y Open vSwitch.
● Comprender y utilizar QEMU y KVM para la creación de máquinas virtuales.
● Comprender y utilizar DHCP para asignar direcciones IP dinámicas en entornos virtuales.
ACTIVIDADES A REALIZAR
N° ACTIVIDAD TIEMPO ESTIMADO PUNTAJE
1 Informe Previo 4 días 5 pts
2 Experiencia de Laboratorio 1 hora 30 minutos 10 pts
3 Avances del proyecto - 5 pts
Jefe de Laboratorio Responsable: Juan Manuel Becerra / a20090417@[Link]
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
ESCENARIO GLOBAL PARA EL CURSO
La sección de Ingeniería de las Telecomunicaciones cuenta con una nube privada corriendo el
software VNRT (Virtual Network Research Testbed, desarrollado por miembros del GIRA) que
permite crear y asignar “slices” de cómputo (conjunto de máquinas virtuales interconectadas en
capa 2) emulando una red real. A cada uno de Uds. se les ha asignado un slice con la siguiente
topología:
Gráfica 1: Topología del Slice de Cloud Computing
Como se puede observar, se cuenta con un enlace multipunto (MP Link) y 6 máquinas virtuales:
headnode(servidor central), 3 servidores workers, un switch OpenFlow (OFS) y un gateway. La
TEL141 INGENIERÍA DE REDES CLOUD 2
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
topología cuenta con dos redes: una red de management (líneas azules) tipo bus que
interconecta todas las VMs, y una red que se conecta al OFS (líneas plomas) con el headnode y
los servidores. Notar que esta red (líneas plomas) está formada por 4 enlaces punto-a-punto, y
que se considera una sóla subred porque la máquina virtual OFS está configurada para actuar
como switch en lugar de router.
La topología está configurada de tal forma que se pueda acceder al headnode por ssh con el
siguiente comando:
ssh ubuntu@ip_gateway -p PORT
user: ubuntu password: [changed_password]
(*) En el Laboratorio 1 ya debió cambiar la contraseña por defecto. Caso contrario, se les
descontarán 2 puntos de la nota del laboratorio.
PORT HOSTNAME
5800 headnode
5801 OFS
5802 worker1
5803 worker2
5804 worker3
Tabla 1: Distribución de puertos de acceso a los servidores
INFORME PREVIO
Indicaciones generales:
● Puntaje total: 5 pts
● El informe previo debe ser desarrollado sobre su copia del archivo
TEL141_Lab2_IP_Template.docx, el cual se encuentra en sección “Laboratorio 2” de PAIDEIA,
en la actividad “Entrega del Informe Previo”. Debe cambiar el nombre del archivo a
“TEL141_Lab2_IP_XXX.docx”, donde XXX es su código PUCP. Al terminar, deberá subir este
archivo en versión PDF.
TEL141 INGENIERÍA DE REDES CLOUD 3
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
● Recuerde copiar su código, como texto, dónde se le pida.
● El informe previo será entregado como máximo el día de la sesión síncrona del primer horario
de laboratorio (lunes 04 de septiembre de 2023) a las 19:00 horas. No se podrán subir los
informes después de dicha hora ni se recibirán por ningún otro medio.
● Es responsabilidad del alumno revisar y practicar los conceptos previos necesarios para el
correcto desarrollo del laboratorio.
● Realizar todas las actividades en el head node, utilizando la suite de herramientas iproute2 y
openvswitch.
ACTIVIDAD N° 1: LINUX NETWORKING (2 ptos)
Investigar acerca de los elementos de networking en Linux indicados y realizar lo siguiente:
1) Explicar brevemente en qué consiste un Linux Network Namespace.
Consiste en una tecnología de virtualización a nivel de red que separa y aísla el tráfico de red,
las interfaces de red y las tablas de enrutamiento de un proceso o conjunto de procesos del
sistema operativo. Esto permite que los procesos en diferentes Network Namespaces tengan su
propia pila de red independiente, lo que facilita la creación de entornos de red virtuales, similares
a máquinas virtuales, contenedores
2) Indicar la secuencia y los comandos a utilizar para crear y eliminar un Linux Network
Namespace.
Debe mostrar en un screenshot la creación de un Linux Network Namespace en el head
node del slice asignado a través de comandos de listado. Al finalizar, debe borrar lo creado.
Para crear un nuevo Network Namespace:
$ sudo ip netns add <nombre_del_namespace>
Verifica que el nuevo Network Namespace se haya creado correctamente:
$ ip netns list
Eliminar el Network Namespace creado:
$ sudo ip netns delete <nombre_del_namespace>
Luego se verifica nuevamente que se haya borrado:
$ ip netns list
TEL141 INGENIERÍA DE REDES CLOUD 4
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
3) Explicar brevemente en qué consisten los enlaces veth.
Los enlaces veth son un par de interfaces de red virtual que están conectadas entre sí. Estas
interfaces funcionan en pares, y cualquier paquete de red enviado por una de las interfaces del
par se recibe en la otra. Estos se utilizan para proporcionar conectividad de red entre diferentes
namespaces de red en Linux, lo que permite la comunicación entre contenedores, máquinas
virtuales y el host principal. También se utilizan para simular conexiones de red en entornos de
pruebas y desarrollo.
4) Indicar la secuencia y los comandos a utilizar para crear y eliminar un enlace veth.
Debe mostrar en un screenshot la creación de un enlace veth en el head node del slice
asignado a través de comandos de listado. Al finalizar, debe borrar lo creado.
Para crear enlaces veth, puede usar el siguiente comando. Esto creará dos interfaces
conectadas entre sí:
$ sudo ip link add veth0 type veth peer name veth1
Verificamos que los enlaces se han creado:
$ ip link show
Para eliminar utilizamos los siguientes comandos:
$ sudo ip link delete veth0
Para verificar los enlaces eliminados:
$ ip link show
TEL141 INGENIERÍA DE REDES CLOUD 5
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
5) Explicar brevemente en qué consisten las interfaces TUN/TAP.
Las interfaces TUN/TAP son componentes esenciales en sistemas Unix/Linux que permiten la
comunicación entre aplicaciones y el kernel. TUN se utiliza para enrutamiento a nivel de kernel y
es común en soluciones de VPN y túneles. Por otro lado, TAP emula una interfaz Ethernet,
permitiendo a las aplicaciones de usuario comunicarse con una red virtual o física.
6) Indicar la secuencia y los comandos a utilizar para crear y eliminar una interfaz TUN/TAP.
Debe mostrar en un screenshot la creación de una interfaz TAP en el head node del slice
asignado a través de comandos de listado. Al finalizar, debe borrar lo creado.
Ejecutamos el siguiente comando para crear una interfaz TAP
$ sudo ip tuntap add tap0 mode tap
Verificamos que se haya creado con:
$ ip link show
Para eliminar el interfaz primero tenemos que apagarla:
$ sudo ip link set tap0 down
Y luego:
$ sudo ip tuntap del tap0 mode tap
Verificamos que se haya eliminado:
$ ip link show
TEL141 INGENIERÍA DE REDES CLOUD 6
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
7) Indicar las ventajas de usar un servidor DHCP dentro de un Linux Network Namespace.
Un servidor DHCP dentro de un Linux Network Namespace ofrece ventajas clave. Proporciona
aislamiento de red, lo que significa que puedes crear entornos de red separados y aislados en un
sistema Linux. Esto es beneficioso para mantener múltiples redes o entornos independientes en un
mismo sistema, lo que facilita la escalabilidad y administración. Además, brinda mayor control
sobre la configuración de red, mejor seguridad al evitar el acceso no autorizado a otras redes,
flexibilidad para crear y eliminar Namespaces según sea necesario, y optimización de recursos al
asignar direcciones IP de manera eficiente.
8) Describir brevemente y de manera gráfica las herramientas que usaría para conectar una
VM con un servidor DHCP dentro de un Linux Network Namespace.
El diagrama debe incluir la VM (cliente DHCP), servidor DHCP (programa corriendo dentro
del Linux Network Namespace) y las conexiones de red (enlace veth o interfaz TAP).
TEL141 INGENIERÍA DE REDES CLOUD 7
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
VM (Cliente DHCP): Esto sería una máquina virtual que necesitas configurar para obtener una
dirección IP a través de DHCP.
Servidor DHCP (Dentro de un Linux Network Namespace): El servidor DHCP estaría configurado
dentro de un espacio de nombres de red de Linux. Esto se hace para aislar la red del servidor
DHCP de otras redes y evitar conflictos.
Conexión de red: En este caso, utilizando par de interfaces veth (virtual ethernet). Las interfaces
veth son adecuadas para la comunicación entre namespaces de red. La configuración típica
implica la creación de un par de interfaces veth, donde una extremidad se coloca en el espacio
de nombres del cliente DHCP y la otra extremidad en el espacio de nombres del servidor DHCP.
Esto permite que ambos puedan comunicarse como si estuvieran en la misma red.
Enlaces a revisar:
● Create Your Own Network Namespace
● Introducing Linux Network Namespaces
● Namespaces in operation, part 7: Network namespaces
● Universal TUN/TAP device driver
● Understanding TUN TAP Interfaces
● Networking - DHCP
● Dnsmasq configuration
TEL141 INGENIERÍA DE REDES CLOUD 8
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
ACTIVIDAD N° 2: LINUX SWITCHES (2 ptos)
Investigar acerca de los elementos capaces de implementar switching en Linux indicados y
realizar lo siguiente:
1) Explicar brevemente en qué consiste Linux Bridge.
Un Linux Bridge, o puente Linux, es una característica de los sistemas operativos Linux que
permite crear un puente de red virtual para conectar y gestionar el tráfico de datos entre
dos o más interfaces de red, ya sea físicas o virtuales. Su función principal es actuar como un
switch en una red local, lo que permite la comunicación entre dispositivos conectados a
diferentes interfaces del puente como si estuvieran en la misma red.
2) Indicar la secuencia y los comandos a utilizar para crear un Linux Bridge.
Debe mostrar en un screenshot la creación de un Linux Bridge en el head node del slice
asignado a través de comandos de listado. Al finalizar, debe borrar lo creado.
Antes se debe tener los paquetes ‘’bridge-utils’’ instalados:
$ sudo apt-get install bridge-utils
Creamos un puente con:
$ ip link add name bridge_name type bridge
$ ip link set dev bridge_name up
3) Indicar la secuencia y los comandos a utilizar para añadir una interfaz de red a un Linux
Bridge.
Agregamos el puente a una interfaz configurando el master:
$ ip link set eth1 master bridge_name
Para mostrar que se ha cumplido, verificamos con:
$ bridge link
4) Indicar la secuencia y los comandos a utilizar para conectar dos Linux Bridges.
Debe mostrar en un screenshot la creación de un enlace entre dos Linux Bridges en el
head node del slice asignado a través de comandos de listado. Al finalizar, debe borrar lo
creado.
TEL141 INGENIERÍA DE REDES CLOUD 9
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
Primero creamos un par de enlaces veth para conectar los puentes:
$ sudo ip link add veth0 type veth peer name veth1
Luego conectamos cada puente creado en cada enlace:
$ sudo brctl addif bridge1 veth0
$ sudo brctl addif bridge1 veth1
Verificamos que se ha creado con:
$ sudo brctl show
5) Explicar brevemente en qué consiste Open vSwitch.
Open vSwitch es una plataforma de conmutación virtual de código abierto que proporciona
capacidades avanzadas de red y permite la creación de redes definidas por software (SDN). Se
utiliza en entornos de virtualización y nubes para administrar el tráfico de red, implementar
políticas y facilitar la automatización.
6) Describir brevemente y de manera gráfica la arquitectura y funciones de los principales
componentes de Open vSwitch (ovs-vswitchd, ovsdb-server, OpenvSwitch kernel).
TEL141 INGENIERÍA DE REDES CLOUD 10
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
Fuente: [Link]
ovs-vswitchd: Es la parte principal y se ejecuta en el espacio de usuario del sistema operativo.
Controla las operaciones de conmutación y enrutamiento en el hipervisor o host. Administra las
reglas de flujo, la tabla de flujo y otras configuraciones.
ovsdb-server: Es un servidor de base de datos que almacena la configuración y el estado de OVS.
Proporciona una interfaz para gestionar y configurar OVS a través de la base de datos. Los
administradores pueden interactuar con este componente para definir políticas y reglas de red.
OpenvSwitch kernel: Este componente reside en el espacio del kernel del sistema operativo.
Proporciona el soporte para el enrutamiento y la conmutación de paquetes en el nivel del kernel.
Colabora con ovs-vswitchd para garantizar que las operaciones de conmutación se realicen
eficientemente en el kernel.
7) Indicar la secuencia y los comandos a utilizar para crear un Open vSwitch.
Debe mostrar en un screenshot la creación de un Open vSwitch en el head node del slice
asignado a través de comandos de listado. Al finalizar, debe borrar lo creado.
Primero instalamos el Open vSwitch en la vm:
$ sudo apt-get install openvswitch-switch
Luego creamos un Open vSwitch:
$ sudo ovs-vsctl add-br ovs-br0
8) Indicar la secuencia y los comandos a utilizar para añadir una interfaz de red a un Open
vSwitch.
Debe mostrar en un screenshot la creación de puertos en un Open vSwitch en el head node
del slice asignado a través de comandos de listado. Al finalizar, debe borrar lo creado.
TEL141 INGENIERÍA DE REDES CLOUD 11
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
Para agregar se tiene que poner lo siguiente:
$ ovs-vsctl add-br br0
$ ovs-vsctl add-port br0 eth0
(En este caso para ens5)
9) Indicar la secuencia y los comandos a utilizar para conectar dos Open vSwitches.
Debe mostrar en un screenshot la creación de un enlace entre dos Open vSwitches en el
head node del slice asignado a través de comandos de listado. Al finalizar, debe borrar lo
creado.
Conectamos las dos OVS creadas mediante un enlace virtual:
$ sudo ip link add veth1 type veth peer name veth
$ sudo ovs-vsctl add-port ovs-br1 veth1
$ sudo ovs-vsctl add-port ovs-br2 veth2
Verificamos la conexión:
$ sudo ovs-vsctl show
TEL141 INGENIERÍA DE REDES CLOUD 12
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
TEL141 INGENIERÍA DE REDES CLOUD 13
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
Enlaces a revisar:
● Network bridge
● Containers and networking ● OVS Deep Dive 0: Overview
● What Is Open vSwitch?
● Basic Configuration
ACTIVIDAD N° 3: LINUX VIRTUALIZATION (1 ptos)
Investigar acerca de los elementos de virtualización en Linux indicados y realizar lo siguiente:
1) Explicar brevemente qué es un hypervisor. Describir los tipos que existen.
Un hipervisor es un software o firmware que permite la creación y gestión de máquinas
virtuales (VMs) en un entorno de servidor o computadora física. Los hipervisores son
fundamentales en la virtualización, ya que permiten que múltiples sistemas operativos y
aplicaciones se ejecuten de manera aislada en la misma infraestructura física.
2) Explicar brevemente qué es qemu.
QEMU (Quick Emulator) es un software de código abierto que proporciona una plataforma
de virtualización y emulación de sistemas computacionales. Su principal función es permitir
la ejecución de sistemas operativos y aplicaciones diseñadas para una arquitectura de
hardware específica en una máquina con una arquitectura diferente. Esto lo hace posible
mediante la emulación de hardware y procesadores, lo que permite a los usuarios ejecutar
máquinas virtuales (VMs) en una amplia variedad de sistemas
3) Explicar brevemente qué es kvm. Debe indicar cuál es la diferencia con qemu.
KVM es una tecnología de virtualización de código abierto que se integra directamente en
el núcleo (kernel) de sistemas Linux. Su función principal es proporcionar una plataforma de
virtualización que permite a los usuarios ejecutar máquinas virtuales (VMs) con un alto
rendimiento y eficiencia al aprovechar las capacidades de virtualización de hardware de
los procesadores modernos.
La diferencia principal entre KVM y QEMU, que es una fuente de confusión común, es que
KVM se enfoca en la virtualización basada en hardware, mientras que QEMU es un emulador
de software que puede funcionar en modo de emulación pura o en combinación con KVM
para lograr virtualización de hardware.
TEL141 INGENIERÍA DE REDES CLOUD 14
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
4) Revisar la documentación de la herramienta qemu y explicar brevemente las opciones
utilizadas en el comando de qemu:
# Descargar la imagen de cirros
wget [Link]
# Ejecutar la máquina virtual qemu-system-
x86_64 \
-enable-kvm \
-vnc [Link]:1 \
-netdev tap,id=tap1,ifname=tap1,script=no,downscript=no \
-device e1000,netdev=tap1,mac=[Link] \
-daemonize \ cirros-0.5.1-x86_64-
[Link]
Adicionalmente, ejecutar el comando de qemu (previamente debe haber ejecutado el
comando wget para descargar la imagen de cirros; caso contrario, el comando qemu
fallará). Debe mostrar en un screenshot la creación de la Máquina Virtual en el head node
del slice asignado. Al finalizar, debe borrar lo creado.
-enable-kvm: Habilita el soporte de KVM (Kernel-based Virtual Machine), que es una
característica de virtualización de hardware para mejorar el rendimiento de las máquinas
virtuales.
-vnc [Link]:1: Habilita el servidor VNC en la dirección IP [Link] (todos los interfaces de red
disponibles) en el puerto 1. Esto permite el acceso gráfico a la máquina virtual a través de
VNC.
-netdev tap,id=tap1,ifname=tap1,script=no,downscript=no: Define un dispositivo de red (-
netdev) que utiliza el modo TAP (Network Tap) con la interfaz tap1. script=no y downscript=no
indican que no se utilizarán scripts para configurar o desconfigurar la interfaz TAP.
TEL141 INGENIERÍA DE REDES CLOUD 15
PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ
FACULTAD DE CIENCIAS E INGENIERÍA
2023-2
-device e1000,netdev=tap1,mac=[Link] Crea un dispositivo de red emulado (-
device) que utiliza el controlador de red "e1000" y está conectado al dispositivo de red virtual
tap1. Se especifica la dirección MAC (mac=[Link]) para el dispositivo.
-daemonize: Hace que QEMU se ejecute en segundo plano como un demonio.
cirros-0.5.1-x86_64-[Link]: Es el archivo de imagen del disco que se utiliza para iniciar la
máquina virtual. En este caso, se está utilizando una imagen de disco llamada "cirros-0.5.1-
x86_64-[Link]".
Enlaces a revisar:
● Hosts/Linux - QEMU
● QEMU Tutorial with Examples – POFTUT
● Setting up Qemu with a tap interface · GitHub
TEL141 INGENIERÍA DE REDES CLOUD 16