Saltar la navegación

Interfaces virtuales

Las interfaces de red virtuales nos sirven para tener varias direcciones IP sobre una misma tarjeta de red, y así ofrecer servicios en cada una estas direcciones. Esto puede hacerse usando una técnica llamada "IP Aliasing".

En el siguiente ejemplo se asigna a la tarjeta eth0 tres IP, dos de una misma red lógica (eth0, eth0:1) y otra de una diferente (eth0:2):

auto eth0 eth0:1 eth0:2
iface eth0 inet static
        address         192.168.1.200
        netmask         255.255.255.0
        gateway         192.168.1.1
        network         192.168.1.0
        broadcast       192.168.1.255

iface eth0:1 inet static
        address         192.168.1.201
        netmask         255.255.255.0
        network         192.168.1.0
        broadcast       192.168.1.255

iface eth0:2 inet static
        address         192.168.2.202
        netmask         255.255.255.0
        network         192.168.2.0
        broadcast       192.168.2.255

Cuando se trabaja con interfaces virtuales, hay que tener en cuenta que estas dependen siempre de la correcta configuración de la interfaz raíz, es decir, para el ejemplo anterior, eth0:1 y eth0:2 dependen de eth0. Esto nos lleva a seguir un orden adecuado en la activación/desactivación de estas interfaces, pues en caso contrario, tendremos problemas provocados por la falta de sincronización entre las interfaces que verdaderamente tiene el kernel activadas y las registradas como activas en el fichero /etc/network/run/ifstate.

Observemos este desfase cuando activamos únicamente la interfaz virtual eth0:1:

# ifdown -a
# ifup eth0:1
# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:28:42:d2  
          inet6 addr: fe80::a00:27ff:fe28:42d2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:455 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1373 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:93364 (91.1 KiB)  TX bytes:203177 (198.4 KiB)

eth0:1    Link encap:Ethernet  HWaddr 08:00:27:28:42:d2  
          inet addr:192.168.1.201  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

# cat /etc/network/run/ifstate
eth0:1=eth0:1

Como vemos, realmente la interfaz raíz se activa (aunque sin IP) pero no se registra en el fichero /etc/network/run/ifstate.

También sucede lo mismo cuando desactivamos la interfaz raíz sin antes desactivar las interfaces virtuales que dependen de ella:

# ifdown -a
# ifup -a
# ifdown eth0
# ifconfig
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:16436  Metric:1
          RX packets:24 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1480 (1.4 KiB)  TX bytes:1480 (1.4 KiB)

# cat /etc/network/run/ifstate
lo=lo
eth0:1=eth0:1
eth0:2=eth0:2

Para evitar estos problemas debemos trabajar de la siguiente forma:

  • Activamos/Desactivamos todo:
# ifup -a
# ifdown -a
  • Activamos sólo la interfaz raíz:
# ifup eth0
  • Desactivamos la interfaz raíz sin existir virtuales:
# ifdown eth0
  • Desactivamos la interfaz raíz existiendo virtuales:
# ifdown eth0:1 eth0:2 eth0
  • Activamos una interfaz virtual sin la raíz activa:
# ifup eth0 eth0:1
  • Activamos una interfaz virtual con la raíz activa:
# ifup eth0:1
  • Desactivamos una interfaz virtual:
# ifdown eth0:1

Recordatorio: En un equipo solo puede haber una puerta de enlace, o lo que es lo mismo, solo puede haber una regla de enrutamiento por defecto.

Licencia: licencia de software libre GPL