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.
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:
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
man 5 interfaces
.
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.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. 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.
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.
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):
aa.bb.cc.dd
Bcast: zz.yy.xx.ww
corresponde a las direcciones de IP y broadcast respectivamente.aa.bb.cc.dd
corresponde a la expresión decimal de la máscara de red.
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.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 up
para “levantar” (activar) o down
para “bajar” (desactivar) la interface. Este ítem es obligatorio.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
).
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).
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?
POR HACER
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
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
Ejemplo: nameserver 208.67.222.222
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.