docs: initial project setup - Asterisk 20 + FreePBX 17 PBX
Phase 1 installation completed (8/10 tasks): - Ubuntu 24.04, Asterisk 20.18.2 compiled from source - FreePBX 17.0.25 with PJSIP extensions (1001, 1002) - MariaDB 10.11.14, Apache 2.4, PHP 8.3 - nftables firewall and Fail2ban security configured Pending: softphone testing, IVR/queues config, Phase 2 (PSTN trunks) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
125
docs/INSTALL-LOG.md
Normal file
125
docs/INSTALL-LOG.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Registro de Instalacion — VoIP PBX
|
||||
|
||||
## Servidor
|
||||
|
||||
| Aspecto | Valor |
|
||||
|---|---|
|
||||
| OS | Ubuntu 24.04.3 LTS |
|
||||
| Hostname | VOIP |
|
||||
| IP | 192.168.10.228 (DHCP - pendiente configurar estatica) |
|
||||
| CPU | 4 cores |
|
||||
| RAM | 7.6 GB |
|
||||
| Disco | 29 GB SSD |
|
||||
| Timezone | America/Mexico_City (CST) |
|
||||
|
||||
## Software Instalado
|
||||
|
||||
| Componente | Version | Estado |
|
||||
|---|---|---|
|
||||
| Asterisk | 20.18.2 (compilado desde fuente) | Corriendo |
|
||||
| FreePBX | 17.0.25 | Corriendo |
|
||||
| MariaDB | 10.11.14 | Corriendo |
|
||||
| Apache | 2.4.58 | Corriendo (como usuario asterisk) |
|
||||
| PHP | 8.3.6 | Configurado |
|
||||
| Node.js | 18.19.1 | Instalado |
|
||||
| Fail2ban | Activo | 2 jails: asterisk, sshd |
|
||||
| nftables | Activo | Firewall configurado |
|
||||
|
||||
## Tareas Completadas (Fase 1)
|
||||
|
||||
- [x] Task 1: Preparar OS base (timezone, dependencias de compilacion)
|
||||
- [x] Task 2: Instalar MariaDB (asegurado, DBs asterisk y asteriskcdrdb creadas)
|
||||
- [x] Task 3: Instalar Apache + PHP 8.3 (configurado para FreePBX)
|
||||
- [x] Task 4: Compilar Asterisk 20 LTS (con sonidos en espanol, MP3, app_macro)
|
||||
- [x] Task 5: Instalar FreePBX 17 (GUI accesible en http://192.168.10.228/admin/)
|
||||
- [x] Task 6: Configurar firewall nftables (SIP/RTP/SSH/HTTP permitidos)
|
||||
- [x] Task 7: Configurar Fail2ban (jail asterisk: 3 intentos = ban 1 hora)
|
||||
- [x] Task 8: Crear extensiones SIP (1001 y 1002 via PJSIP)
|
||||
|
||||
## Tareas Pendientes (Fase 1)
|
||||
|
||||
- [ ] Task 9: Conectar softphones y probar llamadas internas
|
||||
- [ ] Task 10: Configurar IVR, Ring Groups y Colas
|
||||
- [ ] Configurar IP estatica
|
||||
|
||||
## Tareas Pendientes (Fase 2 — PSTN)
|
||||
|
||||
- [ ] Task 11: Contratar proveedor de trunk SIP (Telnyx recomendado)
|
||||
- [ ] Task 12: Configurar trunk SIP en FreePBX
|
||||
- [ ] Task 13: Configurar rutas salientes (US + MX)
|
||||
- [ ] Task 14: Configurar rutas entrantes (DIDs)
|
||||
- [ ] Task 15: Actualizar firewall para IPs del proveedor trunk
|
||||
- [ ] Task 16: Pruebas end-to-end
|
||||
|
||||
## Extensiones Creadas
|
||||
|
||||
| Extension | Nombre | Voicemail | Estado |
|
||||
|---|---|---|---|
|
||||
| 1001 | Usuario Prueba 1 | Habilitado | Pendiente registro |
|
||||
| 1002 | Usuario Prueba 2 | Habilitado | Pendiente registro |
|
||||
|
||||
## Configuracion de Softphones
|
||||
|
||||
Servidor: `192.168.10.228`
|
||||
Puerto: `5060`
|
||||
Transporte: `UDP`
|
||||
Protocolo: PJSIP
|
||||
|
||||
Las contrasenas de las extensiones se consultan con:
|
||||
```bash
|
||||
asterisk -rx "pjsip show auth 1001-auth" | grep password
|
||||
asterisk -rx "pjsip show auth 1002-auth" | grep password
|
||||
```
|
||||
|
||||
## Archivos de Configuracion Clave
|
||||
|
||||
| Archivo | Proposito |
|
||||
|---|---|
|
||||
| `/etc/asterisk/` | Configuracion de Asterisk (gestionado por FreePBX) |
|
||||
| `/etc/freepbx.conf` | Configuracion de conexion FreePBX a DB |
|
||||
| `/etc/nftables.conf` | Reglas de firewall |
|
||||
| `/etc/fail2ban/jail.d/asterisk.conf` | Jail de Fail2ban para Asterisk |
|
||||
| `/etc/asterisk/logger_logfiles_custom.conf` | Security log para Fail2ban |
|
||||
| `/etc/apache2/envvars` | Apache corriendo como usuario asterisk |
|
||||
| `/etc/apache2/sites-available/freepbx.conf` | VirtualHost de FreePBX |
|
||||
| `/etc/default/asterisk` | Usuario de ejecucion de Asterisk |
|
||||
| `/etc/ld.so.conf.d/asterisk.conf` | Path de librerias /usr/lib64 |
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
1. **Apache corre como usuario `asterisk`** (no www-data) — requerido por FreePBX
|
||||
2. **Se agrego `/usr/lib64` al linker** via `/etc/ld.so.conf.d/asterisk.conf` para que Asterisk encuentre sus librerias
|
||||
3. **Asterisk fue compilado desde fuente** en `/usr/src/asterisk-20.18.2/`
|
||||
4. **La contrasena de MariaDB** para el usuario asterisk esta en `/root/VOIP/.db_password`
|
||||
5. **No cambiar archivos en `/etc/asterisk/` directamente** — FreePBX los sobreescribe. Usar archivos `*_custom.conf` para cambios manuales.
|
||||
|
||||
## Comandos Utiles
|
||||
|
||||
```bash
|
||||
# Estado de servicios
|
||||
systemctl status asterisk
|
||||
systemctl status apache2
|
||||
systemctl status mariadb
|
||||
systemctl status fail2ban
|
||||
|
||||
# Consola de Asterisk
|
||||
asterisk -rvvv
|
||||
|
||||
# Ver extensiones registradas
|
||||
asterisk -rx "pjsip show endpoints"
|
||||
|
||||
# Ver registros de trunks
|
||||
asterisk -rx "pjsip show registrations"
|
||||
|
||||
# Recargar FreePBX
|
||||
fwconsole reload
|
||||
|
||||
# Reparar permisos
|
||||
fwconsole chown
|
||||
|
||||
# Ver IPs baneadas por Fail2ban
|
||||
fail2ban-client status asterisk
|
||||
|
||||
# Ver reglas de firewall
|
||||
nft list ruleset
|
||||
```
|
||||
145
docs/plans/2026-02-15-voip-asterisk-freepbx-design.md
Normal file
145
docs/plans/2026-02-15-voip-asterisk-freepbx-design.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# VoIP PBX Empresarial — Asterisk + FreePBX
|
||||
|
||||
**Fecha**: 2026-02-15
|
||||
**Estado**: Aprobado
|
||||
|
||||
## Objetivo
|
||||
|
||||
Implementar un PBX empresarial con Asterisk + FreePBX en servidor fisico propio, escalable, con presencia en Mexico y Estados Unidos. Comunicacion interna primero, conectividad PSTN despues.
|
||||
|
||||
## Requisitos
|
||||
|
||||
- Uso: PBX empresarial
|
||||
- Escala: Indefinida, debe ser escalable
|
||||
- Hospedaje: Servidor fisico propio
|
||||
- PSTN: Si, en fase posterior
|
||||
- Regiones: Mexico + Estados Unidos
|
||||
|
||||
## Arquitectura
|
||||
|
||||
### Fase 1 — PBX Interno (sin PSTN)
|
||||
|
||||
```
|
||||
[Telefonos IP / Softphones]
|
||||
| SIP/RTP (LAN)
|
||||
v
|
||||
+-------------------------+
|
||||
| Servidor Fisico |
|
||||
| Debian 12 / Rocky 9 |
|
||||
| +-- Asterisk 20 LTS |
|
||||
| +-- FreePBX 17 |
|
||||
| +-- MariaDB |
|
||||
| +-- Apache/Nginx |
|
||||
| +-- Fail2ban + FW |
|
||||
+-------------------------+
|
||||
```
|
||||
|
||||
- Extensiones SIP internas
|
||||
- IVR, buzon de voz, colas de llamadas, conferencias
|
||||
- Sin conexion a PSTN
|
||||
|
||||
### Fase 2 — Conexion PSTN (trunk SIP)
|
||||
|
||||
```
|
||||
[Telefonos IP / Softphones]
|
||||
| SIP/RTP (LAN)
|
||||
v
|
||||
+-------------------------+ +------------------+
|
||||
| Servidor Asterisk |<--SIP-->| Trunk SIP (US) |
|
||||
| FreePBX | | (Telnyx/VoIP.ms)|
|
||||
| | +------------------+
|
||||
| | +------------------+
|
||||
| |<--SIP-->| Trunk SIP (MX) |
|
||||
| | | (Telnyx/Telmex) |
|
||||
+-------------------------+ +------------------+
|
||||
| |
|
||||
v v
|
||||
Llamadas internas Llamadas a PSTN (MX+US)
|
||||
```
|
||||
|
||||
## Hardware Recomendado
|
||||
|
||||
| Componente | Minimo | Recomendado |
|
||||
|---|---|---|
|
||||
| CPU | 2 cores / 2 GHz | 4+ cores / 3+ GHz |
|
||||
| RAM | 4 GB | 8-16 GB |
|
||||
| Disco | 50 GB SSD | 120+ GB SSD (grabaciones) |
|
||||
| Red | 1 Gbps Ethernet | 1 Gbps + IP estatica |
|
||||
| UPS | Recomendado | Obligatorio |
|
||||
|
||||
## Stack de Software
|
||||
|
||||
| Componente | Version | Proposito |
|
||||
|---|---|---|
|
||||
| OS | Debian 12 (Bookworm) | Estabilidad, soporte largo |
|
||||
| Asterisk | 20 LTS | Motor PBX |
|
||||
| FreePBX | 17 | Interfaz web de administracion |
|
||||
| MariaDB | 10.11+ | Base de datos |
|
||||
| PHP | 8.2 | Requerido por FreePBX |
|
||||
| Apache | 2.4 | Servidor web para GUI |
|
||||
| Fail2ban | 1.0+ | Proteccion contra ataques SIP |
|
||||
| iptables/nftables | Sistema | Firewall |
|
||||
|
||||
## Proveedores de Trunk SIP (Fase 2)
|
||||
|
||||
### Opcion A — Un solo proveedor (Recomendada): Telnyx
|
||||
|
||||
| Concepto | Costo |
|
||||
|---|---|
|
||||
| DID US | ~$1.00/mes |
|
||||
| DID Mexico | ~$1.00/mes |
|
||||
| Entrante US | $0.0075/min |
|
||||
| Saliente US | $0.009/min |
|
||||
| Saliente MX (fijo) | ~$0.01-0.02/min |
|
||||
| Saliente MX (celular) | ~$0.02-0.05/min |
|
||||
| Canales simultaneos | Ilimitados (plan por minuto) |
|
||||
| Contratos | Sin contrato |
|
||||
|
||||
### Opcion B — Economico (prepago): VoIP.ms
|
||||
|
||||
| Concepto | Costo |
|
||||
|---|---|
|
||||
| DID US | $0.85/mes |
|
||||
| DID Mexico | ~$3-10/mes |
|
||||
| Entrante US | $0.009/min |
|
||||
| Saliente US | $0.01/min |
|
||||
| Canales simultaneos | Ilimitados |
|
||||
| Contratos | Prepago, sin contrato |
|
||||
|
||||
### Opcion C — Redundancia dual: Telnyx + BulkVS
|
||||
|
||||
Telnyx como primario para ambos paises. BulkVS como respaldo US ultra-barato ($0.06/mes DID, $0.0003/min entrante).
|
||||
|
||||
### Opcion D — Mexico con telco local: Telmex + Telnyx
|
||||
|
||||
Telmex Troncal IP para Mexico (~$224 MXN/mes + IVA, minimo 10 troncales, contrato 12-36 meses, codec G.729). Telnyx para US.
|
||||
|
||||
## Seguridad
|
||||
|
||||
- Firewall: Solo puertos SIP (5060/5061) y RTP (10000-20000) hacia IPs conocidas
|
||||
- Fail2ban: Reglas especificas para Asterisk
|
||||
- TLS/SRTP: Cifrado de senalizacion y audio
|
||||
- Contrasenas fuertes: Minimo 16 caracteres aleatorios para extensiones SIP
|
||||
- VLAN separada para trafico VoIP
|
||||
- Actualizaciones regulares del OS y Asterisk
|
||||
|
||||
## Fases de Implementacion
|
||||
|
||||
### Fase 1: PBX Interno
|
||||
1. Preparar servidor fisico (OS, red, seguridad base)
|
||||
2. Instalar dependencias (PHP, MariaDB, Apache)
|
||||
3. Instalar Asterisk 20 LTS desde fuente
|
||||
4. Instalar FreePBX 17
|
||||
5. Configurar firewall y Fail2ban
|
||||
6. Crear extensiones SIP de prueba
|
||||
7. Configurar IVR, buzones de voz, colas
|
||||
8. Conectar telefonos IP / softphones
|
||||
9. Pruebas de llamadas internas
|
||||
|
||||
### Fase 2: Conexion PSTN
|
||||
1. Contratar proveedor de trunk SIP
|
||||
2. Configurar trunk en FreePBX
|
||||
3. Configurar rutas entrantes/salientes
|
||||
4. Adquirir DIDs (MX + US)
|
||||
5. Pruebas de llamadas externas
|
||||
6. Configurar failover si aplica
|
||||
1153
docs/plans/2026-02-15-voip-asterisk-freepbx-implementation.md
Normal file
1153
docs/plans/2026-02-15-voip-asterisk-freepbx-implementation.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user