Андрей Смирнов
Время чтения: ~13 мин.
Просмотров: 8

Asterisk. Начало

На написание этой статьи меня побудило практически полное отсутствие how-to по настройке Астериска, с понятными новичку примерами. В сети можно найти кучу информации по настройке IVR, по настройке авторизации SIP-пользователей через LDAP, мануалов по созданию HA-кластеров с Астерисками внутри, etc., но нет ни одной статьи о том, как завести его с нуля, да и еще с примерами. Практически везде предлагается сразу же использовать все возможности, которые предлагает Астериск, а если убрать часть функционала, предлагаемого в мануале, то в большинстве случаев это приведет к получению неработоспособной конструкции. Эта статья — результат хождения по граблям… чтения мануалов. Если вы находитесь в такой же ситуации, что и я пару лет назад — добро пожаловать под кат. И так, ситуация: вы только что узнали про Астериск и его возможности, и захотели использовать его у себя дома, или ваше руководство захотело IP-телефонию в офис. Первое что нам необходимо — сервер с установленной операционкой. По ряду причин я выбрал для своих серверов CentOS 6. Все примеры будут с привязкой к этой ОС, так как именно на ней получаются наиболее стабильные сервера. Тем не менее, я ни коим образом не пытаюсь ограничить вас выборе. Астер нормально заведется и под Debian-ом, и под Arch-ем, и даже на FreeBSD. Замечу: желательно не пользоваться гипервизорами на начальном этапе, так как вы можете получить «металлический» голос, либо его полное отсутствие. Про таймеры и прерывания расскажу в следующей статье, так как их описание и настройка выходит за рамки этой статьи. В том случае, если свободного сервера у вас нет и без виртуальной машины не обойтись, обязательно ставьте x86-го гостя. После того, как вы установили операционку на сервер, можно приступить к установке Астериска. Добавляем репозитории Didgium:

rpm -Uvh http://packages.asterisk.org/centos/6/current/i386/RPMS/asterisknow-version-3.0.1-2_centos6.noarch.rpm yum update

Устанавливаем dnsmasq:

yum install dnsmasq

Устанавливаем Астериск:

yum install asterisk asterisk-configs --enablerepo=asterisk-12

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

asterisk -rv

Обратите внимание на ключи, c которыми запускается шелл. Количество ключей «v» влияет на количество выводимой информации при звонке, их количество варьируется от 1 до 14. Если установка прошла успешно и Астериск запустился, вы увидите вот такое приглашение:

asterisk*CLI>

Поздравляю, Астериск установился и готов к работе. Но пока что шелл нам не нужен, поэтому пишем exit. Для того, чтобы сэкономить ваше время и сделать материал понятным, рассмотрим теорию на конкретном примере, а также разберем основные термины, которыми вам придется оперировать при настройке, при общении с саппортом оператора и своими коллегами. Для примера мы заведем двух внутренних пользователей с номерами 100 и 101, и двух операторов телефонии. Один из операторов будет предоставлять нам городские номера через транк с регистрацией, другой будет обеспечивать доступ к направлениям дальней связи, используя транк без регистрации. Первое что вам требуется сделать — создать пиров в файле /etc/asterisk/sip.conf. Открываем его:

nano /etc/asterisk/sip.conf

И сразу переходим в конец файла. Вставляем следующий текст:

[internal](!) type=friend insecure=invite,port context=office fromdomain=<имя домена или IP> host=dynamic disallow=all allow=alaw qualify=yes canreinvite=no nat=no  [100](internal) secret=XXX [101](internal) secret=XXX

Мы завели двух внутренних пиров с номерами 100 и 101. Разберем эти настройки, так как их понимание — ключ к успешному внедрению Астериска.[internal](!) [internal], это имя шаблона, а (!) указатель шаблона. Почему сразу начинаем использовать шаблоны? Потому что они сокращают время настройки и уменьшают количество текста с конфигурационном файле, а для понимания они очень просты.type=friend Доступные параметры: «peer», «user» и «friend». Очень часто встречается ошибочное мнение относительно того, чем они отличаются. Многие считают, что параметр «user» разрешает только исходящие, «peer» — только входящие звонки, а «friend» разрешает звонки в обе стороны. Это не так. Использование ключа «peer» отключает проверку соответствия имени пользователя и пароля при звонке. При использовании параметра «peer», Астериском проверяется только соответствие IP-адреса и номера порта источника вызова, при использовании «user» — проверяется поле username, а проверка адреса источника не производится. Параметр «friend» заставляет проверять поле username и IP-адрес источника.insecure=invite,port invite — отключается аутентификация при входящем звонке. port — отключается проверка порта источника. При первоначальной настройке пропишите оба ключа.context=office Контекст, в котором будут обрабатывается исходящие звонки от этого устройства. Подробности чуть ниже.fromdomain=<имя домена или IP> Имя SIP-домена. Для первоначальной настройки укажите IP адрес сервера с Астериском.host=dynamic IP-адрес пира. В случае использования авторизации по логину и паролю — ставьте dynamic. Конкретный IP указывается только в том случае, если настройки пира используются для транка без регистрации. Указываем разрешенные кодеки. В нашем примере первая строка запрещает использование всех кодеков, а вторая — разрешает g711-a. Настройки кодеков индивидуальны для каждого случая, однако, большинство Российских и Украинских провайдеров используют g711a и g729. Последний — пропиетарный, и Астериском поддерживается лишь в Passthrough-режиме (то есть, невозможен транскодинг).qualify=yes Эта строка заставляет Астериск опрашивать устройство или софтфон пакетами OPTIONS. Необходим для мониторинга и траблшутинга.canreinvite=no Запрещает пересылать медиа напрямую между устройствами. Рекомендую ставить «no», для упрощения настройки.nat=no Говорим Астериску, что пир не за натом. Описание ключей и вариантов их использования, если сервер за ним, выходит за рамки статьи. Про варианты обхода расскажу в следующей статье. Тут мы задаем имя пира и берем настройки из шаблона. Единственные уникальные параметры в нашем примере — имя пира и пароль. На этом мы закончили настраивать внутренних пиров, перейдем к настройке стыка с операторами. Добавим 2 записи в конец sip.conf:

[operator1] fromdomain=<имя домена или IP> host=1.2.3.4 insecure=invite,port port=5060 qualify=yes type=friend username=YourLogin secret=YourPass disallow=all allow=alaw context=operator1

Не буду расписывать значения каждой строки, т.к. все настройки идентичны настройкам внутренних пиров, за исключением поля host. В том случае, если Астериск выступает в роли клиента (а для сервера оператора наш астериск является клиентом), нам нужно указать адрес сервера оператора или его dns-имя. Добавим второго оператора:

[operator2] fromdomain=<имя домена или IP> host=5.6.7.8 insecure=invite,port port=5060 qualify=yes type=friend disallow=all allow=alaw.  context=operator2

Отличий тоже никаких, за исключением отсутствия строк username и secret, так как, напомню, второй оператор не использует регистрацию. Осталось настроить регистрацию на сервере оператора №1. Для этого в файле sip.conf, перед секцией описывающей настройки оператора вставим следующую строку:

register => udp://YourLogin:YourPass:YourLogin@1.2.3.4/YourLogin

Синтаксис, для неподготовленного человека, выглядит сложным, поэтому не заморачивайтесь и просто позвоните в саппорт провайдера и узнайте у них о том, как регистрироваться на сервере Астериском, либо попросите выслать настройки. Как правило, большинство операторов без проблем высылают пример конфигурации под свои софт-свитчи. Наверняка вы редактировали файлы конфигурации под пользователем с ограниченными правами. Если это так, то Астериск не сможет получить доступ к файлу конфигурации, поэтому пишем:

chown asterisk:asterisk /etc/asterisk/sip.conf

На этом настройка пиров закончена, ее достаточно для работы в минимальной конфигурации, сохраняем и закрываем файл и возвращаемся в шелл Астериска командой:

asterisk -rv

В шелле Астериска пишем команду:

sip reload

Теперь вы можете зарегистрировать на своем Астериске пользователей с логинами 100 и 101. Проверяется состояние регистрации следующей командой:

sip show peers

Если вы все настроили правильно, то увидите примерно вот такой вывод:

asterisk*CLI> sip show peers Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description 100/100                 10.0.0.52                              D  Yes        Yes            59080    OK (1 ms) 101/101                 10.0.0.57                              D  Yes        Yes            49973    OK (1 ms) operator1           1.2.3.4                              No         No             5060     OK (22 ms) operator2           5.6.7.8                              No         No             5060     OK (22 ms) 

Если вы это видите, то, поздравляю, ваши устройства или софтфоны успешно зарегистрировались и Астериск увидел сервера операторов. Состояние регистрации проверяется командой:

sip show registry

Если регистрация прошла успешно, то вы должны увидеть вот такой вывод:

asterisk*CLI> sip show registry Host                                    dnsmgr Username       Refresh State                Reg.Time 1.2.3.4:5060                       N      YourLogin               120 Registered 1 SIP registrations.

На этом настройка пиров закончена, перейдем к настройке диалплана. Диалплан — это сердце Астериска, с помощью него обрабатываются абсолютно все звонки. Астериск понимает несколько языков, но в нашем примере мы будем использовать стандартный, появившийся в самых первых релизах Астериска. Файл конфигурации хранится в файле /etc/asterisk/extensions.conf. Откроем его командой:

nano /etc/asterisk/extensions.conf

В стандартных файлах конфигурации хранится много дефолтных правил. Они нам не нужны, поэтому очистим содержимое и пропишем следующее:

[general] static=yes writeprotect=no  [globals]

Это параметры необходимые для нормального чтения диалплана, поэтому менять их не следует. Начнем с простого. Нам нужно позвонить с номера 100, на номер 101. Для этого нужно прописать правило, сразу после секции globals:

[office] exten => _1XX,1,Dial(SIP/${EXTEN})

Разберем эту строку. [office] — имя контекста, в котором обрабатываются звонки от пира. exten => — указатель начала шага._1XX — маска. На маске остановимся чуть подробнее. С помощью нее сортируются все звонки, попадающие в контекст диалплана. Маска использует набор паттернов для сортировки звонков по caller-id:

X – любая цифра от 0-9 N – любая цифра от 2-9 [234-6] – цифры 2, 3, 4 и 6 . – любые возможные символы

Маска начинается с символа «_», который означает что это шаблон. В случае, если вы забудете указать его, Астериск примет 1XX за вызываемый номер и передаст Dial-у паттерны вместо номера телефона, и звонок не состоится. 1 — номер действия.Dial — это приложение. В диалплане можно использовать более 200 различных приложений, которые используются для манипуляций со звонками. Сейчас, в самом начале, мы будем использовать только одно приложение — Dial. Из названия понятно, что оно используется для совершения звонков.(SIP/${EXTEN}) — аргументы для приложения. В нашем примере, для внутренних пиров мы используем протокол SIP, поэтому первый аргумент, который мы передаем dial-у — указывает на используемый протокол сигнализации. ${EXTEN} — текущий экстеншен, его значение берется из заголовка (из поля destination)./ — разделитель для передаваемых аргументов. Каждый из параметров разделяется запятыми. В нашем примере используются трехзначные номера, поэтому в маске должно быть 3 паттерна. В случае, если вы захотите использовать иную длину нумерации, то пишите в маске нужное количество паттернов. Теперь сохраняем файл, открываем шелл астериска и пишем команду:

dialplan reload

Если возникли проблемы с доступом к файлу, то пишем:

chown asterisk:asterisk /etc/asterisk/extensions.conf

И снова перезагружаем диалплан через шелл Астериска. Теперь пробуем звонить. Если вы все правильно настроили, то пир с номером 100 дозвонится до пира с номером 101. Сейчас мы можем звонить внутри офиса, между пирами, которые работают в контексте office. Для того что бы позвонить в город, нам нужно написать правило для исходящих звонков через первого оператора. Прописываем его в контекст office, выглядит оно так:

exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

Перезагружаем диалплан и пробуем звонить в город. Теперь нам надо принять входящий звонок. Сделаем новый контекст в диалплане, пишем в конец файла:

[operator1]  exten => s,1,Dial(SIP/100&SIP/101)

Поясню что означает «s». Это стандартная маска в Астериске, под которую попадают абсолютно все вызовы. То есть, если мы используем транк с регистрацией, входящий caller-id будет «s». Сохраняемся и перезагружаем диалплан. Теперь мы можем принять входящий звонок через оператора, предоставляющего нам городской номер. Сейчас нам понадобилось позвонить на сотовый телефон, с федеральным номером. Допишем еще одну строку в контекст [office]:

exten => _89XXXXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

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

exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

С такой конструкцией все звонки на телефоны с кодами из диапазонов 890982XXXXX-890999XXXXX и 8901421XXXX-8901651XXXX пойдут через первого оператора. Не совсем удобно, соглашусь с этим. В будущих статьях выложу конфигурацию диалплана для автоматического выбора оператора в зависимости от направления звонка, так как подобное опять же выходит за рамки этой статьи. Теперь нам осталось пустить междугородние звонки через второго оператора. Добавляем строку в контекст [office]:

exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567) same => n,Dial(SIP/${EXTEN}@operator2)

Как вы заметили, тут появились новые приложения, которые обрабатывают звонки. Set(CALLERID(num)=74991234567) — так как мы используем транк без регистрации, то это значит что мы должны отсылать оператору caller-id. Этот номер не обязательно должен существовать. Тут мы просто представляемся провайдеру и не более. Какой номер подставлять — зависит от оператора. Некоторые предоставляют услугу подмены caller-id на номер другого оператора, для совершения исходящих вызовов по межгороду или для зоновуй связи. За подробностями обращайтесь к оператору. same => n — указатель, который позволяет не писать каждый раз маску и номер действия. К примеру:

exten => 78121234567,1,Answer exten => 78121234567,1,Set(CALLERID(name)=Trunk_1 exten => 78121234567,1,Dial(SIP/1000)

Можно заменить на:

exten => 78121234567,1,Answer same => n,Set(CALLERID(name)=Trunk_1 same => n,Dial(SIP/1000)

Во втором случае все гораздо проще, не так ли? На этом все, мы настроили Астериск. Теперь мы можем звонить в город, на сотовые, по межгороду и у нас есть внутренняя связь между пирами. Получаем вот такой, вполне рабочий диалплан:

[general] static=yes writeprotect=no  [globals]  [office] exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567) same => n,Dial(SIP/${EXTEN}@operator2) exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _1XX,1,Dial(SIP/${EXTEN})  [operator1] exten => s,1,Dial(SIP/100&SIP/101) 

Спасибо за внимание.

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

Размещение

Файл располагается в директории /etc/asterisk/ вместе с другими файлами конфигурации.

Секции настроек клиентов

Для того чтобы два телефона могли соединяться друг с другом, нам нужно создать аккаунт для каждого телефона в канальном драйвере который относиться к протоколу, которым они будут пользоваться. Так как оба телефона будут использовать протокол SIP, мы создадим аккаунты в конфигурационном файле канального драйвера SIP, который называется sip.conf. Данный файл обычно находится в директории /etc/asterisk. Давайте назовём наши телефоны Саша и Юля, для того чтобы мы могли легко отличать их друг от друга.

Откройте sip.conf в вашем любимом текстовом редактор и потратьте одну-две минуты на просмотр файла. Не пугайтесь, если увидите в нём большое количество настроек, это нормально. При желании можно всё стереть и написать свою конфигурацию. Обратите внимание на то, что существует несколько секций в самом начале конфигурации. такие как [general] и [authentication], которые контролируют общие настройки драйвера канала. Под этими секциями находятся секции, которые в системе соответствую аккаунтам SIP. Переместитесь в самый низ файла и добавьте секции для Саши и Юли. Вам нужно выбрать свой собственный уникальный пароль для каждой учётной записи и изменить строку permit для того чтобы они совпадали с настройками вашей локальной сети.

[sasha] type=friend host=dynamic ;secret=pass1 ;используйте параметр md5secret вместо secret, чтобы пароль оставался в секрете! md5secret=458cb347d4f3cb5a9ab794a77371eb63 context=users deny=0.0.0.0/0 permit=192.168.5.0/255.255.255.0 ; замените в соответствии с вашими сетевыми настройками [yulya] type=friend host=dynamic ;secret=pass2 ;повторяю, этой строки в конфиге быть не должно! Параметр указан для примера. md5secret=e87d475a8fbe123136717b5140acefc1 context=users deny=0.0.0.0/0 permit=192.168.5.0/255.255.255.0 ; замените в соответствии с вашими сетевыми настройками

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

server*CLI> sip reload Reloading SIP server*CLI>

Далее

Другие файлы конфигурации of your page —>Используемые источники:

  • https://habr.com/post/264981/
  • http://www.linux-doc.ru/asterisk/configuration/sip_conf.php

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации