Administración de redes TCP/IP

De GLASS

Tabla de contenidos

Introducción

Linux es un sistema operativo concebido desde su inicio para trabajar en un entorno de red. Entre los muchos protocolos implementados en Linux, destaca sobre todos ellos TCP/IP.

Tiempo atrás era extraño encontrar alguna empresa o entidad con más de dos computadoras dado su elevado coste, pero cuando esto ocurría, evidentemente, aparecía la necesidad de intercambiar datos entre las ambas. Este fue el principio de la SNEAKER-net, desarrollada a principios de los años cincuenta. No fue hasta el 1976 en que los laboratorios de la AT&T inventaron UUCP, un protocolo que funcionaba sobre lineas serie para copiar datos entre máquinas UNIX, y aunque era una gran mejora sobre la SNEAKER-net, seguía siendo una comunicación lenta.

Por esos años Xerox presentó la Ethernet, y con ella empezó el mundo de las comunicaciones a alta velocidad, así como el auge de los servicios basados sobre la pila TCP/IP.

TCP/IP es un conjunto de protocolos estándar útil para comunicar sistemas remotos. Aunque existe un modelo de referencia compuesto por siete capas, Linux implementa un modelo más simplificado de tan sólo cuatro. La comunicación entre las diferentes capas se lleva a cabo insertando cabeceras en la información proveniente de cada capa superior.


Direccionamiento IP

Cada ordenador en una red TCP/IP debe tener una dirección IP única, la cual lo diferencia del resto de ordenadores de la red. Una dirección IP se compone de cuatro bytes (u octetos en la jerga de networking), escritos en forma de A.B.C.D.

Es importante no asignar solamente una dirección IP a un ordenador en red. Si la red está directamente conectada a Internet, la dirección IP de todos los ordenadores debe ser asignada por la ICANN (Corporación de Internet para la Asignación de Nombres y Numeraciones). La ARIN (Registro Americano para la Numeración en Internet) asigna los espacios de direcciones IP a los ISPs (Proveedores de Servicios de Internet) así como usuarios finales. Si la red no está conectada a Internet, o si se conecta a Internet a través de un firewall, las direcciones se escogen de un espacio de direcciones privadas. Tal como su nombre implica, IP (Protocolo de Internet) fue diseñado desde cero para el internetworking. Lo que significa que se diseñó para interconectar redes. Por ello, una dirección IP se divide en dos partes: una parte de red y una parte de host. La parte de red identifica a todos los hosts de una red en particular y diferencia una red de otra, y la parte de host un ordenador concreto dentro de una misma red.

Qué parte pertenece a red y qué parte a host, está definido por la máscara de red o netmask. La netmask es un número de cuatro bytes en el cual los bits de la parte de red tienen valor binario uno, y los bits de la parte de host tienen valor cero. Por ejemplo, si una red tiene una netmask 255.255.255.0, todos los hosts en esa red tendrían los tres primeros bytes de su dirección IP iguales, distinguiéndose únicamente por el último byte. Esto significa que teóricamente puedenhaber hasta 256 hosts en la misma red, pero como veremos, el límite es sensiblemente más pequeño.

Cada red tiene una dirección de red y una de broadcast. La dirección de red se usa para identificar a la propia red, y tiene la parte de host llena de ceros. La dirección de broadcast es una dirección especial que envía datos a todos los dispositivos de la red, y tiene su parte de host llena de unos. Esto significa que el número máximo de host en una red es de dos menos que el máximo teórico, por eso una red de clase C puede albergar 254 hosts. Según la máscara de red, las redes se dividen en clases. Una red de clase A tiene 8 bits en la parte de red y 24 en la parte de host. Una red de clase B tiene 16 bits en ambas partes, y una red de clase C tiene 24 bits en la parte de red y 8 en la parte de host. Las redes de clase D son consideradas direcciones multicast. El RFC 796 asigna rangos de direcciones IP para cada clase de red, dependiendo del primer byte de las direcciones.

Clases de red de acuerdo con el RFC 796
Primer byte de direcciones Clase de red
1 - 127 A
128 - 191 B
192 - 223 C
224 - 239 D
240 - 254 Reservado

Subnetting

La división de una gran red en otras más pequeñas, se llama subnetting. Se suele hacer cuando una organización pide un gran bloque de direcciones y necesita dividirla en diferentes secciones. Pongamos el ejemplo de una empresa que pide una red de clase C para luego dividirla entre dos oficinas. O, decide usar direcciones privadas de clase A para los hosts internos, y asignar diferentes redes de clase C a cada una de estas oficinas. La siguiente tabla agrupa las diferentes subredes que se pueden crear en una red de clase C.


Subredes posibles en una red de clase C
Netmask Subredes Utilizables Hosts por subred Host Totales
255.255.255.0 0 254 254
255.255.255.128 1 126 126
255.255.255.192 2 62 124
255.255.255.224 6 30 180
255.255.255.240 14 14 196
255.255.255.248 30 6 180
255.255.255.252 62 2 124

Números de red reservados

Hay redes que no se conectarán nunca a Internet o que se conectarán a través de un mecanismo de traducción de direcciones (masquerading), más conocido por el nombre de firewall. Es importante usar estas direcciones cuando se configura una red por primera vez. El direccionamiento privado estándar se muestra en la tabla de a continuación.

Direcciones de redes privadas de acuerdo al RFC 1618
Rango de direcciones Clase de red
10.0.0.0 – 10.255.255.255 A (1 red de clase A)
172.16.0.0 – 172.31.255.255 B (16 redes de clase B)
192.168.0.0 – 192.168.255.255 C (24 redes de clase C)
Existe otra red reservada de clase A, con el rango de direcciones 127.0.0.0 – 127.255.255.255, conocida como red de loopback. La dirección de loopback más usual en cualquier sistema es 127.0.0.1. Por ello si algún program necesita establecer una conexión con el propio sistema, puede hacerlo a través de 127.0.0.1. Es útil cuando se ejecuta software de red en un sistema que no está conectado a red alguna.

Enrutamiento

Las redes se conectan a través de routers. Un router es un dispositivo que tiene conexiones a dos o más redes y se encarga de redirigir el tráfico entre ellas. Cuando un host envía un paquete a un destino que se encuentra en la misma red lo hace directamente. Pero cuando la destinación del paquete se halla en otra red, el host envía el paquete al router para que él lo reenvíe a la red correcta. Es por esta razón por lo que es tan importante configurar la máscara de red correctamente, porque es el parámetro que indica cuando hay que enviar directamente al host o al router.

Una red normalmente tiene una ruta por defecto que la conecta a otras redes. En esta configuración todo el tráfico cuya destinación está fuera de la red local se envía a la del router por defecto. Como es posible tener más de un router en una red, por ejemplo uno para Internet y otro para la red interna. En este caso puede ser necesario usar una ruta estática que le diga al host dónde enviar los paquetes destinados a subredes específicas, o usar enrrutamiento dinámico por medio de un demonio de enrrutado (como igrpd o routed).

Suite de protocolos TCP/IP

TCP/IP no es un sólo protocolo, sino un conjunto de ellos:

  • IP (Internet Protocol)
  • TCP (Transfer Control Protocol)
  • UDP (User Datagram Protocol)

El protocolo IP es el denominador común de TCP/IP. El protocolo TCP es un protocolo orientado a conexión o a orientado a flujo. Esto significa que una aplicación que se comunica con otra usando TCP, envía y recibe flujos de bytes, y es la pila de TCP/IP la encargada de partir los datos en paquetes y volverlos a reordenar en el punto de recepción, asegurando la entrega contra pérdida o corrupción de los datos.

Por otro lado, el protocolo UDP es un protocolo basado en datagramas o orientado a paquetes. Esto significa que el programa debe ensamblar los paquetes por su cuenta, así como asegurarse de que no se ha perdido información por el camino. De todas maneras UDP es mucho más eficiente que TCP, y algunas aplicaciones (especialmente aquellas en que la pérdida de paquetes no es significante, com en el caso de la sincronización de relojes) se benefician de ello.

Hay protocolos de aplicaciones que se ejecutan sobre TCP y UDP como los siguientes:

  • SMTP (Simple Mail Transfer Protocol)
  • HTTP (Hypertext Transfer Protocol)
  • FTP (File Transfer Protocol)
  • SNMP (Simple Network Management Protocol)
  • NFS (Network File System)

Existen muchos otros, cada uno con sus características especiales. En la siguiente tabla se muestran las capas de la suite de protocolos TCP/IP y su correspondencia con el modelo de referencia OSI.

Modelo OSI vs Modelo TCP/IP
OSI Suite de Protocolos TCP/IP
Aplicación Aplicación
Presentación
Sesion
Transporte Transporte
Red Internet
Enlace Interfaz de Red
Física

Puertos

Un sólo ordenador puede tener varios servicios. Para separarlos, es necesario algo más que una dirección IP para el host. Los puertos son la analogía a los conectores de un cuadro de conexiones. Un sólo ordenador con una sola dirección IP puede dar diferentes servicios, tantos como de puertos disponga. Cada protocolo tiene su propio repertorio de puertos, por eso diferentes servicios pueden usar el mismo número de puerto bajo TCP y bajo UDP.

Un servidor puede atender peticiones en cualquier puerto. De ese modo, si esa decisión fuera totalmente arbitraria sería realmente difícil encontrar el servicio deseado. Por eso hay una lista de puertos bien conocidos asignados en el RFC 1700. Algunos ejemplos de las asignaciones de estos puertos se muestran a continuación:


Relacción de puertos conocidos más usuales
Puerto/Protocolo Nombre Servicio
7/tcp echo Genera un echo de todo lo que recibe
13/tcp daytime Responde con la fecha y hora actual
23/tcp telnet Emulación de terminal remoto
25/tcp smtp Transferencia de correo
53/tcp domain Resolución de nombres
80/tdp www Tráfico web
110/tcp pop3 Recepción de correo
443/tcp https Tráfico web seguro

Sockets

En términos de networking, un socket es una conexión de red entre dos procesos, los cuales puede estar ejecutándose en ordenadores distintos o en uno mismo. Técnicamente, un socket abierto es un compuesto de cuatro elementos (host origen, puerto origen, host destino, puerto destino).

Nota: Hay que tener en cuenta que un socket tiene abiertos los puertos en ambas direcciones. Cuando un cliente intenta conectar a un servidor, primero le pide al sistema que le asigne un puerto libre, y pedirá el servicio a través suyo. De este modo pueden haber varios programas ejecutándose entre ambos sistemas, cada uno en un socket diferente para cada conexión.

Configuración de la red TCP/IP

En Slackware Linux, la configuración básica de la red se realiza en el momento de la instalación del sistema. Al igual que en otros sistemas UNIX, todos los datos de configuración se almacenan en ficheros de texto en el directorio /etc. Algo importante a tener en cuenta en Linux, es que al igual que en otros sistemas UNIX y a diferencia de los sistemas operativos de Microsoft, pueden ser reconfigurados por entero “on the fly” (al vuelo), sin rebotar. Haciendo mucho más fácil la experimentación o la corrección de fallos de configuración. De todos modos es recomendable comprobar que los cambios correctos se guardan después de reiniciar el ordenador.

En esta sección comprobaremos cómo configurar la red estáticamente, mediante la edición de los ficheros almacenados en el directorio /etc.

Archivos de configuración

Los ficheros más importantes en la configuración de la red en sistemas Linux son los siguientes:

/etc/hostname
/etc/hosts
/etc/services
/etc/host.conf
/etc/nsswitch.conf
/etc/resolv.conf
/etc/rc.d/rc.inet1

Seguidamente hablaremos de cada uno de ellos por separado. Todos estos ficheros pueden ser modificados mientras el sistema se ejecuta. Modificándolos (excepto para /etc/rc.d/rc.inet1), los cambios serán inmediatos, sin necesidad de arrancar o detener ningún demonio. Hay que tener en cuenta que la mayoría de estos ficheros admiten comentarios en sus encabezamientos mediante el símbolo de hash (#).

/etc/hostname – Nombre del Host

Este fichero contiene sólo una linea con el nombre del host. Se usa al arrancar el sistema para configurar el nombre de la máquina.

/etc/hosts – Relación de direcciones IP con nombres de Host

Este fichero contiene la relación entre las direcciones IP y los nombre de host más compresibles para el usuario o administrador. Las direcciones IP fueron diseñadas para ser fácilmente manejables por los sistemas informáticos, pero son complicadas de recordar para las personas. Por este motivo se creó el fichero /etc/hosts. A continuación un ejemplo de su contenido:

127.0.0.1	localhost
192.168.1.100	Belluguet.Lmann.net	Belluguet
192.168.1.253	Dofi.Lmann.net		Dofi smtp
192.168.1.254	Ventafocs.Lmann.net	Ventafocs
192.168.1.114	Rodamon.Lmann.net		Rodamon

En este caso, Dofi tiene también un alias, por lo que podemos referirnos a él por cualquiera de los dos nombres. En la práctica el fichero /etc/hosts contiene sólo el nombre del host así como la entrada de localhost. Otros nombres de host se resuelven gracias al DNS (Internet Domain Name System). La parte del cliente referente a este servicio se configura en el fichero /etc/resolv.conf, el cual veremos más adelante.

/etc/services – Relación de los números de puerto con el nombre de un servicio

Este fichero contiene una relación de los números de puerto y los nombres de los servicios. El texto que hay a continuación, es un fragmento extraido del fichero /etc/services:

tcpmux		1/tcp		# TCP port service multiplexer
echo		7/tcp
echo		7/udp
discard		9/tcp		sink null
discard		9/udp		sink null
systat		11/tcp		users
daytime		13/tcp
daytime		13/udp

Hay que tener en cuenta que este fichero también permite alias, los cuales se sitúan después del número de puerto. En este caso, sink y null son alias para el servicio discard.

/etc/host.conf y /etc/nsswitch.conf – Configuración de la resolución de nombres

Estos ficheros son los encargados de configurar la resolución de nombres en sistemas UNIX, que no es ni más ni menos, que el lugar donde el sistema encontrará esa información. /etc/hosts.conf es el fichero usado por la versión 5 de las librerias libc, mientras que /etc/nsswitch.conf se usa con la versión 6 (más conocida como glibc). Lo realmente importante es que en algunas ocasiones unos programas usarán el primero, mientras que otros usarán el segundo, por lo que lo mejor es tenerlos ambos correctamente configurados.


/etc/host.conf Este fichero especifica el orden en el cual los diferentes sistemas de nombres (/etc/hosts, DNS, NIS) serán consultados en la resolución de nombres. Cada línea del fichero /etc/host.conf consiste en una de las siguientes directivas seguidas por un parámetro:

order
Indica el orden con el cual los servicios serán consultados. Este parámetro puede estar combinado con varios métodos de busca separados por comas. Los métodos soportados son bind, hosts y nis, respectivamente DNS, /etc/hosts y NIS
trim
Indica el dominio que se usará para completar el nombre de host cuando se haga una tradución de dirección IP a nombre de host via DNS. Trim puede estar incluido varias veces para otros tantos dominios. Trim no afecta a /etc/hosts o a los lookups de la NIS. Se debe tener cuidado de que los hosts estén listados correctamente (con o sin el nombre de dominio completo) en el fichero /etc/hosts y en las tablas NIS.
multi
Controla cualquier petición al sistema de nombres retornando siempre un sólo resultado o varios, dependiendo de cómo este configurado. Sus parámetros pueden ser tanto on, que indica que pueden ser devueltos varios resultados, o off, con el cual sólo un resultado será devuelto. El valor por defecto es off.
nospoof
Controla una característica de seguridad qeu previene contra la falsificación del nombre del host. Si nospoof está a on, después de cada resolución de nombre a dirección IP, una resolución inversa es realizada. Si los nombres no coinciden, la operación fallará. Los parámetros válidos son on y off. El valor por defecto es off.
alert
Si la directiva nospoof está habilitada, alert controla cuando se realiza un intento de falsificación de nombre de host, registrando el evento en el syslog. El valor por defecto es off
reorder
Si se encuentra configurado a on, todos los lookups serán reordenados primeros los hosts pertenecientes a una determinada subred. El valor por defecto es off.

El contenido más usual de este fichero suele ser este:

order hosts,bind
multi on

Lo que significa que lookups se realizará primero en el fichero /etc/host.conf y después al DNS. Si varios hosts coinciden, todos los valores serán devueltos. Esta configuración es la más apropiada para la mayoría de los sistemas instalados, excepto aquellos que usen NIS o en los que habilidades como el nospoof son más que deseables, los cuales requerirán modificar el archivo.

/etc /nsswitch.conf

Este fichero fué creado originalmente por Sun Microsystems para gestionar el orden en el cual los ficheros de configuración son buscados por el sistema. De este modo nsswitch.conf tiene más funcionalidad que host.conf.

Cada línea de /etc/nsswitch.conf es, o un comentario (el cual empieza por un símbolo de hash [#]) o una palabra seguida de dos puntos, y una lista de métodos, en el orden en el cual serán escogidos. Cada palabra es uno de los ficheros del directorio /etc gestionado por nsswitch.conf. Las palabras incluidas pueden ser las siguientes:

Directivas del fichero nsswitch.conf
Palabra Función
aliases Alias de correo
password Usuarios del sistema
group Grupo de usuario
shadow Shadow password
hosts Nombres de host y direcciones IP
networks Nombres de red y números
protocols Protocolos de red
services Número de puertos y numero de servicios
ethers Número de ethernet
rpc Nombre de las remote procedure calls y números
netgroup Grupos de toda la red
Las palabras que pueden incluirse son las siguientes:
Directivas del fichero nsswitch.conf
Palabra Significado
file Válido para todas las palabras excepto para netgroup. Guarda los registros en el fichero correspondiente en el directorio /etc.
db Válido para todas las palabras excepto para netgroup. Guarda los registros en su correspondiente base de datos en el directorio /var/db. Es util para ficheros extremadamente largos, tales como ficheros de passwords con más de 500 entradas. Para crear estos ficheros desde los ficheros estandard del directorio /etc, entrar en el directorio /var/db y ejecutar el comando make.
compat Modo de compatibilidad, válido para los ficheros passwd, group y shadow. En este modo, se comprueba primero el fichero /etc correspondiente. Si se desea realizar un lookup NIS para la base de datos NIS correspondiente, es necesario incluir una línea donde el primer campo (nombre de usuario o nombre de grupo) sea un símbolo más (+), seguido por el apropiado número de dos puntos (:) (6 para /etc/passwd, 3 para /etc/group, 8 para /etc/shadow). Por ejemplo, en /etc/password, las siguientes líneas deben incluirse al final: +:*:::::.
dns Válido únicamente para entradas de hosts. Los lookups se realizan tal y como se encuentren configurados en el fichero /etc/resolv.conf
nis Válido para todos los ficheros. Los lookups se realizan al servidor NIS si este se encuentra activo.
[STATUS=acción] Controla las acciones del Servidor de Nombres. STATUS significa que la operación se ha realizado con éxito, NOTFOUND que el registro no ha sido encontrado, UNAVAIL los servicios seleccionados que no estaban disponibles, o TRYAGAIN, que son aquellos servicios que no se encontraban disponibles. El valor de action puede ser return, deja de hacer el lookup y vuelve al estado actual, o continue, que continua con la siguiente línea. Por ejemplo, una línea como hosts:dnsnis [NOTFOUND=return]hosts:dnsnis [NOTFOUND=return]files generará como resultado un lookup de los host primero en el DNS, y luego en la NIS. Si ninguno de los dos está disponible, entonces se hará uso del fichero /etc/hosts.


Este es un ejemplo de fichero nsswitch.conf incluido en la distribución Slackware:

passwd:      compat
shadow:      compat
group:       compat

# passwd:    db files nis
# shadow:    db files nis
# group:     db files nis 

hosts:       files dns
networks:    files dns

services:    db files
protocols:   db files
rpc:         db files
ethers:      db files
netmasks:    files
netgroup:    files
bootparams:  files

automount:   files
aliases:     files

Con esta configuración todos los nombres menos los de la entrada networks, se consultan en la base de datos de /var/db (razones de eficiencia). Si no se encontraran ahí se buscarían en los ficheros correspondientes del directorio /etc. Users, groups y shadow passwords pueden ser buscados en una NIS si la entrada existiera en el fichero correspondiente.

/etc /resolv.conf – Configuración del cliente DNS

Este fichero contiene el nombre del dominio del host, el orden de búsqueda y la dirección de los servidores DNS. Cada línea debe contener una palabra, así como uno o más parámetros separados por espacios. Las siguientes palabras son válidas:

TABLA

No existe una configuración por defecto para el fichero /etc/resolv.conf en Slackware. Su contenido se construye dinámicamente dependiendo de las opciones proporcionadas en el momento de la instalación. He aquí un ejemplo de este fichero:

search Lmann.net Linuxmann.net
nameserver 192.168.1.253
nameserver 62.81.16.197
sortlist 192.168.1.0/255.255.255.0 10.0.0.0/255.0.0.0

Este fichero indica que los host en los que no se ha especificado el dominio, pueden ser buscados tanto en Lmann.net primero, como en Linuxmann.net después. La dirección del servidor de nombres 192.168.1.253 será la primera en ser consultada, y si no responde en el tiempo apropiado, 62.81.16.197 se encargará de responder. Si varios hosts son devueltos, los hosts en la red de clase C 192.168.1.0 serán devueltos primero, seguidos por el resto en la red de clase A 10.0.0.0.

/etc /rc.d/rc.inet1 – Direcciones de host, netmask y router por defecto

A diferencia de otros UNIX y de distribuciones Linux, Slackware actualmente no configura la red automáticamente desde los ficheros /etc/hostname y /etc/hosts. Para cambiar la dirección IP de un host, debe editarse el script /etc/rc.d/rc.inet1 y realizar allí los cambios pertinentes. Este fichero contiene variables que especifican la dirección IP, máscara de red, la dirección de red, la dirección de broadcast y el router por defecto. A continuación veamos un ejemplo de este fichero:

IPADDR=”192.168.1.100”
NETMASK=”255.255.255.0”
NETWORK=”192.168.1.0”
BROADCAST=”192.168.1.255”
GATEWAY=”192.168.1.254”

Los nombres de las variables son bastante explícitos. GATEWAY, especifica el valor del router por defecto de la red.

Programas de configuración

Los ficheros explicados en anteriores secciones sirven para configurar los parámetros generales de la red. Aunque todos ellos pueden ser modificados de manera dinámica sólo con editar el fichero correspondiente, aún faltan un par de cosas: configurar la dirección IP del host y la tabla de enrrutado.

Ifconfig – Configuración de los dispositivos de red

El programa /sbin/ifconfig se usa para configurar los dispositivos de red de un host, incluyendo configuraciones básicas como la dirección IP, máscara de red, dirección de broadcast, así como opciones avanzadas como la configuración de una dirección remota en un enlace punto a punto (PPP Link).

Bajo Linux, todos los dispositivos de red tienen nombres compuestos del nombre del driver seguido por un número. De este modo algunos de los drivers soportados son:

TABLA

Los dispositivos se numeran empezando por 0 en el orden en que el kernel los encuentra, o, si los drivers se cargan cómo módulos, tal como están escritos en el fichero /etc/rc.d/rc.netdevice.

Configuración básica de red

Esta es la forma básica del comando ifconfig:

ifconfig interfaz dirección-IP [máscara] [broadcast]

Este comando únicamente puede ser usado por el root. Los parámetros de máscara de red y la dirección de broadcast son opcionales. Si se omiten, ifconfig tomará los valores de una clase C por defecto. Si se tiene pensado realizar subnetting, es totalmente necesario especificarlos. Lo que hace este comando es cargar el driver correcto y configurar los dispositivos de red.

Nota: El comando hará exactamente lo que se le diga, sin comprobar la dirección de broadcast correspondiente a la dirección IP y a la máscara proporcionada. ¡Hay que tener cuidado!
Nota: No hay suficiente con configurar el dispositivo, necesita decirle al kernel cómo se conecta el host a la red por medio del comando route add (ver más adelante).

Habilitando y deshabilitando el dispositivo de red

Un dispositivo de red puede ser desactivado temporalmente y recuperado sin necesidad de reconfigurarlo. Es útil para deshabilitar temporalmente la conexión de red de un servidor (cuando se reconfigura un servicio crítico por ejemplo). Esto se hace por medio de los siguientes comandos:

ifconfig “dispositivo” down
ifconfig “dispositivo” up

Comprovación del estado del dispositivo

Si se desea conocer el estado de los dispositivos de red, basta con escribir el comando ifconfig dispositivo, sin más parámetros. Si por otro lado se desea conocer el estado de todos los dispositivos de red de una vez, basta con escribir ifconfig -a. Estas versiones de ifconfig pueden ser usadas por cualquier usuario. Muestran información de configuración para un dispositivo, incluyendo su dirección IP, máscara de subred, dirección de broadcast, y dirección física (hardware), más conocida como dirección MAC. También muestra información del estado del dispositivo, tal como si está habilitado o no, si hay dirección de loopback, y otras estadísticas e información como la MTU (Maximum Transfer Unit), el tamaño más grande de paquete que puede ser mandado através de este dispositivo. También la dirección I/O, la IRQ, el número de paquetes recibidos, paquetes enviados y las colisiones.

A continuación se muestra el resultado del comando ifconfig -a. Este comando muestra todos los dispositivos activos en este momento con sus respectivos parámetros:

eth0      Link encap:Ethernet  HWaddr 00:06:5B:31:52:D1  
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:11 Base address:0xec80 
lo         Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:200 (200.0 b)  TX bytes:200 (200.0 b)

Alias de red

A veces es útil o necesario que un sólo dispositivo tenga múltiples direcciones IP. Por ejemplo, un servidor debe ejecutar diferentes servicios, pero se desea que los clientes accedan a cada servicio por una dirección IP distinta para hacer una migración de modo más sencillo en el futuro.

Linux, al igual que otros UNIX, proporciona una capacidad llamada network aliasing, cuya funcionalidad principal, es precisamente esa. Para hacer uso de esta habilidad puede ser necesario recompilar el kernel y habilitar la opción de “Aliasing support”, en el apartado de “Networking Options”, pudiendo incluso darle soporte como módulo en vez de dentro del propio kernel.

Cuando se ejecuta un kernel con la opción de aliasing habilitada, la creación de un alias es tan fácil como usar el comando ifconfig. Todo lo que se necesita es añadir dos puntos y el número de alias para esa tarjeta. Por ejemplo:

ifconfig eth0:0 202.100.23.2 netmask 255.255.255.0 broadcast 202.100.23.255

Este comando crea un alias en el dispositivo de red eth0, con los parámetros indicados. Si se desea que el alias se genere de modo automático en el momento del arranque del sistema, se puede añadir este mismo comando al fichero /etc/rc.d/rc.inet1.

Otras opciones de configuración de ifconfig

Existen otras muchas opciones de ifconfig para casos excepcionales:

  • 1)ifconfig dispositivo dirección local pointopoint dirección remota

Habilita un dispositivo ppp, o lo que es lo mismo, una conexión con un único host remoto, no a una red. El dispositivo debe estar habilitado en el host remoto.

  • 2)ifconfig dispositivo dirección local pointopoint dirección remota. Creará un tunel Ipv4 entre 2 redes IPv6. IPv4 es el estándar actual de TCP/IP para Internet, mientras IPv6 es la próxima generación de protocolo. Si existen dos redes IPv6 que precisen estar conectadas a través de Internet, debe crearse un tunel IPv4.

Enrrutamiento y pasarela

Recordemos que las redes se conectan entre ellas por medio de routers. Un router es un dispositivo con dos o más redes conectadas, y es el encargado de gestionar el tráfico entre ellas.

El comando /sbin/route se usa para gestionar la tabla de enrrutamiento del kernel para saber que debe hacerse con cada paquete que envía el host.

La forma más usual de invocar este comando es:

route [opciones] [comando [parámetros]]

Listado de la tabla de enrutamiento

Si invocamos el comando sin parámetros, devolverá la tabla de enrrutamiento. Ésta forma del comando puede ser invocada por cualquier usuario:

/sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
default         Ventafocs.Lmann 0.0.0.0         UG    1      0        0 eth0

La salida se compone de ocho columnas:

  • 1.La primera columna (Destination) indica la ruta de destino. Si existiera la entrada correspondiente en /etc/hosts o en /etc/networks, aparecerá el nombre. La etiqueta “default”, indica una ruta por defecto.
  • 2.La segunda columna (Gateway) indica la pasarela a través de la cual los paquetes son enviados a su destino. Un asterisco (*) significa que los paquetes son enviados directamente al host destino.
  • 3.La tercera columna (Genmask) indica la máscara de red que se aplica a esta ruta. La máscara de red se aplicará a la columna con el valor de la destinación.
  • 4.La cuarta columna (Flags) puede tener varios valores. Los atributos más comunes son:
    • U – La ruta está configurada.
    • H – El objetivo es un host. Significa que es una ruta estática hacia un host.
    • G – Usa un gateway. Significa que los paquetes no serán enviados directamente a el host destino, sino que en vez de esto se usará una pasarela para alcanzarlo.
  • 5.La quinta columna (Metric) indica la distancia hasta el objetivo. Es usado por algunos demonios de enrutado para calcular dinámicamente la mejor ruta.
  • 6.La sexta columna (Ref) no es usada por el kernel de Linux. En otros sistemas UNIX indica el número de “referencias” a esta ruta.
  • 7.La séptima columna (Use) es el número de veces que el kernel ha realizado un lookup de esta ruta.
  • 8.La octava columna (Iface) muestra el nombre del dispositivo a través del cual los paquetes dirigidos a esta ruta son enviados.

Siempre debe haber como mínimo una ruta activa, la ruta al localhost, la cual se configura en el script /etc/rc.d/rc.inet1. Debe haber del mismo modo una ruta por dispositivo de red, apuntando a la red a la cual el dispositivo esté conectado.

El modificador -n, modifica sensiblemente la respuesta del comando. No realiza lookups para hosts ni redes, mostrando en lugar direcciones numéricas.

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
0.0.0.0         192.168.1.254   0.0.0.0         UG    1      0        0 eth0

En este caso, la destinación por defecto y el * de la pasarela, son remplazados por la dirección 0.0.0.0. Este formato de salida es más usual que el formato de salida estándar porque no existe ambigüedad.

Imagen:32px-agt_update_critical.png Si al ejecutar el comando route, el sistema parece bloquearse, presinoa Crtl+C para detenerlo y prueba con route -n. Los lookups de nombre, especialmente si el DNS está configurado y el host no está conectado a la red, pueden provocar largas esperas.

Manipulación de la tabla de rutas

El comando route también suele usarse para añadir y eliminar rutas de la tabla de enrutado. Esto puede realizarse por medio de los siguientes comandos:

route add | del [-net | host] objetivo [gw pasarela] [netmask máscara de red] [[dev] dispositivo]

El comando add o del indican respectivamente añadir o emliniar una ruta.

Opcionalmente los parámetros -net o -host se pueden pasar para indicar que deseamos trabajar con una ruta de host o de red. Normalmente lo mejor es proporcionarlo, para eliminar la ambigüedad (por ejemplo cuando se realiza subneting).

El parámetro target es el nombre del host o de la red de la dirección IP de destino, o la palabra default, para configurar la ruta por defecto.

Opcionalmente el parámetro gateway indica la pasarela a usar para esta ruta. Si se omite, el comando route asumirá que el host o la red se conecta directamente a este host. Es importante añadir una ruta a la red local después de configurar un dispositivo con el comando ifconfig:

ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
route add -net 192.168.1.0

El parámetro opcional netmask, tal y como su nombre implica, configura la máscara para la ruta, la cual será aplicada a las direcciones de destino. Si se omite, la máscara de red se tomará de la máscara por defecto de la dirección IP, o (en el caso de rutas a redes locales), de la máscara de red del dispositivo.

El parámetro opcional dev, configura el dispositivo al cual se enviarán los paquetes dirigidos a esa dirección. Si se omite el comando route, se comprobará la tabla de enrutado actual para encontrar qué dispositivo tiene una ruta hacia la pasarela. Si no existiera pasarela, se comprobaría qué dispositivo puede ser usado para llegar directamente al objetivo.

Netstat – Comprobación del estado de la red

El comando netstat muestra el estado de todos los servicios de red TCP/IP. Dispone de varias opciones que podemos utilizar para mostrar una información determinada.

Netstat por si mismo dá una lista de todos los sockets conectados. La opción -a (all), lista todos los sockets que se encuentran a la escucha, no sólo los que tienen conexiones establecidas. La información para cada socket incluye:

  • El protocolo (tcp o udp)
  • Número de bytes que se encuentran actualmente en la cola de envío y en la de recepción (bytes que los procesos locales aún no han leído o de los cuales los procesos remotos no tienen conocimiento)
  • Direcciones del host local y remoto. Las direcciones de los host se muestran como “*.*” para los sockets que están en estado de escucha (LISTEN).
  • Estado del socket. Su estado puede clasificarse en ESTABLISHED, SYN_SENT, SYN_RECV, FIN_WAIT1, FIN_WAIT2, TIME_WAIT, CLOSED, CLOSED_WAIT, LAST_ACK, LISTEN, CLOSING o UNKNOWN. En general, el estado de SYN indica que una conexión está en proceso de ser abierta, mientras que el estado de WAIT indica que el socket está en proceso de estar cerrándose. ESTABLISHED indica que el socket está conectado, LISTEN indica que un demonio se halla a la escucha, esperando por conexiones entrantes de los clientes, y CLOSED indica que el socket está sin usar.

La opción -e, añadirá a toda esta información, el usuario que está usando actualmente el socket.

netstat -r (routes) muestra la tabla de enrutado. Se muestra la misma información que con el comando route sin parámetros.

netstat -i (interfaces) muestra una lista de los dispositivos de red y las estadísticas en cada dispositivo. Muestra las mismas estadísticas que usando el comando ifconfig sin argumentos, pero con la información mejor tabulada.

Del mismo modo que el comando route, se puede añadir la opción -n para ver las direcciones IP en formato numérico en lugar del nombre de los hosts.

Demonios de red

Un demonio es un programa que espera a otro programa para hacerle alguna petición. En Linux, del mismo modo que en la mayoría de variantes de UNIX, los servicios de red pueden ofrecerse en dos modos: standalone o servicios basados en inetd.

Demonios TCP/IP en modo standalone

Originalmente todos los servidores de red UNIX eran demonios standalone. Cuando uno deseaba arrancar un servicio, arrancaba un programa que creaba un socket y escuchaba en él. Muchos servicios UNIX se ejecutaban de este modo actualmente. Por ejemplo squid, un proxy/caché Web, Samba, un servidor de ficheros SMB, Apache, el servidor Web, y muchos otros.

Como suelen estar compuestos de muchas funciones, la mayoría de los demonios de red comparten unas cuantas características:

  • Sus nombres terminan con “d” (de demonio).
  • Responden a la señal de HUP (enviada con el comando kill -HUP) releyendo sus ficheros de configuración.
  • Normalmente se arrancan en el proceso de inicio por medio de los scripts en el directorio /etc/rc.d.
  • Cuando reciben una petición, crean otra copia de ellos mismos para servirla. Es por esta razón que pueden haber varias copias de un demonio ejecutándose simultáneamente.

Inetd, el “Super Servidor de Internet”

En el modelo standalone, cada servicio que se ejecuta en un servidor tiene un demonio correspondiente. Esto presenta varios problemas:

  • Si se tienen muchos servicios ejecutándose en un servidor, se necesita tener también muchos demonios ejecutándose, incluso cuando están a la espera. De este modo esos demonios inactivos pueden estar ocupando recursos en el servidor, tales como memoria o entradas en la tabla de procesos.
  • No hay un modo centralizado de modificar los demonios para proporcionar servicios como encriptación o control de acceso. Cada programa-demonio debe ser modificado para proporcionar estos servicios.
  • Si un demonio se muere por un error del usuario o del propio programa, el servicio se suspenderá hasta que sea restablecido. El proceso de rearranque puede ser automatizado, pero entonces dependemos de que éste no se muera también.
  • Programar un demonio de red no es sencillo, especialmente por la naturaleza multihilo de los mismos, encargado de gestionar las múltiples peticiones que puede recibir.

Pero alguien encontró una solución. ¿ Podría un demonio individual estar configurado para escuchar en varios puertos a la vez, y transferir el control a otros programas cuando sea necesario? Este demonio podría encargarse de la gestión multihilo y la gestión de los sockets. Así nació inetd, también llamado “Super Servidor de Internet”.

inetd es un demonio que se arranca cuando el sistema se inicia. Lee la configuración de un fichero, el /etc/inetd.conf, que indica que socket está a la escucha y que programa debe iniciar cuando recibe una conexión en cada uno de ellos. Él se encarga de crear y mantener el socket, escuchando hasta que la conexión se ha realizado, creando un nuevo proceso para mantener la conexión, y pasarle a otro proceso cosas como la entrada y la salida estándar.

De hecho, inetd presenta un inconveniente. El tiempo necesario para iniciar los servicios puede considerarse largo. Esto se debe a que en la configuración standalone, el servicio está siempre activo y ejecutándose. Por su parte, inetd debe arrancar y cargar cada proceso cada vez que recibe una petición. Algunos servicios, como es el caso del servidor web Apache, pueden iniciarse en cualquiera de los dos modos. Para servidores con una baja carga, donde el servicio Web sólo es accesado esporádicamente, inetd es una excelente opción. De todos modos los servidores con un alto tráfico, la mejor opción es usar una configuración standalone.

Configuración de inetd

Tal y como se ha comentado anteriormente, inetd se configura a través del fichero /etc/inetd.conf. Cada línea de este fichero tiene el siguiente formato:

service socket-type protocol wait/nowait/[.max] user[.group] server-program program-arguments

service es el nombre del servicio tal y como está definido en el fichero /etc/services. De él, inetd selecciona el número de puerto. Debe ser un nombre “oficial”, no vale usar alias.

El tipo de socket, socket-type, suele ser por lo general stream o dgram, dependiendo si es una aplicación orientada a flujo o a datagrama.

El campo protocol es el protocolo válido tomando como referencia el fichero /etc/protocols. Por lo general es tcp o udp.

La entrada wait/nowait[.max] se aplica sólo a los servicios de datagrama. El resto de servicios debe tener un nowait en sus entradas. Hay dos tipos de servidores de datagramas. Uno de ellos, el multihilo, recibe la conexión conectándose entonces y liberando el socket para que inetd pueda seguir recibiendo peticiones. El otro tipo, el de hilo simple, empieza sólo un hilo donde recibe todos los paquetes secuencialmente hasta que termina o finaliza por “time-out”. Para los servidores multihilo se debe usar la opción nowait, y para los de hilo simple wait. Opcionalmente el campo max, separado de wait/nowait por un espacio, especifica el número máximo de procesos que pueden ser creados (en el caso de un servidors nowait) en 60 segundos.

user[.group] especifica el nombre de usuario y, opcionalmente, el nombre de grupo con el, que el servidor se ejecuta. server-program es la ruta completa del ejecutable. Algunos servicios (como por ejemplo echo, chargen, discard, daytime y time) pueden gestionarse directamente con inetd.

program-arguments es la lista de argumentos del programa servidor, si los tiene.

Tomemos el ejemplo siguiente:

telnet stream tcp nowait root /usr/sbin/in.telnetd telnetd

Esta línea significa que inetd debe escuchar por el puerto 23/tcp, el puerto asignado al servicio telnet en el fichero /etc/services. Es un servicio orientado a conexión. Cuando una conexión se establece en ese puerto, debe ejecutarse el programa /usr/sbin/in.telnetd con el parámetro telnetd.

Además de facilidades en la programación, el bajo consumo de memoria y el uso de una tabla de procesos en el host, la mayor ventaja del uso de inetd es la seguridad. Todas las conexiones atraviesan un punto centralizado, siendo además un modo estandarizado de que los demonios sean arrancados, así como el uso de programas adicionales para añadir seguridad usando métodos como el “building blocks”. Otro programa como este incluido en Slackware es tcpd, parte del paquete tcpwrappers. De un modo aproximativo diremos que tcpd se ejecuta desde inetd en vez de un servicio estándar, y proporciona control de acceso al host a cualquier servicio basado en inetd mediante unas sencillas reglas codificadas en el fichero /etc/hosts.allow y /etc/hosts.deny.

Herramientas de diagnóstico TCP/IP

Después de haber configurado correctamente una red, raramente aparecen problemas. De todos modos los equipos de red pueden fallar, las lineas se pueden caer y los cables se pueden desconectar.

En Linux hay tres herramientas básicas de diagnóstico de problemas. Dos de ellas (ping y traceroute) son relativas a la capacidad de poder llegar al host de destino, y una tercera (tcpdump) es útil para analizar el flujo de tráfico en una red.

ping

Es el programa más usado para resolver problemas. Esta herramienta envia paquetes a otro host esperando que le conteste usando el protocolo ICMP (Internet Control Message Protocol), un protocolo que se ejecuta sobre IP, diseñado para notificar mensages de control , así como información relativa al enrutado.

El modo más común de usar ping es pasarle el nombre de un host o una dirección IP:

PING www.Lmann.net (192.168.1.100): 56 octets data
64 octets from 192.168.1.100: icmp_seq=0 ttl=64 time=0.0 ms
64 octets from 192.168.1.100: icmp_seq=1 ttl=64 time=0.0 ms
64 octets from 192.168.1.100: icmp_seq=2 ttl=64 time=0.0 ms

--- www.Lmann.net ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

En las estadísticas se muestra el número de paquetes enviados y recibidos, así como el tiempo mínimo, medio y máximo, el cual se puede usar para detectar situaciones de congestión.

ping tiene muchas opciones. Las más comunes son las siguientes:

Opciones de ping
Opción Función
-c Enviará sólo el número de paquetes indicado.
-n ping mostrará direcciones numéricas en vez de nombres de host. Es útil cuando no se puede acceder al servidor DNS, o cuando la respuesta a las peticiones es demasiado larga.
-r Record route. Envía una opción en cada paquete que pide a los host que se van atravesando para que almacenen su dirección IP en el paquete. De ese modo puede verse por que hosts va pasando el paquete. De todos modos el tamaño del paquete está limitado a nueve hosts. De todos modos algunos sistemas están configurados para descartar los paquetes marcados con esta opción, es por ello que se recomienda usar traceroute para este cometido.
-q Salida silenciosa, sólo muestra las estadísticas.
-v Verbose. Muestra toda la información para los paquetes recibidos, no sólo las respuestas a los pings.


Cuando se resuelven problemas de red, normalmente lo primero que se hace es realizar un ping. Con esto se verifica que el dispositivo de red está configurado de manera correcta. Después de esto puede intentarse hacer ping a la pasarela por defecto, y finalmente al host al que se pretende tener acceso. De este modo se puede aislar el problema fácilmente.

Imagen:32px-agt_update_critical.png Todos los paquetes TCP/IP tienen un campo llamado Time-To-Live, o TTL. Este campo se decrementa en una unidad por cada router que se atraviesa. En el momento en que se llega a cero, el paquete se descarta. De este modo ping usa un valor de TTL por defecto igual a 255 (el valor máximo), y muchos otros programas tales como telnet y ftp usan TTL más pequeños (normalmente entre 30 y 60). Esto significa que puede ser capaz de hacer ping a un host, pero no telnet o ftp. Puede usarse la opción -t ttl para configurar ping a un TTL determinado.

traceroute

Este programa envía paquetes UDP con un TTL que se va incrementando progresivamente, y detecta las respuestas ICMP enviadas por las pasarelas cuando descartan los paquetes. Al final crea un mapa con los paquetes recibidos en todo el camino hasta el host de destino.

El modo en que traceroute trabaja, es enviando un paquete con un TTL de 1. El paquete se envía hasta la pasarela, la cual puede ser el host destino o no. Si la pasarela es el host destino enviará un paquete de respuesta, sino decrementará el campo TTL. Como el TTL es cero, descartará el paquete y enviará un paquete de respuesta indicándolo. A medida que esto sucede, traceroute detecta el paquete de respuesta. Si se ha alcanzado el host de destino, su trabajo acaba aquí, sino incrementa el campo de TTL en 1 y envía un nuevo paquete. Esta vez la pasarela decrementa el TTL (a 1), y envía fuera el nuevo paquete. Esto se hará hasta que se alcance el valor máximo de TTL (30 por defecto, aunque se puede cambiar por medio de la orden -m max_ttl)

traceroute envía tres paquetes con cada TTL, y notifica del tiempo medio de cada paquete. Esto es útil para detectar cuellos de botella en la red.

traceroute normalmente se usa del mismo modo que ping, dándole una dirección IP de destino o un nombre de host. En el siguiente ejemplo se lista la salida de traceroute.

1  Ventafocs (192.168.1.254)  2.822 ms  2.004 ms  2.066 ms
2 BAR2-X50.red.retevision.es (62.81.109.168)  202.151 ms  120.392 ms  119.851 ms
3 BAR2-R13.red.retevision.es (62.81.109.155)  120.011 ms BAR2-R11.red.retevision.es (62.81.109.156)  130.308 ms BAR2-R13.red.retevision.es (62.81.109.155)  140.044 ms
4 BAR2-R15.red.retevision.es (62.81.108.198)  130.229 ms BAR2-R15.red.retevision.es (62.81.108.135)  130.167 ms BAR2-R15.red.retevision.es (62.81.108.198)  110.127 ms
5  62.81.25.6 (62.81.25.6)  120.185 ms  109.957 ms  129.808 ms
6  BARC-R00.red.retevision.es (62.81.25.65)  110.039 ms  128.713 ms  120.085 ms
7  mil5-retevision-9-es.seabone.net (195.22.196.69)  130.304 ms  129.144 ms  139.657 ms
8  ge9-1-mil8-milb.mil.seabone.net (195.22.208.23)  150.320 ms  138.680 ms  139.730 ms
9  sl-gw10-mil-5-1.sprintlink.net (217.147.129.185)  140.475 ms  148.071 ms  139.933 ms
10  sl-bb21-mil-8-0.sprintlink.net (217.147.128.42)  149.893 ms  138.858 ms  149.745 ms
11  sl-bb20-fra-11-0.sprintlink.net (213.206.129.77)  150.429 ms  147.829 ms  149.654 ms
12  212.162.44.89 (212.162.44.89)  239.871 ms  238.451 ms  239.846 ms
13  ae0-17.mp1.Frankfurt1.Level3.net (195.122.136.97)  240.128 ms  237.976 ms  239.915 ms
14  so-0-0-0.mp1.London2.Level3.net (212.187.128.61)  239.993 ms  237.668 ms  240.094 ms
15  unknown.Level3.net (212.187.128.138)  239.890 ms  237.507 ms  239.896 ms
16  so-0-0-0.mp1.SanJose1.level3.net (64.159.1.133)  319.963 ms  327.406 ms  329.575 ms
17  gige9-2.ipcolo3.SanJose1.Level3.net (64.159.2.137)  319.742 ms  326.743 ms  319.932 ms
18  unknown.Level3.net (64.152.69.30)  319.810 ms  386.554 ms  319.848 ms
19  w20.www.scd.yahoo.com (66.218.70.51)  330.106 ms  326.927 ms  319.972 ms

traceroute puede ser una herramienta muy útil si se sabe interpretar correctamente la información que proporciona. Mirando más a fondo el ejemplo anterior, se pueden ver unas cuantas cosas:

  • www.yahoo.com es un alias para w20.www.scd.yahoo.com, traceroute siempre realiza un lookup DNS y devuelve el nombre del host que está trazando.
  • W20.www.scd.yahoo.com está conectado a Internet através de un ISP llamado Level3.
  • La conexión desde la que se ha realizado el traceroute pertenece a la red de retevision.

Como se ha podido ver traceroute es una herramienta muy valiosa, habiendo mucha otra información disponible, para ello se recomienda leer la página man del comando.

tcpdump

tcpdump es otra valiosa herramienta para depurar algunos problemas relacionados con la red Básicamente trabaja como un sniffer de paquetes. Esto significa que escucha la red, mirando cualquier paquete que recibe (esté destinado para este host o no), y lo tramita. Puede guardar todo o sólo algunas partes interesantes del tráfico que inspecciona, convirtiéndose en una herramienta de análisis de información un tanto rudimentaria.

tcpdump funciona poniendo la tarjeta de red en lo que se conoce como modo promiscuo. Normalmente una tarjeta de red sólo puede ver los paquetes que son enviados específicamente para ella, pero en el modo promiscuo los puede ver todos. El sistema operativo pasa los paquetes a tcpdump, el cual los filtra y los saca por pantalla o los almacena. Debido a que tcpdump modifica los valores de la tarjeta de red, sólo puede ser ejecutado por el root.

Imagen:32px-agt_update_critical.pngtcpdump es un problema de seguridad potencial. Es por ello que se puede clasificar como un sniffer. Si los usuarios emplean programas como telnet, los cuales envían las contraseñas en texto plano, un cracker puede usar el sniffer para descubrirlas. Es por esta razón que tcpdump no debe nunca instalarse con setuid de root. Para detectar si una tarjeta se encuentra en modo promiscuo, se usa el comando ifconfig para mostrar la configuración del dispositivo. El identificador de PROMISC aparecerá si la tarjeta se halla en modo promiscuo:

eth0      Link encap:Ethernet  HWaddr 00:06:5B:31:52:D1  
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:2051 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2109 errors:0 dropped:0 overruns:0 carrier:0
          collisions:34 txqueuelen:100 
          RX bytes:1414693 (1.3 Mb)  TX bytes:328208 (320.5 Kb)
          Interrupt:11 Base address:0xec80 

Si ejecuta tcpdump sin argumentos obtendrá una lista de todos los paquetes que pasan a través de la red. Para detenerlo simplemente debe presionarse <Crtl+C>

Algunas veces no se desean ver todos los paquetes, sino sólo el tráfico entre dos hosts, o aquel tráfico que usa un servicio determinado. tcpdump toma como parámetros una expresión de filtro que seleccionará sólo ciertos paquetes.

Las expresiones de filtrado de tcpdump consisten en una o más primitivas unidas por palabras como and, or y not.

Parametros de tcpdump
Calificador coincide con...
src host La dirección IP del host desde donde el paquete llega.
dst host La dirección IP del host al cual va el paquete.
host La dirección IP del origen o host destino.
src port El puerto desde el que llega el paquete.
dst port El puerto al cual el paquete se dirige.
port El origen o puerto destino.
tcp, udp o icmp Define el protocolo del paquete.

Tcpdump también tiene algunos modificadores, los más comunes se muestran en la siguiente tabla:

Parametros de tcpdump (II)
Calificador coincide con...
-c count Sale después de recibir cierta cantidad de paquetes
-i interface Escucha en un dispositivo de red determinado. Por defecto, tcpdump escucha en el primer dispositivo de red encontrado después de loopback.
-n No convierte las direcciones numéricas y números de puerto a nombres de host y servicios.
-N Muestra sólo el nombre del host no todo el dominio.
-r file Lee los paquetes de un fichero determinado, el cual debe haber sido creado con el modificador -w.
-s snaplen Guarda los bytes de snaplen de cada paquete. Por defecto es 68, lo cual es suficiente para paquetes IP, ICMP, TCP y UDP. De todos modos para ciertos protocolos (como DNS o NFS), un snaplen de 68 truncará la información.
-v Modo de depuración. Muestra algo más de información para cada paquete.
-vv Modo de depuración máximo. Muestra montones de información sobre cada paquete.
-w file Captura los paquetes en un fichero.
-x Muestra cada paquete en hexadecimal.

Ipv6: La nueva generación

Ipv6 es una abreviatura para el “Internet Protocol Versión 6”. Ipv6 es la próxima generación de protocolo IP desarrollado por la IETF, el cual remplazará a la versión actual, Ipv4. Todas las secciones anteriores se han concentrado en el Ipv4, el protocolo que se usa actualmente en Internet. Ipv4 tiene ya más de 25 años y ya empieza a plantear algunos problemas. El más serio de todos ellos es el corto espacio de direcciones que presenta.

Ipv6 soluciona numerosos problemas de Ipv4, proporcionando más direcciones, mejorando el enrutamiento, el tráfico sensible al tiempo (VoIP y video), seguridad en la capa de red y la configuración de la red. Se espera que gradualmente vaya sustituyendo a Ipv4. Ambos coexistirán un número de años durante un largo periodo de transición.

Herramientas personales