Creo que los principios generales de la solución de problemas de red son:
- Averigüe en qué nivel de pila TCP / IP (o alguna otra pila) ocurre el problema.
- Comprender 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 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. ping
tambié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 traceroute
o tracepath
o mtr
mirar lo que está sucediendo en el camino.
dig
- diagnostica todo DNS
dmesg | less
o dmesg | tail
o 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 ss
comando (del iproute2
nuevo conjunto estándar de herramientas de red de Linux) y lsof
como 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 -d
opciones.
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.
route
o el más nuevo (en Linux) ip route
: muestra el estado de la tabla de enrutamiento.
strace
(o truss
, dtrace
o tusc
dependiendo 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 gdb
puede permitirle saber cuándo se realizan y con qué argumentos.
- para investigar problemas de firewall en Linux:
iptables -nvL
muestra cuántos paquetes coinciden con cada regla ( iptables -Z
para poner a cero los contadores). El LOG
objetivo 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.