"Быстрый
<br />
FreePBX — это веб-интерфейс поверх Asterisk. Установи Asterisk и FreePBX на Debian, настрой SIP-транк через провайдера, создай внутренние номера (Extensions), пропиши входящие и исходящие маршруты — и офисная АТС готова. Минимальное время от чистого сервера до первого звонка — 2-3 часа.<br />
<h2>Диагноз: зачем тебе FreePBX и что тебя ждёт</h2>
<p>Поднял офисную телефонию — она не работает. Провайдер говорит «всё с нашей стороны окей». Коллеги смотрят с немым вопросом. Знакомо?</p>
<p>FreePBX — это графический интерфейс для Asterisk. Asterisk сам по себе настраивается через конфиги в /etc/asterisk/, и это то ещё удовольствие — особенно когда нужно добавить 50 номеров или перенастроить IVR в пятницу вечером. FreePBX превращает это в веб-формы.</p>
<p>Что получишь на выходе из этой статьи:</p>
<ul>
<li>рабочий FreePBX-сервер на <a class="wpil_keyword_link" href="https://it-apteka.com/tag/debian/" target="_blank" rel="noopener" title="Debian" data-wpil-keyword-link="linked" data-wpil-monitor-id="1520">Debian</a></li>
<li>SIP-транк до провайдера</li>
<li>внутренние номера с SIP-телефонами или softphone</li>
<li>входящие и исходящие маршруты</li>
<li>базовый IVR</li>
<li>запись звонков</li>
<li>переадресацию</li>
</ul>
<p>Времени уйдёт 3-4 часа на чистой машине. Нужен сервер с Debian 11 или 12, root-доступ и статический IP. Всё.</p>
<h2>Системные требования и совместимость версий</h2>
<p>Перед тем как качать что попало — проверь совместимость. FreePBX 17 — текущая стабильная версия на момент публикации. Всегда проверяй актуальные релизы на wiki.freepbx.org перед установкой.</p>
<table>
<thead>
<tr>
<th>Компонент</th>
<th>Минимум</th>
<th>Рекомендуется</th>
<th>Примечание</th>
</tr>
</thead>
<tbody>
<tr>
<td>ОС</td>
<td>Debian 11</td>
<td>Debian 12</td>
<td>Ubuntu 22.04 тоже подходит</td>
</tr>
<tr>
<td>Asterisk</td>
<td>20 LTS</td>
<td>21</td>
<td>18 EOL с октября 2025</td>
</tr>
<tr>
<td>FreePBX</td>
<td>16</td>
<td>17</td>
<td>16 поддерживается до 2025</td>
</tr>
<tr>
<td>PHP</td>
<td>8.1</td>
<td>8.2</td>
<td>PHP 7.x не поддерживается с FreePBX 17</td>
</tr>
<tr>
<td>MariaDB</td>
<td>10.6</td>
<td>10.11 LTS</td>
<td><a class="wpil_keyword_link" href="https://it-apteka.com/tag/mysql/" target="_blank" rel="noopener" title="MySQL" data-wpil-keyword-link="linked" data-wpil-monitor-id="1523">MySQL</a> 8.x тоже работает</td>
</tr>
<tr>
<td>CPU</td>
<td>2 ядра</td>
<td>4 ядра</td>
<td>Для <20 одновременных вызовов достаточно 2</td>
</tr>
<tr>
<td>RAM</td>
<td>2 GB</td>
<td>4 GB</td>
<td>При записи звонков +1 GB</td>
</tr>
<tr>
<td>Диск</td>
<td>20 GB</td>
<td>100 GB</td>
<td>Запись звонков ест место быстро</td>
</tr>
</tbody>
</table>
<h2>Архитектура: как это работает</h2>
<p>Перед тем как вбивать первую команду — потрать три минуты и посмотри на схему. Потом будет меньше вопросов «а почему оно не работает».</p>
<pre class="mermaid">
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["SIP-провайдер / PSTN"] -->|"SIP-транк"| B["Asterisk + FreePBX"]
B -->|"Internal SIP"| C["IP-телефоны / Softphone"]
B -->|"Internal SIP"| D["SIP-шлюз / FXS адаптер"]
D -->|"Аналоговая линия"| E["Обычный телефон"]
F["Браузер администратора"] -->|"HTTPS :443"| G["FreePBX Web UI"]
G -->|"PHP / AMI"| B
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style C fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style D fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style E fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style F fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style G fill:#f8fafc,stroke:#f97316,stroke-width:1px,color:#c2410c
</pre>
<p>Смотри: FreePBX — это только интерфейс. Asterisk делает всю реальную работу со звонками. FreePBX пишет конфиги Asterisk на основе того, что ты нажал в браузере. Поэтому если что-то не работает — смотри в логи Asterisk, а не в веб-интерфейс.</p>
<h2>FreePBX Distro vs установка на Debian: что выбрать</h2>
<p>Два пути. Sangoma предлагает FreePBX Distro — это готовый ISO на базе CentOS/AlmaLinux с уже установленным всем. Быстро, удобно, но ты привязан к их дистрибутиву.</p>
<p><a href="https://it-apteka.com/ustanovka-n8n-v-lxc-kontejner-proxmox-polnaja-instrukcija-ot-a-do-ja/" title="Установка N8N в LXC контейнер Proxmox: полная инструкция от А до Я" target="_blank" rel="noopener" data-wpil-monitor-id="1511">Установка на Debian даёт полный</a> контроль. Ты сам управляешь обновлениями ОС, безопасностью, системными сервисами. В продакшне я предпочитаю именно этот путь.</p>
<table>
<thead>
<tr>
<th>Параметр</th>
<th>FreePBX Distro</th>
<th>Debian + FreePBX</th>
</tr>
</thead>
<tbody>
<tr>
<td>Время установки</td>
<td>30-40 минут</td>
<td>1-2 часа</td>
</tr>
<tr>
<td>Контроль над ОС</td>
<td>Ограничен</td>
<td>Полный</td>
</tr>
<tr>
<td>Обновления безопасности</td>
<td>Зависят от Sangoma</td>
<td>Стандартный Debian</td>
</tr>
<tr>
<td>Для тестовой среды</td>
<td>Отлично</td>
<td>Нормально</td>
</tr>
<tr>
<td>Для продакшна</td>
<td>Приемлемо</td>
<td>Предпочтительно</td>
</tr>
<tr>
<td>Поддержка Sangoma</td>
<td>Официальная</td>
<td>Сообщество</td>
</tr>
</tbody>
</table>
<p>Дальше рассматриваем <a href="https://it-apteka.com/openmediavault-8-ustanovka-i-nastrojka-nas-na-debian-docker-raid-smb-https/" title="OpenMediaVault 8: установка и настройка NAS на Debian (Docker, RAID, SMB, HTTPS)" target="_blank" rel="noopener" data-wpil-monitor-id="1512">установку на Debian</a> 12. Если тебе нужен Distro — качай ISO с sangoma.com и устанавливай как обычный Linux.</p>
<h2>Таблица портов FreePBX</h2>
<table>
<thead>
<tr>
<th>Порт</th>
<th>Протокол</th>
<th>Сервис</th>
<th>Направление</th>
</tr>
</thead>
<tbody>
<tr>
<td>80</td>
<td>TCP</td>
<td>FreePBX Web UI (HTTP)</td>
<td>Входящий</td>
</tr>
<tr>
<td>443</td>
<td>TCP</td>
<td>FreePBX Web UI (HTTPS)</td>
<td>Входящий</td>
</tr>
<tr>
<td>5060</td>
<td>UDP/TCP</td>
<td>SIP-сигнализация</td>
<td>Входящий/Исходящий</td>
</tr>
<tr>
<td>5061</td>
<td>TCP</td>
<td>SIP TLS</td>
<td>Входящий/Исходящий</td>
</tr>
<tr>
<td>10000-20000</td>
<td>UDP</td>
<td>RTP (медиапотоки)</td>
<td>Входящий/Исходящий</td>
</tr>
<tr>
<td>4445</td>
<td>TCP</td>
<td>Asterisk Manager Interface (AMI)</td>
<td>Локальный</td>
</tr>
<tr>
<td>8001</td>
<td>TCP</td>
<td>Asterisk REST Interface (ARI)</td>
<td>Локальный</td>
</tr>
<tr>
<td>8088-8089</td>
<td>TCP</td>
<td>Asterisk WebSocket</td>
<td>Входящий</td>
</tr>
</tbody>
</table>
<p>Вот тут важно: порты 5060 и 10000-20000 должны быть открыты для SIP-провайдера. Не для всего интернета — только для IP-адресов провайдера. Об этом подробнее в разделе про <a class="wpil_keyword_link" href="https://it-apteka.com/category/security/" target="_blank" rel="noopener" title="Безопасность" data-wpil-keyword-link="linked" data-wpil-monitor-id="1521">безопасность</a>.</p>
<h2>Установка FreePBX на Debian 12</h2>
<h3>Подготовка системы</h3>
<p>Начинаем с чистого Debian 12 Minimal. Никаких десктопных окружений, никакого лишнего ПО.</p>
<p>Обнови систему и установи базовые зависимости:</p>
<pre><code class="language-bash">
apt update && apt upgrade -y
apt install -y wget curl git unzip lsb-release gnupg2 \
build-essential linux-headers-$(uname -r) \
sox libsox-fmt-all mpg123 ffmpeg \
net-tools nload htop vim
</code></pre>
<p>Отключи AppArmor — он конфликтует с Asterisk:</p>
<pre><code class="language-bash">
systemctl stop apparmor
systemctl disable apparmor
apt purge -y apparmor
</code></pre>
<h3>Установка MariaDB</h3>
<p>FreePBX хранит всю конфигурацию в базе данных. Ставим MariaDB 10.11 LTS:</p>
<pre><code class="language-bash">
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=10.11
apt update
apt install -y mariadb-server mariadb-client
systemctl enable --now mariadb
</code></pre>
<p>Запусти первоначальную настройку безопасности:</p>
<pre><code class="language-bash">
mysql_secure_installation
</code></pre>
<p>Отвечай: пароль root — установи сложный и запомни его. Анонимных пользователей — удали. Удалённый root — запрети. Тестовую БД — удали. Перезагрузи привилегии — да.</p>
<p>Создай базу и пользователя для FreePBX:</p>
<pre><code class="language-sql">
CREATE DATABASE asterisk;
CREATE DATABASE asteriskcdrdb;
CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'СМЕНИ_ПАРОЛЬ_ЗДЕСЬ';
GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost';
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO 'asterisk'@'localhost';
FLUSH PRIVILEGES;
EXIT;
</code></pre>
<h3>Установка PHP 8.2</h3>
<p>FreePBX 17 требует PHP 8.1 или 8.2. В Debian 12 по умолчанию PHP 8.2 — отлично.</p>
<pre><code class="language-bash">
apt install -y php8.2 php8.2-cli php8.2-common php8.2-curl \
php8.2-mbstring php8.2-mysql php8.2-gd php8.2-xml \
php8.2-zip php8.2-bcmath php8.2-intl php8.2-opcache \
php8.2-readline libapache2-mod-php8.2
</code></pre>
<p>Установи Apache (FreePBX использует его как веб-сервер):</p>
<pre><code class="language-bash">
apt install -y apache2
a2enmod rewrite ssl headers expires
systemctl enable --now apache2
</code></pre>
<h3>Установка Asterisk</h3>
<p>Asterisk собираем из исходников. Да, это дольше, но ты получаешь актуальную версию с нужными модулями.</p>
<pre><code class="language-bash">
cd /usr/src
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21-current.tar.gz
tar -xzf asterisk-21-current.tar.gz
cd asterisk-21.*/
</code></pre>
<p>Установи зависимости для сборки:</p>
<pre><code class="language-bash">
contrib/scripts/install_prereq install
</code></pre>
<p>Скрипт спросит про DAHDI и DPNSS — обычно не нужны. Жми Enter на всём.</p>
<p>Настрой и собери:</p>
<pre><code class="language-bash">
./configure --with-jansson-bundled --with-pjproject-bundled
make menuselect
</code></pre>
<p>В menuselect убедись что включены:</p>
<ul>
<li>в Core Sound Packages: CORE-SOUNDS-RU-ULAW (русские промпты)</li>
<li>в Extra Sound Packages: EXTRA-SOUNDS-RU-ULAW</li>
<li>в Applications: app_macro (нужен для FreePBX)</li>
</ul>
<pre><code class="language-bash">
make -j$(nproc)
make install
make samples
make config
ldconfig
</code></pre>
<p>Создай системного пользователя для Asterisk:</p>
<pre><code class="language-bash">
groupadd -r asterisk
useradd -r -d /var/lib/asterisk -s /sbin/nologin -g asterisk asterisk
usermod -aG audio,dialout asterisk
</code></pre>
<p>Настрой права:</p>
<pre><code class="language-bash">
chown -R asterisk:asterisk /etc/asterisk /var/lib/asterisk \
/var/log/asterisk /var/spool/asterisk /usr/lib/asterisk
</code></pre>
<p>Укажи пользователя в конфиге Asterisk:</p>
<pre><code class="language-bash">
sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/' /etc/default/asterisk
sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/' /etc/default/asterisk
</code></pre>
<p>Запусти и проверь:</p>
<pre><code class="language-bash">
systemctl enable --now asterisk
systemctl status asterisk
</code></pre>
<p>Должен увидеть active (running). Если нет — смотри journalctl -u asterisk -n 50.</p>
<h3>Установка FreePBX</h3>
<p>Теперь сам FreePBX. Скачай актуальную версию — проверь на github.com/FreePBX перед скачиванием:</p>
<pre><code class="language-bash">
cd /usr/src
wget https://github.com/FreePBX/freepbx/releases/download/release/17.0/freepbx-17.0-latest.tgz
tar -xzf freepbx-17.0-latest.tgz
cd freepbx
</code></pre>
<p>Запусти установщик:</p>
<pre><code class="language-bash">
php ./install -n \
--dbhost=localhost \
--dbname=asterisk \
--dbuser=asterisk \
--dbpass=ТВОЙ_ПАРОЛЬ_ОТ_БД \
--user=asterisk \
--group=asterisk \
--webroot=/var/www/html
</code></pre>
<p>Установка займёт 10-15 минут. Скрипт установит базовые модули FreePBX.</p>
<p>После установки запусти FreePBX:</p>
<pre><code class="language-bash">
fwconsole start
fwconsole reload
</code></pre>
<p>Настрой cron для FreePBX (он использует cron для задач обслуживания):</p>
<pre><code class="language-bash">
echo "*/5 * * * * asterisk /usr/sbin/fwconsole jobscheduler run > /dev/null 2>&1" > /etc/cron.d/freepbx
</code></pre>
<p>Настрой Apache для FreePBX:</p>
<pre><code class="language-text">
# /etc/apache2/sites-available/freepbx.conf
<VirtualHost *:80>
ServerName pbx.yourdomain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/freepbx_error.log
CustomLog ${APACHE_LOG_DIR}/freepbx_access.log combined
</VirtualHost>
</code></pre>
<pre><code class="language-bash">
a2ensite freepbx
a2dissite 000-default
systemctl reload apache2
</code></pre>
<p>Открой браузер и перейди на IP-адрес сервера. Увидишь мастер первоначальной настройки FreePBX. Создай учётную запись администратора.</p>
<h2>Настройка FreePBX: первые шаги в интерфейсе</h2>
<p>Ты в веб-интерфейсе. Сверху — главное меню. Почти всё что тебе нужно живёт в разделах Connectivity и Applications.</p>
<p>Первым делом зайди в Admin — Module Admin и обнови все модули. Не пропускай этот шаг — базовая установка часто содержит старые версии.</p>
<pre><code class="language-bash">
fwconsole ma upgradeall
fwconsole reload
</code></pre>
<h3>Настройка SIP-настроек Asterisk</h3>
<p>Перед тем как создавать транки — зайди в Admin — Advanced Settings. Убедись что:</p>
<ul>
<li>SIP Channel Driver: chan_pjsip (рекомендуется, не chan_sip)</li>
<li>SIP NAT: установи External IP если сервер за NAT</li>
</ul>
<p>Если сервер за NAT — зайди в Settings — Asterisk SIP Settings. Укажи внешний IP или hostname. Добавь локальные <a href="https://it-apteka.com/category/networks/" title="Сети" target="_blank" rel="noopener" data-wpil-monitor-id="1508">сети в Local Networks</a>. Это критично для правильной работы RTP-медиапотоков.</p>
<h2>Настройка транка FreePBX (SIP Trunk)</h2>
<p>Транк — это соединение с провайдером телефонии. Через него идут входящие и исходящие звонки на городские номера.</p>
<h3>Добавление SIP-транка</h3>
<p>Перейди в Connectivity — Trunks — Add Trunk — Add SIP (chan_pjsip) Trunk.</p>
<p>Заполни вкладку General:</p>
<ul>
<li>Trunk Name: имя на английском, например «Provider_Rostelecom»</li>
<li>Outbound CallerID: твой городской номер в формате +79XXXXXXXXX</li>
</ul>
<p>Вкладка pjsip Settings — General:</p>
<ul>
<li>Username: логин от провайдера</li>
<li>Secret: пароль от провайдера</li>
<li>SIP Server: адрес SIP-сервера провайдера</li>
<li>SIP Server Port: обычно 5060</li>
<li>Context: from-trunk</li>
</ul>
<p>Вкладка pjsip Settings — Advanced:</p>
<ul>
<li>Registration: Send, если нужна регистрация (большинство провайдеров требует)</li>
<li>Auth_rejection_permanent: No</li>
</ul>
<p>Нажми Submit, затем Apply Config.</p>
<p>Проверь регистрацию транка:</p>
<pre><code class="language-bash">
asterisk -rx "pjsip show registrations"
</code></pre>
<p>Должен увидеть статус Registered. Если нет — смотри раздел Troubleshooting.</p>
<h2>Создание внутренних номеров FreePBX (Extensions)</h2>
<p>Внутренние номера — это SIP-аккаунты для телефонов и softphone в офисе.</p>
<p>Перейди в Applications — Extensions — Add Extension — Add New SIP [chan_pjsip] Extension.</p>
<p>Вкладка General:</p>
<ul>
<li>User Extension: номер, например 101</li>
<li>Display Name: Имя сотрудника</li>
<li>Secret: автоматически сгенерируется — скопируй или задай свой</li>
</ul>
<p>Вкладка Advanced — вот тут важно для работы за NAT:</p>
<ul>
<li>Transport: 0.0.0.0-udp</li>
<li>Force rport: Yes</li>
<li>Ice Support: Yes (для WebRTC-телефонов)</li>
</ul>
<p>Submit — Apply Config.</p>
<p>Данные для SIP-телефона: сервер — IP твоего FreePBX, логин — 101, пароль — из поля Secret. Сделай так для каждого сотрудника. Номера обычно начинают с 100 или 200 — не принципиально.</p>
<h2>Настройка входящих маршрутов FreePBX</h2>
<p>Входящий маршрут определяет что делать со звонком который пришёл от провайдера. Куда его отправить — на конкретный номер, очередь, IVR.</p>
<p>Перейди в Connectivity — Inbound Routes — Add Incoming Route.</p>
<p>Заполни:</p>
<ul>
<li>Description: внятное описание, например «Основной городской номер»</li>
<li>DID Number: твой городской номер. Если провайдер шлёт его в формате 9XXXXXXXXX — укажи именно так. Если +79 — укажи с плюсом. Узнай у провайдера или смотри в логах Asterisk</li>
<li>Set Destination: куда отправить звонок</li>
</ul>
<p>Если у тебя один номер и нужно просто направить звонки на конкретного сотрудника — в Set Destination выбери Extensions и номер 101. Нажми Submit — Apply Config.</p>
<p>Позвони сам себе с мобильного — телефон 101 должен зазвонить.</p>
<h2>Настройка исходящих маршрутов FreePBX</h2>
<p>Исходящий маршрут говорит Asterisk через какой транк звонить и на какие номера.</p>
<p>Перейди в Connectivity — Outbound Routes — Add Outbound Route.</p>
<p>Вкладка Route Settings:</p>
<ul>
<li>Route Name: например «Outbound_All»</li>
<li>Trunk Sequence: выбери свой транк</li>
</ul>
<p>Вкладка Dial Patterns — это самое интересное. Здесь ты описываешь какие номера идут через этот маршрут:</p>
<table>
<thead>
<tr>
<th>Паттерн</th>
<th>Что значит</th>
<th>Пример</th>
</tr>
</thead>
<tbody>
<tr>
<td>NXXXXXX</td>
<td>7-значный номер (городской)</td>
<td>5551234</td>
</tr>
<tr>
<td>8XXXXXXXXXX</td>
<td>Мобильный через 8</td>
<td>89161234567</td>
</tr>
<tr>
<td>+7XXXXXXXXXX</td>
<td>Мобильный через +7</td>
<td>+79161234567</td>
</tr>
<tr>
<td>00X.</td>
<td>Международный</td>
<td>00491234567</td>
</tr>
</tbody>
</table>
<p>Submit — Apply Config. Попробуй позвонить с внутреннего номера наружу.</p>
<h2>Настройка IVR FreePBX (голосовое меню)</h2>
<p>IVR — это «Нажмите 1 для отдела продаж, нажмите 2 для технической поддержки». Делается в два шага: сначала запись или загрузка аудио, потом создание IVR.</p>
<h3>Загрузка аудиозаписи</h3>
<p>Перейди в Admin — System Recordings — Add Recording.</p>
<p>Можно записать через телефон — набери *77 с внутреннего номера. Или загрузи готовый MP3/WAV файл. Формат для Asterisk: WAV, 8kHz, моно, PCM.</p>
<p>Конвертируй файл если нужно:</p>
<pre><code class="language-bash">
sox input.mp3 -r 8000 -c 1 -e signed-integer -b 16 output.wav
</code></pre>
<h3>Создание IVR</h3>
<p>Перейди в Applications — IVR — Add IVR.</p>
<p>Заполни:</p>
<ul>
<li>IVR Name: например «Main_IVR»</li>
<li>Announcement: выбери загруженную запись</li>
<li>Timeout: 10 секунд</li>
<li>Invalid Retries: 3</li>
</ul>
<p>В разделе IVR Entries добавь опции:</p>
<ul>
<li>Digits: 1, Destination: Extensions — 101 (отдел продаж)</li>
<li>Digits: 2, Destination: Extensions — 102 (техподдержка)</li>
<li>Digits: 0, Destination: Extensions — 100 (секретарь)</li>
</ul>
<p>Submit. Теперь в настройках входящего маршрута смени Set Destination на IVR — Main_IVR. Apply Config.</p>
<h2>Запись звонков в FreePBX</h2>
<p>Запись включается на уровне Extensions или Queues. Чини сейчас, пока не понадобилось.</p>
<p>Для конкретного внутреннего номера: Applications — Extensions — нужный номер — вкладка Advanced:</p>
<ul>
<li>Call Recording: Always, Incoming, Outgoing или On Demand</li>
<li>Call Recording Format: wav49 (сжатый) или wav (несжатый)</li>
</ul>
<p>Записи хранятся в /var/spool/asterisk/monitor/. Слушать можно через Admin — Call Event Log.</p>
"Внимание:
<br />
Запись звонков ест диск очень быстро. Один час разговора в wav — около 60 MB. При 10 активных операторах за рабочий день накапливается несколько гигабайт. Настрой автоматическую очистку старых записей.<br />
<p>Настрой автоматическую очистку через cron:</p>
<pre><code class="language-bash">
# Удалять записи старше 90 дней
echo "0 2 * * * asterisk find /var/spool/asterisk/monitor/ -name '*.wav' -mtime +90 -delete" >> /etc/cron.d/freepbx
</code></pre>
<h2>Переадресация звонков в FreePBX</h2>
<p>Три вида переадресации — разберись в них раз и навсегда.</p>
<p>Первый — безусловная переадресация (Call Forward Unconditional). Все звонки уходят на другой номер. Включается пользователем с телефона набором *72 + номер. Отключить: *73.</p>
<p>Второй — переадресация при недоступности (Call Forward No Answer). Если не ответил за N секунд — переадресация. *90 + номер / отключить *91.</p>
<p>Третий — переадресация при занятости. *52 + номер / *53.</p>
<p>Административно настроить переадресацию для номера: Applications — Extensions — нужный номер — вкладка Advanced — Call Forwarding. Укажи номер назначения.</p>
<p>Для более сложных сценариев используй Follow Me: Applications — Follow Me. Там можно указать несколько номеров, которые будут звонить одновременно или последовательно.</p>
<h2>Настройка модулей FreePBX</h2>
<p>FreePBX расширяется через модули. Бесплатные модули покрывают 90% задач среднего офиса. Платные модули от Sangoma нужны для конкретных сценариев: CRM-интеграции, продвинутой отчётности, видеозвонков.</p>
<p>Управление модулями: Admin — Module Admin.</p>
<p>Полезные бесплатные модули которые стоит установить сразу:</p>
<ul>
<li>Call Recording — запись звонков</li>
<li>Conference Pro — конференц-звонки</li>
<li>Queues — очереди звонков для call-центра</li>
<li>Ring Groups — группы обзвона</li>
<li>Time Conditions — маршрутизация по времени (рабочие/нерабочие часы)</li>
<li>Announcements — воспроизведение объявлений</li>
<li>DISA — Direct Inward System Access</li>
</ul>
<p>Через командную строку:</p>
<pre><code class="language-bash">
fwconsole ma install callrecording
fwconsole ma install conferences
fwconsole ma install queues
fwconsole ma install ringgroups
fwconsole ma install timeconditions
fwconsole reload
</code></pre>
<h2>Маршрутизация по времени (нерабочие часы)</h2>
<p>Это то что отличает взрослую АТС от наколеночной. В нерабочее время — проигрываем сообщение и/или переводим на голосовую почту.</p>
<p>Создай расписание: Applications — Time Conditions — Add Time Condition:</p>
<ul>
<li>Time Group: создай через Applications — Time Groups (Пн-Пт, 9:00-18:00)</li>
<li>Matched Destination: IVR (рабочее время)</li>
<li>Unmatched Destination: Announcement — «Мы работаем с 9 до 18»</li>
</ul>
<p>В входящем маршруте замени Set Destination на Time Condition.</p>
<h2>Безопасность FreePBX-сервера</h2>
"Критически
<br />
Незащищённый FreePBX-сервер с открытым 5060 портом в интернете взламывают за несколько часов. Атакующие используют его для дорогих международных звонков. Счёт провайдера может прийти на десятки тысяч рублей за одну ночь. Этот раздел обязателен к выполнению.<br />
<h3>Fail2ban для Asterisk</h3>
<pre><code class="language-bash">
apt install -y fail2ban
</code></pre>
<p>Создай конфиг для Asterisk:</p>
<pre><code class="language-text">
# /etc/fail2ban/jail.d/asterisk.conf
[asterisk]
enabled = true
port = 5060,5061
protocol = udp
filter = asterisk
logpath = /var/log/asterisk/fail2ban
maxretry = 5
bantime = 86400
findtime = 600
</code></pre>
<pre><code class="language-bash">
systemctl enable --now fail2ban
</code></pre>
<h3>UFW Firewall</h3>
<pre><code class="language-bash">
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
# SSH - только с доверенных IP
ufw allow from 192.168.1.0/24 to any port 22
# Веб-интерфейс FreePBX - только из локальной сети
ufw allow from 192.168.1.0/24 to any port 80
ufw allow from 192.168.1.0/24 to any port 443
# SIP - только от провайдера (замени на IP провайдера)
ufw allow from 1.2.3.4 to any port 5060 proto udp
ufw allow from 1.2.3.4 to any port 5061 proto tcp
# SIP от локальных телефонов
ufw allow from 192.168.1.0/24 to any port 5060 proto udp
# RTP - от провайдера и локальной сети
ufw allow from 1.2.3.4 to any port 10000:20000 proto udp
ufw allow from 192.168.1.0/24 to any port 10000:20000 proto udp
ufw enable
</code></pre>
<h3>Отключи SIP-сканирование в Asterisk</h3>
<p>В /etc/asterisk/pjsip.conf добавь в секцию [global]:</p>
<pre><code class="language-text">
[global]
endpoint_identifier_order = auth_username,username,ip
</code></pre>
<p>Это значит: Asterisk не будет отвечать неизвестным источникам, что сильно затрудняет enumeration-атаки.</p>
<h3>Смени SIP-порт</h3>
<p>Опционально, но эффективно — поменяй стандартный порт 5060 на нестандартный. 90% сканеров проходят мимо.</p>
<p>В FreePBX: Settings — Asterisk SIP Settings — поменяй Bind Port с 5060 на, например, 15060. Не забудь обновить firewall-правила.</p>
<h3>Права доступа к веб-интерфейсу</h3>
<p>Включи Intrusion Detection в FreePBX: Admin — System Admin — Intrusion Detection. Это встроенный fail2ban для веб-интерфейса.</p>
<p>Смени пароль администратора: Admin — User Management. Используй длинный пароль — не менее 16 символов.</p>
<h2>Резервное копирование FreePBX</h2>
<p>Бэкап настраивается через Admin — <a class="wpil_keyword_link" href="https://it-apteka.com/category/rezervnoe-kopirovanie/" target="_blank" rel="noopener" title="Резервное копирование" data-wpil-keyword-link="linked" data-wpil-monitor-id="1522">Backup</a> & Restore. Что бэкапить обязательно:</p>
<ul>
<li>база данных asterisk и asteriskcdrdb</li>
<li>/etc/asterisk/ (конфиги)</li>
<li>/var/lib/asterisk/ (звуковые файлы, prompts)</li>
<li>/var/spool/asterisk/monitor/ (записи звонков — если нужны)</li>
</ul>
<p>Создай автоматический бэкап через Admin — Backup & Restore — Add Backup:</p>
<ul>
<li>Schedule: Daily, время 03:00</li>
<li>Storage Location: локальный или удалённый (SFTP/S3)</li>
<li>Retention: 7 дней локально</li>
</ul>
<p>Или вручную через CLI:</p>
<pre><code class="language-bash">
fwconsole backup --backup-name="manual_$(date +%Y%m%d)"
</code></pre>
<p>Бэкап проверяй. Бэкап который ты не проверял — это просто файл на диске с неизвестным содержимым.</p>
<h2>Обновление FreePBX</h2>
<p>Перед обновлением — всегда бэкап. После бэкапа — бэкап ещё раз, потому что первый раз всегда почему-то не туда.</p>
<p>Обновление модулей:</p>
<pre><code class="language-bash">
fwconsole ma upgradeall
fwconsole reload
</code></pre>
<p>Обновление самого FreePBX:</p>
<pre><code class="language-bash">
fwconsole selfupgrade
fwconsole reload
</code></pre>
<p>Что проверить после обновления:</p>
<ul>
<li>статус сервисов: systemctl status asterisk apache2 mariadb</li>
<li>регистрацию транков: asterisk -rx «pjsip show registrations»</li>
<li>тестовый звонок внутри и наружу</li>
</ul>
<p>Если что-то сломалось — откат через Backup & Restore — выбери последний рабочий бэкап — Restore.</p>
<h2>Проверка работоспособности</h2>
<p>Прошёл все шаги — проверяй систематически, не по-ощущению.</p>
<p>Статус всех сервисов:</p>
<pre><code class="language-bash">
systemctl status asterisk apache2 mariadb fail2ban
</code></pre>
<p>Проверь регистрацию транков:</p>
<pre><code class="language-bash">
asterisk -rx "pjsip show registrations"
asterisk -rx "pjsip show endpoints"
</code></pre>
<p>Проверь активные каналы:</p>
<pre><code class="language-bash">
asterisk -rx "core show channels"
</code></pre>
<p>Посмотри статус внутренних номеров:</p>
<pre><code class="language-bash">
asterisk -rx "pjsip show contacts"
</code></pre>
<p>Зарегистрированные контакты покажут состояние: Avail (доступен), Unavail (недоступен), Unknown.</p>
<p>Тест звонка из консоли Asterisk:</p>
<pre><code class="language-bash">
asterisk -rx "channel originate Local/101@from-internal application Playback tt-monkeys"
</code></pre>
<p>Если телефон 101 зазвонил и ты услышал «обезьян» — всё работает.</p>
<h2>Troubleshooting: типичные проблемы FreePBX</h2>
<h3>Транк не регистрируется</h3>
"Транк
<br />
Самая частая причина — неправильные данные от провайдера или NAT-проблема. Смотри логи Asterisk в реальном времени.<br />
<pre><code class="language-bash">
asterisk -rvvv
# В консоли Asterisk:
pjsip set logger on
# Попробуй перерегистрироваться:
pjsip send register TrunkName
</code></pre>
<p>Что искать в логах: 403 Forbidden (неверный пароль), 404 Not Found (неверный сервер), 408 Timeout (недоступен сервер или firewall блокирует).</p>
<h3>Звонок проходит, но нет звука</h3>
<p>Классика. Причина — NAT. RTP-пакеты не доходят.</p>
<ul>
<li>Проверь External IP в Settings — Asterisk SIP Settings</li>
<li>Проверь что порты 10000-20000 UDP открыты в firewall</li>
<li>Включи RTP debugging: asterisk -rx «rtp set debug on»</li>
</ul>
<h3>WebRTC-телефон не подключается</h3>
<p>WebRTC требует WSS (WebSocket Secure) и HTTPS. Нужен SSL-сертификат.</p>
<pre><code class="language-bash">
apt install -y certbot python3-certbot-apache
certbot --apache -d pbx.yourdomain.com
</code></pre>
<p>После получения сертификата перейди в Settings — Asterisk SIP Settings — TLS/SSL — включи TLS и укажи пути к сертификату.</p>
<h3>Неверный DID — звонки не попадают в маршрут</h3>
<p>Посмотри в каком формате провайдер шлёт DID:</p>
<pre><code class="language-bash">
asterisk -rvvv
# Позвони с мобильного и смотри в консоли:
# "Accepting call" - будет написан DID
</code></pre>
<p>В входящем маршруте поставь именно тот формат который видишь в логах.</p>
<h3>FreePBX веб-интерфейс не открывается</h3>
<pre><code class="language-bash">
# Проверь Apache
systemctl status apache2
journalctl -u apache2 -n 30
# Проверь FreePBX
fwconsole status
# Перезапусти FreePBX
fwconsole restart
</code></pre>
<h3>Ошибка «Could not execute PJSIP reload»</h3>
<pre><code class="language-bash">
systemctl restart asterisk
fwconsole reload
</code></pre>
<p>Если не помогло — смотри /var/log/asterisk/full на синтаксические ошибки в конфигах.</p>
<h3>Сбросить пароль администратора FreePBX</h3>
<pre><code class="language-bash">
fwconsole userman --list
fwconsole userman --setpassword admin НОВЫЙ_ПАРОЛЬ
</code></pre>
<h3>Нет звука в записях звонков</h3>
<p>Проверь что sox установлен:</p>
<pre><code class="language-bash">
which sox
sox --version
</code></pre>
<p>Если не установлен — установи. FreePBX использует sox для конвертации форматов записи.</p>
<h2>Альтернативные решения</h2>
<p>FreePBX — не единственный вариант для офисной АТС на базе Asterisk.</p>
<p>3CX — коммерческое решение с бесплатным базовым тарифом. Проще в настройке, лучше документация, но платная лицензия при росте. Хороший вариант если нет своего линуксоида и нужна поддержка.</p>
<p>Issabel — форк FreePBX, развивается самостоятельно после того как Elastix закрылся. Совместим с FreePBX модулями. Можно рассмотреть если нужен CentOS-based дистрибутив.</p>
<p>Голое Asterisk без FreePBX — для тех кто хочет полный контроль и не боится конфигов. Меньше зависимостей, выше производительность, но конфигурирование вручную.</p>
<p><a href="https://it-apteka.com/nastrojka-ntp-na-mikrotik-klient-i-server-shpargalka-dlja-ros-6-i-7/" title="Настройка NTP на MikroTik: клиент и сервер — шпаргалка для ROS 6 и 7" target="_blank" rel="noopener" data-wpil-monitor-id="1513">MikroTik RouterOS с встроенным SIP сервером</a> — для очень маленьких офисов до 10 человек. Не FreePBX, но иногда достаточно.</p>
<h2>Профилактика: как не сломать снова</h2>
<p>Раз в неделю: asterisk -rx «pjsip show registrations» — убедись что транки живые.</p>
<p>Раз в месяц: fwconsole ma upgradeall — обновляй модули. Не обновлять тоже плохо, но и обновлять в пятницу вечером тоже не надо. Делай в среду утром.</p>
<p>Настрой <a class="wpil_keyword_link" href="https://it-apteka.com/category/monitoring/" target="_blank" rel="noopener" title="Мониторинг" data-wpil-keyword-link="linked" data-wpil-monitor-id="1519">мониторинг</a>. Минимум — проверка доступности порта 5060 и веб-интерфейса через Zabbix или простой <a class="wpil_keyword_link" href="https://it-apteka.com/category/scripts/" target="_blank" rel="noopener" title="Скрипты" data-wpil-keyword-link="linked" data-wpil-monitor-id="1524">скрипт</a>:</p>
<pre><code class="language-bash">
#!/bin/bash
# /usr/local/bin/check-freepbx.sh
RESULT=$(asterisk -rx "pjsip show registrations" 2>/dev/null | grep -c "Registered")
if [ "$RESULT" -lt 1 ]; then
echo "ALERT: FreePBX trunk not registered" | mail -s "PBX Alert" admin@company.ru
fi
</code></pre>
<pre><code class="language-bash">
echo "*/5 * * * * root /usr/local/bin/check-freepbx.sh" >> /etc/cron.d/pbx-monitor
</code></pre>
<p>Документируй. Запиши в конфлюенс или хотя бы в текстовый файл: IP-адреса телефонов, логины транков, структуру IVR. Через год ты скажешь себе спасибо. Потому что капля никотина убивает лошадь, а один конфиг без документации убивает весь отдел в 23:00 в пятницу.</p>
<h2>FAQ по FreePBX</h2>
<h3>Почему Asterisk запускается, но телефоны не регистрируются?</h3>
<p>Чаще всего — firewall блокирует UDP 5060. Второй вариант — <a href="https://it-apteka.com/linux-sip-proksi-server-polnoe-rukovodstvo-po-kamailio-opensips-i-asterisk/" title="Linux SIP прокси сервер: полное руководство по Kamailio, OpenSIPS и Asterisk" target="_blank" rel="noopener" data-wpil-monitor-id="1510">телефоны пытаются подключиться по SIP</a>, а FreePBX настроен на PJSIP (разные порты и протоколы). Проверь через asterisk -rx «pjsip show endpoints» — есть ли твои номера в списке. Если есть, но статус Unavail — смотри сеть и firewall.</p>
<h3>Как проверить качество звука и найти причину помех?</h3>
<pre><code class="language-bash">
asterisk -rx "rtp set debug on"
asterisk -rx "pjsip set logger on"
</code></pre>
<p>Смотри на потерю пакетов в RTP-статистике. Плохое качество почти всегда это либо потери пакетов на сети, либо неправильный кодек. В транке и Extensions должен быть один кодек — ulaw или alaw для России. G.729 экономит трафик, но требует лицензию.</p>
<h3>Что делать если FreePBX завис и не отвечает через веб?</h3>
<pre><code class="language-bash">
systemctl restart apache2
fwconsole restart
# Если не помогло:
systemctl restart asterisk
</code></pre>
<p>Если вис повторяется — смотри /var/log/apache2/error.log и /var/log/asterisk/full. Скорее всего или не хватает памяти, или MySQL завис.</p>
<h3>Можно ли использовать FreePBX с несколькими SIP-провайдерами одновременно?</h3>
<p>Да. Создай несколько транков — по одному для каждого провайдера. В исходящих маршрутах настрой приоритет: основной транк первый, резервный второй. FreePBX будет пробовать первый, и если он недоступен — переключится на второй. Это делается через <a href="https://it-apteka.com/nastrojka-vlan-na-mikrotik-routeros-7-polnyj-gajd-po-bridge-trunk-i-wi-fi/" title="Настройка VLAN на MikroTik (RouterOS 7): полный гайд по bridge, trunk и Wi-Fi" target="_blank" rel="noopener" data-wpil-monitor-id="1509">Trunk Sequence в настройках</a> исходящего маршрута.</p>
<h3>Где хранятся конфиги FreePBX и можно ли их редактировать вручную?</h3>
<p>Конфиги Asterisk лежат в /etc/asterisk/. FreePBX генерирует их из базы данных. Если ты отредактируешь конфиг вручную — FreePBX перезапишет его при следующем apply config. Для кастомных настроек используй файлы с суффиксом _custom: например extensions_custom.conf. FreePBX включает эти файлы через include, но не перезаписывает.</p>
<h3>Как настроить FreePBX за NAT роутером?</h3>
<p>На роутере настрой port forwarding: UDP 5060 и UDP 10000-20000 на IP FreePBX-сервера. В FreePBX перейди Settings — Asterisk SIP Settings — укажи External IP Address (внешний IP роутера) и Local Network (например 192.168.1.0/24). Сохрани и примени.</p>
<h2>Итог</h2>
<p>Ты поднял FreePBX с нуля: Asterisk установлен, транк зарегистрирован, внутренние номера работают, IVR крутится, запись ведётся. Это рабочая офисная АТС, которую можно масштабировать до сотен номеров.</p>
<p>Дальше — по потребностям. Нужен call-центр — добавляй модуль Queues и настраивай очереди. Нужна интеграция с CRM — смотри в сторону AGI-скриптов или модуля Superfecta для caller ID lookup. Нужен мобильный доступ — настраивай WebRTC или VPN + SIP-клиент на смартфоне.</p>
"Если
<br />
Телефония любит нюансы: у каждого провайдера свои форматы номеров, у каждой сети свои NAT-особенности. Если по этому руководству что-то не завелось — пиши в комментарии с выводом asterisk -rvvv в момент проблемы. Разберём.<br />
Быстрый ответ
FreePBX — это веб-интерфейс поверх Asterisk. Установи Asterisk и FreePBX на Debian, настрой SIP-транк через провайдера, создай внутренние номера (Extensions), пропиши входящие и исходящие маршруты — и офисная АТС готова. Минимальное время от чистого сервера до первого звонка — 2-3 часа.
Диагноз: зачем тебе FreePBX и что тебя ждёт
Поднял офисную телефонию — она не работает. Провайдер говорит «всё с нашей стороны окей». Коллеги смотрят с немым вопросом. Знакомо?
FreePBX — это графический интерфейс для Asterisk. Asterisk сам по себе настраивается через конфиги в /etc/asterisk/, и это то ещё удовольствие — особенно когда нужно добавить 50 номеров или перенастроить IVR в пятницу вечером. FreePBX превращает это в веб-формы.
Что получишь на выходе из этой статьи:
- рабочий FreePBX-сервер на Debian
- SIP-транк до провайдера
- внутренние номера с SIP-телефонами или softphone
- входящие и исходящие маршруты
- базовый IVR
- запись звонков
- переадресацию
Времени уйдёт 3-4 часа на чистой машине. Нужен сервер с Debian 11 или 12, root-доступ и статический IP. Всё.
Системные требования и совместимость версий
Перед тем как качать что попало — проверь совместимость. FreePBX 17 — текущая стабильная версия на момент публикации. Всегда проверяй актуальные релизы на wiki.freepbx.org перед установкой.
| Компонент |
Минимум |
Рекомендуется |
Примечание |
| ОС |
Debian 11 |
Debian 12 |
Ubuntu 22.04 тоже подходит |
| Asterisk |
20 LTS |
21 |
18 EOL с октября 2025 |
| FreePBX |
16 |
17 |
16 поддерживается до 2025 |
| PHP |
8.1 |
8.2 |
PHP 7.x не поддерживается с FreePBX 17 |
| MariaDB |
10.6 |
10.11 LTS |
MySQL 8.x тоже работает |
| CPU |
2 ядра |
4 ядра |
Для <20 одновременных вызовов достаточно 2 |
| RAM |
2 GB |
4 GB |
При записи звонков +1 GB |
| Диск |
20 GB |
100 GB |
Запись звонков ест место быстро |
Архитектура: как это работает
Перед тем как вбивать первую команду — потрать три минуты и посмотри на схему. Потом будет меньше вопросов «а почему оно не работает».
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["SIP-провайдер / PSTN"] -->|"SIP-транк"| B["Asterisk + FreePBX"]
B -->|"Internal SIP"| C["IP-телефоны / Softphone"]
B -->|"Internal SIP"| D["SIP-шлюз / FXS адаптер"]
D -->|"Аналоговая линия"| E["Обычный телефон"]
F["Браузер администратора"] -->|"HTTPS :443"| G["FreePBX Web UI"]
G -->|"PHP / AMI"| B
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style C fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style D fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style E fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style F fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#c2410c
style G fill:#f8fafc,stroke:#f97316,stroke-width:1px,color:#c2410c
Смотри: FreePBX — это только интерфейс. Asterisk делает всю реальную работу со звонками. FreePBX пишет конфиги Asterisk на основе того, что ты нажал в браузере. Поэтому если что-то не работает — смотри в логи Asterisk, а не в веб-интерфейс.
FreePBX Distro vs установка на Debian: что выбрать
Два пути. Sangoma предлагает FreePBX Distro — это готовый ISO на базе CentOS/AlmaLinux с уже установленным всем. Быстро, удобно, но ты привязан к их дистрибутиву.
Установка на Debian даёт полный контроль. Ты сам управляешь обновлениями ОС, безопасностью, системными сервисами. В продакшне я предпочитаю именно этот путь.
| Параметр |
FreePBX Distro |
Debian + FreePBX |
| Время установки |
30-40 минут |
1-2 часа |
| Контроль над ОС |
Ограничен |
Полный |
| Обновления безопасности |
Зависят от Sangoma |
Стандартный Debian |
| Для тестовой среды |
Отлично |
Нормально |
| Для продакшна |
Приемлемо |
Предпочтительно |
| Поддержка Sangoma |
Официальная |
Сообщество |
Дальше рассматриваем установку на Debian 12. Если тебе нужен Distro — качай ISO с sangoma.com и устанавливай как обычный Linux.
Таблица портов FreePBX
| Порт |
Протокол |
Сервис |
Направление |
| 80 |
TCP |
FreePBX Web UI (HTTP) |
Входящий |
| 443 |
TCP |
FreePBX Web UI (HTTPS) |
Входящий |
| 5060 |
UDP/TCP |
SIP-сигнализация |
Входящий/Исходящий |
| 5061 |
TCP |
SIP TLS |
Входящий/Исходящий |
| 10000-20000 |
UDP |
RTP (медиапотоки) |
Входящий/Исходящий |
| 4445 |
TCP |
Asterisk Manager Interface (AMI) |
Локальный |
| 8001 |
TCP |
Asterisk REST Interface (ARI) |
Локальный |
| 8088-8089 |
TCP |
Asterisk WebSocket |
Входящий |
Вот тут важно: порты 5060 и 10000-20000 должны быть открыты для SIP-провайдера. Не для всего интернета — только для IP-адресов провайдера. Об этом подробнее в разделе про безопасность.
Установка FreePBX на Debian 12
Подготовка системы
Начинаем с чистого Debian 12 Minimal. Никаких десктопных окружений, никакого лишнего ПО.
Обнови систему и установи базовые зависимости:
apt update && apt upgrade -y
apt install -y wget curl git unzip lsb-release gnupg2 \
build-essential linux-headers-$(uname -r) \
sox libsox-fmt-all mpg123 ffmpeg \
net-tools nload htop vim
Отключи AppArmor — он конфликтует с Asterisk:
systemctl stop apparmor
systemctl disable apparmor
apt purge -y apparmor
Установка MariaDB
FreePBX хранит всю конфигурацию в базе данных. Ставим MariaDB 10.11 LTS:
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=10.11
apt update
apt install -y mariadb-server mariadb-client
systemctl enable --now mariadb
Запусти первоначальную настройку безопасности:
mysql_secure_installation
Отвечай: пароль root — установи сложный и запомни его. Анонимных пользователей — удали. Удалённый root — запрети. Тестовую БД — удали. Перезагрузи привилегии — да.
Создай базу и пользователя для FreePBX:
CREATE DATABASE asterisk;
CREATE DATABASE asteriskcdrdb;
CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'СМЕНИ_ПАРОЛЬ_ЗДЕСЬ';
GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost';
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO 'asterisk'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Установка PHP 8.2
FreePBX 17 требует PHP 8.1 или 8.2. В Debian 12 по умолчанию PHP 8.2 — отлично.
apt install -y php8.2 php8.2-cli php8.2-common php8.2-curl \
php8.2-mbstring php8.2-mysql php8.2-gd php8.2-xml \
php8.2-zip php8.2-bcmath php8.2-intl php8.2-opcache \
php8.2-readline libapache2-mod-php8.2
Установи Apache (FreePBX использует его как веб-сервер):
apt install -y apache2
a2enmod rewrite ssl headers expires
systemctl enable --now apache2
Установка Asterisk
Asterisk собираем из исходников. Да, это дольше, но ты получаешь актуальную версию с нужными модулями.
cd /usr/src
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21-current.tar.gz
tar -xzf asterisk-21-current.tar.gz
cd asterisk-21.*/
Установи зависимости для сборки:
contrib/scripts/install_prereq install
Скрипт спросит про DAHDI и DPNSS — обычно не нужны. Жми Enter на всём.
Настрой и собери:
./configure --with-jansson-bundled --with-pjproject-bundled
make menuselect
В menuselect убедись что включены:
- в Core Sound Packages: CORE-SOUNDS-RU-ULAW (русские промпты)
- в Extra Sound Packages: EXTRA-SOUNDS-RU-ULAW
- в Applications: app_macro (нужен для FreePBX)
make -j$(nproc)
make install
make samples
make config
ldconfig
Создай системного пользователя для Asterisk:
groupadd -r asterisk
useradd -r -d /var/lib/asterisk -s /sbin/nologin -g asterisk asterisk
usermod -aG audio,dialout asterisk
Настрой права:
chown -R asterisk:asterisk /etc/asterisk /var/lib/asterisk \
/var/log/asterisk /var/spool/asterisk /usr/lib/asterisk
Укажи пользователя в конфиге Asterisk:
sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/' /etc/default/asterisk
sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/' /etc/default/asterisk
Запусти и проверь:
systemctl enable --now asterisk
systemctl status asterisk
Должен увидеть active (running). Если нет — смотри journalctl -u asterisk -n 50.
Установка FreePBX
Теперь сам FreePBX. Скачай актуальную версию — проверь на github.com/FreePBX перед скачиванием:
cd /usr/src
wget https://github.com/FreePBX/freepbx/releases/download/release/17.0/freepbx-17.0-latest.tgz
tar -xzf freepbx-17.0-latest.tgz
cd freepbx
Запусти установщик:
php ./install -n \
--dbhost=localhost \
--dbname=asterisk \
--dbuser=asterisk \
--dbpass=ТВОЙ_ПАРОЛЬ_ОТ_БД \
--user=asterisk \
--group=asterisk \
--webroot=/var/www/html
Установка займёт 10-15 минут. Скрипт установит базовые модули FreePBX.
После установки запусти FreePBX:
fwconsole start
fwconsole reload
Настрой cron для FreePBX (он использует cron для задач обслуживания):
echo "*/5 * * * * asterisk /usr/sbin/fwconsole jobscheduler run > /dev/null 2>&1" > /etc/cron.d/freepbx
Настрой Apache для FreePBX:
# /etc/apache2/sites-available/freepbx.conf
<VirtualHost *:80>
ServerName pbx.yourdomain.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/freepbx_error.log
CustomLog ${APACHE_LOG_DIR}/freepbx_access.log combined
</VirtualHost>
a2ensite freepbx
a2dissite 000-default
systemctl reload apache2
Открой браузер и перейди на IP-адрес сервера. Увидишь мастер первоначальной настройки FreePBX. Создай учётную запись администратора.
Настройка FreePBX: первые шаги в интерфейсе
Ты в веб-интерфейсе. Сверху — главное меню. Почти всё что тебе нужно живёт в разделах Connectivity и Applications.
Первым делом зайди в Admin — Module Admin и обнови все модули. Не пропускай этот шаг — базовая установка часто содержит старые версии.
fwconsole ma upgradeall
fwconsole reload
Настройка SIP-настроек Asterisk
Перед тем как создавать транки — зайди в Admin — Advanced Settings. Убедись что:
- SIP Channel Driver: chan_pjsip (рекомендуется, не chan_sip)
- SIP NAT: установи External IP если сервер за NAT
Если сервер за NAT — зайди в Settings — Asterisk SIP Settings. Укажи внешний IP или hostname. Добавь локальные сети в Local Networks. Это критично для правильной работы RTP-медиапотоков.
Настройка транка FreePBX (SIP Trunk)
Транк — это соединение с провайдером телефонии. Через него идут входящие и исходящие звонки на городские номера.
Добавление SIP-транка
Перейди в Connectivity — Trunks — Add Trunk — Add SIP (chan_pjsip) Trunk.
Заполни вкладку General:
- Trunk Name: имя на английском, например «Provider_Rostelecom»
- Outbound CallerID: твой городской номер в формате +79XXXXXXXXX
Вкладка pjsip Settings — General:
- Username: логин от провайдера
- Secret: пароль от провайдера
- SIP Server: адрес SIP-сервера провайдера
- SIP Server Port: обычно 5060
- Context: from-trunk
Вкладка pjsip Settings — Advanced:
- Registration: Send, если нужна регистрация (большинство провайдеров требует)
- Auth_rejection_permanent: No
Нажми Submit, затем Apply Config.
Проверь регистрацию транка:
asterisk -rx "pjsip show registrations"
Должен увидеть статус Registered. Если нет — смотри раздел Troubleshooting.
Создание внутренних номеров FreePBX (Extensions)
Внутренние номера — это SIP-аккаунты для телефонов и softphone в офисе.
Перейди в Applications — Extensions — Add Extension — Add New SIP [chan_pjsip] Extension.
Вкладка General:
- User Extension: номер, например 101
- Display Name: Имя сотрудника
- Secret: автоматически сгенерируется — скопируй или задай свой
Вкладка Advanced — вот тут важно для работы за NAT:
- Transport: 0.0.0.0-udp
- Force rport: Yes
- Ice Support: Yes (для WebRTC-телефонов)
Submit — Apply Config.
Данные для SIP-телефона: сервер — IP твоего FreePBX, логин — 101, пароль — из поля Secret. Сделай так для каждого сотрудника. Номера обычно начинают с 100 или 200 — не принципиально.
Настройка входящих маршрутов FreePBX
Входящий маршрут определяет что делать со звонком который пришёл от провайдера. Куда его отправить — на конкретный номер, очередь, IVR.
Перейди в Connectivity — Inbound Routes — Add Incoming Route.
Заполни:
- Description: внятное описание, например «Основной городской номер»
- DID Number: твой городской номер. Если провайдер шлёт его в формате 9XXXXXXXXX — укажи именно так. Если +79 — укажи с плюсом. Узнай у провайдера или смотри в логах Asterisk
- Set Destination: куда отправить звонок
Если у тебя один номер и нужно просто направить звонки на конкретного сотрудника — в Set Destination выбери Extensions и номер 101. Нажми Submit — Apply Config.
Позвони сам себе с мобильного — телефон 101 должен зазвонить.
Настройка исходящих маршрутов FreePBX
Исходящий маршрут говорит Asterisk через какой транк звонить и на какие номера.
Перейди в Connectivity — Outbound Routes — Add Outbound Route.
Вкладка Route Settings:
- Route Name: например «Outbound_All»
- Trunk Sequence: выбери свой транк
Вкладка Dial Patterns — это самое интересное. Здесь ты описываешь какие номера идут через этот маршрут:
| Паттерн |
Что значит |
Пример |
| NXXXXXX |
7-значный номер (городской) |
5551234 |
| 8XXXXXXXXXX |
Мобильный через 8 |
89161234567 |
| +7XXXXXXXXXX |
Мобильный через +7 |
+79161234567 |
| 00X. |
Международный |
00491234567 |
Submit — Apply Config. Попробуй позвонить с внутреннего номера наружу.
IVR — это «Нажмите 1 для отдела продаж, нажмите 2 для технической поддержки». Делается в два шага: сначала запись или загрузка аудио, потом создание IVR.
Загрузка аудиозаписи
Перейди в Admin — System Recordings — Add Recording.
Можно записать через телефон — набери *77 с внутреннего номера. Или загрузи готовый MP3/WAV файл. Формат для Asterisk: WAV, 8kHz, моно, PCM.
Конвертируй файл если нужно:
sox input.mp3 -r 8000 -c 1 -e signed-integer -b 16 output.wav
Создание IVR
Перейди в Applications — IVR — Add IVR.
Заполни:
- IVR Name: например «Main_IVR»
- Announcement: выбери загруженную запись
- Timeout: 10 секунд
- Invalid Retries: 3
В разделе IVR Entries добавь опции:
- Digits: 1, Destination: Extensions — 101 (отдел продаж)
- Digits: 2, Destination: Extensions — 102 (техподдержка)
- Digits: 0, Destination: Extensions — 100 (секретарь)
Submit. Теперь в настройках входящего маршрута смени Set Destination на IVR — Main_IVR. Apply Config.
Запись звонков в FreePBX
Запись включается на уровне Extensions или Queues. Чини сейчас, пока не понадобилось.
Для конкретного внутреннего номера: Applications — Extensions — нужный номер — вкладка Advanced:
- Call Recording: Always, Incoming, Outgoing или On Demand
- Call Recording Format: wav49 (сжатый) или wav (несжатый)
Записи хранятся в /var/spool/asterisk/monitor/. Слушать можно через Admin — Call Event Log.
Внимание: место на диске
Запись звонков ест диск очень быстро. Один час разговора в wav — около 60 MB. При 10 активных операторах за рабочий день накапливается несколько гигабайт. Настрой автоматическую очистку старых записей.
Настрой автоматическую очистку через cron:
# Удалять записи старше 90 дней
echo "0 2 * * * asterisk find /var/spool/asterisk/monitor/ -name '*.wav' -mtime +90 -delete" >> /etc/cron.d/freepbx
Переадресация звонков в FreePBX
Три вида переадресации — разберись в них раз и навсегда.
Первый — безусловная переадресация (Call Forward Unconditional). Все звонки уходят на другой номер. Включается пользователем с телефона набором *72 + номер. Отключить: *73.
Второй — переадресация при недоступности (Call Forward No Answer). Если не ответил за N секунд — переадресация. *90 + номер / отключить *91.
Третий — переадресация при занятости. *52 + номер / *53.
Административно настроить переадресацию для номера: Applications — Extensions — нужный номер — вкладка Advanced — Call Forwarding. Укажи номер назначения.
Для более сложных сценариев используй Follow Me: Applications — Follow Me. Там можно указать несколько номеров, которые будут звонить одновременно или последовательно.
Настройка модулей FreePBX
FreePBX расширяется через модули. Бесплатные модули покрывают 90% задач среднего офиса. Платные модули от Sangoma нужны для конкретных сценариев: CRM-интеграции, продвинутой отчётности, видеозвонков.
Управление модулями: Admin — Module Admin.
Полезные бесплатные модули которые стоит установить сразу:
- Call Recording — запись звонков
- Conference Pro — конференц-звонки
- Queues — очереди звонков для call-центра
- Ring Groups — группы обзвона
- Time Conditions — маршрутизация по времени (рабочие/нерабочие часы)
- Announcements — воспроизведение объявлений
- DISA — Direct Inward System Access
Через командную строку:
fwconsole ma install callrecording
fwconsole ma install conferences
fwconsole ma install queues
fwconsole ma install ringgroups
fwconsole ma install timeconditions
fwconsole reload
Маршрутизация по времени (нерабочие часы)
Это то что отличает взрослую АТС от наколеночной. В нерабочее время — проигрываем сообщение и/или переводим на голосовую почту.
Создай расписание: Applications — Time Conditions — Add Time Condition:
- Time Group: создай через Applications — Time Groups (Пн-Пт, 9:00-18:00)
- Matched Destination: IVR (рабочее время)
- Unmatched Destination: Announcement — «Мы работаем с 9 до 18»
В входящем маршруте замени Set Destination на Time Condition.
Безопасность FreePBX-сервера
Критически важно: безопасность
Незащищённый FreePBX-сервер с открытым 5060 портом в интернете взламывают за несколько часов. Атакующие используют его для дорогих международных звонков. Счёт провайдера может прийти на десятки тысяч рублей за одну ночь. Этот раздел обязателен к выполнению.
Fail2ban для Asterisk
apt install -y fail2ban
Создай конфиг для Asterisk:
# /etc/fail2ban/jail.d/asterisk.conf
[asterisk]
enabled = true
port = 5060,5061
protocol = udp
filter = asterisk
logpath = /var/log/asterisk/fail2ban
maxretry = 5
bantime = 86400
findtime = 600
systemctl enable --now fail2ban
UFW Firewall
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
# SSH - только с доверенных IP
ufw allow from 192.168.1.0/24 to any port 22
# Веб-интерфейс FreePBX - только из локальной сети
ufw allow from 192.168.1.0/24 to any port 80
ufw allow from 192.168.1.0/24 to any port 443
# SIP - только от провайдера (замени на IP провайдера)
ufw allow from 1.2.3.4 to any port 5060 proto udp
ufw allow from 1.2.3.4 to any port 5061 proto tcp
# SIP от локальных телефонов
ufw allow from 192.168.1.0/24 to any port 5060 proto udp
# RTP - от провайдера и локальной сети
ufw allow from 1.2.3.4 to any port 10000:20000 proto udp
ufw allow from 192.168.1.0/24 to any port 10000:20000 proto udp
ufw enable
Отключи SIP-сканирование в Asterisk
В /etc/asterisk/pjsip.conf добавь в секцию [global]:
[global]
endpoint_identifier_order = auth_username,username,ip
Это значит: Asterisk не будет отвечать неизвестным источникам, что сильно затрудняет enumeration-атаки.
Смени SIP-порт
Опционально, но эффективно — поменяй стандартный порт 5060 на нестандартный. 90% сканеров проходят мимо.
В FreePBX: Settings — Asterisk SIP Settings — поменяй Bind Port с 5060 на, например, 15060. Не забудь обновить firewall-правила.
Права доступа к веб-интерфейсу
Включи Intrusion Detection в FreePBX: Admin — System Admin — Intrusion Detection. Это встроенный fail2ban для веб-интерфейса.
Смени пароль администратора: Admin — User Management. Используй длинный пароль — не менее 16 символов.
Резервное копирование FreePBX
Бэкап настраивается через Admin — Backup & Restore. Что бэкапить обязательно:
- база данных asterisk и asteriskcdrdb
- /etc/asterisk/ (конфиги)
- /var/lib/asterisk/ (звуковые файлы, prompts)
- /var/spool/asterisk/monitor/ (записи звонков — если нужны)
Создай автоматический бэкап через Admin — Backup & Restore — Add Backup:
- Schedule: Daily, время 03:00
- Storage Location: локальный или удалённый (SFTP/S3)
- Retention: 7 дней локально
Или вручную через CLI:
fwconsole backup --backup-name="manual_$(date +%Y%m%d)"
Бэкап проверяй. Бэкап который ты не проверял — это просто файл на диске с неизвестным содержимым.
Обновление FreePBX
Перед обновлением — всегда бэкап. После бэкапа — бэкап ещё раз, потому что первый раз всегда почему-то не туда.
Обновление модулей:
fwconsole ma upgradeall
fwconsole reload
Обновление самого FreePBX:
fwconsole selfupgrade
fwconsole reload
Что проверить после обновления:
- статус сервисов: systemctl status asterisk apache2 mariadb
- регистрацию транков: asterisk -rx «pjsip show registrations»
- тестовый звонок внутри и наружу
Если что-то сломалось — откат через Backup & Restore — выбери последний рабочий бэкап — Restore.
Проверка работоспособности
Прошёл все шаги — проверяй систематически, не по-ощущению.
Статус всех сервисов:
systemctl status asterisk apache2 mariadb fail2ban
Проверь регистрацию транков:
asterisk -rx "pjsip show registrations"
asterisk -rx "pjsip show endpoints"
Проверь активные каналы:
asterisk -rx "core show channels"
Посмотри статус внутренних номеров:
asterisk -rx "pjsip show contacts"
Зарегистрированные контакты покажут состояние: Avail (доступен), Unavail (недоступен), Unknown.
Тест звонка из консоли Asterisk:
asterisk -rx "channel originate Local/101@from-internal application Playback tt-monkeys"
Если телефон 101 зазвонил и ты услышал «обезьян» — всё работает.
Troubleshooting: типичные проблемы FreePBX
Транк не регистрируется
Транк не регистрируется - что смотреть
Самая частая причина — неправильные данные от провайдера или NAT-проблема. Смотри логи Asterisk в реальном времени.
asterisk -rvvv
# В консоли Asterisk:
pjsip set logger on
# Попробуй перерегистрироваться:
pjsip send register TrunkName
Что искать в логах: 403 Forbidden (неверный пароль), 404 Not Found (неверный сервер), 408 Timeout (недоступен сервер или firewall блокирует).
Звонок проходит, но нет звука
Классика. Причина — NAT. RTP-пакеты не доходят.
- Проверь External IP в Settings — Asterisk SIP Settings
- Проверь что порты 10000-20000 UDP открыты в firewall
- Включи RTP debugging: asterisk -rx «rtp set debug on»
WebRTC-телефон не подключается
WebRTC требует WSS (WebSocket Secure) и HTTPS. Нужен SSL-сертификат.
apt install -y certbot python3-certbot-apache
certbot --apache -d pbx.yourdomain.com
После получения сертификата перейди в Settings — Asterisk SIP Settings — TLS/SSL — включи TLS и укажи пути к сертификату.
Неверный DID — звонки не попадают в маршрут
Посмотри в каком формате провайдер шлёт DID:
asterisk -rvvv
# Позвони с мобильного и смотри в консоли:
# "Accepting call" - будет написан DID
В входящем маршруте поставь именно тот формат который видишь в логах.
FreePBX веб-интерфейс не открывается
# Проверь Apache
systemctl status apache2
journalctl -u apache2 -n 30
# Проверь FreePBX
fwconsole status
# Перезапусти FreePBX
fwconsole restart
Ошибка «Could not execute PJSIP reload»
systemctl restart asterisk
fwconsole reload
Если не помогло — смотри /var/log/asterisk/full на синтаксические ошибки в конфигах.
Сбросить пароль администратора FreePBX
fwconsole userman --list
fwconsole userman --setpassword admin НОВЫЙ_ПАРОЛЬ
Нет звука в записях звонков
Проверь что sox установлен:
which sox
sox --version
Если не установлен — установи. FreePBX использует sox для конвертации форматов записи.
Альтернативные решения
FreePBX — не единственный вариант для офисной АТС на базе Asterisk.
3CX — коммерческое решение с бесплатным базовым тарифом. Проще в настройке, лучше документация, но платная лицензия при росте. Хороший вариант если нет своего линуксоида и нужна поддержка.
Issabel — форк FreePBX, развивается самостоятельно после того как Elastix закрылся. Совместим с FreePBX модулями. Можно рассмотреть если нужен CentOS-based дистрибутив.
Голое Asterisk без FreePBX — для тех кто хочет полный контроль и не боится конфигов. Меньше зависимостей, выше производительность, но конфигурирование вручную.
MikroTik RouterOS с встроенным SIP сервером — для очень маленьких офисов до 10 человек. Не FreePBX, но иногда достаточно.
Профилактика: как не сломать снова
Раз в неделю: asterisk -rx «pjsip show registrations» — убедись что транки живые.
Раз в месяц: fwconsole ma upgradeall — обновляй модули. Не обновлять тоже плохо, но и обновлять в пятницу вечером тоже не надо. Делай в среду утром.
Настрой мониторинг. Минимум — проверка доступности порта 5060 и веб-интерфейса через Zabbix или простой скрипт:
#!/bin/bash
# /usr/local/bin/check-freepbx.sh
RESULT=$(asterisk -rx "pjsip show registrations" 2>/dev/null | grep -c "Registered")
if [ "$RESULT" -lt 1 ]; then
echo "ALERT: FreePBX trunk not registered" | mail -s "PBX Alert" admin@company.ru
fi
echo "*/5 * * * * root /usr/local/bin/check-freepbx.sh" >> /etc/cron.d/pbx-monitor
Документируй. Запиши в конфлюенс или хотя бы в текстовый файл: IP-адреса телефонов, логины транков, структуру IVR. Через год ты скажешь себе спасибо. Потому что капля никотина убивает лошадь, а один конфиг без документации убивает весь отдел в 23:00 в пятницу.
FAQ по FreePBX
Почему Asterisk запускается, но телефоны не регистрируются?
Чаще всего — firewall блокирует UDP 5060. Второй вариант — телефоны пытаются подключиться по SIP, а FreePBX настроен на PJSIP (разные порты и протоколы). Проверь через asterisk -rx «pjsip show endpoints» — есть ли твои номера в списке. Если есть, но статус Unavail — смотри сеть и firewall.
Как проверить качество звука и найти причину помех?
asterisk -rx "rtp set debug on"
asterisk -rx "pjsip set logger on"
Смотри на потерю пакетов в RTP-статистике. Плохое качество почти всегда это либо потери пакетов на сети, либо неправильный кодек. В транке и Extensions должен быть один кодек — ulaw или alaw для России. G.729 экономит трафик, но требует лицензию.
Что делать если FreePBX завис и не отвечает через веб?
systemctl restart apache2
fwconsole restart
# Если не помогло:
systemctl restart asterisk
Если вис повторяется — смотри /var/log/apache2/error.log и /var/log/asterisk/full. Скорее всего или не хватает памяти, или MySQL завис.
Можно ли использовать FreePBX с несколькими SIP-провайдерами одновременно?
Да. Создай несколько транков — по одному для каждого провайдера. В исходящих маршрутах настрой приоритет: основной транк первый, резервный второй. FreePBX будет пробовать первый, и если он недоступен — переключится на второй. Это делается через Trunk Sequence в настройках исходящего маршрута.
Где хранятся конфиги FreePBX и можно ли их редактировать вручную?
Конфиги Asterisk лежат в /etc/asterisk/. FreePBX генерирует их из базы данных. Если ты отредактируешь конфиг вручную — FreePBX перезапишет его при следующем apply config. Для кастомных настроек используй файлы с суффиксом _custom: например extensions_custom.conf. FreePBX включает эти файлы через include, но не перезаписывает.
Как настроить FreePBX за NAT роутером?
На роутере настрой port forwarding: UDP 5060 и UDP 10000-20000 на IP FreePBX-сервера. В FreePBX перейди Settings — Asterisk SIP Settings — укажи External IP Address (внешний IP роутера) и Local Network (например 192.168.1.0/24). Сохрани и примени.
Итог
Ты поднял FreePBX с нуля: Asterisk установлен, транк зарегистрирован, внутренние номера работают, IVR крутится, запись ведётся. Это рабочая офисная АТС, которую можно масштабировать до сотен номеров.
Дальше — по потребностям. Нужен call-центр — добавляй модуль Queues и настраивай очереди. Нужна интеграция с CRM — смотри в сторону AGI-скриптов или модуля Superfecta для caller ID lookup. Нужен мобильный доступ — настраивай WebRTC или VPN + SIP-клиент на смартфоне.
Если что-то не заработало - разберёмся
Телефония любит нюансы: у каждого провайдера свои форматы номеров, у каждой сети свои NAT-особенности. Если по этому руководству что-то не завелось — пиши в комментарии с выводом asterisk -rvvv в момент проблемы. Разберём.