Asterisk с нуля: установка, настройка и запуск IP-телефонии на сервере

как установить asterisk на ubuntu server
Быстрый ответ
Установи зависимости, скачай исходники Asterisk 20 LTS, собери командой ./configure && make && make install, пропиши systemd-юнит, открой порты 5060/UDP и 10000-20000/UDP. Первый звонок — через 30–40 минут. Дальше читай по шагам.

Диагноз: почему ты здесь

Нужна офисная АТС, а платить за облачную телефонию $50/мес за каждого сотрудника не хочется. Или стоит задача поднять call-центр с IVR, очередями и записью звонков. Или просто хочешь понять, как работает IP-телефония изнутри — не по теории, а на реальном сервере.

Знакомо? Тогда по делу.

Что получишь в итоге: работающий сервер asterisk с внутренними номерами, подключённым SIP-транком провайдера и пониманием, как всё это отлаживать когда что-то идёт не так.

Сколько займёт: 30–40 минут на первый запуск. Ещё час — на транк и отладку NAT. Это не быстро, но один раз разобравшись — будешь поднимать за 20 минут.

Что понадобится:

  • Сервер или VPS с Ubuntu 22.04 LTS / Debian 12
  • Root-доступ по SSH
  • Минимум 2 GB RAM, 2 vCPU, 20 GB диск
  • Открытые исходящие порты (для загрузки пакетов)
  • SIP-провайдер с реквизитами (для транка, необязательно на первом этапе)

Что будет в статье:

  • Выбор версии Asterisk — какую брать на прод
  • Сборка из исходников — почему не apt install
  • Настройка PJSIP — endpoint, auth, aor без путаницы
  • Dialplan — первый внутренний звонок
  • Порты и firewall — что открывать и почему
  • SIP-транк провайдера — входящие и исходящие
  • Troubleshooting — нет звука, не регистрируется, не стартует
  • Безопасность — минимум, без которого нельзя

Что такое Asterisk и зачем он нужен

Asterisk — это программная АТС с открытым кодом. Работает как SIP-сервер, обрабатывает вызовы, маршрутизирует их по правилам dialplan. По факту: ставишь на Linux-сервер, подключаешь IP-телефоны, подключаешь SIP-транк провайдера — получаешь полноценную IP-телефонию.

Протоколы: SIP (сигнализация) + RTP (медиапоток). SIP договаривается, кто звонит и куда. RTP гонит голос. Важно понимать разницу — иначе потом не поймёшь, почему сигнализация проходит, а звука нет.

Где используется атс asterisk:

  • Офис — внутренняя связь + выход на PSTN через транк
  • Call-центр — IVR, очереди, запись звонков
  • Домашняя лаборатория — попрактиковаться в VoIP без бюджета

Какую версию Asterisk выбрать

Вот тут многие теряются. Смотри на сайте asterisk.org — там всегда актуальная таблица версий. Принцип простой.

Версия Тип Поддержка до Когда брать
Asterisk 18 LTS 2025 Старые инсталляции, не трогай
Asterisk 20 LTS 2027 Прод. Бери это
Asterisk 21 Standard 2025 Не для прода
Asterisk 22 LTS 2029 Свежий, но пока сырой

Для нового прод-сервера — Asterisk 20 LTS. Для лабы — можно 22. FreePBX нужен, если нет времени разбираться с конфигами вручную. Если хочешь полный контроль — чистый Asterisk без GUI.

Установка Asterisk на Ubuntu и Debian

Почему не apt install asterisk? Потому что в репозиториях лежит старая версия — обычно 16 или 18. Без нормального модульного набора. Без актуального PJSIP. Собирай из исходников — один раз, зато контроль полный.

Подготовка сервера

Минимум: Ubuntu 22.04 LTS или Debian 12, 2 CPU, 2 GB RAM, 20 GB диск. Для офиса до 50 номеров — хватит с запасом.

apt update && apt upgrade -y
apt install -y wget curl <a class="wpil_keyword_link" href="https://it-apteka.com/tag/git/" target="_blank"  rel="noopener" title="Git" data-wpil-keyword-link="linked"  data-wpil-monitor-id="1428">git</a> sudo build-essential

Результат: система обновлена, базовые утилиты есть.

Установка зависимостей

apt install -y \
  libedit-dev uuid-dev libjansson-dev \
  libxml2-dev libsqlite3-dev \
  libssl-dev openssl \
  libnewt-dev libncurses5-dev \
  libcurl4-openssl-dev libgmime-3.0-dev \
  pkg-config unixodbc-dev \
  libspandsp-dev libtiff-dev

Не пропускай libssl-dev и libedit-dev. Без них сборка свалится и непонятно почему.

Сборка Asterisk из исходников

cd /usr/src
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
tar xzf asterisk-20-current.tar.gz
cd asterisk-20.*/

Теперь зависимости для mp3 и кодеков:

contrib/scripts/install_prereq install

Конфигурация сборки:

./configure --with-jansson-bundled

Выбор модулей. Открывается TUI — тут важно не облажаться:

make menuselect

Обязательно включи в menuselect:

  • Channel Drivers → chan_pjsip
  • Codec Translators → codec_ulaw, codec_alaw, codec_g722
  • Applications → app_dial, app_voicemail, app_queue
  • Format Interpreters → format_wav, format_gsm

После menuselect — сборка. Займёт 5–15 минут:

make -j$(nproc)
make install
make samples
make config
ldconfig

make samples создаст примеры конфигов. make config — systemd-юнит.

Проверка запуска

systemctl start asterisk
systemctl enable asterisk
systemctl status asterisk

Подключись к консоли:

asterisk -rvvv

Видишь приглашение localhost*CLI> — работает. Выйди командой exit.

Архитектура Asterisk: как проходит звонок

Вот что происходит, когда телефон набирает номер. Разберём по шагам — это поможет понять, где искать проблему, когда что-то не работает.

  1. SIP INVITE приходит на chan_pjsip (Channel Driver). Это сигнализация — кто звонит, куда, с какими кодеками.
  2. Asterisk смотрит в extensions.conf — в какой контекст попадает вызов. Контекст определяется параметром context= в секции endpoint.
  3. Dialplan построчно выполняет приложения: Dial(), Playback(), Queue(), VoiceMail() и т.д.
  4. Если звонок идёт на другой endpoint — поднимается второй канал через chan_pjsip.
  5. После SIP-согласования (200 OK + ACK) стороны переходят к медиа: RTP-поток течёт напрямую между endpoint’ами (если нет NAT) или через Asterisk (если direct_media=no).
  6. При завершении звонка — SIP BYE, оба канала закрываются, Asterisk пишет CDR (запись о звонке).

Понимание этой цепочки объясняет 90% проблем. Нет звука — проблема на шаге 5 (RTP/NAT). Звонок не проходит вообще — шаг 2 или 3 (контекст или dialplan). Телефон не регистрируется — шаг 1 (auth в pjsip).

Ключевые компоненты сервера asterisk:

Компонент Что делает
chan_pjsip Обрабатывает SIP/PJSIP соединения
extensions.conf Dialplan — логика маршрутизации
pjsip.conf Описание endpoint’ов, auth, транков
modules.conf Что грузить при старте
asterisk.conf Системные пути, пользователь

Основные конфиги Asterisk

Все конфиги лежат в /etc/asterisk/. Главное — понять связку. Новички обычно редактируют файлы хаотично, потом не могут найти, где что сломалось.

pjsip.conf — современный SIP-стек

С версии 13+ рекомендован PJSIP вместо старого chan_sip. Более гибкий, лучше обрабатывает NAT, поддерживает WebRTC и IPv6. Файл sip.conf deprecated — не используй его на новых инсталляциях. Если встречаешь статьи с [general] в sip.conf — они устарели.

extensions.conf — dialplan

Сердце Asterisk. Здесь пишешь: пришёл вызов на номер X в контексте Y → выполни приложение Z. Без нормального dialplan — ничего не работает. Синтаксис нелинейный — это не bash, тут свои правила приоритетов и переменных. Потрать час на понимание синтаксиса сейчас — сэкономишь дни потом.

modules.conf

Управляет загрузкой модулей. По умолчанию autoload=yes — грузит всё. На проде лучше явно отключить лишнее: DAHDI если нет ISDN-карт, chan_oss если нет звуковой карты, app_festival если не используешь TTS. Меньше модулей — меньше атак-поверхность и быстрее старт.

asterisk.conf

Системные пути, пользователь, под которым работает Asterisk. По умолчанию стартует от root — на проде создай отдельного пользователя asterisk и пропиши runuser = asterisk. Это не паранойя, это базовая безопасность.

rtp.conf

Диапазон UDP-портов для медиапотоков. По умолчанию 10000–20000. Совпадение с файрволом обязательно — иначе звука не будет.

logger.conf

Настройки логирования. По умолчанию пишет в /var/log/asterisk/full. На проде настрой ротацию, иначе лог разрастётся до гигабайтов:

logrotate /etc/logrotate.d/asterisk

Настройка PJSIP: endpoint, auth, aor

Asterisk PJSIP — три обязательных объекта на каждый номер. Путают их постоянно, поэтому объясняю один раз.

Важно: endpoint ≠ пользователь
Endpoint — это точка подключения (телефон, софтфон). Auth — учётка для регистрации. AOR (Address of Record) — где искать endpoint, сколько одновременных регистраций. Три отдельных секции, три объекта.

Открой /etc/asterisk/pjsip.conf, удали примеры, вставь:

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060

[1000]
type=endpoint
context=internal
disallow=all
allow=ulaw
allow=alaw
allow=g722
auth=1000
aors=1000
direct_media=no
rtp_symmetric=yes

[1000]
type=auth
auth_type=userpass
username=1000
password=SecurePass1000

[1000]
type=aor
max_contacts=2
qualify_frequency=30

[1001]
type=endpoint
context=internal
disallow=all
allow=ulaw
allow=alaw
allow=g722
auth=1001
aors=1001
direct_media=no
rtp_symmetric=yes

[1001]
type=auth
auth_type=userpass
username=1001
password=SecurePass1001

[1001]
type=aor
max_contacts=2
qualify_frequency=30

direct_media=no и rtp_symmetric=yes — это для NAT. Если телефоны за роутером — без этого не будет звука.

Перезагрузи модуль без рестарта Asterisk:

asterisk -rx "pjsip reload"

Проверь, что endpoint’ы видны:

asterisk -rx "pjsip show endpoints"

Asterisk и NAT — почему нет звука

Это самая частая проблема при настройке asterisk nat. Телефон регистрируется, звонок проходит, но в трубке — тишина. Или звук есть только в одну сторону. Или всё работает внутри офиса, но ломается, когда звонишь снаружи.

Реальный кейс: клиент поднял Asterisk на VPS, подключил IP-телефоны в офисе через SIP. Регистрация проходит, вызов устанавливается, оба абонента видят «звонок идёт» — но голоса нет ни у кого. Три часа дебага, и оказалось: телефоны сидят за офисным роутером с NAT, а asterisk nat не был настроен совсем.

Почему SIP и RTP ломаются за NAT

sip vs rtp asterisk схема сигнализации и аудио порт 5060 и rtp 10000 20000
SIP отвечает за установку соединения (сигнализация), а RTP — за передачу голоса. Это разные потоки, и именно из-за этого часто возникают проблемы со звуком.

Здесь важно понять разделение. SIP — это сигнализация: кто кому звонит, какие кодеки поддерживаются, куда слать медиа. RTP — это сам голос, поток UDP-пакетов между двумя точками.

Проблема в том, что SIP-пакет содержит внутри себя IP-адрес клиента. Телефон за роутером пишет в SIP-заголовке свой локальный IP — например, 192.168.1.50. Asterisk получает этот пакет с внешнего IP роутера — например, 203.0.113.10 — но внутри SIP написано 192.168.1.50. Asterisk пытается отправить RTP на 192.168.1.50. Понятно, что до этого адреса он не доберётся — он недоступен из интернета.

Итог: сигнализация работает (SIP проходит через NAT нормально), а медиапоток теряется. Отсюда — односторонний звук или полная тишина.

Второй сценарий: сам Asterisk стоит за NAT. Тогда он сообщает клиентам свой внутренний IP как адрес для RTP. Клиенты пытаются отправить голос на 10.0.0.5, который снаружи недоступен. Тот же результат — нет звука.

Настройка NAT в PJSIP: транспорт

Если Asterisk стоит за NAT или на VPS с внешним IP — настрой транспортный блок в /etc/asterisk/pjsip.conf:

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060

; Внешний IP сервера (или домен)
external_media_address=203.0.113.10
external_signaling_address=203.0.113.10

; <a href="https://it-apteka.com/qwen3-coder-next-besplatnyj-ii-dlja-kodinga-lokalno-ustanovka-cli-i-sravnenie-agentov-2026/" title="Qwen3 Coder Next: бесплатный ИИ для кодинга локально — установка, CLI и сравнение агентов 2026" target="_blank" rel="noopener"  data-wpil-monitor-id="1402">Локальная подсеть —</a> пакеты внутри неё идут без подмены
local_net=192.168.1.0/24
local_net=10.0.0.0/8

Что делает каждый параметр:

  • external_media_address — Asterisk подставляет этот IP в SDP как адрес для приёма RTP. Клиенты снаружи будут слать голос именно сюда.
  • external_signaling_address — подставляется в SIP-заголовки Contact и Via. Нужен, чтобы ответы на SIP-запросы возвращались на правильный адрес.
  • local_net — подсети, для которых подмена IP не нужна. Клиенты внутри этих сетей получают реальный внутренний IP Asterisk. Можно указать несколько строк.

Если у сервера статический внешний IP — вписывай его напрямую. Если IP меняется (редко, но бывает) — можно использовать DNS-имя, Asterisk периодически его резолвит.

NAT-параметры endpoint: rtp_symmetric, force_rport, rewrite_contact

asterisk nat проблема rtp нет звука voip схема nat firewall sip alg
Когда Asterisk или SIP-клиент находится за NAT, в SIP/SDP могут передаваться приватные IP-адреса (например, 192.168.x.x). В результате RTP-поток отправляется не туда, и появляется классическая проблема: “звонок есть, звука нет”. Для исправления используются параметры external_media_address, rtp_symmetric, rewrite_contact и отключение SIP ALG на роутере.

Помимо транспорта, каждый endpoint, который сидит за NAT, нуждается в трёх параметрах. Добавь их в секцию endpoint в pjsip.conf:

[1000]
type=endpoint
context=internal
disallow=all
allow=ulaw
allow=alaw
allow=g722
auth=1000
aors=1000
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes

Объясняю каждый, потому что без понимания будешь ставить наугад:

  • direct_media=no — запрещает прямой медиапоток между двумя endpoint’ами в обход Asterisk. По умолчанию Asterisk пытается «уйти с дороги» и заставить клиентов общаться напрямую. За NAT это не работает — оба клиента шлют RTP на недоступные адреса. С direct_media=no весь голос идёт через сервер.
  • rtp_symmetric=yes — Asterisk отправляет RTP-пакеты на тот адрес и порт, с которого получил первый RTP-пакет от клиента, а не на адрес из SDP. Это решает проблему, когда NAT-роутер меняет порт-источник при каждой сессии.
  • force_rport=yes — Asterisk отправляет SIP-ответы на реальный IP:порт, с которого пришёл запрос, игнорируя адрес в Via-заголовке. Нужно, когда телефон пишет в Via свой внутренний IP, а надо отвечать на внешний.
  • rewrite_contact=yes — Asterisk переписывает Contact-заголовок в REGISTER, заменяя внутренний IP клиента на реальный IP:порт, с которого пришёл пакет. Без этого Asterisk может пытаться звонить на 192.168.x.x вместо внешнего адреса.

Проверка NAT: смотрим что реально происходит

Включи SIP-логирование и делай тестовый звонок:

asterisk -rx "pjsip set logger on"
asterisk -rvvvvv

Ищи в выводе строки SDP — там будет адрес, который Asterisk прописал для RTP. Если видишь внутренний IP (10.x.x.x или 192.168.x.x) вместо внешнего — external_media_address не применился. Проверь, что транспортный блок называется именно тем именем, которое используется в endpoint.

Также смотри на Contact в REGISTER-запросах. Если там внутренний IP клиента — нужен rewrite_contact=yes.

; Посмотреть что Asterisk знает о контакте endpoint'а
asterisk -rx "pjsip show contact 1000/sip:1000@192.168.1.50"

; Или все контакты разом
asterisk -rx "pjsip show contacts"

Частые ошибки с NAT в Asterisk

SIP ALG на роутере включён. SIP ALG (Application Layer Gateway) — «умная» функция роутера, которая пытается помогать SIP-трафику проходить через NAT. По факту она переписывает SIP-заголовки и ломает их. Отключи SIP ALG в настройках роутера. В Mikrotik это ip sip-alg disable, в большинстве домашних роутеров — чекбокс в разделе NAT или Firewall.

RTP-порты закрыты. Сигнализация (5060) открыта, а диапазон RTP (10000–20000) — нет. Звонок устанавливается, но голос не идёт. Проверь:

# Проверить что порты открыты на сервере
ss -ulnp | grep -E "5060|1[0-9]{4}"

# Проверить через ufw
ufw status | grep -E "5060|10000"

Неправильный external IP. Прописал старый IP, который потом поменялся. Или скопировал внутренний IP вместо внешнего. Проверь реальный внешний IP сервера:

curl -s ifconfig.me

Несколько транспортных блоков без явного указания. Если в pjsip.conf несколько секций transport, endpoint должен явно указывать, какой использовать: transport=transport-udp. Иначе Asterisk берёт первый попавшийся, и external_media_address может не применяться.

Порты и firewall для Asterisk

SIP и RTP — разные порты. Оба нужны открытыми. Путаница здесь стоит часов дебага.

Протокол Порт Назначение
SIP 5060 UDP/TCP Сигнализация
PJSIP TLS 5061 TCP Зашифрованная сигнализация
RTP 10000–20000 UDP Медиапоток (голос)

Открываем через ufw:

ufw allow 5060/udp
ufw allow 5060/tcp
ufw allow 10000:20000/udp
ufw allow 22/tcp
ufw enable
ufw status

Если используешь iptables:

iptables -A INPUT -p udp --dport 5060 -j ACCEPT
iptables -A INPUT -p tcp --dport 5060 -j ACCEPT
iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT

Вот тут важно: диапазон RTP должен совпадать с тем, что в /etc/asterisk/rtp.conf:

[general]
rtpstart=10000
rtpend=20000

Dialplan: первый звонок в Asterisk

Dialplan — это скрипт маршрутизации. Каждая строка — это правило: если в контекст X пришёл вызов на номер N, выполни приложение A. Без понимания синтаксиса будешь гадать часами.

Синтаксис dialplan

Строка выглядит так:

exten => НОМЕР, ПРИОРИТЕТ, ПРИЛОЖЕНИЕ(параметры)
  • НОМЕР — конкретный (1001) или шаблон (_XXXX — 4 любые цифры)
  • ПРИОРИТЕТ — 1 для первого шага, n для следующего
  • ПРИЛОЖЕНИЕ — что делать: Dial, Playback, Hangup, VoiceMail и т.д.

Шаблоны в номерах:

  • X — любая цифра 0–9
  • Z — цифра 1–9
  • N — цифра 2–9
  • . — любое количество любых символов
  • [135-9] — 1, 3, 5, 6, 7, 8 или 9

Открой /etc/asterisk/extensions.conf. Базовая конфигурация для внутренних звонков:

[general]
static=yes
writeprotect=no

[internal]
; Звонок на внутренний номер 1000
exten => 1000,1,Dial(PJSIP/1000,20)
exten => 1000,n,VoiceMail(1000@default)
exten => 1000,n,Hangup()

; Звонок на внутренний номер 1001
exten => 1001,1,Dial(PJSIP/1001,20)
exten => 1001,n,VoiceMail(1001@default)
exten => 1001,n,Hangup()

; Маска для всех 4-значных внутренних (чище)
; exten => _1XXX,1,Dial(PJSIP/${EXTEN},20)
; exten => _1XXX,n,Hangup()

; Тест: воспроизвести звук при наборе 9999
exten => 9999,1,Answer()
exten => 9999,n,Playback(hello-world)
exten => 9999,n,Hangup()

Dial(PJSIP/1001,20) — звонить на endpoint 1001, таймаут 20 секунд. ${EXTEN} — встроенная переменная, содержит набранный номер. Очень удобна в шаблонах.

Перезагрузи dialplan без рестарта сервиса:

asterisk -rx "dialplan reload"

Проверь, что правила загрузились:

asterisk -rx "dialplan show internal"

Зарегистрируй SIP-клиент (Zoiper, Linphone, MicroSIP) с реквизитами:

  • Сервер: IP твоего сервера, порт 5060
  • Username: 1000
  • Password: SecurePass1000
  • Transport: UDP

Зарегистрируй второй клиент как 1001. Набери с первого 1001 — должны услышать друг друга. Если нет звука — смотри раздел про NAT и RTP выше.

Полезные приложения dialplan

Приложение Что делает
Dial(PJSIP/1001,20) Позвонить на endpoint, таймаут 20 с
Answer() Поднять трубку (начать сессию)
Playback(звук) Воспроизвести звуковой файл
Background(меню) Воспроизвести и ждать ввода DTMF
WaitExten(5) Ждать ввода номера 5 секунд
VoiceMail(1000@default) Записать голосовое сообщение
Queue(sales) Поставить в очередь
Hangup() Завершить вызов
MixMonitor(record.wav) Записать разговор
AGI(script.php) Вызвать внешний скрипт

SIP-транки в Asterisk: подключение к оператору телефонии

SIP-транк — это сессия между Asterisk и оператором (SIP provider). Через него ip телефония asterisk выходит наружу: входящие с городских номеров, исходящие на мобильные и городские. Без транка — только внутренняя сеть. Именно asterisk транки дают АТС «выход в мир».

Отличие транка от внутреннего номера: endpoint сотрудника регистрируется на Asterisk. Транк — это Asterisk, который регистрируется у провайдера. Направление регистрации обратное.

Архитектура звонка через SIP-транк

sip trunk asterisk схема звонка через провайдера ip телефония asterisk flow
При звонке через SIP-транк Asterisk выступает посредником между клиентом и оператором. SIP-сигнализация проходит через Asterisk к провайдеру, а затем в PSTN. RTP-поток может идти либо через сервер, либо напрямую, в зависимости от конфигурации. Ошибки на этом этапе обычно связаны с авторизацией (401/403), неправильным dialplan или настройками NAT.

Путь исходящего звонка через sip trunk asterisk:

  1. Сотрудник набирает 9 + номер на телефоне
  2. Телефон шлёт SIP INVITE на Asterisk
  3. Dialplan видит шаблон _9XXXXXXXXXX, направляет вызов на endpoint транка
  4. Asterisk шлёт SIP INVITE провайдеру через зарегистрированный транк
  5. SIP provider соединяет с PSTN-сетью или другим VoIP-оператором
  6. RTP-поток: телефон → Asterisk → провайдер (или напрямую, если direct_media=yes)

Путь входящего звонка:

  1. Кто-то звонит на городской номер, арендованный у провайдера
  2. Провайдер шлёт SIP INVITE на Asterisk
  3. Asterisk смотрит в dialplan-контекст from-trunk
  4. Dialplan маршрутизирует: на конкретный номер, IVR, очередь

Настройка asterisk транка в PJSIP: полный конфиг с объяснением

Каждый asterisk транк в pjsip.conf состоит из четырёх объектов. Нельзя обойтись меньшим числом. Вот рабочий конфиг с пояснениями:

; ── 1. AUTH: учётные данные для регистрации у провайдера ──
[provider-auth]
type=auth
auth_type=userpass
username=ВАШ_ЛОГИН          ; логин от личного кабинета провайдера
password=ВАШ_ПАРОЛЬ         ; пароль (не менее 12 символов)

; ── 2. AOR: куда звонить провайдеру ──
[provider-aor]
type=aor
contact=sip:sip.provider.ru:5060   ; SIP-сервер провайдера

; ── 3. ENDPOINT: параметры соединения ──
[provider-endpoint]
type=endpoint
context=from-trunk          ; входящие звонки пойдут в этот контекст
disallow=all
allow=ulaw                  ; основной кодек — уточни у провайдера
allow=alaw
outbound_auth=provider-auth ; какой auth использовать для исходящих
aors=provider-aor
direct_media=no             ; медиа через Asterisk (NAT-safe)
from_user=ВАШ_НОМЕР        ; номер, который видит провайдер в From:

; ── 4. REGISTRATION: Asterisk регистрируется у провайдера ──
[provider-registration]
type=registration
outbound_auth=provider-auth
server_uri=sip:sip.provider.ru         ; SIP-сервер провайдера
client_uri=sip:ВАШ_ЛОГИН@sip.provider.ru
retry_interval=60           ; повтор при обрыве, секунды
expiration=3600             ; время жизни регистрации

Вот тут важно: context=from-trunk в endpoint транка — это контекст для входящих звонков от провайдера. Он обязан отличаться от internal. Если поставишь internal — любой, кто знает SIP-адрес твоего сервера, сможет набрать внутренние номера через транк без пароля.

Dialplan: входящие звонки с транка

[from-trunk]
; Вариант 1: провайдер шлёт звонок без конкретного номера (exten = s)
exten => s,1,Answer()
exten => s,n,Dial(PJSIP/1000,20)
exten => s,n,VoiceMail(1000@default,u)
exten => s,n,Hangup()

; Вариант 2: DID — провайдер шлёт конкретный номер в To:
exten => 74951234567,1,Answer()
exten => 74951234567,n,Goto(ivr-main,s,1)
exten => 74951234567,n,Hangup()

; Вариант 3: несколько DID-номеров → разные отделы
exten => 74951234560,1,Dial(PJSIP/1000,20)   ; директор
exten => 74951234560,n,Hangup()
exten => 74951234561,1,Goto(ivr-main,s,1)    ; общий номер → IVR
exten => 74951234561,n,Hangup()

Какой вариант использует твой провайдер — уточни в документации. Большинство российских SIP provider’ов поддерживают DID, но формат может отличаться: одни шлют 74951234567, другие — 4951234567 без кода страны.

Dialplan: исходящие звонки через транк

[internal]
; Набери 9 + 10-значный мобильный или городской
exten => _9XXXXXXXXXX,1,Dial(PJSIP/provider-endpoint/${EXTEN:1})
exten => _9XXXXXXXXXX,n,Congestion()
exten => _9XXXXXXXXXX,n,Hangup()

; Набери 8 + номер (альтернативный префикс)
exten => _8XXXXXXXXXX,1,Dial(PJSIP/provider-endpoint/${EXTEN:1})
exten => _8XXXXXXXXXX,n,Hangup()

; Экстренные службы (без префикса)
exten => 112,1,Dial(PJSIP/provider-endpoint/112)
exten => 112,n,Hangup()

${EXTEN:1} — срезает первый символ (префикс 9 или 8). Провайдеру уходит чистый номер в формате 79161234567.

Применить изменения:

asterisk -rx "pjsip reload"
asterisk -rx "dialplan reload"

Проверка asterisk транка

; Статус регистрации
asterisk -rx "pjsip show registrations"

; Состояние endpoint транка
asterisk -rx "pjsip show endpoint provider-endpoint"

; Тестовый исходящий звонок из CLI
asterisk -rx "channel originate PJSIP/79161234567@provider-endpoint application Playback hello-world"

Частые проблемы с SIP-транком

403 Forbidden. Провайдер отклоняет запрос. Причины: IP-адрес сервера не внесён в белый список у провайдера (многие требуют привязку IP), или неверный from_user, или провайдер не принимает данный кодек. Проверь личный кабинет провайдера — там обычно есть поле «разрешённые IP».

401 Unauthorized. Неверные логин или пароль в [provider-auth]. Проверь регистр — пароли чувствительны к регистру. Включи pjsip set logger on и смотри SIP-диалог: в ответе 401 будет поле WWW-Authenticate, по нему видно realm провайдера — он должен совпадать с тем, что Asterisk использует при ответе.

Нет входящих, исходящие работают. Asterisk зарегистрировался у провайдера, но входящие не приходят. Причины: провайдер шлёт DID-номер в To, а в диалплане только exten => s. Включи pjsip set logger on, позвони на номер извне — посмотри, что написано в поле To: входящего INVITE. Именно это значение должно быть в exten =>.

Регистрация отваливается каждые N минут. Провайдер присылает Expires: 0 или короткий таймер. Уменьши expiration в секции [provider-registration] до значения, которое меньше таймера провайдера. Или добавь max_retries=0 чтобы Asterisk обновлял регистрацию непрерывно.

FreePBX vs чистый Asterisk

FreePBX — это веб-GUI поверх Asterisk. Удобно для тех, кто не хочет трогать конфиги руками. Но есть нюансы.

Параметр Asterisk (чистый) FreePBX
Контроль конфигов Полный Ограничен GUI
Кривая обучения Высокая Низкая
Гибкость dialplan Максимальная Средняя
Обновления Ручные Через GUI
Риск сломать Ниже Выше (GUI перезаписывает)
Поддержка на форумах Отличная Хорошая

Бери FreePBX, если: нужно быстро развернуть для не-технарей, нет времени изучать dialplan, хочешь готовый call-центр из коробки.

Бери чистый Asterisk, если: нужен полный контроль, сложная логика маршрутизации, интеграция через AGI/ARI, или ты просто хочешь понять, как оно работает.

Проверка работы Asterisk

Подключись к консоли. -r — remote mode (подключиться к уже запущенному), vvv — уровень детализации:

asterisk -rvvv

Проверь статус endpoint’ов и контакты (факт регистрации SIP-клиентов):

pjsip show endpoints
pjsip show contacts

Статус Reachable в колонке Status — всё хорошо. Unreachable или пусто — клиент не зарегистрирован или не отвечает на qualify-запросы.

Состояние транков к провайдеру:

pjsip show registrations

Смотришь на колонку State. Registered — транк активен. Rejected — проблема с авторизацией у провайдера. Trying — ждёт ответа, проверь доступность сервера провайдера.

Активные каналы (текущие звонки):

core show channels
core show channels count

Список загруженных модулей:

module show

Посмотреть последние события в логе:

tail -f /var/log/asterisk/full

Включить детальное SIP-логирование прямо в консоль (выключается после reload):

pjsip set logger on

Теперь каждый SIP-пакет будет виден в консоли. Позвони с телефона — увидишь REGISTER, INVITE, 200 OK и т.д. Это главный инструмент диагностики. Когда не понимаешь, что происходит — включай и смотри.

Осложнения: типичные ошибки и решения

Нет звука в одну или обе стороны
Причина: RTP-пакеты не доходят из-за NAT или закрытых портов. Решение: в pjsip.conf для каждого endpoint поставь direct_media=no и rtp_symmetric=yes. Проверь, что порты 10000–20000/UDP открыты на файрволе. Если сервер за NAT, добавь в pjsip.conf секцию [transport-udp] параметр external_media_address=ВАШ_ВНЕШНИЙ_IP и local_net=192.168.0.0/24.
Registration Failed / 401 Unauthorized
Причина: неверный пароль или username. Решение: сверь username/password в [auth] секции pjsip.conf с настройками SIP-клиента. Включи логирование: asterisk -rx «pjsip set logger on» — увидишь SIP-диалог в реальном времени.
Endpoint Not Found / звонок не проходит
Причина: клиент не зарегистрирован или неверный контекст. Решение: asterisk -rx «pjsip show contacts» — смотри статус. Если пусто — клиент не зарегистрировался. Проверь IP сервера в настройках клиента.
Asterisk не стартует: failed to open /dev/dahdi
Причина: модуль DAHDI пытается загрузиться, но железа нет. Решение: в /etc/asterisk/modules.conf добавь noload => chan_dahdi.so — и рестарт.
Сборка падает: configure error — missing library
Причина: не хватает dev-пакетов. Решение: запусти contrib/scripts/install_prereq test — скажет, чего нет. Доставь пакеты apt install и повтори ./configure.
Звонок идёт, но обрывается через 32 секунды
Причина: firewall режет UDP-сессии, которые не обновляются в 30-секундный интервал. Решение: в pjsip.conf для endpoint добавь timers=no. Также проверь настройки sip_alg на роутере — отключи если включён. SIP ALG ломает SIP-заголовки и является источником примерно 30% необъяснимых проблем с VoIP.
Одностороннее эхо или шум в трубке
Причина: транскодинг или проблема с эхокомпенсацией. Решение: убедись, что оба endpoint’а используют один кодек. В pjsip.conf: disallow=all, allow=ulaw на обоих endpoint’ах. Если проблема остаётся — включи встроенный эхоканселлер Asterisk через oslec.

Расширенная отладка

# Включить SIP-логирование в консоли (выключается при reload)
asterisk -rx "pjsip set logger on"

# Уровень verbose (чем больше v — тем больше деталей, максимум vvvvv)
asterisk -rvvvvv

# Смотреть только ошибки и предупреждения
grep -E "ERROR|WARNING" /var/log/asterisk/full | tail -50

# Тест dialplan без реального звонка
asterisk -rx "dialplan test 1001 internal"

# Статистика RTP по активному каналу
asterisk -rx "rtp show stats"

Самый мощный способ дебага: pjsip set logger on, затем сделай звонок с проблемного телефона. Видишь весь SIP-диалог — REGISTER, INVITE, 100 Trying, 180 Ringing, 200 OK, ACK. Проблема видна мгновенно: нет 200 OK — сервер не ответил. Нет ACK — клиент не принял ответ. 403 Forbidden — проблема с авторизацией.

Альтернативные решения IP-телефонии

Asterisk не единственный вариант. Смотри по задаче:

  • FreeSWITCH — мощнее в enterprise-сценариях, сложнее в настройке. Для WebRTC и видео — предпочтительнее.
  • Kamailio — SIP-прокси, не АТС. Используй как фронт для Asterisk при высокой нагрузке.
  • 3CX — коммерческая АТС с GUI. Бесплатна до 10 одновременных звонков. Быстрый старт, закрытый код.
  • Yeastar / Grandstream — железные АТС с Asterisk внутри. Для офиса без своего сисадмина.

Голосовое меню (IVR) в Asterisk: базовый пример

IVR — интерактивное голосовое меню. «Нажмите 1 для продаж, нажмите 2 для поддержки». Строится на двух приложениях: Background() воспроизводит файл и ждёт нажатия, WaitExten() ждёт ввода номера.

Сначала запиши или скачай аудиофайл приветствия и положи его в /var/lib/asterisk/sounds/ru/. Asterisk поддерживает форматы wav, gsm, ulaw. Для конвертации:

# Конвертировать wav в gsm (нужен sox)
apt install sox
sox welcome.wav -r 8000 -c 1 /var/lib/asterisk/sounds/ru/welcome.gsm

Добавь в extensions.conf:

[ivr-main]
; Входящий звонок → IVR
exten => s,1,Answer()
exten => s,n,Set(TIMEOUT(digit)=5)
exten => s,n,Background(ru/welcome)
exten => s,n,WaitExten(5)

; Нажал 1 → Отдел продаж (номер 1100)
exten => 1,1,Dial(PJSIP/1100,20)
exten => 1,n,Hangup()

; Нажал 2 → Техподдержка (номер 1200)
exten => 2,1,Dial(PJSIP/1200,20)
exten => 2,n,Hangup()

; Не нажал ничего (timeout) → повтор
exten => t,1,Goto(s,1)

; Неверная цифра → повтор
exten => i,1,Goto(s,1)

В from-trunk (входящий контекст провайдера) поменяй маршрут на IVR:

[from-trunk]
exten => s,1,Goto(ivr-main,s,1)
asterisk -rx "dialplan reload"

Позвони с мобильного на городской номер — должно воспроизвестись приветствие и ждать нажатия.

Голосовая почта в Asterisk

Voicemail настраивается в двух местах: /etc/asterisk/voicemail.conf (ящики) и extensions.conf (когда переходить на запись).

В /etc/asterisk/voicemail.conf:

[general]
format=wav49|gsm|wav
<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="becddbccc8dbccdbd3dfd7d283cedcc6fec7d1cbccdad1d3dfd7d090cccb">[email&#160;protected]</a>
maxmessage=300
maxsilence=10

[default]
1000 => 1234,Иван Иванов,<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b4ddc2d5daf4cddbc1c6d0dbd9d5ddda9ac6c1">[email&#160;protected]</a>
1001 => 5678,Пётр Петров,<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4434213036043d2b3136202b29252d2a6a3631">[email&#160;protected]</a>

Формат: номер => PIN,Имя,Email. Asterisk умеет слать запись на email — для этого нужен настроенный MTA (postfix, sendmail).

В extensions.conf добавь переход на voicemail, если не взяли трубку:

[internal]
exten => 1000,1,Dial(PJSIP/1000,20)
exten => 1000,n,VoiceMail(1000@default,u)
exten => 1000,n,Hangup()

; Чтение сообщений: набери *1000
exten => *1000,1,VoiceMailMain(1000@default)
exten => *1000,n,Hangup()

Параметр u в VoiceMail — играть «unavailable» приветствие. b — «busy». Перезагрузи и проверь: позвони на 1000, не бери трубку — через 20 секунд услышишь предложение оставить сообщение.

Профилактика: как не сломать снова

Бэкап конфигов

# Бэкап всех конфигов с датой
tar czf /root/asterisk-conf-$(date +%Y%m%d).tar.gz /etc/asterisk/

Добавь в cron еженедельно. Конфиги маленькие — жадничать не нужно.

# Добавить в crontab (crontab -e)
0 3 * * 0 tar czf /root/asterisk-conf-$(date +\%Y\%m\%d).tar.gz /etc/asterisk/

Мониторинг

# Проверить что сервис жив
systemctl is-active asterisk

# Количество активных звонков
asterisk -rx "core show channels count"

# Uptime и версия
asterisk -rx "core show version"
asterisk -rx "core show uptime"

Для прода — подключи Zabbix или Prometheus с asterisk_exporter. Ключевые метрики: количество каналов, статус регистраций транков, задержка RTP. Если транк упал ночью и никто не следит — утром узнаешь от директора, а не от мониторинга.

Автозапуск и watchdog

systemctl enable asterisk

Добавь рестарт при падении. Открой юнит-файл:

systemctl edit asterisk

Вставь в открывшийся редактор:

[Service]
Restart=on-failure
RestartSec=5s
systemctl daemon-reload
systemctl restart asterisk

Безопасность Asterisk

IP-телефония — лакомая цель. Сканеры SIP-портов работают непрерывно. Взломанная АТС — это несколько тысяч долларов звонков на премиум-номера за выходные. Не шутка.

Минимальный чеклист безопасности:

  • Смени все пароли в pjsip.conf. password=1234 — это подарок сканерам. Минимум 16 символов, буквы+цифры+спецсимволы.
  • Поставь fail2ban. Готовый фильтр есть в /etc/fail2ban/filter.d/asterisk.conf. Блокирует IP после N неудачных регистраций.
apt install fail2ban
# Создай /etc/fail2ban/jail.d/asterisk.conf:
[asterisk]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
logpath = /var/log/asterisk/full
maxretry = 5
bantime = 3600
  • Закрой порт 5060 для всех кроме белого списка IP (если возможно).
  • Запрети международные направления в dialplan, если они не нужны. Шаблон _9011. для США или _8. для России — убери, если не используешь.
  • Включи CDR-логирование и периодически смотри на аномалии: много коротких звонков на одно направление — тревожный сигнал.

FAQ

Почему после установки Asterisk нет звука при звонке?

Почти всегда — NAT и RTP. Телефон шлёт медиапакеты со своего внутреннего IP (например, 192.168.1.10), а сервер их не принимает, потому что ждёт с другого адреса. Или сервер сам за NAT и не может получить медиапоток.

Пошаговое исправление:

  1. В pjsip.conf для каждого endpoint: direct_media=no и rtp_symmetric=yes
  2. Если сервер за NAT: в секцию [transport-udp] добавь external_media_address=ВНЕШНИЙ_IP и local_net=192.168.1.0/24
  3. Проверь, что порты 10000–20000/UDP открыты в файрволе
  4. Отключи SIP ALG на роутере если он включён

Как проверить, что SIP-клиент зарегистрировался на Asterisk?

asterisk -rx "pjsip show contacts"

В столбце Status должно быть Reachable. Если пусто — клиент не добрался до сервера. Проверь: правильный ли IP сервера в настройках клиента, открыт ли порт 5060/UDP на файрволе, правильный ли пароль.

Что если Asterisk упал и не поднимается?

journalctl -u asterisk -n 100 --no-pager
tail -100 /var/log/asterisk/full

Ищи строку с ERROR — там будет файл и номер строки с проблемой. Чаще всего — синтаксическая ошибка в конфиге после ручного редактирования.

Asterisk или FreePBX — что проще для начала?

FreePBX проще для первого старта — есть GUI, мастер настройки, пошаговые формы. Но если хочешь понять, как IP-телефония работает изнутри — иди на чистый Asterisk. Знания переносятся: конфиги те же, dialplan тот же, только без GUI-прослойки.

Какой минимальный сервер нужен для Asterisk?

Для офиса до 20 одновременных звонков: 1 vCPU, 1 GB RAM, 10 GB диск. Транскодинг (конвертация кодеков) жрёт CPU. Если провайдер поддерживает ulaw/alaw и телефоны тоже — транскодинг не нужен, нагрузка минимальна. Для 100+ одновременных звонков — минимум 4 vCPU, 4 GB RAM, отдельный SSD.

Как обновить Asterisk до новой версии?

Asterisk обновляется пересборкой из исходников. Остановить сервис, скачать новый tarball, пересобрать теми же командами, запустить. Конфиги в /etc/asterisk/ не затрагиваются. Перед обновлением — обязательный бэкап конфигов.

systemctl stop asterisk
cd /usr/src
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
tar xzf asterisk-20-current.tar.gz
cd asterisk-20.*/
./configure --with-jansson-bundled
make -j$(nproc) && make install
systemctl start asterisk
asterisk -rx "core show version"

Почему нельзя просто apt install asterisk?

Можно, если тебе нужна версия 16 с ограниченным набором модулей. В репозиториях Ubuntu/Debian лежит старая сборка без актуального PJSIP, без нужных кодеков, с устаревшими зависимостями. Сборка из исходников занимает 15 минут, но ты получаешь свежую версию с полным контролем над модулями.

Безопасность Asterisk: почему АТС ломают за часы

Это не страшилка. Открытый порт 5060 на публичном IP — и через 10–20 минут начнут приходить SIP REGISTER-запросы от сканеров. SIP-сканеры непрерывно перебирают диапазоны IP в поисках открытых АТС. Взломанный Asterisk с простыми паролями — это toll fraud: несколько тысяч долларов звонков на премиум-номера за выходные, пока ты не смотришь в логи.

Реальный паттерн атаки: сканер находит порт 5060, перебирает стандартные username’ы (1000, 1001, admin, asterisk, test), подбирает пароль из словаря. Слабый пароль типа 1234 или asterisk ломается за секунды. После этого атакующий регистрирует свой SIP-клиент и делает тысячи звонков на платные номера — биллинг падает на тебя.

Как понять, что тебя уже атакуют:

; Смотреть на REGISTER-попытки с чужих IP
grep "Registration" /var/log/asterisk/full | grep -v "our IP" | tail -30

; Много AUTH_FAILURE от одного IP
grep "AUTH_FAILURE" /var/log/asterisk/full | awk '{print $NF}' | sort | uniq -c | sort -rn | head -10

; Аномально много активных каналов
asterisk -rx "core show channels count"

Если видишь десятки REGISTER-запросов с разных IP на несуществующие username’ы — сканеры уже работают. Если один IP генерирует сотни AUTH_FAILURE — brute-force в процессе.

Шаг 1: asterisk firewall — закрыть всё лишнее

Минимальный набор открытых портов для asterisk firewall:

; Сбросить лишние правила, добавить нужные
ufw default deny incoming
ufw default allow outgoing

; SSH — не забудь, иначе потеряешь доступ
ufw allow 22/tcp

; SIP-сигнализация
ufw allow 5060/udp
ufw allow 5060/tcp

; TLS SIP (если используешь)
ufw allow 5061/tcp

; RTP — медиапоток (голос)
ufw allow 10000:20000/udp

ufw enable
ufw status numbered

На проде — ещё жёстче. Если знаешь IP всех SIP-клиентов и провайдеров — закрой 5060 для всего мира и открой только для них:

; Только для конкретного IP провайдера
ufw allow from 185.45.152.0/24 to any port 5060

; Только для офисного IP
ufw allow from 203.0.113.50 to any port 5060

Шаг 2: Fail2ban для защиты Asterisk

Fail2ban читает логи и блокирует IP после N неудачных попыток. Для asterisk fail2ban уже есть готовый фильтр в поставке.

apt install fail2ban -y

Создай /etc/fail2ban/jail.d/asterisk.conf:

[asterisk]
enabled  = true
port     = 5060,5061
protocol = all
filter   = asterisk
logpath  = /var/log/asterisk/full
maxretry = 5
findtime = 300
bantime  = 3600
action   = iptables-allports[name=ASTERISK, protocol=all]

Параметры: maxretry=5 — 5 неудачных попыток, findtime=300 — за 5 минут, bantime=3600 — бан на час. Для прода увеличь bantime до 86400 (сутки).

systemctl enable fail2ban
systemctl restart fail2ban

; Проверить что jail работает
fail2ban-client status asterisk

; Посмотреть заблокированные IP
fail2ban-client status asterisk | grep "Banned IP"

Убедись, что asterisk fail2ban видит логи. По умолчанию Asterisk пишет в /var/log/asterisk/full — проверь, что файл существует и туда идут записи:

tail -5 /var/log/asterisk/full

Шаг 3: отключить анонимные звонки

По умолчанию Asterisk принимает вызовы от незарегистрированных пользователей. Это надо отключить явно. В /etc/asterisk/pjsip.conf:

[global]
type=global
endpoint_identifier_order=ip,username,anonymous
; Запретить анонимные звонки:
default_inbound_trunk_endpoint=

[anonymous]
type=endpoint
; Все анонимные вызовы → в контекст-ловушку
context=blocked-callers

В extensions.conf создай контекст-ловушку:

[blocked-callers]
exten => _.,1,Log(SECURITY, "Blocked anonymous call from ${CALLERID(all)} to ${EXTEN}")
exten => _.,n,Hangup()

Шаг 4: сильные пароли и смена SIP-порта

Генерируй пароли для каждого endpoint. Минимум 16 символов, буквы+цифры+спецсимволы:

; Генератор паролей прямо в терминале
openssl rand -base64 18

Смена порта SIP с 5060 на нестандартный — простая мера, которая отсеивает массовые сканеры. В /etc/asterisk/pjsip.conf:

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:15060   ; нестандартный порт
; Обновить firewall
ufw delete allow 5060/udp
ufw allow 15060/udp

Минус: нужно будет указывать нестандартный asterisk port во всех SIP-клиентах и у провайдера. Некоторые провайдеры не поддерживают нестандартный порт на их стороне — уточни заранее.

Шаг 5: TLS + SRTP (продвинутый уровень)

TLS шифрует сигнализацию, SRTP — голос. Без них SIP-пакеты идут открытым текстом и можно прослушать разговоры через Wireshark в той же сети.

Кратко: генерируй сертификат (Let’s Encrypt или self-signed), добавь транспорт TLS в pjsip.conf, включи SRTP в endpoint. Это отдельная тема на 30 минут настройки — подробнее в разделе про продвинутую конфигурацию.

; Быстрая генерация self-signed сертификата
openssl req -new -x509 -days 3650 -nodes \
  -out /etc/asterisk/keys/asterisk.crt \
  -keyout /etc/asterisk/keys/asterisk.key

; Транспорт TLS в pjsip.conf
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key

Мониторинг безопасности Asterisk

Минимальный набор проверок, которые стоит запустить в cron раз в сутки:

#!/bin/bash
# /root/check-asterisk-security.sh

# Аномальное количество AUTH_FAILURE за последние 24 часа
FAILURES=$(grep "$(date +%b)" /var/log/asterisk/full | grep AUTH_FAILURE | wc -l)
if [ "$FAILURES" -gt 100 ]; then
    echo "ALERT: $FAILURES AUTH_FAILURE в логах Asterisk" | <a class="wpil_keyword_link" href="https://it-apteka.com/tag/mail/" target="_blank"  rel="noopener" title="mail" data-wpil-keyword-link="linked"  data-wpil-monitor-id="1425">mail</a> -s "Asterisk Security Alert" admin@company.ru
fi

# Активные блокировки fail2ban
fail2ban-client status asterisk | grep "Banned IP" >> /var/log/asterisk/security-audit.log

Итог: когда стоит использовать Asterisk

Asterisk — правильный выбор, если нужен полный контроль над телефонной инфраструктурой без ежемесячных платежей за облачную АТС. Для команды из 10 человек разница может составить 200–500 долларов в месяц по сравнению с hosted-решениями.

Плюсы Минусы
Бесплатный open-source Нужен сисадмин для настройки
Полный контроль конфигов Кривая обучения 2–4 недели
Масштабируется до тысяч каналов Обновления только вручную
Интеграция с любой CRM через AGI/ARI Нет коробочного GUI
Огромное сообщество и документация NAT-настройка требует времени

Asterisk подходит, когда есть технический сотрудник, нужна кастомная логика звонков, IVR с очередями, запись разговоров, интеграция с внешними системами.

Не подходит, если нет никого технического вообще, нужно поднять за час без погружения, или масштаб слишком мал для выделенного сервера.

Что получил и что дальше

Ты собрал Asterisk из исходников, настроил PJSIP с внутренними номерами, открыл нужные порты, написал базовый dialplan и подключил транк провайдера. Сервер asterisk обрабатывает звонки. Это рабочий фундамент.

Дальше — IVR-меню через Background() и WaitExten(), очереди с равномерным распределением через Queue(), запись разговоров через MixMonitor(), интеграция с CRM через AGI-скрипты на Python или PHP. Каждая фича — отдельная тема, но базовая логика одна: endpoint в pjsip.conf, правило в extensions.conf.

Не заработало — не уходи
Включи pjsip set logger on в консоли и смотри SIP-диалог в реальном времени. 9 из 10 проблем видны там сразу. Если не помогло — опиши в комментариях: что делал, что получил, что в логе. Разберёмся.
Андрей Анатольевич
Author: Андрей Анатольевич

Руководитель ИТ / Кризис-менеджер 25 лет в IT: от инженера в МегаФоне до руководителя отдела. Знаю, как выглядит бардак: нестабильные сети, устаревшая инфраструктура, конфликты в команде, раздутые сроки. Помогаю бизнесу выходить из кризиса: навожу порядок в легаси, стабилизирую то, что разваливается, выстраиваю прогнозируемые процессы. Не раз возвращал к жизни ИТ-структуры — знаю цену хаосу. 📍 Ищу проект для полной реорганизации / стабилизации. 📬 Telegram: @over_dude ✉️ mail@it-apteka.com

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →

Мы ВКонтакте

IT-Аптека — советы, новости и помощь рядом.

Вступить в группу ВКонтакте →
Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх