¿Se queda un VPN sin entropía? Qué muestra realmente entropy_avail
Una parada al arrancar y un túnel establecido lento son fallos distintos. Lee la etapa, el significado real del contador y la cola antes de culpar a la aleatoriedad.
Quedarse sin aleatoriedad del núcleo es una explicación atractiva para una VPN lenta y casi siempre la equivocada para el síntoma que la gente reporta. Un equipo que espera salida aleatoria se detiene en un momento concreto, normalmente al principio del arranque o durante la gestión de claves. Un túnel que se conecta rápido y luego transfiere despacio está describiendo, en cambio, el caudal. Separa esas dos observaciones antes de instalar un demonio para arreglar un número que aún no has terminado de leer.
Por qué sobrevive el mito
Los dos problemas son reales y de lejos parecen iguales. Las paradas de inicio en una máquina virtual recién arrancada ocurren de verdad, y un túnel establecido lento es igual de real. El error es suponer que el segundo lo causa el primero porque la criptografía aparece en algún punto de ambas historias. Nada en la palabra cifrado implica que cada byte transferido consuma un byte nuevo de ruido ambiental.
Así no funcionan estos generadores. Una biblioteca criptográfica mantiene un generador con semilla y extrae salida de él, resembrando según su propia política, así que el momento caro es la siembra, no la transferencia constante.
Qué hace un generador por paquete
En OpenSSL 3 la jerarquía de generadores por defecto se construye con instancias de DRBG que siembran y resiembran según la configuración y el estado. En OpenVPN 2.6 la ruta de datos AEAD deriva su nonce del número de secuencia del paquete combinado con un valor implícito por sesión, mientras que la ruta CBC más antigua extrae un IV pseudoaleatorio por paquete. Ninguno de los dos patrones sostiene la regla de que mover un gigabyte consuma un gigabyte de ruido nuevo del núcleo. Ambos sí sostienen la idea de que la generación de claves y los apretones de manos son donde importa la siembra.
El caso CBC merece mención porque parece el mito y no lo es: su IV por paquete procede del generador de la biblioteca según el calendario de resiembra de la propia biblioteca, nunca de una llamada al núcleo por paquete. Cuando alguien cita un coste de entropía por byte, pregunta qué versión de biblioteca y qué ruta de código midieron.
Dónde se ve realmente la espera
Pon marcas de tiempo alrededor de las etapas, no de la sesión: arranque, autenticación, cambio de clave y transferencia. Una espera antes de que el túnel sea utilizable es una queja distinta de una tasa constante baja, y solo una de las dos apunta a la aleatoriedad. En Linux una petición normal de getrandom() puede bloquearse hasta que la fuente aleatoria del núcleo esté inicializada, y por eso la versión de este problema en el arranque es real en máquinas virtuales y placas embebidas que tienen poco con lo que alimentar el pool al principio.
| Etapa | Qué ejecutar | Lectura que significa espera | Lectura que significa caudal |
|---|---|---|---|
| Arranque, antes de cualquier túnel | systemd-analyze critical-chain | una unidad que se queda segundos antes de que arranque el túnel | no aplicable, todavía no se transfiere nada |
| Apretón de manos | journalctl -u openvpn-server@server -b | un hueco largo antes de que se complete la secuencia de inicialización | no aplicable, el túnel no está levantado |
| Transferencia establecida | ss -tin junto a sar -n DEV 1 | un proceso bloqueado con colas de socket vacías | colas llenas, retransmisiones y un hilo ocupado |
Dos órdenes baratas pertenecen al inicio de esa recolección, y resuelven las preguntas fáciles antes de que la tabla sea siquiera necesaria. El contador que leen es contabilidad de entropía, no un medidor de ancho de banda, y una sola instantánea no puede mostrar que un proceso esté bloqueado, cuánto esperó o qué interfaz llaman las funciones de su biblioteca. Una muestra tomada después de la recuperación suele perder la parada por completo, así que guarda la versión del núcleo junto a la lectura.
cat /proc/sys/kernel/random/entropy_avail
uname -rAjusta la corrección a la lectura
Si el núcleo espera de verdad la inicialización, mira la ruta de siembra que admite la plataforma, no el túnel. A una máquina virtual se le puede dar un dispositivo aleatorio proporcionado por el anfitrión, como virtio-rng, y la preparación de la imagen importa porque una semilla copiada sin cambios a muchos invitados no es una inicialización independiente. Si una biblioteca informa de fallos de siembra después del arranque, inspecciona su fuente configurada y el comportamiento del proveedor en lugar de cambiar ajustes del núcleo.
ss -tin dst 203.0.113.7
sar -n DEV 1 5La documentación del generador de OpenSSL describe cómo esa jerarquía obtiene entrada y cuándo ocurre la resiembra, lo que es una afirmación mucho más estrecha que el mito y que solo vale para esa implementación. Un demonio de entropía no es una reparación universal de velocidad, e instalarlo para que suba un contador altera una suposición de seguridad sin demostrar ningún retraso. Para el caudal, sigue la ruta de datos: un hilo saturado, las retransmisiones, la pérdida externa y los descartes de cola necesitan cada uno una corrección distinta, y los tamaños de búfer abordan el almacenamiento del socket con sus propias pruebas de cola.