GRE Tunnels en Open vSwitch


4 min de lectura


Siguiendo con la serie de posts sobre Open vSwitch, vamos a ver hoy cómo configurar GRE Tunneling sobre éste. Para los que no lo sepáis, GRE nos permite configurar un enlace Point-to-Point entre dos IPs y tener un enlace a nivel 2 entre dos puntos a través de internet, a efectos prácticos seria como tener una VPN entre estos dos puntos.
Siguiendo con el post sobre un ejemplo práctico en OpenvSwitch ahora vamos a suponer el caso de que tenemos dos hosts con máquinas virtuales, pero separados por internet, en diferentes CPDs, sin conexión a nivel 2, cómo ya vimos, nos interesa que nuestros clientes puedan crear máquinas virtuales en cada una de las máquinas y además cada uno tendrá sus redes privadas implementadas con VLANS en Open vSwitch, estas redes privadas tienen que tener visibilidad entre los dos hosts, al estar las dos máquinas separadas por internet, necesitaremos hacer un túnel GRE para que se vean a nivel 2. Un ejemplo podría ser como sigue:

Vemos en la figura anterior, cómo tendremos un bridge en cada uno de los hosts con una IP pública, en el bridge02 tendremos un puerto haciendo túnel en GRE y especificando la IP del otro host. Así pues a través de la conexión del túnel GRE tendremos los dos hosts conectados a nivel 2. Vamos a ver las IPs que tendrá cada uno de ellos:
Host1- IP 82.82.82.1
Host2- IP 82.82.82.2
Vamos a configurar pues el bridge01 en el host1:

# ovs-vsctl add-br bridge01

# ovs-vsctl add-port bridge01 eth0
# ifconfig bridge01 82.82.82.1
Configuramos el bridge01 en el host2:
# ovs-vsctl add-br bridge01
# ovs-vsctl add-port bridge01 eth0
# ifconfig bridge01 82.82.82.2
Configuramos el bridge02 en el host1, le añadiremos un puerto de tipo gre, especificando la IP del host2:
# ovs-vsctl add-br bridge02
# ovs-vsctl add-port bridge02 gre0 -- set interface gre0 type=gre options:remote_ip=82.82.82.2
Lo mismo en el host2 pero con la IP del host1:
# ovs-vsctl add-br bridge02
# ovs-vsctl add-port bridge02 gre0 -- set interface gre0 type=gre options:remote_ip=82.82.82.1
Una vez configurado, ya podemos añadir puertos en el bridge02, en vez de añadir máquinas virtuales cómo en el post anterior, vamos a añadir dos puertos mapeados a una interfície en cada uno de los hosts, el primero con el tag 1 y el segundo con el tag 2 y vamos a ver que hay visibilidad entre cada VLAN:
Añadimos los puertos en el host1, los taggeamos y les asignamos una IP:
# ovs-vsctl add-port bridge02 bridge02p1 -- set interface bridge02p1 type=internal
# ovs-vsctl set port bridge02p1 tag=[1]
# ifconfig bridge02p1 192.168.1.1
# ovs-vsctl add-port bridge02 bridge02p2 -- set interface bridge02p2 type=internal
# ovs-vsctl set port bridge02p2 tag=[2]
# ifconfig bridge02p2 192.168.2.1
Añadimos los puertos en el host2:
# ovs-vsctl add-port bridge02 bridge02p1 -- set interface bridge02p1 type=internal
# ovs-vsctl set port bridge02p1 tag=[1]
# ifconfig bridge02p1 192.168.1.2
# ovs-vsctl add-port bridge02 bridge02p2 -- set interface bridge02p2 type=internal
# ovs-vsctl set port bridge02p2 tag=[2]
# ifconfig bridge02p2 192.168.2.2
Vamos a hacer un ping des del host1 a las IPs del host2:

host1:~# ping -c4 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_req=1 ttl=64 time=0.532 ms
64 bytes from 192.168.1.2: icmp_req=2 ttl=64 time=0.160 ms
64 bytes from 192.168.1.2: icmp_req=3 ttl=64 time=0.154 ms
64 bytes from 192.168.1.2: icmp_req=4 ttl=64 time=0.158 ms
--- 192.168.1.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.154/0.251/0.532/0.162 ms
host1:~# ping -c4 192.168.2.2
PING 192.168.1.2 (192.168.2.2) 56(84) bytes of data.
64 bytes from 192.168.2.2: icmp_req=1 ttl=64 time=0.528 ms
64 bytes from 192.168.2.2: icmp_req=2 ttl=64 time=0.148 ms
64 bytes from 192.168.2.2: icmp_req=3 ttl=64 time=0.148 ms
64 bytes from 192.168.2.2: icmp_req=4 ttl=64 time=0.150 ms
--- 192.168.2.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.148/0.243/0.528/0.165 ms

Vemos efectivamente como se llega a cada uno de ellos, ahora mientras hacemos el ping en la VLAN con el tag 1, vamos a ver cómo efectivamente la interfície de la VLAN 2 de la misma máquina no ve el tráfico, en el host 1 ejecutamos:

host1:~# tcpdump -ni bridge02p2
tcpdump: WARNING: test1p2: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on test1p2, link-type EN10MB (Ethernet), capture size 65535 bytes

Lo dejamos un rato y vemos como efectivamente no recibe tráfico de la interfície del otro puerto.

Artículos Relacionados

OpenvSwitch y OpenNebula - 3a entrega

Siguiendo con la serie de posts sobre OpenvSwitch y OpenNebula en los que vamos viendo la integración de OpenNebula con

4 min de lectura

OpenvSwitch y OpenNebula - 1a entrega

Cómo ya vimos es posts anteriores, Open vSwitch és un software de virtualización de redes pensado sobretodo para la virtualización

4 min de lectura

Open vSwitch: Un ejemplo práctico

Un ejemplo práctico Después de instalar KVM i Open vSwitch y ver los comandos básicos para la creación/modificación de

8 min de lectura

Open vSwitch: Bridges, puertos y bondings

Bridges, puertos y bondings Antes de entrar en materia, vamos a ver algunos comandos que nos seran útiles para crear,

2 min de lectura

Instalación de KVM y Open vSwitch en Ubuntu

Después de un primer post de introducción de la serie Open vSwitch dónde vimos las virtudes de éste, vamos a

1 min de lectura

Introducción a Open vSwitch

Con este iniciamos hoy una serie de posts sobre Open vSwitch. Para este primer post de introducción veremos las funcionalidades

1 min de lectura

SUBIR

🎉 Te has suscrito con éxito a CloudAdmins!
OK