4. VXLAN

Que é VXLAN 

VXLAN encapsula o tráfico L2 dentro de paquetes UDP en redes L3, permitindo así que segmentos de rede en diferentes subredes actúen como unha rede L2 unificada. Isto é particularmente útil para:

  • Aislar redes virtuais en contornas de multitenant.
  • Escalabilidade, ao permitir até 16 millóns de redes virtuais grazas ao seu identificador de rede (VXLAN Network Identifier ou VNI).
  • Flexibilidade na interconexión de hosts distribuídos en diferentes subredes.

Para configurar VXLAN en Linux, necesitas:

  • Unha versión do kernel de Linux 3.8 ou superior (xa que soporta VXLAN de forma nativa).
  • O paquete iproute2, que contén o comando ip para configurar interfaces e rutas.
  • Conectividade entre os enderezos IP que van participar na rede VXLAN.

1. Configuración de VXLAN en Linux

A continuación explicaremos os pasos para configurar un túnel VXLAN entre dous hosts.

Exemplo de Configuración

Suporemos que temos dous servidores, Host A e Host B, cos seguintes enderezos IP:

  • Host A: 192.168.1.10
  • Host B: 192.168.1.20
  • VNI: 100

a) Crear unha Interface VXLAN

En cada host, crea unha interface VXLAN coa seguinte sintaxe:

ip link add vxlan100 type vxlan id 100 dev eth0 dstport 4789

Explicación dos parámetros:

  • vxlan100: Nome da interface VXLAN. Escollemos "vxlan100" para indicar que pertence ao VNI 100.
  • id 100: Define o VNI para este túnel. Debe ser o mesmo en ambos hosts para que pertenzan á mesma rede virtual.
  • dev eth0: Interface física a través da cal viaxará o tráfico VXLAN.
  • dstport 4789: Porto UDP estándar para tráfico VXLAN. Pódese omitir, xa que 4789 é o porto por defecto.

b) Configurar o Enderezo IP da Interface VXLAN

Unha vez creada a interface, asignámoslle un enderezo IP en ambos hosts. Por exemplo:

ip addr add 10.0.0.1/24 dev vxlan100 ip link set vxlan100 up

No Host B:

ip addr add 10.0.0.2/24 dev vxlan100 ip link set vxlan100 up

Agora, ambos hosts deberían ser capaces de comunicarse entre eles a través dos enderezos 10.0.0.1 e 10.0.0.2, sempre que o túnel estea configurado correctamente.

c) Configurar o Enderezo de Destino VXLAN

Para definir con quen se debe comunicar cada host, podemos empregar o comando bridge fdb para engadir o enderezo MAC de destino á táboa de reenviamento.

No Host A:

bridge fdb add 00:00:00:00:00:02 dev vxlan100 dst 192.168.1.20

No Host B:

bridge fdb add 00:00:00:00:00:01 dev vxlan100 dst 192.168.1.10

Este comado indica que todo o tráfico destinado á interface VXLAN debe encapsularse e enviarse á IP do outro host.

d) Verificación da Configuración

Para asegurarte de que a configuración é correcta, executa os seguintes comandos:

  1. Comproba as Interfaces VXLAN:

    ip link show vxlan100
  2. Comproba a Conectividade: Tenta facer ping dende Host A a Host B usando os enderezos VXLAN configurados:

    ping 10.0.0.2
  3. Comproba a Táboa de Reenviamento: Verifica que o enderezo MAC de destino estea configurado correctamente:

    bridge fdb show dev vxlan100

e) Configuración de VXLAN con Multicast

Para soportar varios destinos nunha única configuración VXLAN, é posible usar multicast en lugar de configuraciones punto a punto. Isto permite que o tráfico se envíe a múltiples destinos simultaneamente.

Para habilitar VXLAN con multicast, usa un enderezo multicast ao crear a interface:

ip link add vxlan100 type vxlan id 100 dev eth0 group 239.1.1.1 dstport 4789

Neste caso, group 239.1.1.1 é o enderezo multicast que distribuirá o tráfico aos membros desta rede.


f) Configuración Avanzada: VXLAN con VLANs

VXLAN pódese combinar con VLANs para separar o tráfico dentro da mesma rede VXLAN. Configurar isto implica definir VLAN tags nos paquetes que atravesan a interface VXLAN, o que é útil para contornas de varios tenants.

Exemplo de Configuración

Engade unha VLAN á interface VXLAN configurando a interface como unha subinterface VLAN:

sudo ip link add link vxlan100 name vxlan100.10 type vlan id 10 sudo ip addr add 10.1.0.1/24 dev vxlan100.10 sudo ip link set vxlan100.10 up

Neste exemplo, a interface vxlan100.10 creouse coa VLAN ID 10. A configuración de VLAN en VXLAN permite crear varios segmentos illados sobre o mesmo túnel.



## Creacion manual del vxlan

ip link add <novo interface> type vxlan id 1000 dstport 4789 remote 10.0.0.1
ip link set <novo interface> up
ip link set <novo interface> mtu 1450


## Para /etc/network/interfaces.d
## novo interface - Interface vxlan
## bridge - bridge (switch) a crear

auto <novo interface>
iface <novo interface> inet manual
pre-up ip link add <novo interface> type vxlan id 1000 dstport 4789 remote 10.0.0.1
ip link set <novo interface> up
ip link set <novo interface> mtu 1450
post-down ip link set <novo interface> down
post-down ip link del <novo interface>

auto <brigge>
iface <bridge> inet manual
   bridge_ports <novo_interface> 
   bridge_stp off
   bridge_fd 0
   mtu 1450

2.  VXLAN en Open vSwitch

En Open vSwitch, os túneles VXLAN configúranse como portos especiais que se engaden aos bridges, permitindo que o tráfico encapsulado chegue a outros dispositivos compatibles con VXLAN.

Para configurar VXLAN en Open vSwitch, necesitas:

  • Unha versión recente de Open vSwitch (a maioría das distribucións actuais inclúen VXLAN).
  • Conectividade IP entre os hosts que van formar parte da rede VXLAN.
  • Compatibilidade coa encapsulación UDP 4789 (o porto estándar para VXLAN).

3. Configuración Básica de VXLAN en Open vSwitch

A continuación preséntanse os pasos para crear unha configuración VXLAN en Open vSwitch.

3.1 Crear un Bridge para VXLAN

En primeiro lugar, crea un bridge en Open vSwitch onde engadirás o porto VXLAN:

ovs-vsctl add-br br-vxlan

Este bridge funcionará como a interface que xestionará o tráfico de VXLAN encapsulado.

3.2 Crear o Porto VXLAN

Para configurar VXLAN, engade un porto VXLAN ao bridge. Neste exemplo, configuraremos o porto VXLAN con local_ip que representa o enderezo IP do host local e remote_ip para o enderezo do host remoto.

Se necesitas que o tráfico VXLAN chegue a múltiples destinos (unha rede multicast ou escenario punto-a-multipunto), usa remote_ip=flow.

ovs-vsctl add-port br-vxlan vxlan0 -- \ set interface vxlan0 type=vxlan options:local_ip=192.168.1.10 options:remote_ip=192.168.1.20 options:key=100

Explicación dos parámetros:

  • local_ip: O enderezo IP do host onde configuras VXLAN.
  • remote_ip: O enderezo IP do host de destino. Se queres que este porto acepte tráficos de diferentes orixes, usa flow neste campo.
  • key: Identificador único da VXLAN (VNI). Este valor permite que diferentes túneles se illen entre si; neste caso, o VNI é 100.

ovs-vsctl add-port br0 vxlan1 -- set interface vxlan1 type=vxlan \
    options:remote_ip=192.168.1.2 options:key=flow options:dst_port=8472
ovs-vsctl add-port br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=flow options:key=flow

Configuración de VXLAN Multicast

Se estás a traballar nun ambiente onde varios nodos deben participar na mesma VXLAN, podes usar multicast en vez dun enderezo IP específico en remote_ip. Para isto, configuras un enderezo multicast para remote_ip:

ovs-vsctl add-port br-vxlan vxlan0 -- \ set interface vxlan0 type=vxlan options:local_ip=192.168.1.10 options:remote_ip=239.1.1.1 options:key=100

Neste caso, 239.1.1.1 é un enderezo multicast, e todos os hosts unidos a esta rede recibirán tráfico enviado a este enderezo multicast.

Comprobación da Configuración de VXLAN

Para verificar a configuración da interface VXLAN, utiliza:

ovs-vsctl show

Este comando mostrará información sobre todos os bridges e interfaces, incluída a configuración de VXLAN.

Tamén podes comprobar que a interface VXLAN está a recibir tráfico co comando tcpdump:

tcpdump -i vxlan0

6. Integración de VXLAN con Contedores e Virtualización

Open vSwitch tamén é amplamente utilizado en contornas con contedores e máquinas virtuais para conectar estes recursos a través de VXLANs. Moitos orquestradores como Kubernetes permiten definir redes VXLAN sobre Open vSwitch para interconectar contedores en distintos nós do clúster.

7. Comparativa entre VXLAN e VLANs

Funcionalidade VLAN VXLAN
Número máximo de redes 4096 ~16 millóns (24 bits)
Encapsulación Ningunha (L2) UDP/L3 sobre L2
Capacidade de extensión L2 Limitado ao dominio de L2 Permite extensión sobre L3
Compatibilidade con SDN Limitado Alta, integrado en OpenFlow
Uso en contornas de cloud Pouco común Común en contornas de cloud