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 utilizar la herramienta ifup
:
[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
emplean la herramienta ip
provista por el paquete iproute2
. Tal como demostré en el ejemplo, la herramienta 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