Пошаговая инструкция · Самостоятельная установка
Как установить Asterisk на Ubuntu 26.04 и проверить звонки
Пошаговая инструкция для самостоятельной установки. Настроим Asterisk небольшими шагами: установим пакет, создадим два внутренних номера, подключим телефоны и проверим звук. В каждом шаге указано, что меняем, где выполняем действие и как понять, что оно получилось.
Что потребуется для первого внутреннего звонка #
Настроим два внутренних номера 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 обновляет список пакетов. Если он сообщает об ошибке сети или репозитория, сначала устраните её и не продолжайте установку.
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y universe
sudo apt updateПоследнее обновление списка завершилось без ошибок. Если universe уже включён, повторное добавление не должно требовать нового источника.
Шаг 2. Установите пакет Asterisk #
Пакет содержит программу, модули PJSIP, примеры конфигурации и службу systemd. Для первых внутренних звонков собирать исходники не требуется.
sudo apt install -y asteriskУстановка закончилась без ошибки APT. В /etc/asterisk появились файлы настройки.
Шаг 3. Включите службу и проверьте запуск #
enable включает автоматический запуск при загрузке, --now запускает службу сразу. Затем проверим её состояние.
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. Номер сборки может измениться с обновлениями; запишите свой вывод, чтобы затем восстанавливать совместимую версию.
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. Эти значения попадут в файл станции и соответствующий телефон; не отправляйте их в общий чат.
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. Это доступ к чтению службы, а не разрешение всем редактировать конфигурацию.
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.gztar завершается без ошибок. При ошибке всё равно запустите службу следующим шагом, а не оставляйте станцию остановленной. Архив на том же сервере пока не является внешней копией.
Шаг 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; этот материал сохраняет простой частный маршрут.
Журнал ниже содержит конкретные ошибки службы. Перед передачей диагностики уберите пароли, номера клиентов и чувствительные адреса.
sudo journalctl -u asterisk --since "15 minutes ago" --no-pager