#4sysadmins

Inicio » GNU/Linux » Network Bridge: Crear un puente de red en Linux

Network Bridge: Crear un puente de red en Linux

Follow #4sysadmins on WordPress.com

Cuando tenemos máquinas virtuales y necesitamos darle acceso a nuestra red privada, será necesario crear un puente de red entre nuestra red física y las interfaces virtuales (guest).

Nota: Podemos aprender a configurar interfaces de red física en esta otra entrada

IMPORTANTE: esta entrada está orientada a la configuración del puente de red para virtualización con Xen. Si estás virtualizando con otro software, configurando un puente manual o quieres saber como preparar la interfaz anfitriona (eth0) para posteriormente configurar la interfaz puente acuda a:

 

Bridge

Esta es la forma mas común (e incluso por defecto) de dar acceso a la red a los guest (Máquinas virtuales). El hipervisor (domain0 en Xen) utiliza un puente de red (normalmente una interfaz virtual llamada xenbr0, br0, etc…) que le conecta con la interfaz física conectada a la red privada.

network-bridge

En la imagen anterior se aprecia perfectamente que contamos con eth0 como interfaz física, el software (bridge-utils) que crea como mínimo una interfaz virtual (xenbr0) y un switch virtual, el cual hará de enlace entre eth0 y xenbr0. Las otras dos interfaces creadas (vif4 y vif7: vif<domID>.<devID>) son las interfaces virtuales backend para cada guest, es decir la que se encargarán de interconectar las interfaces de los guest con el switch para que estos tomen enlace de red.

Instalación del software

Para crear un puente de red es necesario tener instalado un software (bridge-utils) en el servidor anfitrión, y a continuación (aunque existen dos formas diferente de hacerlo) se crea una interfaz virtual (típicamente llamada xenbr0, br0, etc..) la cual hará de puente.

root@enki:~# apt-get update
root@enki:~# apt-get install bridge-utils

Configuración del puente

Como siempre, antes de comenzar a editar el archivo de interfaces, vamos a realizar un backup:

$ sudo cp /etc/network/interfaces /etc/network/interfaces.backup

Y ahora con nuestro editor favorito vamos a abrir el archivo y editarlo

$ sudo vi /etc/network/interfaces

Debian

Antes:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

Después:

#The loopback network interface
auto lo
iface lo inet loopback

allow-hotplug eth0
auto xenbr0
iface xenbr0 inet static
    address 192.168.1.200
    network 192.168.1.0
    netmask 255.255.255.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    hwaddress 64:51:06:d8:59:3c
    bridge_ports eth0
    # Algunas opciones útiles si estamos virtualizando máquinas
        bridge_stp off       # disable Spanning Tree Protocol
        bridge_waitport 0    # no delay before a port becomes available
        bridge_fd 0          # no forwarding delay
        bridge_ports none    # if you do not want to bind to any ports
        bridge_ports regex eth* # use a regular expression to define ports

Reiniciamos la interfaz y comprobamos de que el puente esté hecho:

root@enki:~# /etc/init.d/networking restart
eth0 Link encap:Ethernet HWaddr 64:51:06:d8:59:3c 
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:790 errors:0 dropped:0 overruns:0 frame:0
 TX packets:121 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000 
 RX bytes:106668 (104.1 KiB) TX bytes:14555 (14.2 KiB)
 Interrupt:16
lo Link encap:Local Loopback 
 inet addr:127.0.0.1 Mask:255.0.0.0
 inet6 addr: ::1/128 Scope:Host
 UP LOOPBACK RUNNING MTU:65536 Metric:1
 RX packets:57 errors:0 dropped:0 overruns:0 frame:0
 TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0 
 RX bytes:8314 (8.1 KiB) TX bytes:8314 (8.1 KiB)
xenbr0 Link encap:Ethernet HWaddr 64:51:06:d8:59:3c 
 inet addr:192.168.1.200 Bcast:192.168.1.255 Mask:255.255.255.0
 inet6 addr: fe80::6651:6ff:fed8:593c/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:803 errors:0 dropped:0 overruns:0 frame:0
 TX packets:129 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0 
 RX bytes:94627 (92.4 KiB) TX bytes:14625 (14.2 KiB

RedHat

# chkconfig NetworkManager off
# chkconfig network on
# service NetworkManager stop
# service network start

DEVICE=xenbr0
TYPE=Bridge
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.200
NETMASK=255.255.255.0
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
MTU=9000    # Configure Jumbo frames

Nota: Quizás debamos (si no tenemos deshabilitado IPtables) crear una regla para que permita el tráfico sobre el puente (bridge):

# echo "-I FORWARD -m physdev --physdev-is-bridged -j ACCEPT" > /etc/sysconfig/iptables-forward-bridged
# lokkit --custom-rules=ipv4:filter:/etc/sysconfig/iptables-forward-bridged
# servservice network restartice libvirtd reload
# service network restart

El caso de uso de estos ejemplos es contar con un router físico el cual crea una red privada (192.168.1.0) y que asigna una IP estática al servidor anfitrión (eth0: 192.168.1.200). Con el software bridge-utils y esta configuración crearemos la interfaz xenbr0 que «suplantará» a la interfaz física (eth0) para hacer ahora de puente entre las interfaces de los guest y la red privada.

Habilitar Routing

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.eth0.proxy_arp = 1
# sysctl -p /etc/sysctl.conf

Nota: Si tenemos IPtables habilitado deberemos de añadir la siguiente regla para NAT

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

2 comentarios

  1. jathan dice:

    Nuevamente muchas gracias por compartir tu conocimiento nebul4ck. Me ayudaste mucho a comprender la función de una red puente (bridge network) y como configurarla en GNU/Linux. Ahora que estoy con PROXMOX me estaba complicando mucho por pensar que había que añadir una vmbrx por cada máquina virtual y pues sólo con la vmbr0 con eth0 como puerto puente (bridge port) en el archivo de interfaces de PROXMOX es suficiente para lo que busco (que cada VM tenga salida a internet con una IP asignada por la misma subred que le asigna una IP a mi servidor PROXMOX). Me gustan demasiado tus tutoriales y haces un gran trabajo. En verdad muchas gracias por hacer posible #4sysadmins Blog. Saludos y que tengas buen fin de semana.

    Me gusta

    • nebul4ck dice:

      Muchas gracias a ti por agradecer el trabajo!!! Últimamente tengo 4sysadmins un poco descuidado a causa del trabajo, pero en breves retomaré el blog con nuevas entradas.

      Gracias de nuevo!!!

      Me gusta

Deja un comentario, Gracias!