En este artículo voy a demostrar cómo configurar múltiples direcciones IP en una misma interfaz de red en GNU/Linux, utilizando como ejemplo las distribuciones Debian y CentOS.

El concepto de configurar múltiples direcciones IP en una misma interfaz de red se denomina "IP aliasing". Esto puede ser útil, por ejemplo, para configurar múltiples sitios virtuales (Virtual Hosts) en Apache utilizando una única interfaz de red con diferentes direcciones IP asignadas. La principal ventaja de esta técnica, es que no se requieren interfaces físicas adicionales para cada IP, sino que se crean múltiples interfaces virtuales asignadas a una misma interfaz física.

Este concepto ha sido introducido por la herramienta ifconfig. Estas interfaces virtuales tienen nombres de la forma interfaz:número y la herramienta ifconfig las trata de forma similar a las interfaces físicas.

CentOS

En GNU/Linux, las interfaces virtuales asignadas a una interfaz física se identifican con un índice entero. Por ejemplo, la interfaz eth1 de este host CentOS 6 posee 4 interfaces virtuales numeradas desde :0 a :3. Recuerden que en CentOS, las interfaces de red se configuran en los archivos /etc/sysconfig/network-scripts/ifcfg-*.

[root@centos6 ~]# dir -l /etc/sysconfig/network-scripts/ifcfg-eth0*
-rw-r--r--. 1 root root 166 Mar  6 17:05 /etc/sysconfig/network-scripts/ifcfg-eth1
-rw-r--r--. 1 root root 168 Mar  6 17:06 /etc/sysconfig/network-scripts/ifcfg-eth1:0
-rw-r--r--. 1 root root 270 Feb 20 16:02 /etc/sysconfig/network-scripts/ifcfg-eth1:1
-rw-r--r--. 1 root root 171 Aug 16  2012 /etc/sysconfig/network-scripts/ifcfg-eth1:2
-rw-r--r--. 1 root root 171 Aug 16  2012 /etc/sysconfig/network-scripts/ifcfg-eth1:3

Por ejemplo, el archivo ifcfg-eth0 configura la interfaz de red física eth0. Para crear una nueva interfaz virtual asignada a eth0, simplemente copiar su archivo de configuración asignando un nuevo índice:

[root@centos6 ~]# cd /etc/sysconfig/network-scripts/
[root@centos6 ~]# cp ifcfg-eth0 ifcfg-eth0:0

Luego, editar el nuevo archivo de configuración de la interfaz virtual eth0:0:

[root@centos6 ~]# nano ifcfg-eth0:0

Modificar las variables pertinentes, por ejemplo "DEVICE" (nombre del dispositivo), "IPADDR" (dirección IP), "NETMASK" (máscara de red), "NETWORK" (dirección de red), "BROADCAST" (dirección de broadcast), etc.

Es importante aclarar que las interfaces alias no deben tener configurado un gateway (puerta de enlace) ni servidores DNS. Es posible utilizar DHCP (asignación dinámica de dirección IP) si es necesario.

Por ejemplo, la interfaz eth0 tenía la dirección IP 192.168.2.1 y ahora he agregado la dirección IP 192.168.3.1, configurando la nueva interfaz virtual eth0:0 como se muestra a continuación:

[root@centos6 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
IPADDR=192.168.2.1
NETMASK=255.255.255.0
NETWORK=192.168.2.0
BROADCAST=192.168.2.255
BOOTPROTO=static
ONBOOT=yes
DELAY=0
[root@centos6 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
TYPE=Ethernet
IPADDR=192.168.3.1
NETMASK=255.255.255.0
NETWORK=192.168.3.0
BROADCAST=192.168.3.255
BOOTPROTO=static
ONBOOT=yes
DELAY=0

Para iniciar ("levantar" en la jerga de redes y teleprocesamiento) la nueva interfaz de red eth0:0 basta con ejecutar:

[root@centos6 ~]# ifup eth0:0
Determining if ip address 192.168.3.1 is already in use for device eth0...
[root@centos6 ~]#

Comprobar la configuración de ambas interfaces utilizando ifconfig:

[root@centos6 ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 28:F3:5D:AC:6F:B3
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::d6ae:52ff:fe81:abd4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18177666 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19102369 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:91189625377 (84.9 GiB)  TX bytes:13357723159 (12.4 GiB)

[root@centos6 ~]# ifconfig eth0:0
eth0:0    Link encap:Ethernet  HWaddr 28:F3:5D:AC:6F:B3
          inet addr:192.168.3.1  Bcast:192.168.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Tal como se observa, se trata de dos dispositivos diferentes, aunque comparten la misma MAC address. Por otro lado, si consultamos la configuración de red con la herramienta ip, se trata del mismo dispositivo físico eth0:

[root@centos6 ~]# ip a s dev eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 28:f3:5d:ac:6f:b3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.1/24 brd 192.168.2.255 scope global eth0
    inet 192.168.3.1/24 brd 192.168.3.255 scope global eth0:1

El comando ip a s dev eth0 es la forma reducida para ejecutar ip address show dev eth0.

Debian

En Debian es exactamente igual, salvo que las todas las interfaces de red se configuran en el archivo /etc/network/interfaces. En la siguiente configuración he asignado las direcciones IP 10.10.150.1 y 10.10.151.1 al dispositivo eth0:

root@debian7# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 10.10.150.1
        netmask 255.255.255.0
        network 10.10.150.0
        broadcast 10.10.150.255
        gateway 192.168.1.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8 8.8.4.4

allow-hotplug eth0:0
iface eth0:0 inet static
        address 10.10.151.1
        netmask 255.255.255.0
        network 10.10.151.0
        broadcast 10.10.151.255

Luego de editar y guardar el archivo /etc/network/interfaces, levantar la nueva interfaz de red eth0:0 ejecutando ifup eth0:0 y comprobar la configuración con la herramienta ifconfig:

root@debian7# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 45:7f:ca:d4:22:ac
          inet addr:10.10.150.1  Bcast:10.10.150.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2052424 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3121090 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:322557967 (307.6 MiB)  TX bytes:3986798249 (3.7 GiB)
          Interrupt:36 Memory:d6000000-d6012800

root@debian7# ifconfig eth0:0
eth0:0    Link encap:Ethernet  HWaddr 45:7f:ca:d4:22:ac
          inet addr:10.10.151.1  Bcast:10.10.151.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:36 Memory:d6000000-d6012800

Nuevamente, a pesar de ser listados como dispositivos diferentes, se trata del mismo dispositivo físico:

root@debian7# ip a s dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 45:7f:ca:d4:22:ac brd ff:ff:ff:ff:ff:ff
    inet 10.10.150.1/24 brd 10.10.150.255 scope global eth0
    inet 10.10.151.1/24 brd 10.10.151.255 scope global eth0:0

En Debian, este concepto de interfaces virtuales se considera "legacy" (tradicional u obsoleto), aunque todavía tiene soporte y funciona correctamente. Por supuesto, refleja el uso tradicional de la herramienta ifconfig para configurar dispositivos de red. Actualmente, las herramientas ifup e ifdown utilizan la utilidad ip provista por el paquete iproute2. Tal como demostré en el ejemplo, la utilidad ip no utiliza el mismo concepto de interfaces alias, o interfaces virtuales. Sin embargo, soporta la asignación de nombres arbitrarios a las interfaces (llamados etiquetas). De esta forma se soporta el uso de interfaces alias, o interfaces virtuales, mediante la utilidad ip. Para mayor información sobre la configuración de múltiples direcciones IP en una misma interfaz de red, utilizando la sintaxis actual de la suite iproute2 revisar la siguiente documentación: iproute2 method.

Fuentes

CentOS Wiki - Setting up many IP addresses on one physical network interface

Debian Wiki - Multiple IP addresses on One Interface


Tal vez pueda interesarte


Compartí este artículo