Kamailio 6.x — Guía de Instalación como SBC
Debian 13 (Trixie) · Ring2All Platform
Section titled “Debian 13 (Trixie) · Ring2All Platform”Entorno validado: Debian GNU/Linux 13 (trixie) · Kamailio 6.0.1 · PostgreSQL 17 · RTPEngine 12.5.x Servidor de lab: 192.168.10.32
Prerequisitos
Section titled “Prerequisitos”- Servidor Debian 13 (trixie) con acceso root
- Mínimo 2 GB RAM, 20 GB disco
- PostgreSQL instalado (se incluye en esta guía)
1. Verificar el Sistema Operativo
Section titled “1. Verificar el Sistema Operativo”lsb_release -aDebe responder Debian GNU/Linux 13 (trixie).
2. Instalar Kamailio y Módulos
Section titled “2. Instalar Kamailio y Módulos”Debian Trixie incluye Kamailio 6.0.1 en sus repos oficiales. No se necesita repositorio externo.
apt update
apt install -y kamailio sbc-kamailio-postgres-modules sbc-kamailio-tls-modules sbc-kamailio-websocket-modules sbc-kamailio-utils-modules sbc-kamailio-json-modules sbc-kamailio-extra-modules sbc-kamailio-presence-modules kamcli
# Verificarkamailio -VResultado esperado:
version: kamailio 6.0.1 (x86_64/linux)compiled with gcc 14.2.03. Instalar RTPEngine (relay de media/NAT)
Section titled “3. Instalar RTPEngine (relay de media/NAT)”apt install -y rtpengine rtpengine-daemon rtpengine-kernel-dkms rtpengine-utils4. Instalar PostgreSQL
Section titled “4. Instalar PostgreSQL”apt install -y postgresql postgresql-contribsystemctl enable postgresql && systemctl start postgresql5. Fix: Hostname en /etc/hosts
Section titled “5. Fix: Hostname en /etc/hosts”Si el hostname del servidor no está en /etc/hosts, sudo emitirá warnings.
# Verificar hostname actualcat /etc/hostname
# Agregar al /etc/hosts (solo si falta)echo "127.0.1.1 $(cat /etc/hostname)" >> /etc/hosts6. Crear Usuario PostgreSQL para Kamailio
Section titled “6. Crear Usuario PostgreSQL para Kamailio”# Asignar contraseña al superusuario postgres (necesario para kamdbctl)sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres1234';"⚠️ No crear la base de datos manualmente — la crea
kamdbctl createen el paso 8.
7. Configurar kamctlrc
Section titled “7. Configurar kamctlrc”cat > /etc/kamailio/kamctlrc << 'EOF'DBENGINE=PGSQLDBHOST=localhostDBPORT=5432DBNAME=sbc-kamailioDBRWUSER=sbc-kamailioDBRWPW=kamailio2024DBROUSER=kamailioroDBROPW=kamailioro2024INSTALL_EXTRA_TABLES=yesINSTALL_PRESENCE_TABLES=yesEOF8. Crear Schema de Base de Datos
Section titled “8. Crear Schema de Base de Datos”kamdbctl necesita el archivo .pgpass para autenticarse como postgres:
# Crear .pgpasscat > ~/.pgpass << 'EOF'localhost:5432:*:postgres:postgres1234EOFchmod 600 ~/.pgpass
# Crear BD + todas las tablaskamdbctl create# Responder "yes" a todas las preguntasResultado esperado:
INFO: Core Kamailio tables successfully created.INFO: Presence tables successfully created.INFO: Extra tables successfully created.Verificar tablas creadas
Section titled “Verificar tablas creadas”sudo -u postgres psql -d kamailio -c "\dt" | wc -l# ~55+ tablas9. Configurar kamailio.cfg
Section titled “9. Configurar kamailio.cfg”Ver la IP del servidor:
ip addr show | grep "inet " | grep -v 127→ Usar el archivo docs/02-kamailio.cfg incluido en este proyecto y copiarlo al servidor.
Una vez que tengas el archivo descargado en tu servidor de Lab, o copiándolo desde tu repositorio:
cp docs/02-kamailio.cfg /etc/kamailio/kamailio.cfg
# Editar MY_IP con la IP real del servidornano /etc/kamailio/kamailio.cfg10. Validar y Arrancar Kamailio
Section titled “10. Validar y Arrancar Kamailio”# Validar sintaxiskamailio -f /etc/kamailio/kamailio.cfg -c# Debe mostrar: "config file ok, exiting..."
# Arrancarsystemctl enable sbc-kamailiosystemctl start sbc-kamailiosystemctl status sbc-kamailio
# Verificar puerto 5060ss -ulnp | grep 506011. Configuración Inicial del SBC
Section titled “11. Configuración Inicial del SBC”Agregar dominio SIP
Section titled “Agregar dominio SIP”sudo -u postgres psql -d kamailio -c \ "INSERT INTO domain (domain, did) VALUES ('sbc.ring2all.com', 'default');"
kamcli domain reloadAgregar nodo Telephony Server al Load Balancer
Section titled “Agregar nodo Telephony Server al Load Balancer”sudo -u postgres psql -d kamailio << 'EOF'INSERT INTO dispatcher (setid, destination, flags, priority, attrs, description)VALUES (1, 'sip:192.168.10.X:5060', 0, 1, '', 'Telephony Node 1 - Ring2All');EOF
kamcli dispatcher reloadkamcli dispatcher showCrear usuario SIP de prueba
Section titled “Crear usuario SIP de prueba”kamcli subscriber add 1001 sbc.ring2all.com test1234kamcli subscriber show12. Comandos de Operación Diaria
Section titled “12. Comandos de Operación Diaria”# Ver registros SIP activoskamcli ul show
# Ver estado de nodos Telephony Serverkamcli dispatcher show
# Recargar dispatcher (tras agregar nuevo nodo)kamcli dispatcher reload
# Ver llamadas activaskamcli dialog show
# Estadísticaskamcli stats
# Bloquear IPkamcli htable seti ipban 192.168.1.100 1
# RPC directokamcli rpc core.infokamcli rpc dispatcher.listPuertos del SBC
Section titled “Puertos del SBC”| Puerto | Protocolo | Servicio |
|---|---|---|
| 5060 | UDP/TCP | SIP (Kamailio) |
| 5061 | TLS | SIP seguro |
| 2223 | UDP | RTPEngine ng-control |
| 30000–40000 | UDP | Media (RTPEngine) |
| 5432 | TCP | PostgreSQL |
Notas de Compatibilidad — Kamailio 6.x vs 5.x
Section titled “Notas de Compatibilidad — Kamailio 6.x vs 5.x”| Cambio | Kamailio 5.x | Kamailio 6.x |
|---|---|---|
| Dispatcher AVPs | dst_avp, grp_avp, cnt_avp |
xavp_dst |
| Domain | check_all_domains |
❌ eliminado |
| Auth | check_to() |
❌ eliminado |
- Configurar TLS (Let’s Encrypt + módulo
tls) - Habilitar WebSocket para softphones web
- Configurar RTPEngine para NAT/SRTP
- Integrar con Ring2All SBC Admin (interfaz web)
- Prometheus + Grafana para monitoreo
13. Instalar Nginx (Reverse Proxy + Frontend)
Section titled “13. Instalar Nginx (Reverse Proxy + Frontend)”Nginx es el único punto de entrada al SBC Admin. Actúa como:
- Reverse proxy hacia la API Fastify en puerto
3003 - Servidor de archivos estáticos para el frontend Vite compilado
- Fallback de desarrollo al servidor Vite
:5175cuandoindex.htmlno existe
13.1 Instalar Nginx
Section titled “13.1 Instalar Nginx”apt install -y nginxsystemctl enable nginxsystemctl start nginx
# Verificarnginx -v# nginx version: nginx/1.26.x13.2 Crear certificado SSL auto-firmado (lab)
Section titled “13.2 Crear certificado SSL auto-firmado (lab)”Producción: usar
certbot --nginxcon Let’s Encrypt. Reemplazar los paths en el conf.
mkdir -p /etc/nginx/ssl
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/nginx.key \ -out /etc/nginx/ssl/nginx.crt \ -subj "/C=US/ST=TX/L=Austin/O=SoftswitchOne/CN=sbc.softswitchone.com"
chmod 600 /etc/nginx/ssl/nginx.keychmod 644 /etc/nginx/ssl/nginx.crt
# Verificarls -la /etc/nginx/ssl/13.3 Crear directorios de producción
Section titled “13.3 Crear directorios de producción”# Frontend SPA (Vite build destino)mkdir -p /var/www/softswitch/sbc/web/distchown -R www-data:www-data /var/www/softswitch/sbc/web
# ACME challenge (para certbot en producción)mkdir -p /var/www/softswitch/sbc/web/.well-known/acme-challengechown -R www-data:www-data /var/www/softswitch/sbc/web/.well-known13.4 Desplegar la configuración Nginx del SBC
Section titled “13.4 Desplegar la configuración Nginx del SBC”El archivo de configuración se encuentra en config/nginx/softswitch-sbc.conf.
# Copiar al servidor (desde tu máquina de desarrollo via scp, o git pull)cp config/nginx/softswitch-sbc.conf /etc/nginx/sites-available/softswitch-sbc
# Activar el sitioln -sf /etc/nginx/sites-available/softswitch-sbc /etc/nginx/sites-enabled/softswitch-sbc
# Deshabilitar el site default (evita conflicto en puerto 80 y 443)rm -f /etc/nginx/sites-enabled/default
# Validar sintaxisnginx -t# Resultado esperado:# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok# nginx: configuration file /etc/nginx/nginx.conf test is successful
# Activarsystemctl reload nginx13.5 Arquitectura del tráfico con Nginx
Section titled “13.5 Arquitectura del tráfico con Nginx”Browser │ ├── :80 HTTP ──────────────────────────────► 301 → https://$host$request_uri │ └── :443 HTTPS ──────────────────────────────► Nginx ssl_certificate /etc/nginx/ssl/ │ ├── /api/* ──proxy_pass──────────► 127.0.0.1:3003 (sbc-api.service) ├── /ws/* ──proxy_pass WS────────► 127.0.0.1:3003 (WebSocket upgrade) ├── /health ──proxy_pass──────────► 127.0.0.1:3003/health ├── *.js|css|... ──static cache 1y──────► /var/www/softswitch/sbc/web/dist/ └── /* ──SPA──────────────────► /var/www/softswitch/sbc/web/dist/index.html │ (si no existe) ──► @vite_dev → 127.0.0.1:517513.6 Puertos del servidor con Nginx
Section titled “13.6 Puertos del servidor con Nginx”| Puerto | Protocolo | Servicio | Exponer |
|---|---|---|---|
80 |
TCP | HTTP → redirect HTTPS | ✅ Público |
443 |
TCP | HTTPS — SBC Admin UI + API | ✅ Público |
3003 |
TCP | sbc-api (Fastify, interno) | ❌ Solo loopback |
5175 |
TCP | Vite dev server (solo desarrollo) | ❌ Solo LAN |
13.7 Verificar que Nginx sirve correctamente
Section titled “13.7 Verificar que Nginx sirve correctamente”# Verificar que los puertos 80 y 443 están activosss -tlnp | grep nginx
# Probar el redirect HTTP→HTTPScurl -I http://127.0.0.1# Debe mostrar: HTTP/1.1 301 Moved Permanently
# Probar el health check de la API (HTTPS, ignorando cert auto-firmado)curl -k https://127.0.0.1/health# Debe mostrar: {"status":"ok","service":"kamailio-api",...}
# Probar la UI (debe devolver HTML del index.html o el Vite dev)curl -k -s https://127.0.0.1/ | head -513.8 Modo desarrollo (Vite dev server)
Section titled “13.8 Modo desarrollo (Vite dev server)”Cuando dist/index.html no existe, Nginx redirige automáticamente al servidor Vite en :5175.
Esto permite trabajar en desarrollo sin necesidad de compilar el frontend.
# En tu máquina de desarrollo (o en el servidor):cd admin/apps/kamailio-sbc/sbc-kamailionpm run dev# Vite listening on http://localhost:5175
# Nginx intercepta /* y hace proxy a :5175# → https://192.168.10.32 sirve el frontend en tiempo realPara desactivar el fallback y usar la versión compilada:
Terminal window cd admin/apps/kamailio-sbc/sbc-kamailionpm run buildrsync -av dist/ /var/www/softswitch/sbc/web/dist/systemctl reload nginx
14. Base de Datos Administrativa (sbc_admin)
Section titled “14. Base de Datos Administrativa (sbc_admin)”Base de datos PostgreSQL exclusiva para el panel de administración del SBC.
Separada de la BD nativa de Kamailio (kamailio).
Nombre en el servidor:
sbc_admin
Role:sbc_user
Schema:public(todas las tablas del admin van en el schemapublic)
Tablas del admin
Section titled “Tablas del admin”| Tabla | Descripción |
|---|---|
public.role_profiles |
Perfiles de rol con permisos JSONB |
public.log_profiles |
Perfiles de logging configurables |
public.users |
Usuarios administradores del panel |
public.api_keys |
API keys para integraciones externas |
public.audit_log |
Registro de auditoría de todas las acciones |
public.sessions |
Sesiones JWT activas |
14.1 Crear BD, role y aplicar schema
Section titled “14.1 Crear BD, role y aplicar schema”# 1. Crear el role de aplicación (least-privilege)sudo -u postgres psql -c "CREATE ROLE sbc_user WITH LOGIN PASSWORD 'TU_PASSWORD_AQUI';"
# 2. Crear la base de datossudo -u postgres createdb -O sbc_user sbc_admin
# 3. Aplicar el schemasudo -u postgres psql -d sbc_admin -f /var/www/softswitch/sbc/database/schema.sql
# 4. Verificarsudo -u postgres psql -d sbc_admin -c "\dt public.*"# Debe listar las tablas: users, role_profiles, log_profiles, api_keys, audit_log
> **Automatizado:** El script `sync-to-sbc.ps1` y el instalador automático `install_robust_sbc.sh` hace todo lo anterior con una contraseña generada aleatoriamente y la guarda en `/etc/softswitch/sbc-credentials`.14.2 Credenciales admin por defecto
Section titled “14.2 Credenciales admin por defecto”⚠️ Cambiar inmediatamente después del primer login.
| Campo | Valor |
|---|---|
| Usuario | admin |
| Contraseña | Admin1234! |
admin@ring2all.com |
# Cambiar contraseña vía psql (bcrypt, factor 12)sudo -u postgres psql -d sbc_admin \ -c "UPDATE public.users SET password_hash = crypt('TuNuevaContrasena!', gen_salt('bf',12)) WHERE username='admin';"15. API Backend — sbc-api (systemd)
Section titled “15. API Backend — sbc-api (systemd)”15.1 Instalar Node.js
Section titled “15.1 Instalar Node.js”curl -fsSL https://deb.nodesource.com/setup_22.x | bash -apt install -y nodejsnode -v # v22.x.xnpm -v # 10.x.x15.2 Copiar y compilar la API
Section titled “15.2 Copiar y compilar la API”# Copiar fuentes (desde tu máquina via scp o git pull)mkdir -p /var/www/softswitch/sbc/api# ... (ver sync-to-sbc.ps1)
cd /var/www/softswitch/sbc/apinpm install --productionnpm run build15.3 Crear archivo .env
Section titled “15.3 Crear archivo .env”cat > /etc/softswitch/sbc-api.env << 'EOF'PORT=3003NODE_ENV=production
# sbc_admin databaseDB_HOST=localhostDB_PORT=5432DB_NAME=sbc_adminDB_USER=sbc_userDB_PASSWORD=TU_PASSWORD_AQUIDATABASE_URL=postgresql://sbc_user:TU_PASSWORD_AQUI@localhost:5432/sbc_admin
# Kamailio native database (kamailio)KAM_DATABASE_URL=postgresql://kamailio:kamailio2024@localhost:5432/kamailio
# ss_telephony (SIP Accounts, Carriers, LCR — billing trunks)TELEPHONY_DATABASE_URL=postgresql://ss_db_user:PASSWORD@192.168.10.31:5432/ss_telephony
# JWTJWT_SECRET=GENERAR_CON_openssl_rand_hex_32JWT_EXPIRES_IN=24h
# CORSCORS_ORIGINS=https://192.168.10.32,https://sbc.tu-dominio.comEOF
chmod 600 /etc/softswitch/sbc-api.env15.4 Crear servicio systemd
Section titled “15.4 Crear servicio systemd”cat > /etc/systemd/system/sbc-api.service << 'EOF'[Unit]Description=SBC Admin API (Fastify)After=network.target postgresql.serviceWants=postgresql.service
[Service]Type=simpleWorkingDirectory=/var/www/softswitch/sbc/apiEnvironmentFile=/etc/softswitch/sbc-api.envExecStart=/usr/bin/node dist/main.jsRestart=alwaysRestartSec=5User=rootEnvironment=NODE_ENV=productionStandardOutput=journalStandardError=journalSyslogIdentifier=sbc-api
[Install]WantedBy=multi-user.targetEOF
systemctl daemon-reloadsystemctl enable sbc-apisystemctl start sbc-apisystemctl status sbc-api15.5 Verificar
Section titled “15.5 Verificar”# Estado del serviciosystemctl status sbc-api
# Logs en tiempo realjournalctl -u sbc-api -f
# Health check directo (sin Nginx)curl http://127.0.0.1:3003/health# {"status":"ok","service":"kamailio-api","version":"1.0.0",...}
# Health check via Nginx (HTTPS)curl -k https://127.0.0.1/health16. Configurar ODBC (conexión Lua → BD)
Section titled “16. Configurar ODBC (conexión Lua → BD)”⚠️ Solo necesario si los scripts Lua de Telephony Server en este servidor usan ODBC.
La API Node.js usapgdirectamente, no requiere ODBC.
16.1 Instalar driver
Section titled “16.1 Instalar driver”apt install -y unixodbc odbc-postgresql16.2 Agregar entradas al odbc.ini
Section titled “16.2 Agregar entradas al odbc.ini”# Opción A — Servidor dedicado SBC (solo Kamailio)cp config/odbc.ini /etc/odbc.inichmod 644 /etc/odbc.inised -i 's/__SBC_DB_PASSWORD__/TU_PASSWORD/g' /etc/odbc.ini
# Opción B — Co-located con Ring2All (agregar al odbc.ini existente)cat config/odbc.ini >> /etc/odbc.ini16.3 Verificar
Section titled “16.3 Verificar”isql -v sbc_admin sbc_user TU_PASSWORD# +---------------------------------------+# | Connected! |# +---------------------------------------+17. Deploy automático desde Windows
Section titled “17. Deploy automático desde Windows”El script sync-to-sbc.ps1 en la raíz del proyecto automatiza la sincronización de archivos.
Sincronización completa (primera vez)
Section titled “Sincronización completa (primera vez)”cd D:\Desarrollos\Ring2All
.\sync-to-sbc.ps1 -Api -Web -BuildUI -BuildAPI -Restart| Flag | Acción |
|---|---|
-Api |
Sincroniza api/ → /var/www/softswitch/sbc/api/ |
-Web |
Sincroniza frontend → /var/www/softswitch/sbc/web/ |
-BuildUI |
Compila el frontend en el servidor |
-BuildAPI |
Compila la API en el servidor |
-Restart |
Reinicia el servicio sbc-api |
Updates posteriores (solo frontend o API)
Section titled “Updates posteriores (solo frontend o API)”# Solo actualizar código de la API.\sync-to-sbc.ps1 -Api -BuildAPI -Restart
# Solo actualizar el frontend.\sync-to-sbc.ps1 -Web -BuildUIResumen de Rutas en el Servidor
Section titled “Resumen de Rutas en el Servidor”| Recurso | Ruta en servidor | Descripción |
|---|---|---|
| API source | /var/www/softswitch/sbc/api/ |
Código TypeScript compilado |
| API service | sbc-api.service (:3003) |
Servicio systemd |
| API .env | /etc/softswitch/sbc-api.env |
Credenciales (chmod 600) |
| Frontend dist | /var/www/softswitch/sbc/web/dist/ |
Build Vite (servido por Nginx) |
| Nginx site | /etc/nginx/sites-available/softswitch-sbc |
Config HTTPS reverse proxy |
| SSL cert | /etc/nginx/ssl/nginx.crt + .key |
Auto-firmado (lab) |
| DB credentials | /etc/softswitch/sbc-credentials |
Generado por el instalador |
| Logs API | journalctl -u sbc-api |
systemd journal |
| Logs Nginx | /var/log/nginx/sbc-admin_*.log |
Access + error (HTTP/HTTPS) |
Resumen de Archivos de Configuración (repo)
Section titled “Resumen de Archivos de Configuración (repo)”| Archivo local | Destino servidor | Propósito |
|---|---|---|
docs/02-kamailio.cfg |
/etc/kamailio/kamailio.cfg |
Config SIP del SBC |
config/nginx/softswitch-sbc.conf |
/etc/nginx/sites-available/softswitch-sbc |
Reverse proxy HTTPS + SPA |
config/odbc.ini |
/etc/odbc.ini (merge) |
Conexiones ODBC |
database/schema.sql |
Ejecutar en PostgreSQL | Schema BD admin |
sync-to-sbc.ps1 |
(ejecutar desde Windows) | Script de sincronización completo |

