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:
- Configurar una interfaz de red con IP dinámica y estática (Red Hat y Debian)
- Configurar una interfaz de red anfitriona y la interfaz puente en Red Hat
- Configurar una interfaz de red anfitriona y la interfaz puente en Debian
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.
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
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 gustaMe gusta
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 gustaMe gusta