Mi repetidor o puente está sobrecargado, ¿qué significa esto?
En la búsqueda de repetidores mostramos un punto ámbar al lado del sobrenombre del repetidor cuando este está sobrecargado. Esto significa que una o muchas de las siguientes métricas de carga han sido desencadenadas:
- Cualquier invocación OOM de Tor debida a presiones en la memoria
- Cualesquiera onionskins de ntor son descartadas
- Agotamiento de puertos TCP
- Tiempo límite de DNS alcanzado
Ten en cuenta que si un repetidor alcanza un estado de sobrecarga lo mostramos por 72 horas luego de que el repetidor se haya resuperado.
Si notas que tu repetidor está sobrecargado, por favor:
Comprueba https://status.torproject.org/ por cualquier dificultad conocida en la categoría "red Tor".
Considera sintonizar
sysctl
para tu sistema para las cargas de red, memoria y CPU.Considera habilitar
MetricsPort
para entender qué está pasando.
Sintonizando sysctl
para cargas de red, memoria y CPU
Agotamiento de puertos TCP
Si estás experimentando agotamiento de puertos TCP considera expandir tu rango de puertos locales. Puedes hacer eso con
# sysctl -w net.ipv4.ip_local_port_range="15000 64000"
o
# echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range
Tiempo límite de DNS
Si estás experimentando tiempo límite de DNS, deberías investigar si esto es una dificultad de red o de resolvedor.
En Linux, en resolve.conf
, Hay una opción para establecer un tiempo límite:
timeout:n
Establece la cantidad de tiempo que el resolvedor esperará por una respuesta desde un
servidor de nombres remoto antes de reintentar la consulta vía un servidor de nombres diferente.
Este podría no ser el tiempo total tomado por la llamada API de cualquier resolvedor, y no hay garantía
de que una única llamada API de resolvedor mapee a un tiempo límite único.
Medido en segundos, el predeterminado es RES_TIMEOUT (actualmente 5, mira <resolv.h>).
El valor para esta opción es limitado a 30 silenciosamente.
Comprueba $ man resolve.conf
para más información.
MetricsPort
Considera habilitar MetricsPort
para entender qué está pasando.
Los datos de MetricsPort para repetidores han sido introducidos desde la versión >= 0.4.7.1-alpha, mientras que los datos de sobrecarga han sido añadidos a los descriptores de repetidor desde la 0.4.6+.
Es importante entender que exponer el MetricsPort de tor públicamente es peligroso para los usuarios de la red Tor.
Por favor, toma precaución y cuidado extras al abrir este puerto, y ciérralo cuando hayas finalizado la depuración de errores.
Establece una política de acceso muy estricta con MetricsPortPolicy
, y considera usar las características de cortafuego de tu sistema operativo, para una defensa en profundidad.
He aquí un ejemplo de qué salida producirá la habilitación de MetricsPort
:
# HELP tor_relay_load_onionskins_total Total number of onionskins handled
# TYPE tor_relay_load_onionskins_total counter
tor_relay_load_onionskins_total{type="tap",action="processed"} 0
tor_relay_load_onionskins_total{type="tap",action="dropped"} 0
tor_relay_load_onionskins_total{type="fast",action="processed"} 0
tor_relay_load_onionskins_total{type="fast",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0
# HELP tor_relay_exit_dns_query_total Total number of DNS queries done by this relay
# TYPE tor_relay_exit_dns_query_total counter
tor_relay_exit_dns_query_total{record="A"} 0
tor_relay_exit_dns_query_total{record="PTR"} 0
tor_relay_exit_dns_query_total{record="AAAA"} 0
# HELP tor_relay_exit_dns_error_total Total number of DNS errors encountered by this relay
# TYPE tor_relay_exit_dns_error_total counter
tor_relay_exit_dns_error_total{record="A",reason="success"} 0
tor_relay_exit_dns_error_total{record="A",reason="format"} 0
tor_relay_exit_dns_error_total{record="A",reason="serverfailed"} 0
tor_relay_exit_dns_error_total{record="A",reason="notexist"} 0
tor_relay_exit_dns_error_total{record="A",reason="notimpl"} 0
tor_relay_exit_dns_error_total{record="A",reason="refused"} 0
tor_relay_exit_dns_error_total{record="A",reason="truncated"} 0
tor_relay_exit_dns_error_total{record="A",reason="unknown"} 0
tor_relay_exit_dns_error_total{record="A",reason="timeout"} 0
tor_relay_exit_dns_error_total{record="A",reason="shutdown"} 0
tor_relay_exit_dns_error_total{record="A",reason="cancel"} 0
tor_relay_exit_dns_error_total{record="A",reason="nodata"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="success"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="format"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="serverfailed"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="notexist"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="notimpl"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="refused"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="truncated"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="unknown"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="timeout"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="shutdown"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="cancel"} 0
tor_relay_exit_dns_error_total{record="PTR",reason="nodata"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="success"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="format"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="serverfailed"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="notexist"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="notimpl"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="refused"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="truncated"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="unknown"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="timeout"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="shutdown"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="cancel"} 0
tor_relay_exit_dns_error_total{record="AAAA",reason="nodata"} 0
# HELP tor_relay_load_tcp_exhaustion_total Total number of times we ran out of TCP ports
# TYPE tor_relay_load_tcp_exhaustion_total counter
tor_relay_load_tcp_exhaustion_total 0
# HELP tor_relay_load_socket_total Total number of sockets
# TYPE tor_relay_load_socket_total gauge
tor_relay_load_socket_total{state="opened"} 135
tor_relay_load_socket_total 1048544
# HELP tor_relay_load_oom_bytes_total Total number of bytes the OOM has freed by subsystem
# TYPE tor_relay_load_oom_bytes_total counter
tor_relay_load_oom_bytes_total{subsys="cell"} 0
tor_relay_load_oom_bytes_total{subsys="dns"} 0
tor_relay_load_oom_bytes_total{subsys="geoip"} 0
tor_relay_load_oom_bytes_total{subsys="hsdir"} 0
# HELP tor_relay_load_global_rate_limit_reached_total Total number of global connection bucket limit reached
# TYPE tor_relay_load_global_rate_limit_reached_total counter
tor_relay_load_global_rate_limit_reached_total{side="read"} 0
tor_relay_load_global_rate_limit_reached_total{side="write"} 0
Descubramos qué significan realmente algunas de estas líneas:
tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0
Cuando un repetidor empieza a ser visto "caído", usualmente es un problema de CPU/RAM.
Tristemente, Tor se ejecuta en instancia única excepto cuando son procesadas las "pieles de cebolla". Las "pieles de cebolla" son el trabajo criptográfico que necesita ser hecho en las famosas "capas de cebolla" en cada circuito.
Cuando tor procesa las capas usamos una reserva de instancias, y le damos todo ese trabajo a esa reserva. Puede pasar que esta reserva empiece a descartar trabajos debido a presión en la memoria o la CPU, y esto desencadenará un estado de sobrecarga.
Si tu servidor se está ejecutando a capacidad, probablemente esto será desencadenado.
tor_relay_exit_dns_error_total{...}
Cualquier contador en el dominio "*_dns_error_total" indica un problema con el DNS.
Las dificultades con los tiempos límite de DNS solo aplican a nodos de salida. Si tor empieza a notar tiempos límite de DNS, recibirás la marca de sobrecarga. Esto podría ser no porque tu repetidor esté sobrecargado en términos de rescursos, sino que indica un problema en la red.
Los tiempos límite de DNS en las Salidas son un enorme problema de experiencia de usuario. Por lo tanto, los operadores de salida realmente necesitan encarar estas dificultades para ayudar a la red.
tor_relay_load_oom_bytes_total{...}
Una invocación de memoria agotada indica un problema con la RAM. El repetidor podría necesitar más RAM o está filtrando memoria. Si notaste que el proceso tor está filtrando memoria, por favor informa esta dificultad vía el gitLab de Tor o bien enviando un correo electrónico a la lista de correo tor-relays.
Tor tiene su propio manejador OOM, y es invocado cuando el 75% de la memoria total que tor piensa que está disponible es alcanzado. Por lo tanto, digamos que tor piensa que puede usar 2GB en total, luego, a 1.5GB de uso de memoria, empezará a liberarla. Ese es considerado un estado de sobrecarga.
Para estimar la cantidad de memoria que tiene disponible, cuando tor se inicia usará MaxMemInQueues, o, si no está establecido, mirará al total de RAM disponible en el sistema y aplicará este algoritmo:
if RAM >= 8GB {
memoria = RAM * 40%
} else {
memoria = RAM * 75%
}
/* Límite alcanzado. */
memoria = min(memoria, 8GB) -> [8GB en 64bit y 2GB en 32bit)
/* Valor mínimo. */
memoria = max(250MB, memoria)
Para evitar un estado sobrecargado, recomendamos ejecutar un repatidor por sobre 2GB de RAM en 64bit. 4GB es aconsejado, sin embargo, por supuesto, no causa daño agregar más RAM si puedes.
Uno podría notar que tor podría ser llamado por el manejador OOM del SO propiamente dicho. Como tor toma la memoria total en el sistema cuando se inicia, si el sistema en general tiene muchas otras aplicaciones ejecutándose usando RAM, termina consumiendo demasiada memoria. En este caso el SO podría hacerle un OOM a tor, sin que este ni siquiera note la presión en la memoria.
tor_relay_load_socket_total
Estas líneas indican que el repetidor está quedándose sin sockets.
La solución es incrementar ulimit -n
para el proceso tor.
tor_relay_load_tcp_exhaustion_total
Estas líneas indican que el repetidor está quedándose sin puertos TCP.
Intenta sintonizar sysctl
como se describió arriba.
tor_relay_load_global_rate_limit_reached_total
Si este contador es incrementado en algún valor notable sobre un periodo de tiempo corto, el repetidor está congestionado. Probablemente esté siendo usado como Guardián por un servicio cebolla grande o por un ataque DDoS ocurriendo sobre la red.
Si tu repetidor aún está sobrecargado y no sabes por qué, por favor contáctate con network-report@torproject.org. Puedes cifrar tu correo electrónico usando la clave OpenPGP de network-report.