Solución de problemas de red Linux y depuración

80

De vez en cuando, los usuarios de Linux y Unix se enfrentan a varios problemas de red. Muchos de estos problemas se presentan aquí y en otros foros de solución de problemas, pero son muy concretos y contienen mucha información técnica adicional, y a veces es bastante difícil entender el punto principal y la razón real del comportamiento del sistema con errores.

Al hacer esta pregunta, mi intención es iniciar una página wiki comunitaria que permita generalizar nuestra solución de problemas de red y experiencia de depuración. Espero que los usuarios de Linux y Unix puedan reconocer y resolver más fácilmente ("dividir y conquistar") sus problemas de red utilizando esta página.

El padre de esta página debe ser la mejor práctica para diagnosticar problemas . Pero aquí deberíamos centrarnos en solucionar los problemas de red desde el espacio del usuario y del núcleo.

Supongo que si:

  1. Comparta la información sobre el uso de una excelente herramienta de diagnóstico de red con ejemplos de uso concretos y ejemplos de errores de red, que ayudan a detectar.
  2. Comparta el enlace al gran tutorial de red relacionado con este tema
  3. Hable sobre un método o receta general que permita abordar una clase de problemas de red.
  4. Comparta información sobre su conjunto de herramientas para la depuración y resolución de problemas de la red

encajaría perfectamente para este tema.


Comenzaré compartiendo el enlace a varias herramientas de diagnóstico y un tutorial simple de 12 años . También el tutorial de archlinux parece tener información real sobre nuestro tema. Y para sumergirnos en la red Linux, definitivamente debemos visitar Linux Networking-HOWTO .

Dr.
fuente
Este Q&A tiene otra cosa que considerar, 2 máquinas en la red configuradas con la misma dirección IP: unix.stackexchange.com/questions/85887/… .
slm
Otra útil guía de solución de problemas de red: cisco.com/en/US/docs/internetworking/troubleshooting/guide/…
Ryne Everett

Respuestas:

118

Creo que los principios generales de la solución de problemas de red son:

  1. Averigüe en qué nivel de pila TCP / IP (o alguna otra pila) ocurre el problema.
  2. Comprender cuál es el comportamiento correcto del sistema y cuál es la desviación del estado normal del sistema
  3. Trate de expresar el problema en una oración o en varias palabras.
  4. Usando la información obtenida del sistema con errores, su propia experiencia y la experiencia de otras personas (google, varios foros, etc.), intente resolver el problema hasta el éxito (o el fracaso)
  5. Si falla, pregunte a otras personas sobre ayuda o algún consejo

En cuanto a mí, generalmente obtengo toda la información requerida usando todas las herramientas necesarias, y trato de hacer coincidir esta información con mi experiencia. Decidir qué nivel de pila de red contiene el error ayuda a cortar variantes poco probables. Usar la experiencia de otras personas ayuda a resolver los problemas rápidamente, pero a menudo conduce a una situación, que puedo resolver algún problema sin su comprensión y si este problema vuelve a ocurrir, me es imposible abordarlo nuevamente sin Internet.

Y, en general, no sé cómo resuelvo los problemas de red. Parece que hay una función mágica en mi cerebro llamada SolveNetworkProblem(information_about_system_state, my_experience, people_experience), que a veces podría devolver exactamente la respuesta correcta, y también a veces podría fallar (como aquí TCP muere en una computadora portátil Linux ).

Normalmente uso utilidades de este conjunto para la depuración de la red:

  • ifconfig(o ip link, ip addr) - para obtener información sobre interfaces de red
  • ping- para validar, si el host de destino es accesible desde mi máquina. pingtambién se podría usar para diagnósticos básicos de DNS: podríamos hacer ping al host por dirección IP o por su nombre de host y luego decidir si DNS funciona. Y luego tracerouteo tracepatho mtrmirar lo que está sucediendo en el camino.
  • dig - diagnostica todo DNS
  • dmesg | lesso dmesg | tailo dmesg | grep -i error- para comprender lo que piensa el kernel de Linux sobre algunos problemas.
  • netstat -antp+ | grep smth: mi uso más popular del comando netstat, que muestra información sobre las conexiones TCP. A menudo realizo algunos filtros usando grep. Consulte también el nuevo sscomando (del iproute2nuevo conjunto estándar de herramientas de red de Linux) y lsofcomo en lsof -ai tcp -c some-cmd.
  • telnet <host> <port> - es muy útil para comunicarse con varios servicios TCP (por ejemplo, en protocolos SMTP, HTTP), también podríamos comprobar la oportunidad general de conectarse a algún puerto TCP.
  • iptables-save(en Linux) - para volcar las tablas completas de iptables
  • ethtool - Obtenga todos los parámetros de la tarjeta de interfaz de red (estado del enlace, velocidad, parámetros de descarga ...)
  • socat- La herramienta del ejército suizo para probar todos los protocolos de red (UDP, multidifusión, SCTP ...). Especialmente útil (más que Telnet) con algunas -dopciones.
  • iperf - para probar la disponibilidad de ancho de banda
  • openssl( s_client, ocsp, x509...) para depurar todas las cuestiones SSL / TLS / PKI.
  • wireshark - La poderosa herramienta para capturar y analizar el tráfico de red, que le permite analizar y detectar muchos errores de red.
  • iftop - Mostrar grandes usuarios en la red / enrutador.
  • iptstate (en Linux): vista actual del seguimiento de la conexión del firewall.
  • arp(o el nuevo (Linux) ip neigh): muestra el estado de la tabla ARP.
  • routeo el más nuevo (en Linux) ip route: muestra el estado de la tabla de enrutamiento.
  • strace(o truss, dtraceo tuscdependiendo del sistema): es una herramienta útil que muestra qué llamadas del sistema procesa el problema, también muestra códigos de error (errno) cuando fallan las llamadas del sistema. Esta información a menudo dice lo suficiente para comprender el comportamiento del sistema y resolver un problema. Alternativamente, el uso de puntos de interrupción en algunas funciones de red gdbpuede permitirle saber cuándo se realizan y con qué argumentos.
  • para investigar problemas de firewall en Linux: iptables -nvLmuestra cuántos paquetes coinciden con cada regla ( iptables -Zpara poner a cero los contadores). El LOGobjetivo insertado en las cadenas de firewall es útil para ver qué paquetes les llegan y cómo ya se han transformado cuando llegan allí. Para llegar más lejos NFLOG(asociado con ulogd) se registrará el paquete completo.
Dr.
fuente
Geez, habla de minucioso!
mVChr
77
Yo agregaría nmap. El perfil de puertos abiertos en una máquina puede darle rápidamente pistas sobre si está mirando un servidor Linux o Windows, por ejemplo.
Adam Monsen
77
Yo agregaría tcpdump. Como es el analizador de paquetes estándar para TCP.
jhvaras
14

Un sorprendente número de "problemas de red" se reduce a problemas de DNS de un tipo u otro. La resolución de problemas inicial debe usarse ping -n w.x.y.zpara omitir la resolución DNS de un nombre de host y simplemente verificar la conectividad IP. Después de eso, use route -npara verificar la ruta IP predeterminada sin resolución DNS.

Después de verificar la conectividad IP y el enrutamiento nslookup, hosty digpuede proporcionar información. Recuerde que "bloquear" puede indicar que se están produciendo tiempos de espera de DNS.

No olvides verificar la existencia y el contenido de /etc/resolv.conf. Los clientes DHCP cambian ese archivo con cada contrato de arrendamiento, y a veces se equivocan, o si el espacio en disco es escaso, puede que no ocurra una actualización.

Bruce Ediger
fuente
8

Pueden existir problemas de cableado. Si tiene acceso al hardware, asegúrese de que todos los cables estén enchufados y enganchados mecánicamente. Si puede ver enrutadores o interfaces de ethernet, asegúrese de que las luces de enlace estén encendidas.

De forma remota, tienes que depender de ethtooly mii-tool.

[root@flask ~]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 10Mb/s
        Duplex: Half
        Port: MII
        PHYAD: 24
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Current message level: 0x00000001 (1)
                               drv
        Link detected: yes

"Enlace detectado: sí" es bueno, pero 10Mb / sy Half Duplex no son buenos, ya que la NIC en esa computadora puede hacerlo mejor. Necesito averiguar si la NIC está tonta o si el cable lo está. Otra computadora conectada al mismo enrutador dice 100Mb / s, Full duplex.

Bruce Ediger
fuente