Configurando Red en Linux

Archivos de Configuración

La configuración de red en Linux se guarda en diferentes archivos dependiendo de la distribución de Linux utilizada, existiendo diversas ubicaciones en Redhat y derivados, Debian y derivados, y Novell. En general, hay ubicaciones y configuraciones más o menos estardarizadas.

Debian, Ubuntu, etc

En Debian y derivados (incluyendo Ubuntu), la configuración de red se guarda en el archivo /etc/network/interfaces, el cual contiene un mini-lenguaje de descripción y configuración para cada interface de red.

Entre otras variables, el archivo guarda, para cada interface:

  • Su estado de inicio (automático, manual o asistido)
  • La estructura de configuración (IP estática, DHCP, promisc, asistida por booteo, etc).
  • La dirección de red y la máscara de red asociadas, a menos que la interface sea DHCP.
  • Los nombres de los scripts responsables del inicio (ifconfig interface up) y parada (ifconfig interface down) de cada interface.

El formato del archivo es como sigue (un ejemplo):

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
# Interface loopback, un dispositivo que el kernel utiliza
# para comunicacion de redes interna ("consigo mismo")
# la primera interface disponible recibe la IP 127.0.0.1
auto lo
iface lo inet loopback
 
# Interface ethernet servida por el modelo de gestión de red "static"
# (configuracion de red estatica)
auto eth0
iface eth0 inet static
address 200.22.22.71
netmask 255.255.255.240
gateway 200.22.10.65
dns-nameservers 8.8.8.8
post-up echo "Interface eth0 levantada con exito"
post-down echo "Interface eth0 bajada con exito"
 
# Interface ethernet servida por el modelo "dhcp"
# (configuracion IP se recibe de un servidor DHCP)
auto eth1
iface eth1 inet dhcp
leasehours 86400
client dhcpcd
Utilizando el manual puedes aprender sobre la configuración de este archivo: man 5 interfaces.

Redhat y Derivados

En Redhat y sus derivados (Fedora, CentOS, etc), la configuración de red se guarda en entradas bajo el directorio /etc/sysconfig/network, siendo un archivo para cada interface de red. Cada archivo contiene una serie de variables describiendo distintas características de la interface.

El directorio asociado scripts/ guarda los scripts utilizados para la inicialización (ifconfig interface up) y parada (ifconfig interface down) de estas interfaces.

Un ejemplo de archivo es este: ifcfg-eth0 que guarda la configuración de la tarjeta de red:

# Network Card brand, model
DEVICE=eth0
HWADDR=00:11:22:33:44:55
ONBOOT=yes
IPADDR=192.168.20.2
BOOTPROTO=none
NETMASK=255.255.0.0
TYPE=Ethernet
GATEWAY=192.168.20.1
USERCTL=no
PREFIX=16
NAME="Ethernet-0 Cableado"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
NM_CONTROLLED=yes
DEFROUTE=yes
  • DEVICE se refiere al nombre del dispositivo en el árbol de dispositivos, por ejemplo, para una configuración ADSL este nombre es ppp0.
  • HWADDR indica la Dirección MAC.
  • Las propiedades NM_CONTROLLED, USERCTL y NAME permiten a la interface ser operada por medio de NetworkManager, el gestor de conexiones de red “relativamente moderno” que traen las distribuciones Linux desde 2008.

Configuración del Kernel

El kernel de Linux recibe un conjunto de parámetros, para la gestión del servicio de red, al momento del booteo del sistema. Estos parámetros se guardan bajo el árbol de directorios /proc en la siguiente ruta:

/proc/sys/net

Entre otras opciones disponibles, tenemos:

  • ipv4/icmp_echo_ignore_broadcasts: cuando está seteada a “1” el kernel rechaza entregar respuesta a peticiones ICMP de broadcast, como las que se pueden encontrar en un modelo de red en que una aplicación está buscando shares de red disponibles.
  • ipv4/ip_forward: cuando está a “1” el kernel redirige paquetes de una interface a otra, dentro de la misma máquina, siguiendo las reglas asociadas al gestor iptables.
  • ipv4/tcp_keepalive_time: el tiempo (en segundos) que un canal TCP puede estar abierto en espera de una transmisión o recepción de datos.
  • ipv4/iface/rp_filter donde iface es el nombre de una interface: cuando está a “1” se habilita la protección a rutas reversas remotas (RP-Spoof Protection).

Hay muchas otras variables más, como todas las variables del kernel pueden setearse los valores dentro del archivo /etc/sysctl.conf (recordar que para cargar las opciones es necesario ejecutar sysctl -p).

¿Más información? En el manual como siempre → sysctl.conf.

Comandos para los parámetros de Red

ip

Uso: para mostrar configuración, subir, bajar o configurar una interface de red.
Privilegios: network, root o similar.

El comando ip sirve para mostrar o configurar varios aspectos de la red: interfaces, ruteo y dispositivos entre otros.

El comando toma una serie de subcomandos, los cuales cada uno procesa un tipo de tarea en específico, por ejemplo:

Comando Uso general Ejemplo
ip address Visitar configuración IP de las interfaces de red
ip route Visitar configuración de la tabla de ruteo
ip link Visitar configuración de los dispositivos de red
ip rule Visitar configuración de las políticas de ruteo

Por ejemplo:

Mostrar configuración de red de la interface eth0:

ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 3c:97:0e:75:ce:f2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.224/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3e97:eff:fe75:cef2/64 scope link 
       valid_lft forever preferred_lft forever

Limpiar la configuración de red de la interface eth1:

ip address flush dev eth1

Mostrar la tabla de ruteo:

ip route
default via 192.168.23.1 dev eth0  proto static 
169.254.0.0/16 dev eth0  scope link  metric 1000 
192.168.23.0/24 dev eth0  proto kernel  scope link  src 192.168.23.5

Agregar una puerta de enlace (.1) de salida por la interface eth1:

ip route add default via 192.168.1.1 dev eth1

¿Más información? En el manual como siempre → ip.

ifconfig (Configuración Manual)

Uso: para subir, bajar o configurar una interface de red.
Privilegios: network, root o similar.

El comando Linux que permite configurar los parámetros de red es ifconfig. Usuarios que no pertenecen al grupo network deben ejecutar este comando por medio de sudo si quieren hacer modificaciones.

Por ejemplo, si ejecutas Linux en una máquina de un laboratorio o de tu casa, local, y te has conectado vía red cableada, tu nombre de interface de red será seguramente eth0; si te has conectado vía inalámbrica puedes tener un nombre como wifi0 owlan0.

Si ejecutas ifconfig pasando esta interface como parámetro podrás obtener la configuración de red:

[usuario@localhost ] ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:11:22:33:44:55  
          inet addr:192.168.42.10  Bcast:192.168.42.255  Mask:255.255.255.0
          inet6 addr: fe80::211:2fff:fe91:2437/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:60918 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56872 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:63734800 (60.7 Mb)  TX bytes:5711244 (5.4 Mb)
          Interrupt:177 Base address:0x9000

Una explicación de las líneas más importantes (ver cidr-segmentacion-redes):

  • Link encap determina qué tipo de interface estás trabajando, en este caso, es una conexión a una red Ethernet.
  • HWaddr es la dirección MAC de la interface de red en cuestión.
  • inet addr: aa.bb.cc.dd Bcast: zz.yy.xx.ww corresponde a las direcciones de IP y broadcast respectivamente.
  • netmask: aa.bb.cc.dd corresponde a la expresión decimal de la máscara de red.
  • RX packets representa el número de paquetes recibidos.
  • TX packets representa el número de paquetes enviados.
  • Interrupt: Z Base address: 0xnnnn representa el número del Interrupt PCI en caso que la tarjeta sea PCI, o el número de interrupt por software (o BIOS) si es una tarjeta PCMCIA, USB o similar.

Para cambiar la configuración de red, provisto que se tenga los permisos, se ejecuta ifconfig de la siguiente forma:

[privilegiado@localhost]  ifconfig eth0 192.168.20.230 netmask 255.255.255.0 [promisc] up/down
  • eth0: el nombre de la interface que quieres configurar.
  • A continuación la dirección IP que deseas asignarle.
  • netmask xxx.xxx.xxx.xxx para asignar la máscara de red.
  • promisc si quieres que la interface opere en modo “promiscuo”, en el cual recibe sin queja todos los paquetes de red que la alcancen, sin importar que estén destinados a su IP asignada o no. Útil para hackersdesarrolladores interesados.
  • up para “levantar” (activar) o down para “bajar” (desactivar) la interface. Este ítem es obligatorio.
Ejecutar el comando ifconfig no altera los valores guardados en los scripts de red (ej.: /etc/network/interfaces) por lo que los cambios se pierden la próxima vez que se recarguen las opciones de red (vía reinicio, hibernación o reinvocación de dhclient).

route (Configuración de Pasarela)

Si hemos usado ifconfig como en el ejemplo para cambiarnos de una red a otra, hemos de actualizar la Tabla de Ruteo del kernel para indicarle cuál es nuestro gateway. Si, siguiendo el ejemplo anterior, el gateway para la red 192.168.20.0/24 a la cual nos hemos conectado, fuera la dirección .254, debemos utilizar el comando route (¡requiere privilegios de superusuario!) para ingresar el nuevo gateway como sigue:

route add default gw 192.168.42.254 eth0

Ejecutar el comando route sin parámetros nos muestra una tabla con información de las condiciones de ruteo actual:

[user@machine ~]$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.0.0     U     0      0        0 eth0
default         192.168.42.10   0.0.0.0         UG    0      0        0 eth0

La línea que lee G en la columna de banderas (“flags”) es la que nos indica cuál es la dirección IP de nuestra pasarela o gateway (bajo la columna correspondiente).

dhclient (Recepción por DHCP)

Si no puedes asignar una dirección IP estática o si dependes de un servidor DHCP para que te entregue una IP, en este caso se ejecuta en vez de ifconfig el comando especial dhclient, el cual requiere privilegios de administrador.

Otra alternativa, es que si la interface de red asociada (ej.. eth0) está configurada como “dhcp” en el archivo interfaces, simplemente puedes usar el panel de red provisto por tu distribución (NetworkManager o wicd en Ubuntu) para detener y reiniciar la interfaz; en el proceso, ésta pedirá una configuración DHCP.

Sin embargo para que esta opción funcione las interfaces de red deben ser levantadas/bajadas con los comandos especiales ifup e ifdown respectivamente, en vez de por medio de ifconfig.

Para pedir una dirección IP desde una interface de red específica, por ejemplo vía cable con eth0:

sudo dhclient eth0

Nota: dependiendo de la configuración del cliente (en tu máquina) y el servidor DHCP, varias variables pueden ser sobreescritas, incluyendo: tabla de ruteo, servidores de nombre (DNS vía /etc/resolv.conf), nombre de host, dominio, nombre NetBios, etc…

¿Más información?

ppp y pppoeconf (Configuración PPP y PPPoE)

POR HACER

iwconfig y wireless-tools (Configuración Inalámbrica)

Si tu tarjeta de red inalámbrica está soportada en tu distribución de Linux, puedes usar los tres comandos iwlist, iwconfig y iwevent para determinar el estado de la red inalámbrica, buscar puntos de acceso y configurar la interface de red.

iwlist lista las características de la red y la señal detectadas. El comando más utilizado es iwlist interface scanning que muestra los Puntos de Acceso que ha localizado tu tarjeta.

iwevent es un programa que va listando en tiempo real las peticiones de configuracion y los eventos que recibe tu tarjeta inalámbrica. Inícialo en una terminal aparte y podrás ver en tiempo real los puntos de acceso localizados, la configuración de potencia de la señal y el ruido, y las interfaces de autenticación (WEP o WPA) soportadas por la red.

Finalmente iwconfig es el programa responsable de enviar parámetros de configuración a la tarjeta inalámbrica. Estos parámetros incluyen: a qué red conectarse (por medio de la especificación de nombre de red o ESSID), qué potencia utilizar, si usar el modo de gestión, replicador o maestro de la conexión, y qué sistema de autenticación y clave/claves utilizar.

Si tienes una tarjeta inalámbrica habilitada y su nombre de interface es wlan0, puedes buscar redes inalámbricas disponibles por medio del siguiente comando:

iwlist wlan0 scan

Esto listará las redes disponibles en una lista de células (cells), cada una con su tipo de encriptación, nombre de ESSID, etc. Toma nota de la red a la cual quieres conectarte (chequea los SSID que se van imprimiendo) y apunta el tipo de encriptación, el nombre de red y el punto de acceso.

Para conectarte a una red llamada, por ejemplo, “Red Privada”, la cual tiene una clave alfanumérica WEP “privado123456”1), ejecutas la siguiente instrucción:

iwconfig wlan0 essid "Red Privada" mode Managed key s:privado123456

En algunas ocasiones una red puede no tener un servicio de “auto-publicación” (autodiscovery) para su ruteador, por lo cual deberás establecer explícitamente el Access Point al que quieres conectarte:

iwconfig wlan0 essid "Red Privada" mode Managed key s:privado123456 ap 12:34:56:78:9a:bc
Más información haciendo (obviamente):

/etc/resolv.conf (Servidores de Nombres en Linux)

Este archivo contiene las direcciones de los servidores DNS a los que se conecta la máquina.

Si el archivo no es generado automáticamente por una utilidad como el cliente DHCP (por ejemplo, como puede suceder en una red wireless), es necesario llenarlo a mano.

El formato es de líneas de la forma:

nameserver ip
search domain-name

, donde ip es la dirección IP del servidor DNS, y si la línea “search” existe, domain-name es el nombre del host que se requerirá como proveedor de resoluciones DNS.

Por ejemplo, en la Universidad del Mar tenemos el siguiente registro DNS para entregar DNS a los equipos de los laboratorios2).:

nameserver 192.168.42.250
Se recomienda el uso de al menos uno de los servidores de nombres del proyecto OpenDNS como forma de mantener una salida DNS independiente de la red actual, proveyendo, entre otras cosas, de protección anti-phishing y salida rápida a los servidores DNS-ROOT:

Ejemplo: nameserver 208.67.222.222

Gestores de Red en Linux

En Ubuntu, el gestor de redes por defecto desde Ubuntu 8.04 se llama NetworkManager. Ha sido también aceptado en Fedora desde su versión 10.

Para Gnome 2.6 o posterior y XFCE 4.4 o posterior, si se tiene una instalación de Python se puede instalar el applet wicd que provee de una interface más simple para gestionar distintas configuraciones de red, en particular con sistemas wireless pero también aceptando direcciones IP de ethernet estáticas, PPP, e IPv6.

Intel y Nokia han estado trabajando en otro proyecto, llamado aparentemente Connection Manager o ConnMan 3). Ars Technica evalúa las diferencias posibles entre NetworkManager y ConnMan.

En general, todos estos front-end resumen algunas de las capacidades que se pueden obtener vía la interface de línea de comandos, de una manera que sea más fácil de operar para el usuario común. Mi experiencia personal es que NetworkManager maneja mucho mejor las redes cableadas, pero no es capaz de operar correctamente conecciones ADSL que requieren un módem con ZeroConf (por ejemplo el WiiTV de Telefónica del Sur). Por el otro lado, si tu tarjeta inalámbrica está plenamente soportada en Linux, o si quieres un entorno de escritorio liviano, wicd será la mejor opción. Lamentablemente no trabajará bien con ninguna red que utilice ZeroConf.

Captura de pantalla de wicd
mostrando la red cableada y las interfaces de red inalámbrica disponibles.

indexmenu_n_7

1)
las claves WEP alfanuméricas siempre tienen 13 caracteres
2)
este DNS solo puede ser accedido desde la red interna