LLM locales en una red air-gapped: IA para tus datos más sensibles
Los documentos que más se beneficiarían de la IA son justo los que nadie puede subir a ningún sitio: contratos, expedientes de personal, historiales de pacientes, código fuente, planos de ingeniería. Con un modelo de pesos abiertos dentro de una red aislada obtienes el beneficio sin que un solo byte salga del edificio. Así lo monto, así entran los modelos sin internet, así se prueban sin conexión y esto es lo que puedes esperar de forma realista.
10 min de lectura
1. Por qué IA en air gap y para quién
La mayoría de las empresas empiezan con un servicio de IA en la nube y chocan pronto con un muro: el departamento legal no permite meter contratos, RR. HH. no puede usarlo con expedientes de personal, el hospital no puede tocar datos de pacientes e ingeniería no quiere su código propietario en registros ajenos. En mi artículo sobre LLM locales para datos sensibles describí un entorno privado con un firewall que bloquea las API públicas de IA. Un air gap va un paso más allá: no existe ninguna ruta a internet, así que incluso una herramienta mal configurada, un plugin curioso o una dependencia comprometida no tienen adónde enviar datos. Ese es el nivel que suelen necesitar los sectores regulados, el sector público, los proveedores de defensa y cualquiera con secretos comerciales serios, y con los modelos de pesos abiertos actuales es totalmente alcanzable.
2. La arquitectura en una imagen
El montaje tiene dos mitades. Fuera, en una zona conectada, alguien elige un modelo de pesos abiertos, revisa su licencia, lo descarga y registra sus huellas. Dentro del enclave ocurre todo lo demás: un registro de modelos sin conexión guarda versiones verificadas, los nodos GPU sirven el modelo aprobado, una pasarela interna de IA gestiona el inicio de sesión, las cuotas, el enmascarado de datos personales y el registro de auditoría, y un pequeño índice de búsqueda sobre tus documentos internos da al modelo el contexto para responder sobre tu negocio. Los usuarios nunca hablan con el modelo directamente, solo con la pasarela, que es donde viven tus reglas. Y hay exactamente una entrada para modelos nuevos y ninguna salida para nada.
3. Meter un modelo sin internet
Elige el modelo por licencia y encaje, no por el ruido de las clasificaciones, y fíjalo a un commit exacto, porque «latest» no existe en un air gap. Descarga los pesos en formato safetensors: Hugging Face advierte de que el formato pickle, más antiguo, puede ejecutar código arbitrario al cargarse, y safetensors se creó precisamente para evitarlo. Después escribe un checksum SHA-256 de cada archivo, firma el manifiesto y mueve la carpeta por el mismo camino unidireccional que usas para el software, como cuento en mi artículo sobre sistemas air-gapped. Dentro, un host de cuarentena vuelve a verificar firma y checksums antes de que el modelo llegue al registro sin conexión, que puede ser algo tan simple como almacenamiento de objetos versionado. No actives nunca opciones que carguen código propio incluido con un modelo; en un enclave quieres pesos, tokenizador y configuración, nada ejecutable.
# Connected zone: fetch an open-weight model pinned to one commit, no pickle files
set -euo pipefail
MODEL=Qwen/Qwen2.5-14B-Instruct # example, pick yours by licence and fit
REV=<commit-sha-from-the-model-page>
hf download "$MODEL" --revision "$REV" --exclude "*.bin" --local-dir models/qwen2.5-14b-instruct
cd models
find qwen2.5-14b-instruct -type f -exec sha256sum {} + > qwen2.5-14b-instruct.SHA256SUMS
cosign sign-blob --key cosign.key --bundle qwen2.5-14b-instruct.bundle qwen2.5-14b-instruct.SHA256SUMSConsejo práctico
Guarda junto a cada versión del registro una ficha de una línea: origen, commit, licencia, checksum, quién la aprobó y cuándo.
4. Servirlo: vLLM u Ollama en tus propias GPU
Para un departamento o una empresa entera uso vLLM: está hecho para el rendimiento, agrupa a muchos usuarios de forma eficiente y ofrece una API compatible con OpenAI, así que las herramientas internas pueden usarlo sin código especial. Para un equipo pequeño o una sola estación de trabajo potente, Ollama es más sencillo y puede importar pesos locales GGUF o safetensors mediante un Modelfile. En ambos casos, sirve desde una ruta local y desactiva cualquier intento de llegar a internet; en todo lo que se basa en las librerías de Hugging Face, la variable de entorno HF_HUB_OFFLINE garantiza que no se haga ninguna llamada HTTP al Hub. El hardware que necesitas depende del tamaño del modelo y de la precisión; la calculadora de GPU de mi artículo sobre LLM locales para datos sensibles te da una estimación rápida y honesta antes de pedir nada.
# Enclave: serve the approved model from the offline registry
export HF_HUB_OFFLINE=1 # never try to reach the Hub
vllm serve /models/qwen2.5-14b-instruct \
--served-model-name internal-14b \
--api-key "$INTERNAL_API_KEY" \
--max-model-len 16384
# Small team alternative: Ollama with a local Modelfile
# FROM /models/qwen2.5-14b-instruct
# ollama create internal-14b -f Modelfile5. La pasarela: inicio de sesión, enmascarado, auditoría
La pasarela es lo que convierte un modelo en un servicio que puedes defender ante el delegado de protección de datos. La gente inicia sesión con el proveedor de identidad que ya tienes dentro, como Active Directory o Keycloak, así que el acceso sigue los roles existentes. Antes de que un prompt llegue al modelo, los datos personales que el caso de uso no necesita se detectan y se enmascaran; Microsoft Presidio es un buen punto de partida de código abierto y funciona totalmente sin conexión. Cada petición se escribe en un registro de auditoría dentro del enclave: quién preguntó, qué documentos se usaron, qué versión del modelo respondió, con un plazo de conservación acordado. Las cuotas por equipo evitan que un usuario intensivo frene a todos los demás, y en esa misma pasarela añadirás después modelos nuevos sin cambiar ni un solo cliente.
Consejo práctico
Enmascara también antes de registrar. Un registro de auditoría lleno de datos personales sin enmascarar se convierte en silencio en tu base de datos más sensible.
Interactivo
¿Qué GPU necesita tu modelo?
Elige tamaño del modelo y precisión. Los pesos ocupan parámetros × bytes por parámetro; un 20 % más cubre la caché KV con contextos normales.
Tamaño del modelo (miles de millones de parámetros)
Precisión
≈ 19 GB
memoria de GPU necesaria
1×
cabe en 24 GB (RTX 4090)
- 1× 24 GB (RTX 4090)
- 1× 32 GB (RTX 5090)
- 1× 48 GB (L40S)
- 1× 80 GB (H100)
- 1× 96 GB (RTX PRO 6000 Blackwell)
- 1× 141 GB (H200)
Regla práctica para planificar, no un benchmark. Contextos largos y muchos usuarios en paralelo necesitan más caché KV; 4 bits cuesta algo de calidad.
Todas las calculadoras y checklists6. Respuestas a partir de tus documentos, con permisos
Un modelo por sí solo no sabe nada de tus contratos ni de tus máquinas. La generación aumentada por recuperación lo resuelve: los documentos se dividen en fragmentos, un modelo de embeddings local los convierte en vectores, se guardan en PostgreSQL con la extensión pgvector y los fragmentos más relevantes se entregan al modelo junto con la pregunta. La parte que muchos olvidan son los permisos. Guarda junto a cada vector quién puede ver ese fragmento y filtra por ello en la consulta, para que el asistente nunca cite un expediente de personal a alguien que no podría abrirlo. Muestra las fuentes en cada respuesta; genera confianza y permite comprobar. Y vuelve a indexar automáticamente cuando cambian los documentos, o el asistente citará con total seguridad la política del año pasado.
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE chunks (
id bigserial PRIMARY KEY,
doc_id text NOT NULL,
allowed_groups text[] NOT NULL, -- who may see this passage
content text NOT NULL,
embedding vector(1024) NOT NULL -- size of your local embedding model
);
CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops);
-- Only search what the asking user is allowed to read
SELECT doc_id, content
FROM chunks
WHERE allowed_groups && $1::text[]
ORDER BY embedding <=> $2
LIMIT 8;7. Prueba sin conexión antes de cada actualización
En un air gap no puedes mirar benchmarks públicos y esperar que se apliquen a tu caso, y tampoco deberías. Crea un conjunto de referencia de 50 a 200 preguntas reales de tu dominio con las respuestas que esperan tus expertos, más unos cuantos prompts complicados: peticiones de datos que el usuario no debería obtener, intentos de saltarse las instrucciones, preguntas sin una buena respuesta. El OWASP Top 10 para aplicaciones LLM es una lista útil para eso, sobre todo la inyección de prompts y la revelación de información sensible. Ejecuta el modelo actual y el candidato en paralelo, compara precisión, rechazos y tiempo de respuesta y promociona la versión nueva solo tras la aprobación de una persona concreta. Mantén la versión anterior en el registro para que volver atrás sea un único cambio de configuración. El NIST AI Risk Management Framework te da el vocabulario para documentarlo todo ante los auditores.
Consejo práctico
Deja que la mitad de las preguntas de referencia las escriba la gente que va a usar el asistente. Saben qué respuestas te dejarían en evidencia en una reunión de verdad.
8. Lo que permite y sus límites reales
Una vez en marcha, los equipos lo usan para cosas que nunca podrían enviar a un servicio en la nube: revisar contratos frente a tus propias plantillas, responder preguntas sobre políticas de RR. HH., redactar documentación clínica o técnica, buscar en décadas de informes de ingeniería y ayudar a los desarrolladores con código propietario. Los límites también son reales. Los modelos de pesos abiertos siguen por detrás de los mejores modelos frontera en las tareas de razonamiento más difíciles, no saben nada de lo ocurrido después de su entrenamiento y las actualizaciones son más lentas por diseño. Necesitas planificar la capacidad de GPU y a alguien que se haga cargo de la plataforma. En la práctica, un modelo abierto bien elegido con una buena búsqueda sobre tus documentos responde a las preguntas del día a día que más importan, y lo hace en hardware que controlas tú. El principio también funciona en pequeño: mi pequeño robot ESP32 ejecuta reconocimiento de voz y un modelo de lenguaje en local y funciona sin ninguna red.
9. Implantación en tres fases
Implanto estas plataformas en tres fases. Primero, un piloto con un departamento y una colección de documentos, por ejemplo el equipo legal y sus plantillas de contratos, con el conjunto de preguntas de referencia acordado de antemano y un sí o no claro tras unas semanas. Segundo, más colecciones y más equipos en la misma pasarela, con permisos tomados de los grupos existentes en lugar de inventar otros nuevos. Tercero, la operación: una revisión mensual del modelo, una ventana fija de actualizaciones, comprobaciones de capacidad de las GPU y un breve informe de uso y horas ahorradas. Empezar en pequeño mantiene honesto el pedido de hardware, da a tu delegado de protección de datos algo concreto que revisar y produce el primer caso de éxito interno que hace que el siguiente departamento pida acceso.
Conclusión
Con un modelo de pesos abiertos detrás de tu propia pasarela, tus datos más sensibles por fin reciben ayuda de la IA, y nada de ellos sale nunca del edificio.
Proyectos reales relacionados
Pruébalo tú mismo
Fuentes y guías oficiales
- Hugging Face: environment variables (HF_HUB_OFFLINE)
- Hugging Face: pickle scanning and security
- Hugging Face: safetensors
- Hugging Face CLI: hf download
- vLLM documentation
- Ollama: importing a model
- pgvector
- Microsoft Presidio: PII detection and anonymization
- OWASP Top 10 for LLM applications
- NIST AI Risk Management Framework
- Sigstore cosign: verify-blob
- NIST SP 800-53 Rev. 5: Security and Privacy Controls
Más artículos
- 3.025 pull requests en diez meses: un proceso de entrega con IA, desde dentro
- La Ley de IA de la UE para medianas empresas: qué te aplica y desde cuándo
- FinOps para el gasto en IA: tokens, caché, enrutado y presupuestos que aguantan
- Hacer visible una red de restaurantes en las respuestas de la IA: un proyecto GEO paso a paso
- Cómo está hecha esta web: estática donde se puede, en streaming donde hace falta
- Costes de Kubernetes en EKS y GKE: el mismo método, otras palancas
- Una landing zone para empresas medianas, en Terraform o Bicep: las piezas que importan
- El manual de migración de sistemas heredados: oleadas, ejecución en paralelo y recuentos y checksums idénticos
- Seguridad de MCP a fondo: dejar entrar a los asistentes de IA en tu producto sin abrir las puertas
- Monitorizar resultados de negocio: paneles en verde, caja vacía
- Agentes de IA por teléfono: la arquitectura y los tropiezos que ninguna demo enseña
- Pruebas de restauración: un backup que nunca has restaurado es solo una esperanza
- Respuestas de IA en streaming en Azure Static Web Apps: la cabecera que lo retenía todo
- Construir un asistente de IA para WhatsApp de principio a fin: lo que hace falta más allá de la demo
- Sistemas air-gapped: software crítico sin conexión a internet
- IA en producción en AWS: Amazon Bedrock y AgentCore en una configuración privada
- IA en producción con Microsoft Foundry: una configuración de referencia privada para agentes
- /goal, /loop o rutinas: deja de vigilar a tu agente de programación
- Los nuevos planes de Claude: Max, Ultra y lo que significan para los equipos
- OpenAI Codex a finales de 2026: goal mode, dots y cómo blindarlo
- ¿GitHub Copilot, Claude Code o Codex? Cómo elegiría para una empresa
- Fundamentos de GEO: cómo aparecer en las respuestas de la IA
- IA en producción en Google Cloud: de Vertex AI a Gemini Enterprise Agent Platform
- Quiero ejecutar un LLM local: ¿qué servidor compro?
- MiniMax M3: ¿un modelo puntero que puedes ejecutar tú mismo?
- Investigación de prompts a gran escala con un modelo abierto
- SEO y GEO juntos: una auditoría práctica en 6 pasos
- Dimensionar bien Kubernetes: el método que llevó un clúster de 7 a 4 nodos
- IA privada para datos sensibles: un LLM local que supera la revisión de seguridad
- Del prototipo con IA a producción: las ocho capas que añado, en este orden
