109.3 Lección 2
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
109 Fundamentos de redes |
Objetivo: |
109.3 Resolución de problemas básicos de red |
Lección: |
2 de 2 |
Introducción
Los sistemas operativos basados en Linux tienen una variedad de herramientas para solucionar problemas de red. Esta lección va a cubrir algunas de las más comunes. En este punto debería tener un conocimiento de los modelos OSI u otros modelos de red, el direccionamiento IPv4 o IPv6, y los fundamentos del enrutamiento y la conmutación.
La mejor manera de probar una conexión de red es intentar utilizar su aplicación. Cuando eso no funciona, hay muchas herramientas disponibles para ayudar a diagnosticar el problema.
Probar las conexiones con ping
Los comandos ping
y ping6
pueden utilizarse para enviar una solicitud de eco ICMP a una dirección IPv4 o IPv6, respectivamente. Una petición de eco ICMP envía una pequeña cantidad de datos a la dirección de destino. Si la dirección de destino es alcanzable, enviará un mensaje de respuesta de eco ICMP de vuelta al remitente con los mismos datos que le fueron enviados:
$ ping -c 3 192.168.50.2 PING 192.168.50.2 (192.168.50.2) 56(84) bytes of data. 64 bytes from 192.168.50.2: icmp_seq=1 ttl=64 time=0.525 ms 64 bytes from 192.168.50.2: icmp_seq=2 ttl=64 time=0.419 ms 64 bytes from 192.168.50.2: icmp_seq=3 ttl=64 time=0.449 ms --- 192.168.50.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 0.419/0.464/0.525/0.047 ms
$ ping6 -c 3 2001:db8::10 PING 2001:db8::10(2001:db8::10) 56 data bytes 64 bytes from 2001:db8::10: icmp_seq=1 ttl=64 time=0.425 ms 64 bytes from 2001:db8::10: icmp_seq=2 ttl=64 time=0.480 ms 64 bytes from 2001:db8::10: icmp_seq=3 ttl=64 time=0.725 ms --- 2001:db8::10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.425/0.543/0.725/0.131 ms
La opción -c
se utiliza para especificar el número de paquetes a enviar. Si omite esta opción, ping
y ping6
continuarán enviando paquetes hasta que lo detengas, normalmente con la combinación de teclado Ctrl+C.
Que no pueda hacer ping a un host no significa que no pueda conectarse a él. Muchas organizaciones tienen cortafuegos o listas de control de acceso al router que bloquean todo lo que no sea el mínimo necesario para que sus sistemas funcionen. Esto incluye las peticiones y respuestas de eco ICMP. Dado que estos paquetes pueden incluir datos arbitrarios, un atacante inteligente podría utilizarlos para exfiltrar datos.
Traceroute
Los programas traceroute
y traceroute6
pueden utilizarse para mostrar la ruta que sigue un paquete para llegar a su destino. Lo hacen enviando múltiples paquetes al destino, incrementando el campo Time-To-Live (TTL) de la cabecera IP con cada paquete subsiguiente. Cada router a lo largo del camino responderá con un mensaje ICMP de TTL excedido:
$ traceroute 192.168.1.20 traceroute to 192.168.1.20 (192.168.1.20), 30 hops max, 60 byte packets 1 10.0.2.2 (10.0.2.2) 0.396 ms 0.171 ms 0.132 ms 2 192.168.1.20 (192.168.1.20) 2.665 ms 2.573 ms 2.573 ms $ traceroute 192.168.50.2 traceroute to 192.168.50.2 (192.168.50.2), 30 hops max, 60 byte packets 1 192.168.50.2 (192.168.50.2) 0.433 ms 0.273 ms 0.171 ms $ traceroute6 2001:db8::11 traceroute to 2001:db8::11 (2001:db8::11), 30 hops max, 80 byte packets 1 2001:db8::11 (2001:db8::11) 0.716 ms 0.550 ms 0.641 ms $ traceroute 2001:db8::11 traceroute to 2001:db8::11 (2001:db8::11), 30 hops max, 80 byte packets 1 2001:db8::10 (2001:db8::11) 0.617 ms 0.461 ms 0.387 ms $ traceroute net2.example.net traceroute to net2.example.net (192.168.50.2), 30 hops max, 60 byte packets 1 net2.example.net (192.168.50.2) 0.533 ms 0.529 ms 0.504 ms $ traceroute6 net2.example.net traceroute to net2.example.net (2001:db8::11), 30 hops max, 80 byte packets 1 net2.example.net (2001:db8::11) 0.738 ms 0.607 ms 0.304 ms
Por defecto, traceroute
envía 3 paquetes UDP con datos basura al puerto 33434, incrementándolo cada vez que envía un paquete. Cada línea de la salida del comando es una interfaz de router por la que atraviesa el paquete. El tiempo mostrado en cada línea de la salida es el tiempo de ida y vuelta de cada paquete. La dirección IP es la dirección de la interfaz del router en cuestión. Si traceroute
puede, utiliza el nombre DNS de la interfaz del router. A veces verá *
en lugar de un tiempo. Cuando esto sucede, significa que traceroute
nunca recibió el mensaje de TTL excedido para este paquete. Cuando se empieza a ver esto, suele indicar que la última respuesta es el último salto de la ruta.
Si tiene acceso a root
, la opción -I
hará que traceroute
utilice peticiones de eco ICMP en lugar de paquetes UDP. Esto suele ser más efectivo que el UDP porque es más probable que el host de destino responda a una petición de eco ICMP que al paquete UDP:
# traceroute -I learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 60 byte packets 1 047-132-144-001.res.spectrum.com (47.132.144.1) 9.764 ms 9.702 ms 9.693 ms 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 8.389 ms 8.481 ms 8.480 ms 3 dtr01hlrgnc-gbe-4-15.hlrg.nc.charter.com (96.34.64.172) 8.763 ms 8.775 ms 8.770 ms 4 acr01mgtnnc-vln-492.mgtn.nc.charter.com (96.34.67.202) 27.080 ms 27.154 ms 27.151 ms 5 bbr01gnvlsc-bue-3.gnvl.sc.charter.com (96.34.2.112) 31.339 ms 31.398 ms 31.395 ms 6 bbr01aldlmi-tge-0-0-0-13.aldl.mi.charter.com (96.34.0.161) 39.092 ms 38.794 ms 38.821 ms 7 prr01ashbva-bue-3.ashb.va.charter.com (96.34.3.51) 34.208 ms 36.474 ms 36.544 ms 8 bx2-ashburn.bell.ca (206.126.236.203) 53.973 ms 35.975 ms 38.250 ms 9 tcore4-ashburnbk_0-12-0-0.net.bell.ca (64.230.125.190) 66.315 ms 65.319 ms 65.345 ms 10 tcore4-toronto47_2-8-0-3.net.bell.ca (64.230.51.22) 67.427 ms 67.502 ms 67.498 ms 11 agg1-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.114) 61.270 ms 61.299 ms 61.291 ms 12 dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 61.101 ms 61.177 ms 61.168 ms 13 207.35.12.142 (207.35.12.142) 70.009 ms 70.069 ms 59.893 ms 14 unassigned-117.001.centrilogic.com (66.135.117.1) 61.778 ms 61.950 ms 63.041 ms 15 unassigned-116.122.akn.ca (66.135.116.122) 62.702 ms 62.759 ms 62.755 ms 16 208.94.166.201 (208.94.166.201) 62.936 ms 62.932 ms 62.921 ms
Algunas organizaciones bloquean las peticiones y respuestas de eco ICMP. Para evitarlo, puede utilizar TCP. Al utilizar un puerto TCP abierto conocido, puede garantizar que el host de destino responderá. Para usar TCP, utilice la opción -T
junto con -p
para especificar el puerto. Al igual que con las peticiones de eco ICMP, debe tener acceso a root
para hacer esto:
# traceroute -m 60 -T -p 80 learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 60 hops max, 60 byte packets 1 * * * 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 12.178 ms 12.229 ms 12.175 ms 3 dtr01hlrgnc-gbe-4-15.hlrg.nc.charter.com (96.34.64.172) 12.134 ms 12.093 ms 12.062 ms 4 acr01mgtnnc-vln-492.mgtn.nc.charter.com (96.34.67.202) 31.146 ms 31.192 ms 31.828 ms 5 bbr01gnvlsc-bue-3.gnvl.sc.charter.com (96.34.2.112) 39.057 ms 46.706 ms 39.745 ms 6 bbr01aldlmi-tge-0-0-0-13.aldl.mi.charter.com (96.34.0.161) 50.590 ms 58.852 ms 58.841 ms 7 prr01ashbva-bue-3.ashb.va.charter.com (96.34.3.51) 34.556 ms 37.892 ms 38.274 ms 8 bx2-ashburn.bell.ca (206.126.236.203) 38.249 ms 36.991 ms 36.270 ms 9 tcore4-ashburnbk_0-12-0-0.net.bell.ca (64.230.125.190) 66.779 ms 63.218 ms tcore3-ashburnbk_100ge0-12-0-0.net.bell.ca (64.230.125.188) 60.441 ms 10 tcore4-toronto47_2-8-0-3.net.bell.ca (64.230.51.22) 63.932 ms 63.733 ms 68.847 ms 11 agg2-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.118) 60.144 ms 60.443 ms agg1-toronto47_xe-7-0-0_core.net.bell.ca (64.230.161.114) 60.851 ms 12 dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 67.246 ms dis4-clarkson16_7-0.net.bell.ca (64.230.131.102) 68.404 ms dis4-clarkson16_5-0.net.bell.ca (64.230.131.98) 67.403 ms 13 207.35.12.142 (207.35.12.142) 66.138 ms 60.608 ms 64.656 ms 14 unassigned-117.001.centrilogic.com (66.135.117.1) 70.690 ms 62.190 ms 61.787 ms 15 unassigned-116.122.akn.ca (66.135.116.122) 62.692 ms 69.470 ms 68.815 ms 16 208.94.166.201 (208.94.166.201) 61.433 ms 65.421 ms 65.247 ms 17 208.94.166.201 (208.94.166.201) 64.023 ms 62.181 ms 61.899 ms
Al igual que ping
, traceroute
tiene sus limitaciones. Es posible que los cortafuegos y los routers bloqueen los paquetes enviados o devueltos por traceroute
. Si tiene acceso root
, hay opciones que pueden ayudare a obtener resultados precisos.
Búsqueda de MTU con tracepath
El comando tracepath
es similar a traceroute
. La diferencia es que rastrea los tamaños de las Unidades Máximas de Transmisión (MTU) a lo largo de la ruta. MTU es un ajuste configurado en una interfaz de red o una limitación de hardware de la unidad de datos de protocolo más grande que puede transmitir o recibir. El programa tracepath
funciona de la misma manera que traceroute
en el sentido de que incrementa el TTL con cada paquete. Se diferencia en que envía un datagrama UDP muy grande. Es casi inevitable que el datagrama sea más grande que el dispositivo con la MTU más pequeña de la ruta. Cuando el paquete llega a este dispositivo, éste suele responder con un paquete de destino inalcanzable. El paquete ICMP de destino inalcanzable tiene un campo para la MTU del enlace por el que enviaría el paquete si pudiera. Tracepath envía entonces todos los paquetes subsiguientes con este tamaño:
$ tracepath 192.168.1.20 1?: [LOCALHOST] pmtu 1500 1: 10.0.2.2 0.321ms 1: 10.0.2.2 0.110ms 2: 192.168.1.20 2.714ms reached Resume: pmtu 1500 hops 2 back 64
A diferencia de traceroute
, debe utilizar explícitamente tracepath6
para IPv6:
$ tracepath 2001:db8::11 tracepath: 2001:db8::11: Address family for hostname not supported $ tracepath6 2001:db8::11 1?: [LOCALHOST] 0.027ms pmtu 1500 1: net2.example.net 0.917ms reached 1: net2.example.net 0.527ms reached Resume: pmtu 1500 hops 1 back 1
La salida es similar a traceroute
. La ventaja de tracepath
es que en la última línea muestra la MTU más pequeña de todo el enlace. Esto puede ser útil para solucionar problemas de conexiones que no pueden manejar fragmentos.
Al igual que con las herramientas de solución de problemas anteriores, existe la posibilidad de que los equipos bloqueen sus paquetes.
Crear conexiones arbitrarias
El programa nc
, conocido como netcat, puede enviar o recibir datos arbitrarios a través de una conexión de red TCP o UDP. Los siguientes ejemplos deberían dejar clara su funcionalidad.
A continuación se muestra un ejemplo de configuración de un listener en el puerto 1234
:
$ nc -l 1234 LPI Example
La salida de LPI Example
aparece después del siguiente ejemplo, que está configurando un remitente netcat para enviar paquetes a net2.example.net
en el puerto 1234
. La opción -l
se utiliza para especificar que se desea que nc
reciba datos en lugar de enviarlos:
$ nc net2.example.net 1234 LPI Example
Pulse Ctrl+C en cualquiera de los dos sistemas para detener la conexión.
Netcat funciona tanto con direcciones IPv4 como IPv6. Funciona tanto con TCP como con UDP. Incluso se puede utilizar para configurar un burdo shell remoto.
Warning
|
Tenga en cuenta que no todas las instalaciones de |
$ hostname net2 $ nc -u -e /bin/bash -l 1234
La opción -u
es para UDP. La opción -e
indica a netcat que envíe todo lo que recibe a la entrada estándar del ejecutable que le sigue. En este ejemplo: /bin/bash
.
$ hostname net1 $ nc -u net2.example.net 1234 hostname net2 pwd /home/emma
¿Nota que la salida del comando hostname
coincide con la del host que escucha y la salida del comando pwd
con la de un directorio?
Ver conexiones y oyentes actuales
Los programas netstat
y ss
pueden utilizarse para ver el estado de sus oyentes y conexiones actuales. Al igual que ifconfig
, netstat
es una herramienta heredada. Tanto netstat
como ss
tienen salidas y opciones similares. Aquí están algunas opciones disponibles para ambos programas:
-a
-
Muestra todos los sockets.
-l
-
Presenta los sockets en escucha.
-p
-
Muestra el proceso asociado a la conexión.
-n
-
Evita la búsqueda de nombres tanto para los puertos como para las direcciones.
-t
-
Presenta las conexiones TCP.
-u
-
Muestra las conexiones UDP.
Los ejemplos siguientes muestran la salida de un conjunto de opciones comúnmente utilizadas para ambos programas:
# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 892/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1141/master tcp6 0 0 :::22 :::* LISTEN 892/sshd tcp6 0 0 ::1:25 :::* LISTEN 1141/master udp 0 0 0.0.0.0:68 0.0.0.0:* 692/dhclient # ss -tulnp # ss -tulnp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 :68 *: users:(("dhclient",pid=693,fd=6)) tcp LISTEN 0 128 :22 *: users:(("sshd",pid=892,fd=3)) tcp LISTEN 0 100 127.0.0.1:25 : users:(("master",pid=1099,fd=13)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=892,fd=4)) tcp LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1099,fd=14))
La columna Recv-Q
es el número de paquetes que un socket ha recibido pero no ha pasado a su programa. La columna Send-Q
es el número de paquetes que un socket ha enviado y que no han sido reconocidos por el receptor. El resto de las columnas se explican por sí mismas.
Ejercicios guiados
-
¿Qué comando(s) utilizaría para enviar un eco ICMP a
learning.lpi.org
? -
¿Cómo podría determinar la ruta a
8.8.8.8
? -
¿Qué comando le mostraría si algún proceso está escuchando en el puerto TCP 80?
-
¿Cómo se puede saber qué proceso está escuchando en un puerto?
-
¿Cómo se puede determinar la MTU máxima de una ruta de red?
Ejercicios de exploración
-
¿Cómo podría utilizar netcat para enviar una petición HTTP a un servidor web?
-
¿Cuáles son algunas de las razones por las que puede fallar el ping a un host?
-
Nombre una herramienta que pueda utilizar para ver los paquetes de red que llegan o salen de un host Linux.
-
¿Cómo se puede forzar a
traceroute
a utilizar una interfaz diferente? -
¿Es posible que
traceroute
informe de las MTU?
Resumen
La red se configura normalmente mediante los scripts de inicio del sistema o un ayudante como NetworkManager. La mayoría de las distribuciones tienen herramientas que editarán los archivos de configuración de los scripts de inicio por usted. Consulte la documentación de su distribución para más detalles.
Ser capaz de configurar manualmente la red le permite solucionar los problemas de forma más eficaz. Es útil en entornos mínimos utilizados para cosas como la restauración de copias de seguridad o la migración a un nuevo hardware.
Las utilidades que se cubren en esta sección tienen más funcionalidades que las ya anteriormente mencionadas en la lección. Valdría la pena hojear la página de manual de cada una para familiarizarse con las opciones disponibles. Los comandos ss
e ip
son herramientas modernas y recomendadas, mientras que el resto de las que se cubren, aunque todavía son de uso común, se consideran herramientas heredadas.
La mejor manera de familiarizarse con las herramientas cubiertas es la práctica. Utilizando un ordenador con una cantidad modesta de RAM, es posible configurar un laboratorio de red virtual utilizando máquinas virtuales con las que se puede practicar. Tres máquinas virtuales son suficientes para familiarizarse con las herramientas enumeradas.
Los comandos cubiertos en esta lección incluyen:
ping
oping6
-
Se utilizan para transmitir paquetes ICMP a un host remoto para probar la disponibilidad de una conexión de red.
traceroute
ytraceroute6
-
Se emplean para trazar una ruta a través de una red para determinar la conectividad de la misma.
tracepath
ytracepath6
-
Se usan para trazar una ruta a través de una red, así como para determinar los tamaños de MTU a lo largo de una ruta.
nc
-
Se utiliza para establecer conexiones arbitrarias en una red para probar la conectividad, así como para consultar una red en busca de servicios y dispositivos disponibles.
netstat
-
Comando heredado utilizado para determinar las conexiones de red abiertas y las estadísticas de un sistema.
ss
-
Comando moderno utilizado para determinar las conexiones de red abiertas y las estadísticas de un sistema.
Respuestas a los ejercicios guiados
-
¿Qué comando(s) utilizarías para enviar un eco ICMP a
learning.lpi.org
?Utilizaría
ping
oping6
:$ ping learning.lpi.org
o
$ ping6 learning.lpi.org
-
¿Cómo podría determinar la ruta a
8.8.8.8
?Utilizando los comandos
tracepath
otraceroute
.$ tracepath 8.8.8.8
o
$ traceroute 8.8.8.8
-
¿Qué comando le mostraría si algún proceso está escuchando en el puerto TCP 80?
Con
ss
:$ ss -ln | grep ":80"
Con
netstat
:$ netstat -ln | grep ":80"
Aunque no figura como requisito para el examen, también puede utilizar
lsof
:# lsof -Pi:80
-
¿Cómo se puede saber qué proceso está escuchando en un puerto?
De nuevo, hay múltiples maneras de hacer esto. Puede usar
lsof
de la misma manera que la respuesta anterior, reemplazando el número de puerto. También puede usarnetstat
oss
con la opción-p
. Recuerde quenetstat
se considera una herramienta heredada.# netstat -lnp | grep ":22"
Las mismas opciones que funcionan con
netstat
también funcionan conss
:# ss -lnp | grep ":22"
-
¿Cómo se puede determinar la MTU máxima de una ruta de red?
Utilizando el comando
tracepath
:$ tracepath somehost.example.com
Respuestas a los ejercicios de exploración
-
¿Cómo podrías utilizar netcat para enviar una petición HTTP a un servidor web?
Introduciendo en el terminal la línea de petición HTTP, cualquier cabecera y una línea en blanco:
$ nc learning.lpi.org 80 GET /index.html HTTP/1.1 HOST: learning.lpi.org HTTP/1.1 302 Found Location: https://learning.lpi.org:443/index.html Date: Wed, 27 May 2020 22:54:46 GMT Content-Length: 5 Content-Type: text/plain; charset=utf-8 Found
-
¿Cuáles son algunas de las razones por las que puede fallar el ping a un host?
Hay varias razones posibles. Éstas son algunas:
-
El host remoto no funciona.
-
Un ACL del router está bloqueando el ping.
-
El firewall del host remoto está bloqueando el ping.
-
Puede que esté utilizando un nombre o una dirección de host incorrecta.
-
Su resolución de nombres está devolviendo una dirección incorrecta.
-
La configuración de red de su máquina es incorrecta.
-
El cortafuegos de su máquina lo está bloqueando.
-
La configuración de red del host remoto es incorrecta.
-
La(s) interfaz(es) de su máquina está(n) desconectada(s).
-
La(s) interfaz(es) de la máquina remota está(n) desconectada(s).
-
Un componente de la red, como un conmutador, un cable o un router entre su máquina y la remota, ya no funciona.
-
-
Nombre una herramienta que pueda utilizar para ver los paquetes de red que llegan o salen de un host Linux.
Se pueden utilizar tanto
tcpdump
comowireshark
. -
¿Cómo se puede forzar a
traceroute
a utilizar una interfaz diferente?Utilizando la opción
-i
:$ traceroute -i eth2 learning.lpi.org traceroute -i eth2 learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 60 byte packets ...
-
¿Es posible que
traceroute
informe de las MTU?Sí, con la opción
--mtu
:# traceroute -I --mtu learning.lpi.org traceroute to learning.lpi.org (208.94.166.201), 30 hops max, 65000 byte packets 1 047-132-144-001.res.spectrum.com (47.132.144.1) 9.974 ms F=1500 10.476 ms 4.743 ms 2 096-034-094-106.biz.spectrum.com (96.34.94.106) 8.697 ms 9.963 ms 10.321 ms ...