
Устаревший Asterisk GUI из SVN не подходит для развёртывания нового сервера. Для ручной настройки можно использовать Asterisk с PJSIP, а для web-интерфейса — поддерживаемую установку FreePBX. Ниже приведён рабочий лабораторный сценарий двух внутренних телефонов: сборка Asterisk на чистой Ubuntu Server, конфигурация, служба, сетевые ограничения и диагностика. FreePBX рассматривается отдельным вариантом, поскольку он управляет конфигурацией самостоятельно.
1. Выберите путь установки и подготовьте стенд
Для ручного сценария используйте отдельную чистую Ubuntu Server 24.04 LTS amd64 с фиксированным адресом. Адрес PBX в примере — 10.30.40.10/24, телефоны находятся в том же изолированном VLAN. Внешних транков и платных направлений в этом стенде нет. До установки сделайте снимок VM и сохраните её сетевые настройки.
На дату сверки в ветке Asterisk 22 LTS доступен выпуск 22.11.0; конкретный архив и поддерживаемую ветку сверяйте на официальной странице Asterisk. Пакет asterisk из репозитория Ubuntu может иметь другую версию: apt-cache policy asterisk показывает кандидата, но не подтверждает его соответствие нужной ветке. Не смешивайте пакетную установку, ручную сборку и FreePBX на одной машине без продуманной миграции.
2. Подготовьте зависимости и проверенный исходный архив
Следующие операции выполняются только на новой VM. Установите инструменты сборки и библиотеки, затем скачайте выбранный архив с официальной страницы. Проверьте опубликованную контрольную сумму или подпись. Значение суммы не копируется из статьи: оно должно относиться к фактическому файлу проекта.
sudo apt-get update
sudo apt-get install build-essential pkg-config libedit-dev libjansson-dev \
libsqlite3-dev libssl-dev libxml2-dev uuid-dev libncurses-dev
mkdir -p "$HOME/src/asterisk"
cd "$HOME/src/asterisk"
sha256sum asterisk-22.11.0.tar.gz
tar -xzf asterisk-22.11.0.tar.gz
cd asterisk-22.11.0
./configure --with-pjproject-bundled
make menuselect
make -j2
В menuselect проверьте наличие res_pjsip, chan_pjsip, нужных кодеков и базовых приложений dialplan. Если configure или сборка завершается ошибкой, разберите недостающую зависимость и сохраните лог. Не выполняйте make install после неуспешной сборки. Порядок стадий описан в документации установки из исходников.
3. Установите службу без запуска от root
После успешной сборки установите файлы и создайте отдельного системного пользователя. Эти команды предполагают, что пользователь и служба asterisk ещё не существуют. На действующей PBX такой сценарий не применяется.
sudo make install
sudo useradd --system --home /var/lib/asterisk \
--shell /usr/sbin/nologin asterisk
sudo install -d -o root -g asterisk -m 0750 /etc/asterisk
sudo install -d -o asterisk -g asterisk -m 0750 \
/var/lib/asterisk /var/spool/asterisk /var/log/asterisk
Создайте /etc/systemd/system/asterisk.service с таким содержимым. Оставьте порт управления в локальной консоли; доступ к AMI и HTTP для этого сценария не требуется.
[Unit]
Description=Asterisk PBX
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=asterisk
Group=asterisk
RuntimeDirectory=asterisk
RuntimeDirectoryMode=0750
ExecStart=/usr/sbin/asterisk -f
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
В /etc/asterisk/asterisk.conf задайте каталог runtime. Все конфиги ниже сохраняйте root:asterisk с правами 0640; пользователь PBX должен читать их, но не обязан менять исходные файлы.
[directories]
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /run/asterisk
astlogdir => /var/log/asterisk
Путь модулей проверьте по итогам установки: если сборка выбрала другой каталог, используйте его. В modules.conf укажите [modules] и autoload=yes. Для минимального стенда в http.conf и manager.conf укажите [general] и enabled=no.
После создания файлов проверьте владельца и права только известных конфигов новой PBX:
sudo chown root:asterisk /etc/asterisk/{asterisk,modules,http,manager,pjsip,extensions,rtp}.conf
sudo chmod 0640 /etc/asterisk/{asterisk,modules,http,manager,pjsip,extensions,rtp}.conf
sudo -u asterisk test -r /etc/asterisk/pjsip.conf
sudo -u asterisk test -w /var/log/asterisk
Оба test должны завершиться с кодом 0. Не выдавайте пользователю asterisk право менять все файлы ОС. Для журналов добавьте /etc/asterisk/logger.conf с root:asterisk и 0640:
[logfiles]
console => notice,warning,error
messages => notice,warning,error
Перезапустите новую службу после подготовки всех файлов. Ошибки чтения конфигурации и отсутствующих модулей видны в journal и messages; пустой pjsip show endpoints не является нормальным результатом двух созданных extension.
4. Создайте два PJSIP endpoint
В /etc/asterisk/pjsip.conf добавьте transport и два комплекта endpoint/auth/aor. Каждый шаблон REPLACE_... замените отдельным случайным секретом до запуска. Это обозначения, а не пригодные пароли.
[transport-lan]
type=transport
protocol=udp
bind=10.30.40.10:5060
[1001]
type=endpoint
transport=transport-lan
context=internal
disallow=all
allow=alaw,ulaw
auth=auth1001
aors=1001
direct_media=no
[auth1001]
type=auth
auth_type=userpass
username=1001
password=REPLACE_WITH_UNIQUE_RANDOM_SECRET_1001
[1001]
type=aor
max_contacts=1
remove_existing=yes
[1002]
type=endpoint
transport=transport-lan
context=internal
disallow=all
allow=alaw,ulaw
auth=auth1002
aors=1002
direct_media=no
[auth1002]
type=auth
auth_type=userpass
username=1002
password=REPLACE_WITH_UNIQUE_RANDOM_SECRET_1002
[1002]
type=aor
max_contacts=1
remove_existing=yes
Повторяющиеся имена секций endpoint и aor здесь допустимы: типы объектов разные. max_contacts=1 ограничивает регистрацию одним контактом; это осознанное решение для лаборатории. UDP в изолированном VLAN не шифрует сигнализацию; для передачи через недоверенную сеть проектируйте VPN или TLS/SRTP и управление сертификатами отдельно. Структуру объектов объясняют официальные примеры PJSIP.
5. Ограничьте dialplan и RTP
В /etc/asterisk/extensions.conf разрешите только два внутренних номера. Нет шаблона внешнего набора, транка или выхода на платные направления.
[internal]
exten => 1001,1,Dial(PJSIP/1001,25)
same => n,Hangup()
exten => 1002,1,Dial(PJSIP/1002,25)
same => n,Hangup()
В /etc/asterisk/rtp.conf задайте одинаковый с межсетевым экраном диапазон:
[general]
rtpstart=10000
rtpend=10100
Сигнализация SIP и голос RTP идут разными потоками. Открытый 5060 не обеспечивает передачу звука. На локальном и сетевом экране разрешите UDP 5060 и 10000–10100 только от 10.30.40.0/24 к PBX; отдельно ограничьте административный SSH. Перед включением default deny сохраните доступ через консоль. Проброс этих портов в Интернет для проверки не нужен.

Применение UFW на подготовленной новой VM. Сначала через независимую консоль убедитесь, что фактическая сеть администрирования — 10.99.0.0/24 и используется SSH/22. Следующие адреса условные. Сохраните исходную конфигурацию UFW, не выполняйте ufw reset.
sudo ufw status verbose
sudo ufw allow from 10.99.0.0/24 to any port 22 proto tcp comment 'PBX admin'
sudo ufw allow from 10.30.40.0/24 to any port 5060 proto udp comment 'PBX SIP'
sudo ufw allow from 10.30.40.0/24 to any port 10000:10100 proto udp comment 'PBX RTP'
sudo ufw default deny incoming
sudo ufw enable
sudo ufw status numbered
Если UFW не установлен, установите его заранее и изучите существующий firewall платформы. Новое узкое разрешение не отменяет старые широкие разрешения: проверьте полный список. Не вводите deny/enable без готовой консоли. На hypervisor и внешнем firewall согласуйте те же адреса и диапазоны; UFW внутри VM не отменяет блокировку другого узла.
6. Запустите PBX и зарегистрируйте телефоны
sudo systemctl daemon-reload
sudo systemctl enable --now asterisk
sudo systemctl status asterisk --no-pager
sudo journalctl -u asterisk -n 80 --no-pager
sudo asterisk -rx 'core show version'
sudo asterisk -rx 'pjsip show endpoints'
sudo asterisk -rx 'pjsip show contacts'
sudo asterisk -rx 'dialplan show internal'
На первом телефоне задайте сервер 10.30.40.10, номер и auth username 1001, уникальный секрет этого номера и UDP transport; на втором — 1002. Если телефон позволяет отдельно указать SIP identity и authentication name, проверьте оба поля. Выполните вызовы в обе стороны, подождите не менее минуты и проверьте звук в обоих направлениях. Тестируйте также завершение и повторный звонок.
Проверьте загрузку channel driver, конкретный endpoint и AOR:
sudo asterisk -rx 'module show like res_pjsip'
sudo asterisk -rx 'module show like chan_pjsip'
sudo asterisk -rx 'pjsip show endpoint 1001'
sudo asterisk -rx 'pjsip show aor 1001'
sudo ss -lunp | grep ':5060'
Ожидаются загруженный chan_pjsip, endpoint 1001 с context internal и созданный AOR. После регистрации AOR должен иметь контакт телефона. Само слово Unavailable может отражать отсутствие qualify, а не отсутствие регистрации: смотрите список contacts и выполняйте звонок. Для периодического qualify в существующую aor-секцию можно добавить qualify_frequency=30, затем выполнить pjsip reload и проверку; transport-изменения требуют отдельной проверки перезапуска. Поля настройки перечислены в справочнике res_pjsip.
7. Диагностируйте регистрацию и звук
Отсутствие контакта означает, что проблема возникла до успешной регистрации: проверьте адрес, порт, auth username, секрет и сетевые правила. Ответ 404 при звонке часто связан с номером или контекстом; 488 — с согласованием параметров, включая кодеки. Это ориентиры, а окончательный вывод делается по журналу конкретного вызова.
Для краткой диагностики войдите в консоль sudo asterisk -rvvv, включите pjsip set logger on, выполните один тест и выключите pjsip set logger off. SIP-трасса содержит чувствительные сведения, поэтому не оставляйте её постоянно включённой. При одностороннем звуке проверьте RTP, адреса в SDP, NAT и маршрутизацию; отключение межсетевого экрана целиком не является исправлением.
Диагностика одного звонка по слоям. В консоли Asterisk включите логгер только на время теста. Сначала найдите INVITE, ответ сервера и выбранный context; затем проверьте SDP и RTP. Первоначальный 401 на REGISTER может быть нормальным challenge, если клиент повторяет запрос с корректной аутентификацией. Повторяющиеся отказы после challenge требуют проверки auth username/секрета.
pjsip set logger on
core show channels
rtp set debug on
rtp set debug off
pjsip set logger off
На PBX можно дополнительно записать ограниченный capture одного звонка. Пример касается согласованных тестовых телефонов и содержит чувствительную сигнализацию и потенциально голосовые данные:
sudo timeout 30 tcpdump -ni ens18 -s 0 -w /srv/pbx-test-call.pcap \
'host 10.30.40.10 and (udp port 5060 or udp portrange 10000-10100)'
Замените ens18 интерфейсом PBX и защитите каталог capture. При нормальном SIP и отсутствии RTP в одном направлении проверьте адреса c= и порты m=audio в SDP и путь packets. При наличии обоих потоков, но отсутствии слышимого голоса проверьте кодеки и сам телефон. Не меняйте NAT-параметры всех endpoint одновременно; direct_media=no в лаборатории оставляет media через PBX и упрощает наблюдение.
8. Выберите FreePBX, если нужен web-интерфейс
FreePBX 17 устанавливается по официальному сценарию на Debian 12. Это отдельная чистая VM, а не пакет GUI поверх только что собранной Ubuntu PBX. Используйте страницу начала установки FreePBX и официальный репозиторий установщика. Проверьте требования, загрузите выбранную ревизию, изучите скрипт и зафиксируйте его хеш перед запуском.
Выполняйте следующий фрагмент в согласованной root-консоли новой Debian VM; установленный curl нужен для загрузки файла.
cat /etc/os-release
apt-get update
apt-get install ca-certificates curl
curl --fail --location --proto '=https' \
https://raw.githubusercontent.com/FreePBX/sng_freepbx_debian_install/master/sng_freepbx_debian_install.sh \
-o /root/sng_freepbx_debian_install.sh
sha256sum /root/sng_freepbx_debian_install.sh
less /root/sng_freepbx_debian_install.sh
sudo bash /root/sng_freepbx_debian_install.sh
Имя файла относится к заранее скачанному официальному установщику. Его запуск допустим только после просмотра и на выделенной машине. В интерфейсе создайте персонального администратора, два PJSIP extension, проверьте firewall и HTTPS. Не редактируйте генерируемые FreePBX файлы вместо поддерживаемых настроек: последующее применение конфигурации может перезаписать правки.
9. Организуйте обновление и резервирование
Для ручной PBX сохраняйте /etc/asterisk, сведения о сборке и необходимые данные /var/lib/asterisk и /var/spool/asterisk по согласованной процедуре. Не забудьте права и секреты, но не включайте их в публичную документацию. Для FreePBX используйте поддерживаемый механизм backup и проверьте восстановление на отдельном экземпляре.
Обновление сначала тестируйте с теми же модулями, кодеками и телефонами. Транспортные изменения могут требовать полного перезапуска, а не только reload. Если добавляются внешние транки, настройте ограничения направлений, контроль стоимости и оповещение об аномалиях отдельным проектом; внутренний лабораторный dialplan не является готовой защитой от телефонного мошенничества.
Перед изменением конфигов создайте отдельную копию и сохраните версии. В примере архивируется только конфигурация, а не все данные PBX:
sudo install -d -m 0700 /srv/pbx-backup
sudo tar --acls --xattrs -cpf /srv/pbx-backup/etc-asterisk-before.tar \
-C /etc asterisk
sudo sha256sum /srv/pbx-backup/etc-asterisk-before.tar
sudo asterisk -rx 'core show version'
Возврат выполняйте на той же согласованной версии из доверенной копии, сначала проверив список архива через tar -tf. Не извлекайте неизвестный архив поверх всей ОС. После возврата конфигов проверьте владельца/права, службу, оба endpoint и звонки. Если изменён только dialplan, выполните dialplan reload и dialplan show internal; не перезапускайте PBX без необходимости во время активных звонков.
10. Примите результат и предусмотрите возврат
Приёмка включает работающую службу от непривилегированного пользователя, регистрации обоих телефонов, двусторонний звук, запрет неразрешённых направлений и закрытые AMI/HTTP. Проверьте запуск после контролируемой перезагрузки VM и наличие резервной копии.
До ввода в эксплуатацию возврат новой лаборатории проще выполнить к сохранённому снимку. На рабочей PBX восстановление конфигурации и версии требует окна и тестов звонков; откат всей VM может потерять записи разговоров и другие новые данные. Запишите адреса, порты, версии, схему сети, владельца секретов и процедуру восстановления. Такая документация помогает следующему администратору обслуживать систему, а не заново угадывать, как она была собрана.
Связанные инструкции: диагностика сети командой ip, DNS-записи и nslookup.
