+7(3532) 54-07-08
atsip@atsip.ru +7(3532) 40-95-05
Настройка Asterisk

Настройка Asterisk

Памятка по переносу конфигурации FreePBX при обновлении системы

Posted in Настройка Asterisk

Памятка

по переносу конфигурации при обновлении системы

 

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

  1. Переносим настройки:

    1.1 Settings → Advanced Settings → Extension Concurrency Limit1 (Количество подключений от одного внутреннего номера);

    1.2 Там же CW Enabled by DefaultFalse (отключаем Call Waiting по умолчанию);

    1.3 Остальные настройки по Advanced Settings;

    1.4 Asterisk SIP Settings -> Local Networks

    1.5 Asterisk SIP Settings -> External Address

  2. Первым делом настраиваем Trunks (транки);

  3. Далее — Outbound Routes (Исходящие маршруты);

  4. Custom Context;

  5. Feature Codes;

  6. Extensions (Внутренние номера) — возможен перенос через Bulk Extensions (в свежих версиях Bulk Handler);

    При ошибке:

    Reload failed because retrieve_conf encountered an error: 20

    Aborting reload because extension conflicts or bad destinations

 

Идем в настройки (Settings) и отключаем 2 проверки:

Abort Config Gen on Bad Dest

Abort Config Gen on Exten Conflict

Возможен конфликт в модуле Feature Codes (например ChanSpy по умолчанию - 555)

При переносе со старой версии проверить записи вызовов - Yes (вместо Always).

  1. Ring Group & Queues;

  2. System Recordings & IVR;

  3. Time Groups & Time Conditions;

  4. Announcements;

  5. Conferences;

  6. И в последнюю очередь — Inbound Routes (Входящие маршруты);

  7. Fax Configuration;

  8. Voicemail Admin;

  9. Administrators -> сменить пароль администратора

  10. Настройки SSH

    16.1 импорт ключа SSH:

    ssh-keygen -i -f /home/admin/id_rsa.pub >> /home/admin/.ssh/authorized_keys

    16.2 смена пароля SSH

  11. Проверить включение/выключение записей разговоров:

    17.1 Входящих маршрутов

    17.2 Исходящих маршрутов

    17.3 Пиров

  12. Порядок настройки остальных опций уже не так важен.

Белый список для одного абонента (или у бухгалтера отчет)

Posted in Настройка Asterisk

Подвернулась интересная задачка:

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

Сперва пришла идея сделать через

exten => 1924/${NUMBER},1,NoOP(Incoming Call 1924)

топорно, но работоспособно.

Благо был конец дня и только начал делать.

После закралась мысль сделать через Astdb - по аналогии с черным списком.

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

Для считывания из Astdb есть несколько функций в диалплане:

DB() считывает само значение, а вот DB_EXISTS() нам очень даже подходит.

 

Функция диалплана DB_EXISTS: проверяет существует ли запись во внутренней БД Asterisk (astdb).

DB_EXISTS(family/key)

Я решил не плодить семейств и сделал вложенное семейство AMPUSER/1924/whitelist где в виде ключа будет как раз CALLERID(num), которые предварительно надо занести в astdb командой вида:

*CLI> database put AMPUSER/1924/whitelist 1900 1

В итоге весь диалплан составил 4 строчки кода:

;До обеда должны быть вызовы только от разрешенных, после обеда - от всех

exten => 1924,1,NoOP(Incoming Call 1924)

    same => n,GotoIf(${DB_EXISTS(AMPUSER/1924/whitelist/${CALLERID(num)})}?ext-local,1924,1)

    same => n,GotoIfTime(12:00-18:00,,,,?ext-local,1924,1:app-announcement-2,s,1)

    same => n,Hangup()

Т.е. сперва проверяем на нахождение в списке разрешенных, присутствует - набираем, отсутствует - переходим на проверку по времени, где с 12 до 18 набираем, иначе - "занято".

app-announcement-2 - направление на сообщение о занятости абонента.

-- Executing [1924@from-internal:1] NoOp("SIP/1999-000384bc", "Incoming Call 1924") in new stack

-- Executing [1924@from-internal:2] GotoIf("SIP/1999-00038570", "0?ext-local,1924,1") in new stack

-- Executing [1924@from-internal:3] GotoIfTime("SIP/1999-00038570", "12:00-18:00,,,,?ext-local,1924,1:app-announcement-2,s,1") in new stack

-- Goto (app-announcement-2,s,1)

-- Executing [s@app-announcement-2:1] GotoIf("SIP/1999-000384bc", "0?begin") in new stack

-- Executing [s@app-announcement-2:2] Answer("SIP/1999-000384bc", "") in new stack

-- Executing [s@app-announcement-2:3] Wait("SIP/1999-000384bc", "1") in new stack

-- Executing [s@app-announcement-2:4] NoOp("SIP/1999-000384bc", "Playing announcement busy") in new stack

-- Executing [s@app-announcement-2:5] Playback("SIP/1999-000384bc", "custom/busy_razgovarivaet,noanswer") in new stack

-- <SIP/1999-000384bc> Playing 'custom/busy_razgovarivaet.slin' (language 'ru')

Всё работает.

Запрет трансфера на определенные направления

Posted in Настройка Asterisk

Поступила задача сделать запрет перевода с одного подразделения на другое (2 разные АТС).

За трансфер отвечает контекст from-internal-xfer, который определяется глобальной переменной, определенной в [globals] в extensions_additional.conf, этот контекст и надо перепоределить ибо он содержит:

'h' =>            1. Macro(hangupcall)

's' =>            1. Macro(hangupcall)

Include =>        'from-internal-custom'

Include =>        'from-internal-additional'

А вот from-internal-additional содержит много лишнего, с чем лучше не связываться ибо может отразиться на вызовах, а нам нужен только трансфер - потому надо править контекст трансфера на исключение из него всего лишнего.

 

Всё это была преамбула.

Теперь фабула:

1. Необходимо переопределить глобальную переменную TRANSFER_CONTEXT - это можно сделать в файле globals_custom.conf

{noformat}
TRANSFER_CONTEXT = from-internal-xfer2

2. В extensions_custom.conf создаем наш контекст from-internal-xfer2 и добавляем в него разрешенные направления.

exten => h,1,Macro(hangupcall)

exten => s,1,Macro(hangupcall) ; оставляем как было в оригинале

Include => ext-local ; отвечает за трансфер внутри АТС

Include => outrt-1

include => outrt-2

и тд... исключая необходимое для запрета направление

и конечно же делаем из CLI dialplan reload 

 

Готово! Позвонить туда вы сможете - контексты вызовов мы не трогали, но трансфера на то направление нет:

[2019-04-24 14:41:25] WARNING[12366][C-00001a9f]: features.c:2728 builtin_atxfer: Extension '281' does not exist in context 'from-internal-xfer2'
-- <SIP/1999-00002abe> Playing 'pbx-invalid.alaw' (language 'ru')

Возможно, было бы элегантней и правильней сделать контекст для неверных направлений, но я добился результата и успокоился - выдает что просто данный номер не найден.

Предупреждение: сперва хотел сделать через Custom Context во FreePBX, но поломал вызовы на номера второй АТС что было неправильно, потому и переделал проще и лучше.

Предупреждение2: пробовал переопределять переменную через extensions_override_freepbx.conf, но в этом случае после перезагрузки "затираются" остальные глобальные переменные и вызовы становятся невозможными, но после core reload всё нормализуется.

Настройка аппаратов Cisco в Asterisk

Posted in Настройка Asterisk

Рассмотрим добавление и настройку аппарата Cisco во FreePBX.

В Asterisk за соединение с Cisco отвечает модуль chan_sccp.so (Skinny Client Control Protocol (SCCP)) - им мы и воспользуемся.

Для начала в в настройках FreePBX создадим внутренний номер:

ExtensionsAdd Estension → Другое устройство → Сохранить

Внутренний номер пользователя — номер, который нам требуется создать, у нас 2134

Отображаемое имя — имя, например «***** Anna».

Псевдоним номера ИД — не трогаем

Псевдоним SIPномер что мы вводили во внутреннем номере - 2134

Прокручиваем страничку ниже

Устройство использует custom технологию

dial → SCCP/2134

Во FreePBX

Сохранить (Submit) и apply config

Далее перемещаемся в консоль и будем исправлять файлы sccp_extensions.conf и sccp_hardware.conf в папке /etc/asterisk/
Добавляем в
sccp_extensions.conf

[2134](defaultline)sccp_extensions
id = 2134
label = 2134
description= *** Anna
cid_name= *** Anna
mailbox = 2134
cid_num = 2134
trnsfvm = 2134

[defaultline](!)
type=line
context=from-internal
incominglimit=2
transfer=on
vmnum=1234
meetme=on
meetmeopts=qxd
meetmenum=700
trnsfvm=1234
secondary_dialtone_digits=9
secondary_dialtone_tone=0x22
musicclass=default
language=ru
echocancel=on
silencesuppression=off
dnd=off

Теперь лучше зайти на аппарат

device sccp


Отсюда нам надо взять модель аппарата — 7905 и Host Name.

Host Nameэто по сути MAC-адрес с добавлением вначале SEP.

Правим sccp_hardware.conf

[SEP00179A4094B](defaultdevice)
devicetype = 7905
description = *** Anna
button = line, 2134

[defaultdevice](!)
type = device
keepalive = 60
tzoffset = 0
transfer = on
park = on
cfwdall = on
cfwdbusy = off
cfwdnoanswer = off
pickupexten = on
pickupcontext = local
pickupmodeanswer = on
dtmfmode = inband
imageversion = P00405000700
deny=0.0.0.0/0.0.0.0
permit=10.10.10.0/255.255.255.0
directrtp=on
earlyrtp = progress
private = on
mwilamp = on
mwioncall = on
meetme = on
meetmeopts = qxd
nat = off
setvar=testvar=value
cfwdall = on

Обязательно нужно убедиться что больше это Host Name больше нигде не используется!

Примечание: Вы видите на скриншоте «Phone DN: 127» - это след от старого номера, который указывает что данный номер может присутствовать в sccp_hardware.conf.

Конечно сохраняем примененные нами изменения в обоих конфигах.
Перезагружаем модуль SCCP чтобы он перечитал конфиги:

~$ sudo asterisk -rx 'sccp reload'

и можно увидеть добавленного пользователя

~ $ sudo asterisk -rx 'sccp show devices'

sccp device

Небольшое примечание: нежелательно оставлять поля в кофигах пустыми — это касается полей «description» и «cid_name» лучше заполнить группой из 8 точек.

Примечание2: возможно заработает только после перезагрузки Астериска при капризности перезагрузки модуля или конфига sccp.

Asterisk + h323

Posted in Настройка Asterisk

Установка h323
yum -y install make gcc-c++ kernel-devel gnutls-devel flex libxml2-devel bison ncurses-devel mysql-devel curl-devel sqlite-devel speex-devel openais-devel openldap-devel openssl-devel zlib-devel gnutls-devel gmime-devel lua-devel mc wget libtiff-devel
cd /usr/src
mv openh323-v1_18_0-src-tar.gz openh323-v1_18_0-src.tar.gz
mv pwlib-v1_10_0-src-tar.gz pwlib-v1_10_0-src.tar.gz
tar xzf openh323-v1_18_0-src.tar.gz
tar xzf pwlib-v1_10_0-src.tar.gz
mv openh323_v1_18_0 openh323
mv pwlib_v1_10_0 pwlib
cd pwlib
./configure --disable-openssl
make clean opt
cp /usr/src/kernels/2.6.32-573.18.1.el6.x86_64/include/linux/compiler.h  /usr/include/linux
export PWLIBDIR=/usr/src/pwlib
cd ../openh323
./configure
make clean opt
cp /usr/src/pwlib/lib/* /lib64
cp /usr/src/openh323/lib/* /lib64
export OPENH323DIR=/usr/src/openh323
export PWLIBDIR=/usr/src/pwlib
export OPENH323_LIBDIR=/lib64
export PWLIB_LIBDIR=/lib64 
cd ../
tar -xzvf spandsp-0.0.6pre21.tgz
cd spandsp-0.0.6
 
./configure --prefix=/usr/local
make
make install
cat > /etc/ld.so.conf.d/spandsp.conf << EOF
/usr/local
/usr/local/lib64
EOF
tar xzf asterisk-certified-11.6-cert13.tar.gz
cd asterisk-certified-11.6-cert13
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
обратим внимание на строки -
checking /root/openh323//../pwlib/version.h usability... yes
checking /root/openh323//../pwlib/version.h presence... yes
checking for /root/openh323//../pwlib/version.h... yes
checking if PWLib version 1.10.0 is compatible with chan_h323... yes
checking PWLib installation validity... yes
checking /root/openh323//version.h usability... yes
checking /root/openh323//version.h presence... yes
checking for /root/openh323//version.h... yes
checking if OpenH323 version 1.18.0 is compatible with chan_h323... yes
checking OpenH323 build option... opt
checking OpenH323 installation validity... yes

make menuconfig
# Убеждаемся, что chan_h323.so выбран в меню Channels и [*] res_fax
[*] res_fax_spandsp для FAX

make
make install
service asterisk start
CLI>module load chan_h323.so
Увидим -
 == Creating H.323 Endpoint
 == H.323 listener started
Проверяем
*CLI> show channeltypes
Type        Description                              Devicestate  Indications  Transfer
----------  -----------                              -----------  -----------  --------
H323        The NuFone Network's Open H.323 Channel  no           yes          no
Zap         Zapata Telephony Driver w/PRI                      no           yes          no
Agent       Call Agent Proxy Channel                             yes          yes          no
Phone       Standard Linux Telephony API Driver            no           yes          no
MGCP        Media Gateway Control Protocol (MGCP)   yes          yes          no
Gtalk       Gtalk Channel Driver                                     no           yes          no
Local       Local Proxy Channel Driver                           yes          yes          no
IAX2        Inter Asterisk eXchange Driver (Ver 2)           yes          yes          yes
SIP         Session Initiation Protocol (SIP)                     yes          yes          yes
----------
Настройка asterisk & avaya
 
h323.conf:

[general]
tracelevel=10
canreinvite=yes
port = 1720
bindaddr = 10.6.X.X ;IP интерфейса asterisk
disallow=all
allow=alaw
context=from-trunk
dtmfmode=inband
gatekeeper = DISABLE
progress_setup = 8
progress_alert = 8
faststart=no
h245Tunneling=no

[avaya]
type=friend
context=from-internal
host=10.6.X.X ; IP clan avaya
port=1720
disallow=all
allow=alaw
dtmfmode=rfc2833
h245tunneling=no
;t38mode=disable

Avaya:

Реинициализация канала:

asterisk:

asterisk -r

module reload chan_h323.so

avaya:

busyout trunk 3

busyout signaling-group 3

release signaling-group 3

release trunk3

проверяем:

status trunk 3

 

pjsip.conf Asterisk 12

Posted in Настройка Asterisk

PJSip - драйвер канала SIP в Asterisk 12

 Что такое PJSIP

PJSIP мультимедийная библиотека с открытым кодом, для реализации протоколов SIP, SDP, RTP, STUN, TURN и ICE. Она сочетает лучшие возможности SIP сигнализации, хорошую проходимость NAT и высокий уровень взаимодействия с приложениями. Подходит практически для любого типа систем, начиная от компьютеров и заканчивая встраиваемыми системами (embedded systems) и мобильными телефонами.

Формат файла pjsip.conf

Pjsip.conf обычный текстовый файл, как и все конфигурационные файлы Asterisk, состоит из секций. Каждая секция (раздел) определяет конфигурацию объекта res_pjsip.

Секции отделены друг от друга именами, заключенными в квадратные скобки [какая неожиданность]

и содержат одну или более конфигурационную опцию и её значение отделенное знаком равно.

[ SectionName ] 
ConfigOption = Value 
ConfigOption = Value

Имена секций pjsip.conf

В большинстве случаев имена секций могут быть произвольными, однако в случае с типами ENDPOINT и AOR имена должны

совпадать со заголовком SIP URI «To» для идентификации входящих SIP запросов.

Каждая секция имеет обязательную опцию type=, которой определяется назначение секции в конфигурации объектов res_pjsip.

Типы секций pjsip.conf

Ниже перечислены типы секций res_pjsip и простейшие примеры конфигурации.

Варианты и значения по умолчанию

Как узнать возможные варианты значений и параметры по умолчанию?

В этом поможет встроенная справка интерфейса командной строки (CLI).

«config show help res_pjsip <configobject> <configoption>»

config show help res_pjsip aor

ENDPOINT

Модуль ENDPOINT определяет многочисленные параметры SIP, а также связь с другими модулями - AUTH, AOR и TRANSPORT.
Секция ENDPOINT должна быть обязательно связана с одной или несколькими секциями AOR.
По сути дела, ENDPOINT является основным профилем SIP телефона или SIP транка в res_pjsip, аналогично пиру в sip.conf.
Только если там определялись почти все параметры, то здесь часть ключевых свойств вынесены в специальные секции (модули), которые и будут рассмотрены ниже.

config show help res_pjsip endpoint
Простой пример конфигурации секции ENDPOINT
[777]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=udp-transport
auth=auth777
aors=777
В данном примере мы видим тип секции: type=endpoint
контекст, разрешенные кодеки и также ассоциацию с другими секциями
transport=udp-transport, auth=auth777 и aors=777.
Насколько я понимаю, опции type и aors являются обязательными для работоспособности точки.
Для назначения Caller ID этому пиру(ENDPOINT), потребуется задать следующие параметры:
trust_id_outbound=yes
callerid=V Pupkin <777>

TRANSPORT

Настройка транспортного уровня res_pjsip. Используются протоколы UDP, TCP, WebSockets и методы шифрования TLS/SSL. Можно настроить одну транспортную секцию для использования множеством точек (ENDPOINT), или создать уникальный транспортный уровень для конкретной точки.

config show help res_pjsip transport

Для применения настроек транспортного уровня недостаточно перечитать конфиги. Потребуется рестартовать Asterisk

простой пример конфигурации секции TRANSPORT
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0

или TLS транспорт:

[tls-transport]
type=transport
protocol=tls
bind=0.0.0.0
;various TLS specific options below:
cert_file=
privkey_file=
ca_list_file=
cipher=
method=
Каждый транспорт в вашей системе должен иметь уникальный порт (также как и в sip_profiles во FreeSWITCH)
localhost*CLI> pjsip show transports
Transport:  <TransportId........>  <Type>  <cos>  <tos>  <BindAddress....................>
 =========================================================================================
Transport:  udp-transport             udp      0      0  0.0.0.0:5080
Transport:  udp-transport-infra       udp      0      0  192.168.1.110:5081
Transport:  udp-transport-megafon     udp      0      0  0.0.0.0:5060

AUTH

Секция аутентификации содержит опции и полномочия для входящих и исходящих регистраций. С этой секцией ассоциируются такие секции как ENDPOINT и REGISTRATIONS. Множество точек и регистраций могут использовать одну и ту же секцию аутентификации, если требуется.

config show help res_pjsip auth
localhost*CLI> config show help res_pjsip auth
auth: [category !~ /.?/]
 
Authentication type
 
 Authentication objects hold the authentication information for use by other
objects such as 'endpoints' or 'registrations'. This also allows for multiple
objects to use a single auth object. See the 'auth_type' config option for
password style choices.
 
auth_type                    -- Authentication type
nonce_lifetime            -- Lifetime of a nonce associated with this authentication config.
md5_cred                    -- MD5 Hash used for authentication.
password                     -- PlainText password used for authentication.
realm                          -- SIP realm for endpoint
type                             -- Must be 'auth'
username                    -- Username to use for account
Простой пример секции AUTH
[auth777]
type=auth
auth_type=userpass
password=password
username=777
с использованием MD5
[auth6001]
type=auth
auth_type=md5
md5_cred=5f4dcc3b5aa765d61d8327deb882cf99
username=777

AOR

Главная функция AoR (Address of Record) указать Asterisk, как связаться с ENDPOINT. Без соответствующей AOR секции, точка ENDPOINT будет недоступна для вызова. Здесь также задаются соответствия голосовой почте, MWI, продолжительность действия регистрации -expiration и настройки qualify (периодической отправки SIP сообщений OPTONS для мониторинга состояния устройств)

Когда Asterisk получает запрос на регистрацию от устройства, он в первую очередь ищет соответствующую SIP заголовку To: «777»<sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.;transport=UDP> запись в именах секций AOR – в нашем прмере [777]

config show help res_pjsip aor
Простейший пример секции AOR
[777]
type=aor
max_contacts=1
Опция max_contact=1 значит, что только один SIP User Agent может быть одновременно зарегистрирован через эту запись AOR, можно указать и 10, если потребуется.
[777]
type=aor
contact=sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.:5060
Во втором примере мы не ожидаем запроса на регистрацию от SIP UA, а указываем вручную постоянный контакт для этой записи. Можно не беспокоится о кол-ве подключений, адрес все равно один.
[siptrunk]
type=aor
contact=sip:123.123.1.1:5060
В последнем примере пропущен username, что позволяет использовать данную запись для исходящей связи, определяя вызываемый номер при помощи диалплана «Dial(PJSIP/${EXTEN}@siptrunk)».

REGISTRATION

Секция регистраций отвечает за исходящие регистрации. Используется для регистрации в удаленных системах, будь то другой Asterisk или транк от провайдера.

config show help res_pjsip_outbound_registration registration
Пример секции REGISTRATION
[siptrunk]
type=registration
transport=udp-transport
outbound_auth=siptrunk
server_uri=sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..1.1:5060
client_uri=sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..1.1:5060
retry_interval=60
Для регистрации понадобится определить используемый транспорт и секцию аутентификации. Помимо этого, наверняка, потребуется указать контакт для входящих вызовов.
[providertrunk]
type=registration
transport=udp-transport
outbound_auth=providertrunk
server_uri=sip:sip.example.com
client_uri=sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
retry_interval=60
Пример регистрации транка провайдера.

DOMAIN_ALIAS

Псевдоним домена. [Имя] данной секции является псевдонимом, а конфигурационная опция domain=, доменным именем, которому сопоставлен псевдоним.

config show help res_pjsip domain_alias
Пример секции DOMAIN_ALIAS
[example2.com]
type=domain_alias
domain=example.com

ACL

Модуль не привязан к какой-либо точке ENDPOINTs и управляет всеми входящими SIP коммуникациями с использованием res_pjsip. Установки ACl (Access Control Lis) могут быть назначены в самой секции, или в файле acl.conf на который будет ссылаться секция.

config show help res_pjsip_acl acl
Простые примеры ACL

Asterisk 12 res_pjsip_acl

Настройки берутся из файла acl.conf:

[acl]
type=acl
acl=example_named_acl1
Настройки непосредственно в секции:
[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=123.12.123.0
permit=123.12.123.1
Конфиг разрешающий регистрацию на основе SIP заголовка, а не IP адреса.
[acl]
type=acl
contactdeny=0.0.0.0/0.0.0.0
contactpermit=123.12.123.0
contactpermit=123.12.123.1

IDENTIFY

Определяет конечные точки с помощью IP-адреса источника.

config show help res_pjsip_endpoint_identifier_ip identify
Пример identity
[777]
type=identify
endpoint=777
match=123.0.112.1

CONTACT

Контакты являются одним из способов не указывать явно SIP URI в плане набора (диалплане).

config show help res_pjsip contact
localhost*CLI> config show help res_pjsip contact
contact: [category !~ /.?/]
A way of creating an aliased name to a SIP URI
 Contacts are a way to hide SIP URIs from the dialplan directly. They are
also used to make a group of contactable parties when in use with 'AoR' lists.
type                      -- Must be of type 'contact'.
uri                       -- SIP URI to contact peer
expiration_time           -- Time to keep alive a contact
qualify_frequency         -- Interval at which to qualify a contact
outbound_proxy            -- Outbound proxy used when sending OPTIONS request
path                      -- Stored Path vector for use in Route headers on outgoing requests.

Отношения объектов конфигурации pjsip.conf

ENDPOINT

  • Множество ENDPOINTs связываются с множеством AORs
  • Ноль или больше ENDPOINTs связаны с ноль или одной AUTHs
  • Ноль или больше ENDPOINTs связаны с как минимум одним TRANSPORT
  • Ноль или одна ENDPOINTs связана с определенной IDENTIFY

REGISTRATION

  • Ноль или больше REGISTRATIONs связаны с ноль или одной AUTHs
  • Ноль или больше REGISTRATIONs связаны с как минимум одним TRANSPORT

AOR

  • Множество ENDPOINTs связываются с множеством AORs
  • Множество AORs связаны с множеством CONTACTs

CONTACT

  • Множество CONTACTs связываются с множеством AORs

IDENTIFY

  • Ноль или больше ENDPOINTs связаны с определенным IDENTIFY объектом.

ACL, DOMAIN_ALIAS

  • Эти объекты не имеют направленных связей с другими объектами.

Примеры

 Пример ENDPOINT для одного SIP телефона с регистрацией на Asterisk.
;===============TRANSPORT
 
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
 
;===============EXTENSION 777
 
[777]
type=endpoint
context=from-internal
disallow=all
allow=alaw
transport=udp-transport
auth=auth777
aors=777
 
[auth777]
type=auth
auth_type=userpass
password=777
username=777
 
[777]
type=aor
max_contacts=1
  • auth= используется для входящей аутентификации
  • max_contacts= установите кол-во регистраций, одну или более, разрешенных для этой учетной записи.
Пример SIP транка с исходящей регистрацией
;==============TRANSPORTS
 
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
 
;===============TRUNK
 
[siptrunk]
type=registration
transport=udp-transport
outbound_auth=siptrunk
server_uri=sip:sip.example.com
client_uri=sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
retry_interval=60
 
[siptrunk]
type=auth
auth_type=userpass
password=1234567890
username=1234567890
 
[siptrunk]
type=aor
contact=sip:123.0.112.1:5060
 
[siptrunk]
type=endpoint
transport=udp-transport
context=from-trunk
disallow=all
allow=ulaw
outbound_auth=siptrunk
aors=siptrunk
 
[siptrunk]
type=identify
endpoint=siptrunk
match=123.0.112.1
Пример регистрации множественных ENDPOINTs с использованием шаблонов
;===============TRANSPORT
 
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
 
;===============ENDPOINT TEMPLATES
 
[endpoint-basic](!)
type=endpoint
transport=udp-transport
context=from-internal
disallow=all
allow=alaw
 
[auth-userpass](!)
type=auth
auth_type=userpass
 
[aor-single-reg](!)
type=aor
max_contacts=1
 
;===============EXTENSION 777
 
[777](endpoint-basic)
auth=auth777
aors=777
 
[auth777](auth-userpass)
password=777
username=777
 
[777](aor-single-reg)
 
;===============EXTENSION 778
 
[778](endpoint-basic)
auth=auth778
aors=778
 
[auth778](auth-userpass)
password=778
username=778
 
[778](aor-single-reg)
 
;===============EXTENSION 779
 
[779](endpoint-basic)
auth=auth779
aors=779
 
[auth779](auth-userpass)
password=779
username=779
 
[779](aor-single-reg) 
Диалплан extensions.conf
 exten => _6XXX,1,Dial(PJSIP/${EXTEN})
 exten => _9NXXNXXXXXX,1,Dial(PJSIP/mytrunk/sip:${EXTEN:1}@203.0.113.1:5060)
 exten => _9NXXNXXXXXX,1,Dial(PJSIP/${EXTEN:1}@mytrunk)

От старого к новому - sip.conf к pjsip.conf сравнение примеров.

Сравнение конфигурации ENDPOINT

  • Два SIP телефона должны звонить и принимать вызовы через Asterisk.
  • В обоих случаях для аутентификации используются username и password.
  • 777 регистрируется с динамического IP, 778 со статического IP адреса.
sip.confpjsip.conf
[general]
udpbindaddr=0.0.0.0
 
[777]
type=friend
host=dynamic
disallow=all
allow=alaw
context=from-internal
secret=1234
 
[778]
type=friend
host=192.168.1.2
disallow=all
allow=alaw
context=from-internal
secret=1234
[udp-transport]
type=transport
protocol=udp
bind=0.0.0.0
 
[777]
type = endpoint
transport = sudp-transport
context = from-internal
disallow = all
allow = alaw
aors = 777
auth = auth777
 
[777]
type = aor
max_contacts = 1
 
[auth777]
type=auth
auth_type=userpass
password=1234
username=777
 
[778]
type = endpoint
transport = udp-transport
context = from-internal
disallow = all
allow = alaw
aors = 778
auth = auth778
 
[778]
type = aor
contact = sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..1.2:5060
 
[auth778]
type=auth
auth_type=userpass
password=1234
username=778

Сравнение конфигурации trunk

sip.confpjsip.conf
[general]
udpbindaddr=0.0.0.0
 
register => myaccountname:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..1:5060
[mytrunk]
type=friend
secret=1234567890
username=myaccountname
host=123.0.112.1
disallow=all
allow=alaw
context=from-trunk
[simpletrans]
type=transport
protocol=udp
bind=0.0.0.0 
[mytrunk]
type=registration
transport=simpletrans
outbound_auth=mytrunk
server_uri=sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..1:5060
client_uri=sip:Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..1.2:5060
 
[mytrunk]
type=auth
auth_type=userpass
password=1234567890
username=myaccountname
 
[mytrunk]
type=aor
contact=sip:123.0.112.1:5060
 
[mytrunk]
type=endpoint
transport=simpletrans
context=from-trunk
disallow=all
allow=alaw
outbound_auth=mytrunk
aors=mytrunk
 
[mytrunk]
type=identify
endpoint=mytrunk
match=123.0.112.1

Asterisk sip.conf General SIP Options

Posted in Настройка Asterisk

Общие SIP Параметры

Следующие параметры используются в общей [general] секции sip.conf:

allowexternalinvites

Если установлено 'no', запрещает INVITE и REFER от внешних (не из localnet) доменов. См domain

 allowexternalinvites=yes|no
allowguest

Если 'no', запрещает гостевые(без аутентификации) подключения. По умолчанию sipguest подключения разрешены.

 allowguest=no|yes
allowoverlap

Вкл. или Выкл набор по одной цифре (т.е. каждая набранная цифра будет сразу отправляться в канал)

 allowoverlap=no|yes
allowsubscribe

Разрешить ли внешним устройствам подписку (SUBSCRIBE) на информацию о статусе екстеншена. По умолчанию - 'yes':

 allowsubscribe=yes|no
allowtransfers

Когда установлено 'no', запрещает любые трансферы, если не переопределено в настройках пира.

 allowtransfers=no|yes
alwaysauthreject

Если включено, всегда отвечает на INVITE и REGISTER, SIP сообщением 401 Unauthorized, вместо того чтобы сообщить вызывающему о существовании запрашиваемого user или peer. Важная настройка безопасности

alwaysauthreject=no|yes
autodomain

Установите эту опцию 'yes', чтобы добавить локальное HOSTNAME и локальный IP адрес в список доменов:

 autodomain=yes|no
bindaddr and bindport

Эти параметры определяют IP адрес и порт на которых Asterisk будет слушать SIP запросы. Для драйвера канала SIP Asterisk 'chan_sip' можно назначить только один адрес и порт для всех подключений для UDP и один порт для TCP транспорта, в отличии от нового драйвера PJSIP. По умолчанию адрес не задан и лучше так и оставить. Некоторые рекомендуют изменять порт по умолчанию 5060, на другой, в целях безопасности. Но помните, что это только одна из мер безопасности, не самая важная, и не гарантирует вам полной защиты от злоумышленников.

bindaddr=0.0.0.0
bindport=5060
Вы можете задать независимые для UDP, TCP и TLS транспорта значения udpbindadd, tcpbindaddr и tlsbindaddr
buggymwi

Вкл. эту опцию, чтобы избежать ошибок при сообщении с некоторыми ip телефонами при отправке MWI сообщений.

buggymwi=no|yes
callevents

Установите 'yes', если хотите генерировать информацию о SIP событиях для AMI (asterisk manager interface)

 callevents=yes
checkmwi

Время в секундах, между проверками голосовой почты :

 checkmwi=30
compactheaders

Использовать или нет компактные SIP заголовки.

 compactheaders=yes|no
defaultexpiry

Срок действия регистрации в секундах для входящих и исходящих регистраций. При входящей регистрации, этот параметр задается клиентской стороной, и заданное здесь значение используется, только если клиент не сообщил свое занчение. Для исходящих регистраций этот параметр сообщается удаленной стороне UAS (user agent server)

 defaultexpiry=300
directrtpsetup

Данная опция позволяет управлять RTP соединением между двумя оконечными точками без re-INVITE(экспериментальная опция, используйте на свой страх и риск).

 directrtpsetup=yes|no
domain

Задает имя домена сервера Asterisk по умолчанию. Командой CLI 'sip show domains' выводится список локальных доменов.

 domain=example.com
dumphistory

Вкл. или Выкл. отчет в завершении SIP диалога. SIP history выводится в DEBUG лог канала.

 dumphistory=yes|no
externhost

Когда Asterisk находится за NAT, SIP заголовок обычно использует IP адрес сервера. Если включить данную опцию, Asterisk будет производить периодические DNS опросы для определения имени хоста и заменять IP адрес на 'externhost'.

 externhost=my.hostname.tld

Используйте externip.

externip

externip содержит IP алрес в качестве аргумента. Если Asterisk находится за NAT, SIP заголовок Contact: содержит внутренний IP адрес сервера, тогда удаленная сторона не знает куда отправлять ответы. Параметр externip вкупе с параметром nat=force_rport модифицирует SIP заголовок, сообщая удаленному SIP серверу адрес на который надо слать ответы:

 externip=123.123.123.123
externrefresh

Если все же используется 'externhost', указывает промежуток времени в секундах между запросами DNS.

 externrefresh=30
g726nonstandard

Значения: yes/no, по умолчанию: no. Если клиент собирается для сеанса связи «договориться» использовать звуковой кодек G726-32, с использованием компрессии AAL2, вместо RFC3551 (что требуется для аппаратов фирмы Sipura и шлюзов от Grandstream, и может другим). То это противоречит спецификации RFC3551, клиент должен вместо этого «договориться» использовать AAL2-G726-32

 g726nonstandard=yes
ignoreregexpire (global)

Если ignoreregexpire установлен 'yes', Asterisk сделает одно из двух, в зависимости от настроек пиров: 1)Non-realtime peer Когда регистрация истекает, информация не удаляется из памяти или БД Asterisk и вызовы будут разрешены несмотря на то, что время регистрации истекло.

2)Realtime peers Когда peer сконфигурирован в режиме реального времени, информация о регистрации используется независимо от defaultexpiry

 ignoreregexpire=yes|no
jbenable

Вкл. поддержку RTP jitter buffer на принимающей стороне канала SIP. По умолчанию 'no'. Будет работать, только если удаленная сторона поддерживает эту функцию. подробнее о Джиттер

 jbenable=yes|no
jbforce

Принудительное использование jitter buffer принимающей стороной SIP канала.

 jbforce=yes|no
jbimpl

Использовать фиксированный или подстраиваемый (адаптивный) jitter buffer. fixed jitter buffer всегда использует значение из jbmaxsize adaptive может принимать значение больше jbmaxsize По умолчанию 'fixed':

 jbimpl=fixed|adaptive

Из личного опыта, вкл. 'adaptive' может приводить к весьма плачевным результатам.

jblog

Вкл./выкл jitter buffer frame лог. По умолчанию 'no':

 jblog=yes|no
jbmaxsize

Установите максимальную длину буфера в миллисекундах:

 jbmaxsize=200
jbresyncthreshold

Джиттер буфер порог синхронизации. По умолчанию 1000:

 jbresyncthreshold=1000
icesupport

Использовать Interactive Connectivity Establishment (ICE) в Asterisk

 icesupport=no
limitonpeers

Применять call-limit только для type=peer Это улучшит использование call-limit для устройств настроенных, как type=friend, отделив ограничение call-limit от входящих вызовов.

 limitonpeers=yes|no
localnet

укажет серверу Asterisk какие подсети являются локальными, прозрачными для использования IP адресов сервера, SIP запросы к которым не требуют модификации поля Contact: c использованием externip или externhost

 localnet=192.168.1.0/24
 localnet=172.16.0.0/16
matchexterniplocally

Сверять 'externip' с 'localnet' и производить подстановку, только если 'externip' из локальной подсети. Не совсем ясно, зачем это может понадобиться? Возможно при очень нестандартной топологии сети.

 matchexterniplocally=yes|no
maxexpiry

Максимальная продолжительность регистрации в секундах.

 maxexpiry=3600
minexpiry

Минимальная продолжительность регистрации в секундах.

 minexpiry=60
notifymimetype

Указывает MIME тип используемый для message-waiting indication (MWI) в SIP NOTIFY сообщении.

 notifymimetype=text/plain
notifyringing

Сообщать подписчикам о состоянии вызов (RINGING):

 notifyringing=yes|no
notifyhold

Сообщать подписчикам (subscribers) о состоянии удержание (HOLD):

 notifyhold=yes|no
pedantic

Скурпулезная проверка SIP сообщений. Устанавливает более строгую проверку по стандартам SIP RFC.

 pedantic=yes
realm

Данная установка используется для аутентификации в SIP. Задайте realm полное доменное имя вашего сервера. Имя должно быть совершенно уникальным.

 realm=mybox.example.com
recordhistory

Вкл. или Выкл историю sip для всех каналов.

 recordhistory=yes|no
registerattempts

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

 registerattempts=0
registertimeout

Таймаут между попытками регистрации на другом устройстве.

 registertimeout=30
relaxdtmf

Если плохо распознаются DTMF сигналы, включите данную опцию.

 relaxdtmf=yes|no
rtautoclear

(global) Конфигурация Realtime Peers Указывает должен ли Asterisk обнулять созданные на лету friends по истечении времени регистрации. Если установлено 'yes', по истечении срока регистрации, удалять friends до нового запроса. Если задано число, то оно используется вместо обычного времени регистрации.

rtautoclear=yes|no|seconds
rtcachefriends

(global)

Если rtcachefriends включен, Asterisk будет кэшировать friends(реалтайм пиры), которые приходят из realtime engine, так же, как если бы они сконфигурированы в «sip.conf».

 rtcachefriends=yes|no
rtsavesysname

(global) Определяет, должен ли Asterisk сохранить SystemName в базе данных в режиме реального времени во время регистрации:

 rtsavesysname=yes|no
rtupdate

(global) Если установлено 'yes' Asterisk будет обновлять IP-адрес, порт и период регистрации пиров при регистрации. По умолчанию 'yes':

 rtupdate=yes|no
sipdebug

Указывает, должен или нет Asterisk включать SIP debug сразу при загрузке драйвера канала SIP.

 sipdebug=yes|no
sendrpid

ОТправлять или нет Remote-Party-ID header:

 sendrpid=yes|no
srvlookup

Записи DNS SRV являются одним из способов указания адреса для связи сервером. Используя записи SRV, вы получаете многие преимущества DNS, в то время как отключения SRV DNS лишает вас возможности принимать SIP вызовы на основании доменных имен. В настоящее время поддержка записей SRV в Asterisk несколько хромает. Если несколько записей SRV возвращаются, Asterisk будет использовать только первую запись. Чтобы включить, установите srvlookup = yes в секции [general] файла sip.conf:

 srvlookup=yes
transport

Задает транспорт по умолчанию. По умолчанию 'udp', но может быть 'tcp', 'tls', 'ws' или 'wss'. Если задано TCP а tcpenable=no будет использован UDP транспорт.

transport=udp
tcpenable

Включить поддержку TCP транспорта chan_sip Asterisk.

 tcpenable=yes
tcpbindaddr

Адрес на котором Asterisk «слушает» TCP подключения.

  IPv4 example: bindaddr=0.0.0.0:5062
  IPv6 example: bindaddr=[::]:5062
tcpauthtimeout

tcpauthtimeout указывает максимальное время в секундах данное клиенту на аутентификацию. Если за заданное время клиент не прошел проверку он отключается. (По умолчаннию 30 секунд)

 tcpauthtimeout = 30
tcpauthlimit

Максимальное кол-во неаутентифицированных сессий в момент любой времени.

 tcpauthlimit = 100
t1min

Минимальная задержка туда-обратно (minimum round-trip) для сообщения контролируемого хоста. По умолчанию 100 миллисеунд:

 t1min=100
subscribecontext

Ограничить запросы SUBSCRIBE только указанным контекстом, если не переопределено в настройках пира.

 subscribecontext=internal
t38pt_udptl

Установка t38pt_udptl 'yes' вкл. T.38 fax (UDPTL) насквозь (passthrough) для SIP-to-SIP вызовов с поддержкой T.38. Эта настройка включается глобально для всех устройств, но вы можете отключить её для конкретного устройства.

 t38pt_udptl=yes|no

T.38 fax passthrough работает только для SIP-to-SIP вызовов, любые local или agent каналы не могут быть использованы.

tos_sip, tos_audio, andtos_video

Asterisk может установить TOS bits в IP заголовках для помощи маршрутизаторам приотеризации трафика. tos_sip, tos_audio, и tos_video установки управляют TOS битами для SIP сообщений, RTP аудио и RTP видео, соответственно. Поддерживаются: CS0, CS1, CS2, CS3, CS4, CS5, CS6, CS7, AF11, AF12, AF13, AF21, AF22, AF23, AF31, AF32, AF33, AF41, AF42, AF43. Можно также использовать цифровые значения для TOS битов.

trustrpid

Доверять или нет Remote-Party-ID header: Asterisk SIP trustrpid

 trustrpid=yes|no
useragent

Значение поля useragent в SIP заголовке. По умолчанию версия Asterisk:

 useragent=Asterisk PBX v12.4.0

Если вы не желаете сообщать, что используете Asterisk, напишите Cisco или Avaya, или abyrvalg v2.0.

usereqphone

usereqphone опция говорит Asterisk добавить «user=phone» в SIP URIs которые содержат действующий номер телефона:

usereqphone 
videosupport

(both) Вкл. или выкл поддержку видео.

 videosupport=yes|no

Asterisk.conf

Posted in Настройка Asterisk

/etc/asterisk/asterisk.conf

В файле конфигурации asterisk.conf Вы определяете следующее:

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

Пример конфигурации.

Директории

Директории используемые в Asterisk.

directories

[directories](!)
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
astsbindir => /usr/sbin

astetcdir => /etc/asterisk

Конфигурационные .conf файлы.

ls -1 /etc/asterisk

astmoddir => /usr/lib(64)/asterisk/modules

Модули (applications, codec, functions)

modules

astvarlibdir => /var/lib/asterisk

Скрипты, документация, звуковые файлы, изображения, лицензии,

ls -1 /var/lib/asterisk/
 
/agi-bin
astdb.sqlite3
/bin
/documentation
/images
/keys
/licenses
/moh
/phoneprov
/sounds
/static-http
ls -1 /var/lib/asterisk/bin
archive_recordings
audio-email.pl
backup.php
callback
callerid_updater.php
enc
endpoint_firmware.php
fax2mail.php
faxpro_background.php
faxpro_helper.php
freepbx-cron-scheduler.php
freepbx_engine
freepbx_engine_hook_dahdiconfig
freepbx_engine_hook_endpoint
freepbx_engine_hook_pagingpro
freepbx_engine_hook_restapps
freepbx_engine_hook_sysadmin
freepbx_engine_hook_xmpp
freepbx_setting
gen_amp_conf.php
generate_hints.php
generate_queue_hints.php
libfreepbx.confgen.php
module_admin
one_touch_record.php
opencnam-alert.php
pagepro-scheduler.php
pagepro-startup.php
queue_reset_stats.php
restore.php
retrieve_conf
retrieve_parse_amportal_conf.pl
schedtc.php
storage.php

astspooldir => /var/spool/asterisk

Директории для файлов создаваемых Asterisk в процессе работы. Например: Записи разговоров, принятые факсы, голосовая почта, call-файлы итд.

 ls -1  /var/spool/asterisk/
/fax
/meetme
/monitor
/outgoing
/sysadmin
/system
/tmp
/voicemail

astrundir => /var/run/asterisk

Место куда Asterisk записывает UNIX control socket файл (asterisk.ctl) и файл ID процесса (asterisk.pid)

ls -1  /var/run/asterisk/
asterisk.ctl
asterisk.pid

astlogdir => /var/log/asterisk

Файлы логов Asterisk. Настройки вывода логов производятся в файле /etc/asterisk/logger.conf

 ls -1  /var/log/asterisk
/cdr-csv ;директории CDR файлов
/cdr-custom
full
queue_log

а также могут быть:

 fail2ban   ; 
 freepbx_debug 
 freepbx.log

astsbindir => /usr/sbin

Исполняемые файлы Asterisk.

 ls /usr/sbin | grep asterisk
 asterisk
 rasterisk
 safe_asterisk

Раздел (секция) [options]

ПараметрЗначение по умолчанию / ПримерОписание
verbose 0 Устанавливает уровень детализации (verbose) консоли и лога . Это значние также может быть установлено в консоли коммандой 'core set verbose <0-9> или off.
debug 0 Залает значение уровня отладки (debug). по умолчанию - 0
alwaysfork no всегда в фоновом режиме, даже с опциями -v или -d
nofork no Отключить фоновое выполнение.
quiet no Работать тихо (-q). Уменьшает выхлоп консоли.
timestamp no Временные отметки в выводе консоли(-T) CLI verbose output
execincludes no Разрешить #EXEC записи в файлах конфигурации
console no Всегда запускать в консольном режиме, с приглашением CLI.
highpriority no Запускать Asterisk c наивысшим приоритетом в режиме реального времени.
initcrypto no Загружать ключи из ../astkeydir при старте.
nocolor no Цветная консоль.
dontwarn no Отключить предупреждения (warning messages).
dumpcore no Делать дамп (содержимое рабочей памяти процесса, ядра)при падении
languageprefix yes Как находится путь к звуковому файлу с языковым префиксом. По умолчанию, 'yes' - перфикс языка в пути к файлу перед подкаталогов, например ../ru/digits/1.gsm. Если 'no' то префикс после имени каталога, например: (digits/ru/1.gsm).
internal_timing yes Включить внутренний источник синхронизации для аудио
systemname not set Уникальное имя Asterisk. Используется как часть UNIQUEID в CDR. По умолчанию не задано
autosystemname no Автоматом задавать 'systemname' на основании имени хоста
maxcalls not set Максимальное кол-во одновременных входящих вызовов. По умолчанию не ограничено
maxload not set/0.9 Максимальная нагрузка на процессор, при которой Asterisk прекратит новые соединения.
minmemfree not set /256
cache_record_files yes / no Кэшировать записи
record_cache_dir <dir> директория кэша записей
transmit_silence no Транслировать тишину, если нет другог источника звука
transcode_via_sln yes перекодировать кодеки через SLINEAR
runuser asterisk Владелец Asterisk.
rungroup asterisk Группа Asterisk.
documentation_language en / es / ru Язык документации
hideconnect no Не показывать сообщения о подключении удаленных консолей
asterisk.conf
[options]
;verbose = 3
;debug = 3
;alwaysfork = yes               ; Same as -F at startup.
;nofork = yes                   ; Same as -f at startup.
;quiet = yes                    ; Same as -q at startup.
;timestamp = yes                ; Same as -T at startup.
;execincludes = yes             ; Support #exec in config files.
;console = yes                  ; Run as console (same as -c at startup).
;highpriority = yes             ; Run realtime priority (same as -p at
                                ; startup).
;initcrypto = yes               ; Initialize crypto keys (same as -i at
                                ; startup).
;nocolor = yes                  ; Disable console colors.
;dontwarn = yes                 ; Disable some warnings.
;dumpcore = yes                 ; Dump core on crash (same as -g at startup).
;languageprefix = yes           ; Use the new sound prefix path syntax.
;internal_timing = yes
;systemname = my_system_name    ; Prefix uniqueid with a system name for
                                ; Global uniqueness issues.
;autosystemname = yes           ; Automatically set systemname to hostname,
                                ; uses 'localhost' on failure, or systemname if
                                ; set.
;mindtmfduration = 80           ; Set minimum DTMF duration in ms (default 80 ms)
                                ; If we get shorter DTMF messages, these will be
                                ; changed to the minimum duration
;maxcalls = 10                  ; Maximum amount of calls allowed.
;maxload = 0.9                  ; Asterisk stops accepting new calls if the
                                ; load average exceed this limit.
;maxfiles = 1000                ; Maximum amount of openfiles.
;minmemfree = 1                 ; In MBs, Asterisk stops accepting new calls if
                                ; the amount of free memory falls below this
                                ; watermark.
;cache_record_files = yes       ; Cache recorded sound files to another
                                ; directory during recording.
;record_cache_dir = /tmp        ; Specify cache directory (used in conjunction
                                ; with cache_record_files).
;transmit_silence = yes         ; Transmit silence while a channel is in a
                                ; waiting state, a recording only state, or
                                ; when DTMF is being generated.  Note that the
                                ; silence internally is generated in raw signed
                                ; linear format. This means that it must be
                                ; transcoded into the native format of the
                                ; channel before it can be sent to the device.
                                ; It is for this reason that this is optional,
                                ; as it may result in requiring a temporary
                                ; codec translation path for a channel that may
                                ; not otherwise require one.
;transcode_via_sln = yes        ; Build transcode paths via SLINEAR, instead of
                                ; directly.
;runuser = asterisk             ; The user to run as.
;rungroup = asterisk            ; The group to run as.
;lightbackground = yes          ; If your terminal is set for a light-colored
                                ; background.
;forceblackbackground = yes     ; Force the background of the terminal to be
                                ; black, in order for terminal colors to show
                                ; up properly.
;defaultlanguage = en           ; Default language
documentation_language = en_US  ; Set the language you want documentation
                                ; displayed in. Value is in the same format as
                                ; locale names.
;hideconnect = yes              ; Hide messages displayed when a remote console
                                ; connects and disconnects.
;lockconfdir = no               ; Protect the directory containing the
                                ; configuration files (/etc/asterisk) with a
                                ; lock.
;stdexten = gosub               ; How to invoke the extensions.conf stdexten.
                                ; macro - Invoke the stdexten using a macro as
                                ;         done by legacy Asterisk versions.
                                ; gosub - Invoke the stdexten using a gosub as
                                ;         documented in extensions.conf.sample.
                                ; Default gosub.
;live_dangerously = no          ; Enable the execution of 'dangerous' dialplan
                                ; functions from external sources (AMI,
                                ; etc.) These functions (such as SHELL) are
                                ; considered dangerous because they can allow
                                ; privilege escalation.
                                ; Default yes, for backward compatability.
; Changing the following lines may compromise your security.
;[files]
;astctlpermissions = 0660
;astctlowner = root
;astctlgroup = apache
;astctl = asterisk.ctl
[compat]
pbx_realtime=1.6
res_agi=1.6
app_set=1.6

NAT, SIP и Asterisk

Posted in Настройка Asterisk

нет звука, нет звука в одну сторону, нет слышимости

Трансляция сетевых адресов (NAT) является обычной практикой в сети и нередко мешает прохождению голосовых пакетов (нет звука) и инициализации соединений (нет соединения). Решение этой проблемы требует понимания принципов работы NAT и VoIP. В этой статье рассматривается протокол SIP и Asterisk, но проблемы и решения применимы и к большинству других приложений и протоколов.

NAT используется, чтобы скрыть многочисленные локальные адреса, за каким-то внешним узлом, обеспечивая безопасность и структуризацию сети.
Когда пакет проходит шлюз (gateway), IP-адрес локального источника заменяется на внешний IP-адрес. При ответе шлюз направляет пакет на исходный локальный адрес. Также шлюз блокирует внешние запросы не имеющие явных внутренних источников, но возможно пробросить пакеты пришедшие на определенные порты, на заранее заданные IP адреса внутри сети.

Если у вас нет звука, нет звука в одну сторону, нет слышимости, прочтите внимательно эту инструкцию.

Reinvite

Первый абонент запрашивает соединение у второго , сообщая свой IP адрес. Второй отвечает, сообщая свой IP. Голосовые пакеты направляются напрямую абонентам, минуя SIP сервер. Передача голосовых пакетов напрямую абонентам, минуя Asterisk, называется RE-INVITE или Native Bridge.

NAT может вызвать проблемы в нескольких местах.

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

Клиент за NAT

В простейшей ситуации SIP клиент находясь за NAT, обращается к внешнему интерфейсу Asterisk. SIP клиент при регистрации на сервере создает запись в таблице трансляций, которая сохраняется, пока проходит хотя бы один пакет в минуту. В файле sip.conf требуется определить параметры сети и свойства удаленного пира.

 

[general]
localnet=192.168.0.0/255.255.255.0 ; локальная сеть
externip=x.x.x.x                   ; внешний ip адрес
[sip_phone]             
nat=yes
qualify=300                    ; проверять соединение каждые 300 мс.

Начиная с версии Asterisk 11: 'nat=yes' устарело, используйте 'nat=force_rport,comedia'
nat=force_rport,comedia

nat=force_rport,comedia
directmedia=nonat
При такой конфигурации Asterisk использует внешний IP адрес externip для вызовов клиентов с параметром nat=yes . Дополнительно параметр qualify=yes поддерживает соединение, не позволяя удалять запись из таблицы трансляций.

SIP клиенты и Asterisk за NAT

Все усложняется если и Asterisk, и клиенты, находятся за NAT. Клиенты с внешней стороны не смогут получать SIP сообщения и принимать звонки. Или в SIP сообщении будет указан локальный IP адрес телефона, что приведет к потере звука.

Чтобы избежать потери звука запретите re-invite в файле sip.conf

[general]
canreinvite => no
Опция canreinvite устарела. Используйте 'directmedia'.
  • directmedia=yes
  • directmedia=nonat
  • directmedia=update
  • directmedia=outgoing

Но клиенты находящиеся за NAT, все равно не смогут инициировать соединение с Asterisk и направить голосовые пакеты RTP на требуемый екстеншен. Для того чтобы это работало, надо пробросить требуемые порты через брандмауер на Asterisk. Диапазон RTP портов используемых Asterisk, назначается в файле rtp.conf.

[general]
rtpstart=10000 
rtpend=10100                  

По умолчанию задан диапазон от 10000 до 20000. Измените диапазон в соответсвии с вашими потребностями (по два порта на каждый конкурирующий вызов).

Для нормальной работы за NAT, потребуется пробросить диапазон RTP портов в соответсвии с настройками в файле rtp.conf и порт SIP(обычно 5060). В iptables это будет выглядеть так:

iptables -t nat -A PREROUTING -i eth0 -p udp \
-m udp --dport 10000:10100 -j DNAT \
--to-destination 192.168.1.10
iptables -t nat -A PREROUTING -i eth0 -p udp \
-m udp --dport 5060 -j DNAT \
--to-destination 192.168.1.10
Где eth0 - внешний интерфейс, а 192.168.1.10 - IP адрес Asterisk.

Основные параметры конфигурации NAT для Asterisk

 sip.conf
 

Поддержка NAT в Asterisk 12

 localnet

параметр 'localnet' список сетевых адресов, которые считаются «внутренними».

 localnet=192.168.0.0/255.255.0.0 - RFC 1918 адреса
 localnet=10.0.0.0/255.0.0.0      - Также RFC1918
 localnet=172.16.0.0/12           - Другое RFC1918 с CIDR обозначением
 localnet=169.254.0.0/255.255.0.0 - Zeroconf локальная сеть
externaddr

Внешний адрес щлюза (маршрутизатора) во внешнюю сеть. «externaddr = hostname[:port]» указывает статический адрес[:port] который будет использован в SIP и SDP сообщениях. Имя хоста (hostname) поднимается каждый раз, когда [пере]загружается sip.conf. Если порт не назначен, используется значение указанное в параметре «udpbindaddr». примеры:

 externaddr = 123.34.56.78:         - использовать этот адрес.
 externaddr = 123.34.56.78:9900     - использовать этот адрес и порт.
 externtcpport = 9900    - отображаемый наружу tcp порт
 externtlsport = 12600   - отображаемый наружу tcp порт;  'externtlsport' по рекомендации RFC назначенный порт 5061.	
externhost

«externhost = hostname[:port]» то же что и «externaddr» только это 'hostname' обновляемое через «externrefresh» секунд (по умолчанию 10сек.).

 externhost=foo.dyndns.net       - обновлять периодически
 externrefresh=180               - задать интервал обновления

В дополнение к вышесказанному Asterisk имеет дополнительный параметр «NAT» для разрешения вопросов, связанных со входящими SIP или медиа сессиями. В частности, в зависимости от настроек 'NAT =' как описано ниже, Asterisk может переопределить адрес / порт информацию, указанную в SIP / SDP сообщениях.

 nat = no                - без NAT RFC3581
 nat = force_rport       - использовать rport, даже если его нет 
 nat = comedia           - отправить медиа поток на порт ASterisk, независимо от указаний SDP.
 nat = auto_force_rport  - установить 'force_rport' параметр если  Asterisk обнаружил NAT (по умолчанию)
 nat = auto_comedia      - установить  'comedia' параметр если Asterisk обнаружил NAT

настройки могут совмещаться:

nat=force_rport,comedia

RFC 3581 определяет что 'rport' позволяет клиенту запросить, чтобы Asterisk отправлял SIP ответы на него через исходный IP и порт, с которого был направлен запрос, вместо адреса / порта из самого верхнего Via заголовка.

Установка force_rport принуждает Asterisk всегда передавать ответы обратно на адрес / порт, с которых он получил запросы, даже если другая сторона не поддерживает добавления параметра 'rport'.

media_address

IP адрес используемый для медиа (аудио, видео и текста) в SDP может быть переназначен параметром 'media_address'. Данный параметр может быть использован только в секции [general].

 media_address = 172.16.42.1
icesupport

ICE/STUN/TURN использование может быть включено глобально или для конкретного пира с помощью 'icesupport' опции.

 icesupport = yes
directmedia

Для отключения прямых RTP потоков (peer-to-peer) используйте опцию:

 directmedia=nonat
устаревшие настройки sip.conf

rtp.conf

 rtpstart=10000

Задает первый порт диапазона для приема и оправки голосовых пакетов RTP.

 rtpend=10100

Задает последний порт диапазона для приема и оправки голосовых пакетов RTP.

 stunaddr=sip.stun.tld

В Asterisk начиная с версии 11 появилась поддержка stun. icesupport должно быть включено.

Отключение SIP ALG на роутерах

Если вы хотите что бы SIP телефония работала корректно, при условии что ваш сервер с астериск находится за NATом, вам необходимо выполнить следующие на своем роутере:

  • Проброс UDP порта 5060 (SIP) отвечающий за сигнализацию вызова
  • Проброс диапазона UDP портов 10000-20000 (RTP) отвечающий за голос

В качестве dst.address должен быть указан ip астериска, а в качестве dst.port аналогичные порты из пункта выше.

Если после этого вы испытываете проблемы с SIP регистрацией и прочим, то необходимо проверить наличие на вашем роутере SIP ALG и отключить его.

Так как определенные модели роутеров и сетевых экранов имеют  встроенную технологию передачи SIP протокола (прозрачное изменение SIP сообщений), которые призваны упростить работу с NAT, то использование стандартного порта 5060 при такой конфигурации будет не упрощать работу, а наоборот, усложнять, т.к. нужно использовать либо проброс, либо sip alg.

Отключение SIP ALG для CISCO роутеров:

no ip nat service sip udp port 5060

Настройка SIP транка между Yealink MyPBX и Asterisk

Posted in Настройка Asterisk

В небольших удаленных филиалах использование полноценного сервера с установленным Asterisk в большинстве случаев является избыточным, если штат сотрудников филиала не превышает пятнадцати человек. Если вам не нужна сквозная запись разговоров, сложные IVR, CRM системы, и другие возможности предоставляющие полноценные сборки на базе сервера и asterisk, удобно использовать готовую платформу на безе asterisk размером с модем хdsl, и позволяющее подключить до 4 аналоговых линий fxo-fxs и 20 sip абонентов, например Yeastar MyPBX SOHO. И что немаловажно имеющие гарантию 3 года!

Эта PBX достаточно подробно документирована, и проблем с настройкой в качестве гибридной мини-атс у вас возникнуть не должно.

После настройки MyPBX с соблюдением мер сетевой защиты, приступаем к настройке sip транка между MyPBX и Asterisk сервер установленный в головной организации:

Для начала необходимо создать транк в разделе Внешние линии — VOIP линии- Добавить:

1

 

В открывшейся форме задаем имя транка, указываем внешний IP сервера asterisk, имя пользователя для регистрации на asterisk, пароль и CallerID но в этом случае мы не увидим номер внутреннего абонента филиала, поэтому поле Caller ID лучше оставить пустым:

2

 

В разделе Исходящие маршруты добавляем маршрут вызова на головной asterisk:

3

 

Указываем шаблон для набора внутренних номеров на стороне asterisk, включаем нужные внутренние номера абонентов MyPBX для выходя через этот маршрут и сам транк в списке линий:

4

 

В разделе Входящие маршруты добавляем маршрут вызовов приходящих с центрального Asterisk на MyPBX:

5

 

В качестве DID номера указываем шаблон или 5ХХ (наша нумерация абонентов mypbx) или просто «.» т. к. DID привязывается к конкретному транку (внешней линии).

 

Выбираем нужный транк (внешнию линию) и указываем распределение входящих вызовов по расписанию рабочие-выходные.

 

Далее настраиваем Asterisk:

В sip.conf создаем транк на MyPBX

[mypbx]
context=clients
dtmfmode=rfc2833
host=dynamic
secret=ehfy256
trunk=yes
type=friend
username=mypbx
canreinvite=no
qualify=yes

Указываем нужный контекст, имя пользователя, пароль, host ставим dynamic.

В консоли asterisk выполняем sip reload и проверяем регистрацию пира mypbx:

10

В консоли asterisk на MyPBX проверяем регистрацию пира:

11

12

 Описываем контекст cliets в extensions.conf центрального Asterisk:

[clients]

exten => _5XX,1,Dial (SIP/mypbx/${EXTEN},60)

Направляем вызова на номера 5ХХ через транк mypbx

Все, теперь можем звонить между центральной атс на Asterisk и филиалом MyPBX

  • Наши клиенты:

    OOO Газпром межрегионгаз Оренбург    
    ООО "Газпром межрегионгаз Оренбург" Жилой комплекс Экодолье Оренбург Сеть магазинов бытовой техники "Айсберг"
  • Наши клиенты:

          
     Сеть магазинов мебели "Мягков" Администрация г.Орска Орский шпалопропиточный завод
  •   
     Сеть магазинов "Строительный БУМ" ЗАО "Орский завод синтетического спирта" Региональная торговая компания "ШАР"
  •    
     Телерадиокомпания "Евразия" Производственное объединение "Климатвентмаш" Оренбургская региональная сеть
    "Рекламная кампания"
  •  Оператор интернета и тв
    ООО "ОрскТелеком"
    МУП "Орская городская аптека" Автосалон "Вояж"
  • fort
    ozemi gost
    Отель "Фортеция" ЗАО "Завод электромонтажных изделий" Объединенная служба такси
  • novupak 
    logo ormash1  
    Производство и продажа полиэтиленовой пленки

    АО "Орский Машиностроительный завод"

     
Powered by Warp Theme Framework
������.
Яндекс.Метрика