Instalaciones aisladas y modo degradado
Una instalación aislada (air-gapped) no tiene ruta a Internet. Ejecuta teléfonos, llamadas, buzón de voz, el cliente web y el historial de llamadas en su red. Algunas funciones dependen de servicios de Internet y dejan de funcionar ahí.
Lo que sigue funcionando
- Llamadas entre teléfonos, softphones y troncales a los que llega por su propia red.
- Buzón de voz, historial de llamadas, reportes, el cliente web, la consola de administración y los respaldos.
- Softphones en la misma red que el PBX.
- Certificados que usted proporciona. Los certificados automáticos de una autoridad pública necesitan acceso a Internet.
Lo que se detiene
| Función | Por qué | Qué hacer |
|---|---|---|
| Notificaciones push para softphones | Necesitan el relay en Internet | Mantener la app abierta en la LAN; aceptar que las llamadas entrantes no despiertan una app cerrada |
| WhatsApp, Messenger, Telegram | Los proveedores llaman al PBX desde Internet | No disponible |
| Widget de chat en vivo | Los navegadores de otros sitios web llegan al PBX por HTTPS público | Usarlo solo donde el sitio web pueda llegar al PBX |
| Funciones de IA | Las URL base deben ser HTTPS público; un modelo en su LAN se rechaza | No disponible |
| Certificados automáticos | La autoridad certificadora está en Internet | Instalar su propio certificado |
| Proveedores de SMS por HTTPS | Son proveedores públicos | Usar un centro de SMS en su red por SMPP, después de una prueba |
Instalación
Este procedimiento se ejecutó en un servidor de laboratorio aislado (Ubuntu 24.04, una red sin ruta, sin DNS y sin Internet). Necesita una máquina conectada con Docker y la misma arquitectura de CPU que el servidor (uname -m: amd64 o arm64), y una forma de trasladar archivos (disco USB, pasarela de archivos de una sola vía).
1. En la máquina conectada, descargue la versión. Obtenga install.sh, mpbx-bundle.tar.gz y SHA256SUMS del canal de versiones que use. Lea las referencias de imágenes que indica el paquete:
tar -xzOf mpbx-bundle.tar.gz mpbx-bundle/images.env
2. Exporte las imágenes. Las imágenes de la versión se nombran por digest (name@sha256:...). Un nombre por digest no sobrevive a docker save y docker load, así que primero asigne una etiqueta a cada imagen e instale por etiqueta. Descargue para la arquitectura del servidor:
docker pull --platform linux/amd64 <MPBX_IMAGE from images.env> # repeat for MPBX_RTPENGINE_IMAGE and MPBX_MEDIA_IMAGE
docker tag <MPBX_IMAGE> mpbx:1.0.0 && docker tag <MPBX_RTPENGINE_IMAGE> mpbx-rtpengine:1.0.0 && docker tag <MPBX_MEDIA_IMAGE> mpbx-media:1.0.0
docker pull --platform linux/amd64 postgres:17-alpine valkey/valkey:8-alpine clickhouse/clickhouse-server:25.8-alpine
docker save -o mpbx-images.tar mpbx:1.0.0 mpbx-rtpengine:1.0.0 mpbx-media:1.0.0
docker save -o third-party-images.tar postgres:17-alpine valkey/valkey:8-alpine clickhouse/clickhouse-server:25.8-alpine
Agregue coturn/coturn:4.12.0 si va a usar --turn, y prom/prometheus, prom/alertmanager, quay.io/prometheus/node-exporter, grafana/grafana (las etiquetas de deploy/compose/prod/compose.yaml) para --observability. Para el plugin de ClickHouse de Grafana, vea deploy/compose/prod/compose.grafana-offline.yaml.
3. Exporte Docker para el servidor. install.sh --air-gapped nunca descarga Docker. En una máquina Ubuntu 24.04 conectada de la misma arquitectura, reúna los paquetes con sus dependencias (se requieren Docker Engine 24+ y Compose 2.24+):
mkdir debs && sudo apt-get update && sudo apt-get -o Dir::Cache::archives="$PWD/debs" install --download-only -y docker.io docker-compose-v2 iptables
4. Traslade y verifique. Ponga todo en un directorio con una lista de sumas de verificación y compruébela en el servidor:
sha256sum install.sh mpbx-bundle.tar.gz mpbx-images.tar third-party-images.tar debs/*.deb > TRANSFER.sha256 # connected machine
sha256sum -c TRANSFER.sha256 # server
Compare también mpbx-bundle.tar.gz con la línea de SHA256SUMS de la versión.
5. En el servidor, instale Docker y cargue las imágenes.
sudo dpkg -i debs/*.deb && sudo systemctl enable --now docker
sudo docker load -i mpbx-images.tar && sudo docker load -i third-party-images.tar
6. Ejecute el instalador desde los archivos locales. Indique el archivo del paquete y su suma de verificación, indique la dirección que usarán los teléfonos, y elija el puerto web sin cifrar o un proxy TLS que usted administre (los certificados automáticos necesitan Internet):
sudo MPBX_BUNDLE_FILE=$PWD/mpbx-bundle.tar.gz MPBX_BUNDLE_SHA256=<sha256 of the bundle> \
MPBX_IMAGE=mpbx:1.0.0 MPBX_RTPENGINE_IMAGE=mpbx-rtpengine:1.0.0 MPBX_MEDIA_IMAGE=mpbx-media:1.0.0 \
bash install.sh --air-gapped --public-ip <server LAN address> --no-tls
--air-gapped usa las etiquetas cargadas de Postgres, Valkey y ClickHouse (el archivo compose.airgap.yaml), así que Docker nunca intenta llegar a un registro. --public-ip omite la búsqueda de la dirección. Se acepta un servidor sin puerta de enlace predeterminada: el instalador toma su primera dirección global. El instalador muestra una vez la clave de recuperación y la URL de configuración de un solo uso; guárdelas como indica la guía de instalación.
7. Verifique. Todos los servicios deben estar healthy:
sudo mpbx-ctl ps
sudo mpbx-ctl selftest # service, containers, web, database and isolation checks
sudo docker exec mpbx-prod-mpbx-1 /usr/local/bin/mpbx doctor # the `mpbx` command lives in the container
Después abra la URL de configuración desde una máquina de la misma red. Conserve los archivos de instalación: más adelante, mpbx-ctl upgrade acepta un archivo de paquete de la misma forma (mpbx-ctl upgrade ./mpbx-bundle.tar.gz), después de hacer docker load de las imágenes nuevas.
Lista de verificación en modo degradado
- Ejecute
docker exec mpbx-prod-mpbx-1 /usr/local/bin/mpbx portsy abra solo las filas de entrada que necesite. Las filas internas permanecen cerradas para otras redes. - Confirme que los teléfonos se registran (
docker exec mpbx-prod-mpbx-1 /usr/local/bin/mpbx doctor, y la página de Dispositivos). - Confirme que el buzón de voz y el historial de llamadas funcionan.
- Informe a los usuarios qué funciones están apagadas, para que no esperen por ellas.
Manual de operación: docs/runbooks/air-gapped-degraded-mode.md en el repositorio.