Saltar al contenido principal

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ónPor quéQué hacer
Notificaciones push para softphonesNecesitan el relay en InternetMantener la app abierta en la LAN; aceptar que las llamadas entrantes no despiertan una app cerrada
WhatsApp, Messenger, TelegramLos proveedores llaman al PBX desde InternetNo disponible
Widget de chat en vivoLos navegadores de otros sitios web llegan al PBX por HTTPS públicoUsarlo solo donde el sitio web pueda llegar al PBX
Funciones de IALas URL base deben ser HTTPS público; un modelo en su LAN se rechazaNo disponible
Certificados automáticosLa autoridad certificadora está en InternetInstalar su propio certificado
Proveedores de SMS por HTTPSSon proveedores públicosUsar 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​

  1. Ejecute docker exec mpbx-prod-mpbx-1 /usr/local/bin/mpbx ports y abra solo las filas de entrada que necesite. Las filas internas permanecen cerradas para otras redes.
  2. Confirme que los teléfonos se registran (docker exec mpbx-prod-mpbx-1 /usr/local/bin/mpbx doctor, y la página de Dispositivos).
  3. Confirme que el buzón de voz y el historial de llamadas funcionan.
  4. 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.