# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

¿Qué es APIPA/zeroconf y cómo deshabilitarlo en CentOS/RHEL (169.254.x.y)?


Seguro que muchos os habéis fijado que tanto en sistemas Linux Debian, RHEL, etc como en Windows, algunas veces el propio sistema os asigna una IP del rango 169.254.x.y e incluso que ese rango aparece en la tabla de rutas incluso en circunstancias normales, junto con los que sabemos que tienen que estar ahí:

$ route -n
Tabla de rutas IP del núcleo
Destino         Pasarela        Genmask         Indic Métric Ref    Uso Interfaz
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0

Bien, hay que saber que se trata de la característica Automatic Private IP Address (APIPA), y es la asignación automática por parte del sistema operativo de una IP en ese rango (máscara de red 255.255.0.0) cuando no consigue contactar con el servidor DHCP que tiene que asignarnos una IP. En un hipotético caso de una red privada en la que fallara el servidor DHCP, esto permitiría que las máquinas conectadas a esa red tuvieran asignada una IP dentro del mismo rango y se pudieran comunicar, no así con el exterior ya que no se configura gateway.

Si queremos prescindir de esta funcionalidad en sistemas RHEL, CentOS, Scientific Linux, etc. Debemos añadir la directiva “NOZEROCONF=yes” al fichero “/etc/sysconfig/network”.

NOZEROCONF=yes

Después reiniciamos la red:

# /etc/init.d/network restart

Enrutar en Linux (route add/del)


Ayer expliqué cómo visualizar las tablas de rutas en Linux, pero no vimos cómo agregar nuevas rutas, modificarlas o borrarlas. Vamos a ver en una entrada rápida unos ejemplos básicos del comando route que nos enseñarán a modificar la tabla de rutas. Partimos de esta base:

$ route -n
Tabla de rutas IP del núcleo
Destino         Pasarela        Genmask         Indic Métric Ref    Uso Interfaz
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Vamos a añadir una nueva ruta cuyo destino tenga la red 169.255.0.0/16. Todo tráfico contra esa red será redirigido a la interfaz eth0 y usará la puerta de enlace (gateway) 192.168.1.1:

$ sudo route add -net 169.255.0.0/16 gw 192.168.1.1 dev eth0
$ route -n
Tabla de rutas IP del núcleo
Destino         Pasarela        Genmask         Indic Métric Ref    Uso Interfaz
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.255.0.0     192.168.1.1     255.255.0.0     UG    0      0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Para eliminar esta ruta en lugar de route add usamos route del:

$ sudo route del -net 169.255.0.0/16 eth0

También podríamos enrutar tráfico de una LAN sin necesidad de pasar por una gateway:

$ sudo route add -net 169.255.0.0/16 dev eth0

O establecer la gateway (puerta de enlace) por defecto. Será utilizada en caso de no haber otra regla efectiva por delante:

$ sudo route add default gw 192.168.2.1

Como siempre, para más información:

$ man route

Recordad que estos cambios no son persistentes a reinicios, tendréis que añadir los comandos a /etc/rc.local.

Routing Tables: ‘netstat -rn’ y ‘route -n’


Algo importante en los sistemas Linux (o Unix) y todo lo relacionado con networking es conocer el estado y configuración de las tablas de rutas IP (routing tables), que nos indican cómo y a través de donde se envía un paquete en las distintas redes.

Para visualizar la tabla de rutas tenemos dos posibilidades, utilizar el comando netstat -rn o route -n, ambos nos ofrecen la misma salida:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

Las tres primeras columnas nos indican, por un lado las redes de destino (Destination), la puerta de enlace que utilizan (Gateway) y la máscara de red (Genmask). En las Flags vemos “U”, que significa que la interfaz de red está levantada y G que indica que esa ruta utiliza la puerta de enlace. 0.0.0.0 es tratado como un wildcard (también se suele representar con un *) y especifica el destino a cualquier red no especificada.

Explicando la salida del comando route anterior, vemos en primer lugar que todo paquete dirigido a las redes 192.168.1.0/255.255.255.0 y 169.254.0.0/255.255.0.0 serán enviados a través de redes LAN (vemos que no hay flag de gateway) por lo que no harán uso de puerta de enlace. En cambio todo paquete con destino 0.0.0.0, es decir, el resto de redes sí que pasará por nuestra puerta de enlace 192.168.1.1. Todas estas rutas trabajan bajo la interfaz de red eth0, si tuviéramos más interfaces levantadas aparecerían marcadas como ethX en la columna Iface.

Cómo configurar tarjetas de red en Red hat Enterprise, CentOS y Fedora Core


Existen tres modos para configurar tarjetas de red en sistemas operativos Red Hat 5 y CentOS 5. Nos vamos a centrar en dos, las cuales son modificando manualmente los ficheros de configuración de las tarjetas de red, y la otra mediante una interfaz GUI basada en texto. Para la tercera sería necesario disponer de X.

Configurar tarjetas de red mediante GUI interfaz basada en texto:

Introducimos el siguiente comando en nuestra shell:

system-config-network-tui

Accederemos a la interfaz basada en texto, donde tendremos la opción de configurar las tarjetas de red de nuestro equipo, en este caso vemos dos, la eth0 y la eth1:

Configurar tarjetas de red Red Hat CentOS Fedora

Elegimos la tarjeda de red que queremos configurar, en este caso la eth0, a la cual le vamos a asignar IP estática , máscara y puerta de enlace, aquí ya entra la configuración que deseemos establecer a cada tarjeta de red:

Configurar tarjetas de red Red Hat CentOS Fedora

Salimos de la interfaz, y reiniciamos la red:

/etc/init.d/network restart

Configurar tarjetas de red manualmente, modificando ficheros de configuración:

Los ficheros de configuración de las tarjeras de red se encuentran en

cd /etc/sysconfig/network-scripts/, accedemos a dicha ruta:
cd /etc/sysconfig/network-scripts/

Veréis que los ficheros de configuración son del tipo ifcfg-eth0, ifcfg-eth1. abrimos el fichero de la tarjeta a configurar en este caso la eth0:

 vi ifcfg-eth0

Configuramos en función de nuestras necesidades, en los comentarios véis lo que es cada línea (he usado valores ficticios):

# Intel Corporation 82541GI Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=none
BROADCAST=22.23.112.255
HWADDR=01:09:4B:7F:6C:E3  # Dirección MAC
IPADDR= 64.34.55.50  # Ip de la interfaz de red
NETMASK= 255.255.255.0  # Máscara de red
NETWORK= 64.34.55.0 # Red en la que se encuentra
ONBOOT=yes  # Arranque automático al inicio del sistema
GATEWAY= 64.34.55.1 # Puerta de enlace
TYPE=Ethernet

Reiniciamos la red:

/etc/init.d/network restart

Para ambos casos, especificaremos nuestro HostName y Puerta de enlace en el siguiente fichero:

vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=www.rm-rf.es
GATEWAY=64.34.55.1

Y finalmente, recordad configurar unos servidores DNS válidos para el equipo (valores ficticios):

vi /etc/resolv.conf
nameserver 80.58.0.33
nameserver 95.112.45.43

Vuestro equipo ya debería responder a ping con los servidores de la misma red, y si habéis configurado la tarjeta para salir a Internet, deberíais tener ping a webs, y una resolución DNS correcta (resolver otros Hostnames)-