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 algunos 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 verdadera razón del comportamiento defectuoso del sistema.
Al hacer esta pregunta, mi intención es iniciar un wiki comunitario página que permite generalizar nuestra experiencia de resolución de problemas y depuración de redes. Espero que los usuarios de Linux y Unix puedan reconocer y resolver más fácilmente ("divide y vencerás") sus problemas de red usando esta página.
El padre de esta página debe ser Mejores prácticas para diagnosticar problemas. Pero aquí deberíamos centrarnos en solucionar los problemas de red desde espacio de usuario y kernel.
Supongo que si tú:
- Comparta la información sobre el uso de alguna excelente herramienta de diagnóstico de red con ejemplos de uso concretos y ejemplos de errores de red, que ayudan a detectar.
- Comparta el enlace al gran tutorial de red relacionado con este tema
- Hable acerca de un método o receta general que permita abordar algún tipo de problemas de red
- Comparta información sobre su conjunto de herramientas para la depuración y solución de problemas de la red
encajaría perfectamente con 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 profundizar en las redes de Linux definitivamente necesitamos visitar Linux Networking-HOWTO.
Respuesta aceptada:
Creo que los principios generales de resolución de problemas de red son:
- Averigüe en qué nivel de la pila TCP/IP (o alguna otra pila) ocurre el problema.
- Comprenda cuál es el comportamiento correcto del sistema y cuál es la desviación del estado normal del sistema
- Trate de expresar el problema en una oración o en varias palabras
- 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)
- Si fallas, pide ayuda o consejo a otras personas
En cuanto a mí, generalmente obtengo toda la información requerida utilizando 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 eliminar variantes poco probables. Usar la experiencia de otras personas ayuda a resolver los problemas rápidamente, pero a menudo conduce a situaciones en las que puedo resolver algún problema sin su comprensión y si este problema vuelve a ocurrir, es imposible para mí 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 puede devolver exactamente la respuesta correcta y también a veces puede fallar (como aquí, TCP muere en una computadora portátil con Linux).
Usualmente uso utilidades de este conjunto para la depuración de redes:
ifconfig
(oip link
,ip addr
) – para obtener información sobre interfaces de redping
– para validar, si se puede acceder al host de destino desde mi máquina.ping
También podría usarse 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 el DNS funciona. Y luegotraceroute
otracepath
omtr
para ver lo que está pasando en el camino.dig
– diagnosticar todo DNSdmesg | less
odmesg | tail
odmesg | grep -i error
– para comprender lo que piensa el kernel de Linux acerca de 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 algún filtrado usando grep. Ver también el nuevoss
comando (deiproute2
el nuevo estándar conjunto de herramientas de red de Linux) ylsof
como enlsof -ai tcp -c some-cmd
.telnet <host> <port>
– es muy útil para comunicarse con varios servicios TCP (por ejemplo, en SMTP, protocolos HTTP), también podemos verificar la oportunidad general de conectarnos a algún puerto TCP.iptables-save
(en Linux) – para volcar el completo tablas iptablesethtool
– obtener 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, multicast, SCTP…). Especialmente útil (más que telnet) con algunos-d
opciones.iperf
– para probar la disponibilidad de ancho de bandaopenssl
(s_client
,ocsp
,x509
…) para depurar todos los problemas de SSL/TLS/PKI.wireshark
– la poderosa herramienta para capturar y analizar el tráfico de la 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 cortafuegos.arp
(o el nuevo (Linux)ip neigh
) – muestra el estado de la tabla ARP.route
o el más nuevo (en Linux)ip route
– mostrar el estado de la tabla de enrutamiento.strace
(otruss
,dtrace
otusc
dependiendo del sistema):es una herramienta útil que muestra qué llamadas al sistema procesan el problema, también muestra códigos de error (errno) cuando fallan las llamadas al sistema. Esta información a menudo dice lo suficiente para comprender el comportamiento del sistema y resolver un problema. Alternativamente, usar puntos de interrupción en algunas funciones de red engdb
puede permitirle averiguar cuándo se hacen y con qué argumentos.- para investigar problemas de cortafuegos en Linux:
iptables -nvL
muestra cuántos paquetes coinciden con cada regla (iptables -Z
poner a cero los contadores). ElLOG
target insertado en las cadenas del cortafuegos es útil para ver qué paquetes les llegan y cómo ya se han transformado cuando llegan allí. Para obtener másNFLOG
(asociado conulogd
) registrará el paquete completo.