admin:linux:freepbx

Asterisk & FreePBX

Изучение Asterisk и других систем на его основе

  1. Ознакомиться со структурой Asterisk, языком диалплана, настройкой транков и внутренних абонентов, маршрутизацией звонков. Делать это нужно на голом Астериске.
  2. Установить разные сборки и попробовать их в работе: FreePBX Distro, Askozia, Elastix.
  3. Арендовать прямой номер по SIP, например на ipport.net, подключить его к Астериску как с мордой, так и без.
  4. Купить IP-телефон, типа Cisco SPA-303 и также поэкспериментировать с его подключением.

Алгоритм базовой настройки

  1. Установить, настроить фаерволл при необходимости
  2. Прокинуть порты на роутере UDP и TCP 4569, 5060, 5061, 10000-20000
  3. Активировать FreePBX - Admin / System Admin
    1. Активация
    2. DNS - добавляем 127.0.0.1
    3. Network Setting - настройка IP адреса и типа его получения
    4. Hostname - можно отредактировать имя сервера
    5. Time Zone - Устанавливаем временную зону
    6. Storage - Ставим емейл для уведомлений
  4. Общие настройки / Установка Астериск для IAX
    1. Настройка кодеков G722, Ulaw, Alaw
    2. Установка приоритетов
  5. Общие настройки / Установка Астериск для SIP / Общие
    1. Внешний адрес - то как он будет виден другим устройствам вне сети
    2. Локальные сети - те кому мы доверяем
    3. Кодеки
    4. вкладки SIP settings, SIP legacy Settings
  6. Настроить телефоны - Приложения / Внутренние номера
    1. Вводим список номеров
    2. настраиваем пути перенаправлений, если надо
  7. Подключения / Транки
    1. Настройка транков
  8. Подключения / Исходящая маршрутизация - прописываем куда уходят звонки и при какой нотации

ДОБАВИТЬ SIP - ТРАНК

  1. Необходимо попасть в меню администрирования транков по следующему пути: Connectivity → Trunks (Подключения → Транки)
  2. Далее нажать «Add Trunk» и выбрать необходимый тип транка.
  3. В данном случае выберем опцию Add SIP (chan_sip) Trunk
  4. Называем транк, например trunktest - опции в данном поле:
    1. Trunk Name - Название транка
    2. Hide CallerID - Опция скрытия CID при исходящем вызове
    3. Outbound CallerID CID, который будет передаваться при исходящем вызове
    4. CID Options - Настройки передачи CID – разрешить все, запретить иностранные и т.д
    5. Maximum Channels - максимальное количество одновременных разговоров вне локальной сети
    6. Asterisk Trunk Dial Options - модификация Dial options, в данном случае оставим опцию дефолтной
    7. Continue if Busy - опция направления вызова на следующий транк даже если канал сообщает «BUSY» или «INVALID NUMBER»
    8. Disable Trunk - опция выключения транка
  5. Заходим в поле «sip Settings»
    1. Настройки исходящих вызовов в поле «Outgoing»
    2. Дублируем название транка и делаем настройки:
      1. host Хост или IP адрес SIP сервера, на котором мы хотим зарегистрироваться или завязать доверенные отношения. Если удаленная система сама регистрируется на нашем сервере, может принимать значение - dynamic. Но как правило, это адрес SIP сервера, которому мы будем отправлять Options и Invite. Адрес для Register задается отдельно, в разделе Incoming.
      2. username и secret Основные параметры sip аутентификации, имя пользователя и пароль, как правило сообщаются провайдером.
      3. type Предполагается, что здесь должно быть peer - набор свойств для исходящих вызовов. Однако можно написать и friend и не назначать никакие параметры в секции Incoming (кроме register string, которая хоть и расположена во FreePBX в секции incoming настроек транка, прямой связи с ним не имеет и может существовать вообще без sip пира, хоть и нуждается в нем, для аутентификации входящего вызова, как доверенного, а не анонимного).
    3. Также здесь могут быть заданы любые параметры, доступные SIP пиру:
      1. context - контекст обработки входящих вызовов. Стандартный контекст входящих вызовов Freepbx для цифровых транков- from-trunk. Вызовы из него обрабатываются в модуле FreePBX 13 входящая маршрутизация. Но вы можете указать собственный контекст и написать его в extensions_custom.conf.
      2. insecure параметры аутентификации
        1. insecure=port - Проверять совпадение IP адреса, но не порта
        2. insecure=invite - Не требовать аутентификации в инвайте (INVITE)
        3. insecure=port,invite - И то, и другое.
      3. disallow запретить использование кодеков, чтобы назначить разрешенные в параметром allow.
      4. allow разрешить перечисленные через запятую кодеки.
        1. allow=alaw,ulaw,g729
      5. nat задать свойства использования rport, media при работе за nat. Если не указано, будут использованы настройки из модуля FreePBX Asterisk SIP Settings
        1. nat = no - без NAT RFC3581
        2. nat = force_rport - использовать rport, даже если его нет
        3. nat = comedia - отправить медиа поток на порт Asterisk, независимо от указаний SDP.
        4. nat = auto_force_rport - установить 'force_rport' параметр если Asterisk обнаружил NAT.
        5. nat = auto_comedia - установить 'comedia' параметр если Asterisk обнаружил NAT
      6. qualify Посылать запросы Options = yes/no
      7. qualifyfreq частота запросов в секундах. и тд.
    4. раздел Incoming Данная секция должна иметь уникальное название, т.к. является, в некотором роде, независимым объектом, не пиром, но часовым пира, который требует пароль (secret) и указывает путь (context), если проверка пройдена. Не отображается в консоли, при вводе команды sip show peers, так как type=user. Как и следует из названия, отвечает за входящие вызовы. Основные параметры: context и secret те же, что указаны в outgoing.

Здесь же задается строка регистрации, которая в чистом Asterisk, вынесена в категорию sip.conf - [general]. Это очень важный параметр, отвечающий за посылку Register SIP серверу регистраций. Если вы подключаетесь к SIP серверу провайдера и требуется получать входящие вызовы, в большинстве случаев, надо посылать Register.

  1. User context
  2. User Details
  3. Register String
download
user[:authuser]:secret@host:port/extension
 sip_user_name[:authuser]:sip_password@sip.itsp.tld:5060/1234567
user - идентификатор пользователя, используемый для SIP сервера.
authuser - необязательное имя пользователя для авторизации на SIP сервере (authuser). Обычно то же, что и 'user'.
secret - пароль пользователя
host - имя домена или хоста SIP сервера.
port - номер порта на сервере host для запросов регистрации. Если не указано, то по умолчанию - 5060.
/extension - Расширение для приема вызовов в Вашем Asterisk (extension). 'extension' - вставляется в SIP заголовок contact запроса на регистрацию. Этот екстеншен используется удаленным SIP сервером, когда ему необходимо совершить вызов в сторону вашего Asterisk. Данный екстеншен (расширение) будет вызван Asterisk в контексте транка ( в модуле Inbound Routes, например). Если не указывать расширение, SIP сервер провайдера сам определит вызываемый номер, обычно это значение 'user'. Если Asterisk не найдет вызываемый екстеншен в контексте транка, то будет искать раширение 'i' (invalid). К транку могут быть привязаны несколько номеров. В таком случае, лучше не указывать этот параметр. Возможно также, что SIP сервер провайдера вообще проигнорирует указанное здесь значение.
Для многих новичков значение контекста по отношению к транку и к внутреннему номеру вызывает некоторую путаницу. Для простоты можно сказать, что контекст транка определяет, как обрабатывать входящие вызовы, а контекст внутреннего номера - исходящие. Когда внутренний абонент куда-то звонит, в назначенном ему контексте определяется, через какие транки и на какие екстеншены он может позвонить. Исходящая связь через транк определяется в контекстах внутренних номеров и никак не упоминается в контексте, назначенном непосредственно транку. Напротив, когда внешняя система, связанная с транком, вызывает некий екстеншен (расширение), тогда и используется контекст, назначенный транку.

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

Объединение двух FreePBX по протоколу SIP.

Если компания имеет несколько офисов, которые распределены географически, но мы хотим совершать звонки, как будто все находятся в одном здании. Нам сможет помочь объединение офисных АТС FreePBX по протоколу SIP.

Настройка будет производится на FreePBX14 и Asterisk 13.

Будем считать, что у нас есть два офиса в Москве и в Санкт-Петербурге. Имена офисов примем moscow и piter. Адреса пусть из разных сетей, но будем считать, что офисы объединены VPN каналом, хотя это и не обязательно.

Москва - ip-адрес 192.168.1.100, Питер - 192.168.2.100. Номера телевонов Москва - 100:199, Питер - 200:299

Настройка Московского офиса

Создаем sip trunk Указываем имя транка: Trunk Name - piter

Далее переходим к настройкам sip: «sip settings»

Вкладка Outgoing, имя транка - piter,

заполняем PEER Details

download
username=piter
type=friend
secret=12345
nat=no
insecure=invite, port
host=dinamic
disallow=all
context=from-internal
canreinvite=no
allow= ulow,alow

Далее переходим на вкладку Incoming, удаляем все и заполняем только Register string

download
moscow:12345@192.168.2.100/piter

Создаем исходящую маршрутизацию для звонков в Питерский офис

Имя маршрута сделаем to-piter, в качеcтве транка укажем созданный ранее piter.

Далее переходим на вкладку Dial Patterns и создаем шаблон с указанием номеров из трех цифр, начинающихся на 2 «2XX»

Настройка Питерского офиса

Все по-аналогии. Создаем транк с названием moscow, заполняем вкладки Outgoing и Incoming в sip settings

download
type=friend
username=moscow
secret=12345
context=from-internal
host=dynamic
disallow=all
allow=ulaw,alaw
nat=no
insecure=invite,port
canreinvite=no
Register string
download
piter:12345@192.168.1.100/moscow

Создаем шаблон для звонков в Москву, только для номеров 1XX

  • admin/linux/freepbx.txt
  • Последнее изменение: 2020/07/09 14:22
  • truadmin