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 .


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.

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.