Удельта

Пошаговая инструкция · Самостоятельная установка

Как установить Asterisk на Ubuntu 26.04 и проверить звонки

Пошаговая инструкция для самостоятельной установки. Настроим Asterisk небольшими шагами: установим пакет, создадим два внутренних номера, подключим телефоны и проверим звук. В каждом шаге указано, что меняем, где выполняем действие и как понять, что оно получилось.

Первый внутренний звонок: два SIP-телефона соединены с собственной телефонной станцией

Что потребуется для первого внутреннего звонка #

Настроим два внутренних номера 1001 и 1002 и тест эха 6000. Телефоны будут в одной частной сети с сервером или подключены через VPN. Подключение телефонного оператора и платные внешние вызовы здесь не настраиваются.

Нужны Ubuntu 26.04, SSH-доступ с sudo и два SIP-телефона либо программных клиента на разных устройствах. Выполните общую подготовку Ubuntu без Docker, Nginx и Certbot. У Asterisk нет обязательной веб-панели: будем работать в SSH-терминале сервера.

В примере адрес сервера — 10.20.0.10, сеть телефонов — 10.20.0.0/24. Замените их своими частными значениями. SIP/UDP 5060 отвечает за установление вызова, RTP/UDP 10000–20000 — за звук. Эта схема сама по себе не шифрует разговор: используйте доверенную сеть или VPN.

Все команды ниже вводите на сервере по SSH, если отдельно не сказано про телефон. Ввод пароля sudo не отображается — это нормально. Инструкция предназначена для новой станции: не заменяйте её файлами конфигурацию работающей АТС.

Шаг 1. Включите штатный репозиторий universe #

Asterisk устанавливается из пакетов Ubuntu. Для доступа к пакету включим universe. Это репозиторий дистрибутива, а не случайный сторонний PPA.

apt update обновляет список пакетов. Если он сообщает об ошибке сети или репозитория, сначала устраните её и не продолжайте установку.

На сервере по SSH
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y universe
sudo apt update

Последнее обновление списка завершилось без ошибок. Если universe уже включён, повторное добавление не должно требовать нового источника.

Шаг 2. Установите пакет Asterisk #

Пакет содержит программу, модули PJSIP, примеры конфигурации и службу systemd. Для первых внутренних звонков собирать исходники не требуется.

На сервере по SSH
sudo apt install -y asterisk

Установка закончилась без ошибки APT. В /etc/asterisk появились файлы настройки.

Шаг 3. Включите службу и проверьте запуск #

enable включает автоматический запуск при загрузке, --now запускает службу сразу. Затем проверим её состояние.

На сервере по SSH
sudo systemctl enable --now asterisk
sudo systemctl is-active asterisk

Ожидается active. Если получено failed, посмотрите sudo journalctl -u asterisk -n 50 --no-pager; до правки телефонов служба должна запускаться.

Шаг 4. Проверьте версию и наличие PJSIP #

Запрос через asterisk -rx отправляет команду уже работающей станции. core show version показывает фактическую версию; module show like pjsip — загруженные SIP-модули.

На дату сверки Ubuntu 26.04 предоставляет Asterisk 22 LTS. Номер сборки может измениться с обновлениями; запишите свой вывод, чтобы затем восстанавливать совместимую версию.

На сервере по SSH
sudo asterisk -rx "core show version"
sudo asterisk -rx "module show like pjsip"

В выводе есть версия 22 и модули PJSIP, включая res_pjsip. Ошибка подключения к сокету CLI обычно означает остановленную службу или недостаточные права.

Шаг 5. Сохраните первоначальные настройки #

До замены файлов создайте копию всего /etc/asterisk. Она позволит вернуться к исходным примерам. Выполните команду один раз: повторное копирование в уже существующий каталог может создать вложенную копию.

Перед редактированием конфигурации
sudo cp -a /etc/asterisk /etc/asterisk.before-setup

Команда завершается без ошибки. Исходные файлы теперь находятся в /etc/asterisk.before-setup; новая конфигурация останется в /etc/asterisk.

Шаг 6. Разрешите звонки только из сети телефонов #

Сначала оставьте разрешение своего действующего SSH-порта. В примере он штатный, 22. Замените 10.20.0.0/24 своей сетью телефонов и добавьте правила для SIP и RTP.

Правила UFW не заменяют экран провайдера: там разрешите те же UDP-порты от тех же адресов. Не публикуйте SIP для всей сети Интернет ради первого теста. Перед ufw enable оставьте текущую SSH-сессию и доступ к консоли провайдера.

На новом сервере; сначала замените сеть телефонов
sudo ufw allow OpenSSH
sudo ufw allow from 10.20.0.0/24 to any port 5060 proto udp
sudo ufw allow from 10.20.0.0/24 to any port 10000:20000 proto udp
sudo ufw enable
sudo ufw status verbose

В списке разрешены ваш SSH и два UDP-диапазона от выбранной сети. При нестандартном SSH сначала добавьте правило его порта; профиль OpenSSH разрешает только стандартный вариант.

Шаг 7. Согласуйте диапазон портов звука #

Откройте файл командой sudo nano /etc/asterisk/rtp.conf. В секции [general] найдите rtpstart и rtpend; задайте значения ниже. Если строки начинаются с точки с запятой, уберите её, чтобы включить параметры.

Оставьте остальные секции файла. Сохраните в nano: Ctrl+O, Enter; закройте: Ctrl+X. Диапазон должен совпадать с разрешённым в firewall.

Параметры в /etc/asterisk/rtp.conf
[general]
rtpstart=10000
rtpend=20000

В файле есть одна активная пара параметров 10000 и 20000. Если разрешены только порты SIP, регистрация возможна, а звук — нет.

Шаг 8. Создайте разные пароли двух номеров #

Выполните openssl дважды. Каждый запуск создаёт отдельную случайную строку. Сохраните первую как пароль номера 1001, вторую — как пароль 1002.

Пароли телефонов отличаются от пароля SSH. Эти значения попадут в файл станции и соответствующий телефон; не отправляйте их в общий чат.

Генерация двух SIP-паролей
openssl rand -hex 24
openssl rand -hex 24

Получены и сохранены две разные строки по 48 символов. В следующем файле ими заменим REPLACE_PASSWORD_1001 и REPLACE_PASSWORD_1002.

Шаг 9. Создайте конфигурацию двух SIP-номеров #

Откройте sudo nano /etc/asterisk/pjsip.conf. На новой станции замените содержимое примером ниже. В двух строках password подставьте свои сохранённые пароли; слова REPLACE_PASSWORD оставлять нельзя. Сохраните Ctrl+O, Enter и выйдите Ctrl+X.

Endpoint описывает телефон и разрешённые ему звонки, auth — имя и пароль, AoR — адрес зарегистрированного клиента. Для каждого номера нужен весь набор. Секция phone — общий шаблон, поэтому настройки кодека не повторяются.

ulaw даёт общий кодек для первого теста. direct_media=no пропускает звук через Asterisk; max_contacts=1 допускает один зарегистрированный аппарат на номер. Другие кодеки и несколько аппаратов на номер добавляйте после рабочего звонка.

/etc/asterisk/pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060

[phone](!)
type=endpoint
transport=transport-udp
context=internal
disallow=all
allow=ulaw
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes

[1001](phone)
auth=auth1001
aors=1001
[auth1001]
type=auth
auth_type=userpass
username=1001
password=REPLACE_PASSWORD_1001
[1001]
type=aor
max_contacts=1
remove_existing=yes

[1002](phone)
auth=auth1002
aors=1002
[auth1002]
type=auth
auth_type=userpass
username=1002
password=REPLACE_PASSWORD_1002
[1002]
type=aor
max_contacts=1
remove_existing=yes

Оба пароля заменены, номера 1001 и 1002 не перепутаны, файл сохранён. Повторяющиеся имена [1001] допустимы: строки type определяют разные объекты.

Шаг 10. Разрешите внутренние звонки и тест эха #

Откройте sudo nano /etc/asterisk/extensions.conf и замените содержимое примером. Сохраните Ctrl+O, Enter и закройте Ctrl+X.

Dialplan — правила обработки набранного номера. В контексте internal разрешены только 1001, 1002 и эхо 6000. Dial вызывает второй телефон до 30 секунд; Echo возвращает говорящему его собственный звук. Платных внешних направлений в этом файле нет.

/etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=yes

[internal]
exten => _100[12],1,Dial(PJSIP/${EXTEN},30)
 same => n,Hangup()
exten => 6000,1,Answer()
 same => n,Echo()
 same => n,Hangup()

В PJSIP указан context=internal, и в этом файле есть [internal]. Если названия отличаются, Asterisk не найдёт маршрут звонка.

Шаг 11. Ограничьте чтение файлов с паролями #

Файлы должны читать root и служба Asterisk; остальным пользователям доступ не нужен. Назначим группу asterisk и права 640. Это доступ к чтению службы, а не разрешение всем редактировать конфигурацию.

На сервере по SSH
sudo chown root:asterisk /etc/asterisk/pjsip.conf /etc/asterisk/extensions.conf
sudo chmod 640 /etc/asterisk/pjsip.conf /etc/asterisk/extensions.conf

Обе команды закончились без ошибки. Не применяйте chmod 777 для решения проблем службы.

Шаг 12. Перезапустите Asterisk с новой конфигурацией #

Сетевой транспорт может не примениться простым reload, поэтому на новой станции выполним restart. На рабочей АТС перезапуск обрывает разговоры и требует согласованного времени.

Затем проверим, что распознаны оба endpoint и контекст internal. До регистрации клиентов отсутствие контактов нормально.

Применение на новой станции
sudo systemctl restart asterisk
sudo asterisk -rx "pjsip show endpoints"
sudo asterisk -rx "dialplan show internal"

Видны endpoint 1001 и 1002 и маршруты internal. Если их нет, прочитайте journalctl и исправьте опечатку в нужном файле; телефоны пока не настраивайте.

Шаг 13. Настройте первый телефон #

На первом телефоне или в SIP-клиенте создайте SIP-account. Server/Domain — ваш частный IP сервера, в примере 10.20.0.10; порт 5060, transport UDP. Username и Authentication username — 1001, пароль — сохранённый для 1001.

Выберите кодек G.711 ulaw/PCMU, если клиент требует выбрать его вручную. Не выбирайте TLS или облачного SIP-провайдера: эти варианты не настроены нашим примером.

Клиент показывает Registered или «Зарегистрирован». Ошибка 401 после нескольких попыток обычно требует проверки имени авторизации и пароля; timeout — маршрута и firewall.

Шаг 14. Настройте второй телефон #

На другом устройстве создайте такую же учётную запись, но с номером и именем авторизации 1002. Используйте пароль именно 1002 и тот же частный IP Asterisk.

Не копируйте аккаунт 1001 на второе устройство: max_contacts=1 оставляет один контакт, и устройства будут вытеснять друг друга.

Оба клиента одновременно показывают успешную регистрацию.

Шаг 15. Проверьте регистрацию со стороны сервера #

В SSH-терминале Asterisk запросите список контактов. Это адреса, по которым станция знает, куда отправить вызов телефонам.

На сервере после регистрации телефонов
sudo asterisk -rx "pjsip show contacts"

В списке есть контакт каждого номера. Если одного нет, вернитесь к настройкам соответствующего клиента; вызов этого номера пока не пройдёт.

Шаг 16. Проверьте звук через номер 6000 #

На первом телефоне наберите 6000. Скажите несколько слов: приложение Echo должно вернуть ваш голос. Затем завершите вызов и повторите тест со второго телефона.

Проверка отделяет проблему микрофона, динамика и RTP от маршрута звонка между аппаратами. Используйте гарнитуру, если акустическая обратная связь мешает.

На обоих устройствах слышен собственный голос. Если вызов установился, но тишина, сначала проверьте RTP/UDP 10000–20000 и доступ телефона к частному адресу сервера.

Шаг 17. Позвоните с 1001 на 1002 #

С первого аппарата наберите 1002. Второй должен зазвонить; ответьте и проверьте речь в обе стороны. Завершите вызов и повторите в обратном направлении.

Во время разговора на сервере можно посмотреть активные каналы командой ниже. Это проверка работающего вызова; после завершения каналов может не быть.

На сервере во время тестового разговора
sudo asterisk -rx "core show channels"

Есть звонок в обе стороны и двусторонний звук. Односторонний звук указывает прежде всего на сеть, NAT или RTP, а не на необходимость нового SIP-пароля.

Шаг 18. Остановите станцию перед согласованной копией #

Для простой станции сохраним /etc/asterisk и /var/lib/asterisk, включая внутреннюю базу AstDB. Дождитесь завершения тестовых разговоров, затем остановите службу.

Это небольшая плановая остановка. На рабочей станции согласуйте её заранее и не выполняйте во время звонков.

Перед резервированием новой станции
sudo systemctl stop asterisk

Служба остановлена; телефоны могут потерять регистрацию. Это ожидаемо до запуска после копирования.

Шаг 19. Создайте защищённый архив данных #

Создайте каталог, архив и запись версий пакетов. В архиве есть пароли телефонов, поэтому права ограничены root. Команда tar сохраняет владельцев и права.

Если позже появятся записи разговоров, голосовая почта, внешняя база CDR или другие подключённые диски, отдельно включите их в резервирование: этот архив покрывает только приведённую простую станцию.

На остановленной станции
sudo install -d -m 700 /var/backups/asterisk
sudo sh -c "dpkg-query -W asterisk asterisk-modules asterisk-config > /var/backups/asterisk/packages.txt"
sudo tar -czpf /var/backups/asterisk/state-$(date +%F-%H%M).tar.gz -C / etc/asterisk var/lib/asterisk
sudo chmod 600 /var/backups/asterisk/*.tar.gz

tar завершается без ошибок. При ошибке всё равно запустите службу следующим шагом, а не оставляйте станцию остановленной. Архив на том же сервере пока не является внешней копией.

Шаг 20. Верните станцию в работу #

Запустите Asterisk после архивации. Дождитесь повторной регистрации телефонов и повторите один короткий звонок.

Перенесите архив и packages.txt в защищённое хранилище вне этой машины выбранным способом резервирования. Проверяйте успешность передачи; локальный файл не переживёт потерю сервера.

После архивации
sudo systemctl start asterisk
sudo systemctl is-active asterisk

Ожидается active, оба телефона регистрируются, звонок работает. Внешняя копия хранится отдельно с ограниченным доступом.

Как проверить восстановление и обновляться #

На отдельном тестовом сервере установите ту же ветку Asterisk, остановите службу и распакуйте архив в / с сохранением владельцев и прав. Не подключайте тест к рабочим телефонам или внешним транкам. Проверьте частные адреса и firewall, запустите службу и зарегистрируйте два тестовых клиента.

Повторите эхо и двусторонний звонок. Только такой тест показывает, что копия возвращает работающую станцию. Инструкцию восстановления и путь к внешнему архиву сохраните вне АТС.

Перед обновлением сделайте свежую копию и проверьте изменения ветки на тестовой машине. После обновления повторите регистрацию, эхо и вызов. Подключение оператора — отдельный этап с его SIP-параметрами, входящими маршрутами и лимитами расходов.

Если регистрация или звук не работают #

Регистрация не проходит: сверьте IP, UDP 5060, номера auth и пароль в телефоне. Если pjsip show endpoints пуст, ищите ошибку чтения файла или отсутствующий модуль в журнале.

Регистрация есть, звука нет: сравните rtp.conf и firewall, проверьте сеть/VPN и адреса в SDP. Не открывайте все порты во внешний интернет. Для публичного NAT нужны отдельные local_net и external_media_address; этот материал сохраняет простой частный маршрут.

Журнал ниже содержит конкретные ошибки службы. Перед передачей диагностики уберите пароли, номера клиентов и чувствительные адреса.

Журнал Asterisk на сервере
sudo journalctl -u asterisk --since "15 minutes ago" --no-pager
Обсудить установку и настройку

Материал был полезен?

Сообщить об ошибке или задать вопрос редакции

Сообщение увидит редакция. Не указывайте пароли и личные данные. Текст удаляется через 180 дней.

О материале

ИнфраструктураРуководствоЗадача: установитьУровень: практикаAsterisk

Последнее обновление:

Обсуждение

Комментарии проходят подтверждение адреса и проверку редакцией.