[TOC]

Instalando OpenVSwitch
-----------------------

Para este articulo vamos a instalar OpenVSwitch (OVS) sobre Debian Estable (Jessie), desgraciadamente OVS no está muy actualizado en los repositorios, por lo que tendremos que instalarlo desde los fuentes.

Si se quiere comprobar cual versión está disponible podemos hacerlo con el comando

    $ sudo apt-cache show openvswitch-switch | grep Version

### Compilando

Descargamos los fuentes desde <http://openvswitch.org/releases/>, para este artículo vamos a trabajar con la versión 2.4.0.

Antes de instalar se requieren algunas dependencias.

    $ sudo apt-get install build-essential linux-headers-`uname -r` libssl-dev perl python bridge-utils uml-utilities

Si se quiere instalar OVS con ovsdmonitor hay que instalar los siguientes paquetes. 

    $ sudo apt-get install python-twisted-conch python-simplejson python-zope.interface python-qt4

Hay que revisar si el módulo bridge está cargado en el kernel y si lo está entonces removerlo 

    $ lsmod | grep bridge
    bridge 55884 0
    stp 12405 1 bridge

Si el resultado es como el anterior entonces hay que deshabilitarlo 

    $ sudo rmmod bridge

Debemos descargar el paquete desde <http://openvswitch.org/releases/openvswitch-2.4.0.tar.gz>, lo descomprimimos y nos pasamos a la carpeta de trabajo.
    
    $ wget http://openvswitch.org/releases/openvswitch-2.4.0.tar.gz
    $ tar zxvf openvswitch-2.4.0.tar.gz
    $ cd openvswitch-2.4.0/

Para compilar OpenVSwitch en Debian y crear los módulos del kernel necesarios
Compile Openvswitch on Debian and create openvswitch kernel module.

    $ ./configure --with-linux=/lib/modules/`uname -r`/build
    $ make
    $ sudo make install
    $ sudo make modules_install  

Podemos probar que el módulo funciona con nuestro kernel 

     $ sudo /sbin/modprobe openvswitch

Si todo va bien entonces podemos ver que nuestro módulo está cargado y funcionando

     $ sudo /sbin/modprobe openvswitch
     $ openvswitch           100210  0 
     $ libcrc32c              12426  1 openvswitch


Configurando OpenVSwitch
-------------------------

Inicializando la base de datos de configuraciones 

     $ sudo mkdir -p /usr/local/etc/openvswitch
     $ sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema

Antes de inicializar ovs-vswitchd, necesitamos inicializar la configuración de la base de datos, ovsdb-server. 
Cada máquina donde OVS esté instalada debe correr su propia copia de ovsdb-server.
Hay que configurar la base de datos creada anteriormente para que escuche un socket de dominio de Unix, para conectar cualquier manejador especificado en la misma base de datos y para utilizar la configuración SSL.

     $ sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
     --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
     --private-key=db:Open_vSwitch,SSL,private_key \
     --certificate=db:Open_vSwitch,SSL,certificate \
     --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
     --pidfile --detach

Para inicializar la base de datos 

     $ sudo /usr/local/bin/ovs-vsctl --no-wait init

Para inicializar el demonios OVS

     $ sudo ovs-vswitchd --pidfile --detach

Se necesita habilitar el reenvío de paquetes en kernel de linux.
Se puede hacer al vuelo con 

     $ sudo sysctl -w net.ipv4.ip_forward=1
     $ sudo sysctl -w net.ipv6.conf.all.forwarding=1

Pero si se quiere hacer permanente se debe modificar el archivo  /etc/sysctl.conf en las siguientes líneas.

    net.ipv4.ip_forward = 1
    net.ipv6.conf.all.forwarding=1

### Conectando OpenVSwitch con la máquina local

Vamos a crear un puente Br0 

    $ sudo ovs-vsctl add-br br0

Para comprobar que se realizó adecuadamente podemos hacer 

    $ sudo ovs-vsctl show
    d37e91f3-31c6-417d-ba01-309a560e4a74
         Bridge "br0"
             Port "br0"
                 Interface "br0"
                     type: internal

Enlaces de interés
--------------------

Este trabajo no sería posible sin la ayuda y documentación encontrada en los siguientes enlaces 

- <http://brezular.com/2013/12/16/openvswitch-installation-on-debian/>
- <https://plasmixs.wordpress.com/2014/05/20/setting-up-kvm-guests-for-openvswitch/>
- <https://kashyapc.fedorapeople.org/virt/openvswitch-and-libvirt-kvm.txt>