1 Programas de Administración de red Introducción El propósito de las siguientes prácticas es el de familiarizar al alumno con los distintos programas que se utilizan para chequear y comprobar el estado de nuestras conexiones de red. El conocimiento y uso de estas utilidades es importante a la hora de administrar la red y serán de gran ayuda en la realización de posteriores prácticas. En estas prácticas se supone que el alumno puede acceder un computador con el sistema operativo Linux instalado y que dispone de una cuenta de usuario en él. Hay que entregar una memoria detallando las salidas de los comandos y su significado. Para algunas prácticas se deberán haber completado algunos contenidos teóricos. En cualquier caso, guardar los resultados obtenidos, argumentándolos cuando se tenga la suficiente información teórica. Cada uno de los comandos a utilizar tiene asociado un manual donde se explica su funcionamiento y al que se puede acceder mediante el comando man. Por ejemplo a la página de ayuda del comando hostname se accede mediante la ejecución de $>man hostname. 1. Ejercicios 1.1. Determinar los interfaces de red disponibles con sus direcciones MAC e IP: Los computadores del laboratorio están conectados mediante una red de área local basada en el protocolo de enlace Ethernet. Existe un procesador en la NIC (Network Interface Card) de cada computador llamado controlador de Ethernet que recibe todos los marcos (frames) enviados por el cable. Como sabemos, cada controlador Ethernet se identifica mediante una dirección física de 48 bits denominada dirección MAC (Media Access Control). Las direcciones MAC se utilizan para determinar la fuente y el destino de un marco, pudiéndose conocer de esta forma si el marco recibido es o no para nuestro computador. El protocolo de red IP se usa para conectar distintas redes Ethernet y/o redes locales de diferente tipo. Los datos a enviar se encapsulan en un datagrama IP, que se procesa en capa de enlace para crear un marco, en nuestro caso un marco Ethernet. Cada interfaz de red de un host tiene una dirección IP de 32 bits y los datagramas de usuario contienen las direcciones IP fuente y destino que permiten establecer la ruta para alcanzar el destino. 1. Ejecutar el comando $>/sbin/ifconfig para determinar las interfaces de red de que dispone nuestro equipo, describiendo su configuración. Como se puede observar en la página man de ifconfig, este comando puede usarse para configurar los dispositivos de red, pero hacen falta los permisos del superusuario o root. Por ejemplo para asignar la dirección 192.168.1.2 con máscara 255.255.255.0 se usaría el comando: $>/sbin/ifconfig eth0 192.168.1.2 netmask 255.255.255.0 1.2. Obtener información de la arquitectura, nombre y Sistema Operativo de la máquina: El comando uname da información del sistema actual. 1. Ejecutar el comando $>uname -a describiendo la información que aporta. Las direcciones IP son difíciles de recordar. Por lo tanto se usan nombres para identificar cada dirección IP y viceversa.
2 2. Utilizar el comando $>hostname para determinar el nombre de la máquina en la que nos encontramos. 3. Usar el comando $>ping <nombre de host> para determinar a partir de un nombre de host, su dirección IP. Usar como <nombre de host> la salida del comando hostname Determinar la dirección IP de la máquina alboran.ual.es. El nombre especial localhost determina la dirección IP del loopback, que ya se obtuvo con el comando ifconfig. Como sabemos la interfaz lo tiene una dirección especial usada para que los procesos que necesitan comunicarse entre sí, usando primitivas de red, puedan hacerlo fácilmente cuando el origen y destino es la misma máquina. También puede usarse para chequear los servicios de red que se ofrecen. El nombre asociado al loopback es localhost. 4. Chequear la dirección IP del loopback con el comando $>ping localhost 1.3. ICMP (Internet Control Message Protocol): Un datagrama IP puede encontrar varios tipos de errores en el camino hacia su destino. Algún router o máquina receptora puede causar o detectar el error. En algunos casos nos gustaría informar al emisor del error. Algunos de los tipos de error son: destino inalcanzable, tiempo excedido, problemas de parámetros, redirección, etc. Estos mensajes de error son enviados usando un protocolo llamado ICMP. Los mensajes ICMP se encapsulan en datagramas IP y a menudo contienen la cabecera del datagrama erróneo como carga. El fichero /etc/protocols enumera los códigos de los protocolos que se encapsulan bajo IP. 1. Editar el fichero /etc/protocols para determinar el código asignado a los mensajes ICMP encapsulados en IP. 2. Listar los códigos de los protocolos encapsulados en IP que se ven en teoría. Se puede usar ICMP para diagnosticar y chequear la red. Para ello se usarán los mensajes ICMP echo request (petición de eco) y echo replay (respuesta de eco). El envío de un datagrama del primer tipo causa un respuesta del datagrama del segundo tipo. Si se envía un datagrama echo-request ICMP que almacene el tiempo en que se envío, se puede usar el tiempo de llegada del datagrama echo-replay ICMP para determinar el RTT (Round Trip Time) o tiempo de ida y de vuelta que tarda en realizarse una petición a un servidor. El comando ping usa este tipo de mensajes ICMP para calcular el RTT. 3. Usar el comando ping para calcular el RTT con nuestra propia máquina y con el servidor alboran.ual.es. 4. Que ocurre si se realiza un ping a la dirección de broadcast de nuestra red (xxx.xxx.xxx.255)?. Véase la página man de ping para determinar los parámetros necesarios. Otro comando que se usa normalmente es traceroute, el cual trata de encontrar el camino que sigue un datagrama para alcanzar el destino. El comando traceroute manda un datagrama que intencionadamente tiene un valor bajo en el campo TTL (Time To Live). Este campo determina el número máximo de nodos por los que puede pasar el datagrama antes de ser descartado. Cada vez que el datagrama pasa por un nodo se decrementa el valor del TTL. Cuando un router detecta que el campo TTL está a cero manda un mensaje ICMP al emisor indicando el error TTL-excedido. El comando traceroute puede así determinar la dirección IP de ese router. Siguiendo esta estrategia traceroute manda un nuevo datagrama con un valor de TTL+1 para alcanzar al siguiente router, hasta llegar a la máquina de destino o se exceda el límite máximo para el campo TTL. El comando traceroute da tres estimaciones del RTT. Un * indica que el nodo no ha podido alcanzarse dentro del tiempo de espera. 5. Usar el comando $>/usr/sbin/traceroute para ver el camino a la máquina más cercana a nosotros dentro del laboratorio. 6. Usar el comando $>/usr/sbin/traceroute para ver el camino a una máquina en Estados Unidos, por ejemplo, www.google.com En que routers se realiza el salto del Océano Atlántico?. Cuanto se tarda en dar ese salto?. 7. Usar el comando ping a www.google.com con la opción -t para que el el último router antes de dar el salto del océano nos devuelva un mensaje ICMP de error indicando ttl-excedido.
3 1.4. ARP (Address Resolution Protocol): Cuando un computador ha preparado un datagrama IP para ser enviado por el interfaz Ethernet, aparece el problema de saber cual es la dirección Ethernet de la siguiente máquina que debe recibir el datagrama. Como se puede especificar la dirección Ethernet del siguiente nodo si sólo sabemos la dirección IP del receptor?. Para ello se usa ARP. Antes de que un datagrama IP pueda ser enviado, el emisor debe enviar una petición ARP broadcast. Esta petición realiza la pregunta Quien maneja la dirección IP x.y.z.w?. Esta petición se envía repetidamente hasta que alguna máquina responda a la petición diciendo básicamente La dirección Ethernet para enviar datagramas IP a la dirección x.y.z.w es xx:xx:xx:xx:xx:xx. La respuesta ARP no tiene porque venir de la máquina destino, también puede ser enviada por un router. El datagrama IP puede ser enviado una vez recibida la respuesta ARP. La información sobre la dirección Ethernet a usar para una determinada dirección IP se almacena en una tabla local, de forma que el emisor no tenga que repetir las mismas peticiones ARP en un futuro próximo. Normalmente las entradas de la tabla se borran después de entre 5 y 20 minutos. Las peticiones ARP se encapsulan directamente en un frame Ethernet. Un router solo encamina paquetes de red, por lo tanto los frames que contienen las peticiones ARP no se reenvían por los routers. 1. Arrancar el ordenador en Linux y sin realizar ninguna conexión por la red ejecutar el comando $>/sbin/arp -a para chequear que la tabla está vacía. 2. Realizar un ping a la máquina del laboratorio más cercana que esté encendida. Cual es su dirección Ethernet?. 3. Realizar un ping a una máquina fuera del laboratorio, por ejemplo alboran.ual.es. Ver la la tabla arp con $>/sbin/arp -a. Puede observarse que no aparece una entrada para alboran.ual.es. Qué entrada aparece en su lugar y porqué?. 1.5. Enrutado IP: Una máquina de usuario conectada a Internet debería tener una estrategia de encaminamiento fácil. Los datagramas para las máquinas que se encuentran en la misma red se envían directamente, todas las demás se envían al router por defecto. Si este router está conectado a más routers, su tabla de encaminamiento deberá ser más complicada. El comando netstat nos da información sobre las conexiones de red establecidas, tablas de encaminamiento, estadísticas de los interfaces, etc. 1. Describir la información de la tabla de encaminamiento de nuestro computador, obtenida mediante el comando $>netstat -r. Añadir la opción -n para ver las IPs de las máquinas en vez de sus nombres. El laboratorio de arquitectura dispone de 30 computadores divididos en tres grupos de 10 computadores conectados mediante conmutadores (switches) a un router, tal como se muestra en la figura. Router switch 4 2. Determinar la posible tabla de encaminamiento del router al que está conectado al laboratorio a a partir de la información obtenida anteriormente mediante el comando traceroute.
4 1.6. Protocolos TCP, UDP, puertos, procesos clientes y procesos servidores: El direccionamiento en el conjunto de protocolos TCP/IP se realiza mediante una dirección Física a nivel de enlace, una dirección IP a nivel de red y un número de puerto a nivel de transporte. En el nivel de transporte existen dos protocolos TCP y UDP que son los que realizan la comunicación entre procesos de las máquinas finales. TCP es un protocolo orientado a conexión que realiza un control de flujo y de errores, así como la fragmentación y reensamblado de datos, presentando un servicio de flujo seguro a la capa de aplicación. UDP es un protocolo no orientado a conexión donde la aplicación debe encargarse del control de flujo y de errores, así como de la fragmentación y reensamblado de los datos. UDP es de utilidad cuando, por ejemplo, una máquina quiere comunicarse con varias, sin el coste relativo al establecimiento de conexión. UDP simplemente hace que los paquetes IP lleguen a las aplicaciones correspondientes. En el paradigma cliente servidor, las aplicaciones servidores esperan posibles conexiones de los clientes en puertos específicos (por debajo del 1024), mientras que las aplicaciones cliente utilizan para conectarse al servidor un puerto que esté libre por encima del 1024. El fichero /etc/services lista todos los servicios que reconoce el sistema operativo Linux que estemos usando. 1. Determinar en que puerto y bajo que protocolo de transporte dan servicio los siguientes protocolos de aplicación: FTP, Telnet, HTTP, DNS, SMTP y Echo. 2. El servidor de X Window System (x11) es uno de los casos especiales que tiene asignado un puerto por encima del 1024. Que puerto usa el servidor?. Hasta ahora hemos visto procesos que se comunican mediante un puerto. Este tipo de procesos usan el dominio de Internet para comunicarse (PF INET, Protocol Family Internet IPv4). Existen procesos que, en vez de un puerto, usan para comunicarse un fichero (de tipo especial) y por lo tanto las comunicaciones no abandonan la máquina actual. Estos procesos usan el dominio UNIX (PF UNIX, Protocol Family Local). Como se ha comentado previamente, procesos que usen el dominio de Internet también pueden comunicarse de forma local usando el interfaz loopback. Para obtener información sobre las comunicaciones que se están realizando o los servicios que se están ofreciendo puede usarse el comando netstat. 3. Usar el comando $>netstat -a less para listar todos puertos y ficheros en los que se espera o se está realizando una comunicación. 4. Usar $>netstat -a -A inet less para ver solo el dominio PF INET. 5. Usar $>netstat -a -A unix less para ver solo el dominio PF UNIX. La opción -p muestra el identificador de proceso y el nombre del programa que interviene en la comunicación, pero sólo para los que pertenecen al usuario actual. La opción -n usa valores numéricos en vez de determinar los nombres de hosts y los nombres simbólicos de los puertos. Si no se usa la opción -a sólo se muestran las conexiones establecidas. 6. Conectarse a la pagina web de la Universidad de Almería (www.ual.es). Obtener la salida del comando $>netstat -p -n -A inet. Existen ocasiones en que tenemos un programa de comunicaciones que se queda colgado y debemos hacer que termine. Primero debemos saber su identificador de proceso. Esto se puede hacer con netstat como vimos anteriormente o con el comando ps que muestra el estado de todos los procesos del sistema, sean de comunicaciones o no. 7. Ejecutar el comando $>ps -ax para mostrar todos los procesos del sistema. 8. Ejecutar el comando $>ps -aux para determinar los usuarios propietarios de los procesos anteriores. 9. Usar el comando grep para filtrar la salida. La ejecución de $>ps -ax grep bash mostrará todos los shells del tipo bash que se estén ejecutando. Para eliminar un proceso se usa el comando kill <id de proceso>. Este comando simplemente indica al proceso que termine. Si estamos en XWindow, el comando anterior es equivalente ha seleccionar las opciones File Quit o File Exit en la ventana del programa a terminar. Cuando un programa se cuelga, normalmente el programa no responde al comando kill por lo que hay que usar la opción -9 para forzar su terminación. El comando kill sólo se usa cuando no existe otra opción. 10. Si no tenemos ejecutándose un navegador web, por ejemplo netscape, ejecutarlo. 11. Determinar su número de proceso ( <id de netscape> ). 12. Supongamos que se ha colgado. Ejecutar el comando $>kill -9 <id de netscape>.
5 1.7. Resolución de nombres: En ejercicios anteriores se ha usado el comando hostname para determinar nuestro nombre de host. También se ha usado el comando ping para determinar la dirección IP a partir de un nombre de host. Realmente ping no resuelve la relación nombre-ip. Si nuestra red es pequeña, se puede tener un fichero que resuelva dicha relación. en Linux este fichero es el /etc/hosts. 1. Editar el fichero /etc/host localizando la entrada del loopback y la de nuestra máquina. Debido a que sería imposible mantener de forma actualizada un fichero con todas la relaciones nombre -IP de los hosts en Internet, se usa el protocolo de aplicación DNS (Domain Name System). En el fichero /etc/resolv.conf se determina cual es nuestro servidor de nombres. El fichero /etc/host.conf determina el orden de búsqueda cuando se necesite una resolución de IP o de nombre, es decir, si be busca primero en /etc/hosts o si se usa primero DNS. DNS es una base de datos jerárquica donde la autoridad fluye de arriba hacia abajo. Cada rama del árbol está dentro de una zona de autoridad, pudiendo haber varias ramas dentro de la misma zona. El software (normalmente bind) que almacena información sobre el dominio de nombres se denomina servidor del dominio de nombres o más comúnmente servidor de nombres. Todas las zonas tienen un servidor de nombres que dan respuestas autorizadas sobre sus zonas. Si se pregunta un nombre a un servidor no autorizado para esa zona (dependiente del nombre a resolver) normalmente responderá con la información correcta. Esto es debido a que la información de zona se propaga por Internet y los servidores de nombres mantienen una cache de zonas de las que no son autoridades. 2. Determinar cual es nuestro servidor de nombres. 3. Determinar el orden de búsqueda para la resolución de nombres de nuestra máquina. El fichero de base de datos con los registros de zona divide la información en tres tipos primarios de registros: NS (Name server), MX (Mail exchange) y A (Address). Los registros NS indican los servidores de nombres. Los registros MX indican cuales son las máquinas que manejan el envío de correo, Los registros A casan nombres de máquinas con direcciones IP. Existen varios comandos, como host, nslookup o dig para examinar la información DNS. 4. Ejecutar el comando host con el nombre de nuestra máquina para ver si está dada de alta en el servidor de nombres. 5. Ejecutar el comando $>host alboran.ual.es para obtener su IP. 6. Determinar mediante el comando host a quien pertenece la dirección 150.214.156.2 7. Obtener información adicional de alboran.ual.es mediante el comando $>host -v alboran.ual.es 8. Determinar cual es la máquina que intercambia el correo de alboran.ual.es mediante el comando $>host -t MX alboran.ual.es