Что такое SIP и с чем его едят я рассказывать не буду, но поскольку SIP стал де-факто стандартом телефонии советую изучить матчасть ака RFC3261. Весь читать не обязательно, а вот первые страницы говорят очень даже. Отлов граблей будет происходить проще и с пониманием дела:)
Астериск конечно же умеет работать с SIP
Для разговора используется RTP(RFC3550).
полезные команды CLI:
sip show peers показать все пиры втч friends
sip show registry показать статус хостов с какими у нас есть рега
sip set debug on показывать все SIP сообщения
sip reload перезагрузка настроек sip
sip show settings Показать текущую настройку каналов.
порт 5060 для соединения и 10К-20К для обмена голосом.
Сейчас вкратце опишу этот файлик..
Забугорные товарищи настаивают на именовании юзверей не циферками, а например по макам телефонов или по именам подразделений и номерок. Согласен секьюрнее,есть ряд неудобств, но удобств больше)
[general] context=unauthenticated ; контекс по умолчанию, для входящих звонков allowguest=no ; запрещает принимать вызовы от незарегистрированных пользователей ; yes (позволяет принимать звонки из других доменов) srvlookup=yes ; Позволяет звонить по именам днс:) udpbindaddr=0.0.0.0 ; указывает на каком ифейсе слушать UDP запросы tcpenable=no ; отключает поддержку TCP [office-phone](!) ; создаем шаблон для наших устройств type=friend ; тип записи context=LocalSets ; контекст для исходящих звонков host=dynamic ; не привязан к опр айпи nat=yes ; говорит чтобы работал за натом secret=s3CuR#p@s5 ; пароль dtmfmode=auto ; установка тонов нажатия кнопок(автоматом) disallow=all ; отключает все голосовые кодеки allow=alaw ; разрешает использование этого кодека allow=ulaw ; в заданном порядке ; далее идет определение устройства [0000FFFF0001](office-phone) ; и еще одного:) [0000FFFF0002](office-phone)
Каждый SIP клиент или сервер определяется в этом файле как текстовый блок, по типу приведенного ниже:
[xxx] type=yyy parameter1=value parameter2=value
Где xxx – это имя SIP клиента
yyy – Тип SIP клиента может быть: “user”, “peer” или “friend”.
user только входящие звонки, * <- user
peer – только исходящие звонки (через приложение Dial()). * -> peer
friend – это просто краткая запись, определяющая и пользователя, и равноправного участника. * <-> friend
Начиная с версии 1.8 Поддерживается и IPv6
Message Waiting Indication(MWI) – световая или звуковая индикация о наличии голосовых сообщений в почтовом ящике.
Общие параметры sip.conf [general]
context=contname используется для маршрутизации вызовов от этого клиента до нужного места назначения.
allowguest=yes разрешает входящие из интернета(закрыв защищаем себя от шалунов звонящих на Кубу)
match_auth_username=yes использует поле username вместо from
allowoverlap=no отключение набора по мере поступления номера, непонятно для сипа.
allowtransfer=yes разрешает переадресацию, можно использовать tT в Dial.
realm =domain.com зона действия краткой аутентификации
domainsasrealm=no использовать домен как реалм, можно обслуживать несколько зон
recordonfeature=automixmon Фича которая используется при получении ‘Record: on’ в хидере INFO сообщения. по умолчанию ‘automon’.
recordofffeature=automixmon Фича которая используется при получении ‘Record: off’ в хидере INFO сообщения. по умолчанию ‘automon’.
disallowed_methods =UPDATE когда начинается диалог с другой точкой по сипу, она должна включить в allow хидер какие сип методы она поддерживает, если точка не включает allow то астер думает что все методы поддерживаются, этой опцией мы говорим астеру что не умеет.
tcpenable=yes включает поддержку tcp
tcpbindaddr=192.168.1.1:5065 слушает этот адрес по тцп, также можно задать порт напр:
tlsenable=no включает поддержку tls(secure connection)
tlsbindaddr=0.0.0.0:5061 слушает этот адрес по тлс
более подробно о тлс http://tools.ietf.org/html/draft-ietf-sip-domain-certs-07
udpbindaddr=0.0.0.0 слушает этот адрес по удп
tcpauthtimeout=30 таймаут для аутентификации клиента, по умолчанию 30 сек
tcpauthlimit=100 max к-во неаутентифицированных сессий
transport=udp Транспорт по умолчанию. например если установлено tcpenable=no, а транспорт в tcp, то будет использован UDP.
srvlookup=yes Позволяет звонить по именам днс:)
pedantic=no Вкл, педантичную проверку полей Call-ID и всех строк в многострочном заголовке SIP сообщения и кодированных URI заголовков(обычно отключают)
ПАРАМЕТРЫ QoS
https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for a description of these parameters.
Type of Service (L3)
tos_sip=cs3 Sets TOS for SIP packets.
tos_audio=ef Sets TOS for RTP audio packets.
tos_video=af41 Sets TOS for RTP video packets.
tos_text=af41 Sets TOS for RTP text packets.
Class of Service (L2)
cos_sip=3 Sets 802.1p priority for SIP packets.
cos_audio=5 Sets 802.1p priority for RTP audio packets.
cos_video=4 Sets 802.1p priority for RTP video packets.
cos_text=3 Sets 802.1p priority for RTP text packets.
maxexpiry=3600 Максимально разрешенная продолжительность регистрации.
minexpiry=60 Минимально разрешенная продолжительность регистрации.
submaxexpiry=3600 Максимально разрешенное время входящей подписки(дефолт=maxexpiry)
subminexpiry=60 Минимально разрешенное время входящей подписки(дефолт=minexpiry)
defaultexpiry=120 Продолжительность периода входящей или исходящей регистрации.
mwiexpiry=3600 Время истечения исходящей MWI подписки
maxforwards=70 Установка SIP Max-Forwards: хидер (антипетли) по умолчанию 70
qualifyfreq=60 как часто проверять доступность хоста (в секундах).
qualifygap=100 К-во мс между проверками групп.
qualifypeers=1 К-во пиров в группе, которые проверяются одновременно
notifymimetype=text/plain переопределяем mime тип MWI NOTIFY
buggymwi=no Cisco SIP прошивки полностью не поддерживают MWI RFC Вкл эту опцию чтобы не получать сообщение об ошибке
mwi_from=asterisk При посылке MWI NOTIFY запроса, использовать в поле From: в “name” части. также заполянет “user” часть URI в From: если не задано значение fromuser
vmexten=voicemail Экстеншен в диалплане для доступа к почте в MWI notify сообщении
keepalive=60 Интервал с каким должны отсылаться keepalive пакеты yes (60 seconds), no, или к-во секунд.
КОДЕКИ
disallow=all отключает все голосовые кодеки
allow=alaw разрешает использование этого кодека
preferred_codec_only=no отвечает на инвайт сообщая предпочитаемый кодек
mohinterpret=default какой класс музыки во время ожидания должен воспроизводиться по этому каналу, если он не задан с помощью Set(CHANNEL(musicclass)=whatever). Если установить в «passthrough» для оповещения вместо локального воспроизведения музыки во время ожидания всегда будет передаваться сообщение ожидания. Опция может быть задана как глобально так и для конкретного пользователя.
mohsuggest=default MOH которую ты предлагаешь услышать второй стороне.
parkinglot=plaza лот для парковки вызовов
language=ru язык звуков итд, устанавливается как для юзеров так и глобально
tonezone=se Глобальное определение тонзоны
relaxdtmf=yes Если у Вас возникают проблемы с детектированием DTMF сигнала, вы можете ослабить строгость детектирования DTMF. Ослабление строгости детектирования DTMF посылок может приводить к “ложным срабатыванием”, когда определяется наличие DTMF сигнала при его отсутствии.
trustrpid должен ли астер доверять значению в поле Remote-party-id
sendrpid
yes -астер должен отправлять поле Remote-party-id
pai использует P-asserted-identify в хедере для идентиф. удаленной стороны
rpid – использует “Remote-Party-ID” в хидере
rpid_update=yes немедленно передает изменение состояния линии на другой сервак
prematuremedia=yes некоторые ISDN линки отсылают пустой фрейм перед звонком-> звонок не слышат с той стороны в сипе:( сип пир должен сконфигурирован со след опцией
progressinband Значения: yes/no/never, по умолчанию: never. Должен ли aster самостоятельно генерировать звуковой сигнал вызова для вызывающего абонента (in-band ringing). Используйте значение ‘never’, чтобы никогда не производилась генерация этого сигнала, даже в случае, когда некоторые странные устройства не могут генерировать его самостоятельно.
useragent = aster -изменение названия агента
promiscredir разрешаем отправлять SIP сообщения с кодом 302 или сообщения для переадресации вызова, для SIP клиентов с не локальными IP адресами. Стоит отметить, что поведение promiscredir при совершении переадресации вызова, который производиться в локальной системе, может привести к зацикливанию вызова, т.к. Asterisk не умеет обрабатывать “hairpin” вызовы.
usereqphone добавляет ;user=phone в URI если задан правильный номер
dtmfmode Режим DTMF. По умолчанию: rfc2833 Опции:
info : SIP INFO messages (application/dtmf-relay)
shortinfo : SIP INFO messages (application/dtmf)
inband : в голосовом потоке (требуется 64 kbit codec -alaw, ulaw)
auto : Использовать по возможности rfc2833 , иначе inband
compactheaders=yes посылает компактный хедер(полезно если заголовок Sip > MTU)
videosupport=yes, no, always включает поддержку видеосвязи
maxcallbitrate=384 максимальный битрейт видеосвязи
callevents=yes формирует события для менеджера AMI
БЕЗОПАСНОСТЬ
authfailureevents=yes устанавливает статус пира если не может авторизироваться=rejected
alwaysauthreject=yes если запрос аутентификации был отклонен, то в ответе НЕ будет написано, что юзер введен неверно, помогает защитится от атаки перебора имен пользователей
auth_options_requests=yes требовать авторизацию при посылках OPTION и INVITE
accept_outofcall_message = no Отклонять все MESSAGE вне звонка. По умолчанию включено.
outofcall_message_context = messages Контекст для всех сообщений вне диалога. Если не установлено, то используется контекст который использует пир. Можно задать и локально для пира.
auth_message_requests = yes Вкл аутентификацию запросов MESSAGE. По умолчанию вкл.
g726nonstandard = yes Значения: yes/no, по умолчанию: no. Если клиент собирается для сеанса связи “договориться” использовать звуковой кодек G726-32, с использованием компрессии AAL2, вместо RFC3551 (что требуется для аппаратов фирмы Sipura и шлюзов от Grandstream, и может другим). То это противоречит спецификации RFC3551, клиент _должен_ вместо этого “договориться” использовать AAL2-G726-32 🙁
outbondproxy=proxy.ua:8080 Адрес прокси сервера для исходящих вызовов.
matchexternaddrlocally = yes Заменяет externaddr или externhost если совпадают с настройками локальной сети.
dynamic_exclude_static запрещает регистрироваться всем хостам с Dynam IP как хост со статикой
contactdeny = 0.0.0.0/0.0.0.0
contactpermit =172… создает ACL разрешающий регаться только определенным IP
contactacl=named_acl_example используем именованные ACL определенные в acl.conf
engine =asterisk RTP engine используемый для связи с устройством
regcontext=name создает набор NoOp для зареганых телефонов в этом контексте с приоритетом 1, и если заинклюдить этот контекст(name) в другой, в котором для этого экстеншена будет диал с приоритетом 2, но звонить оно будет только если юзер зареган.
regextenonqualify=yes если вкл quality для пира и он выпадает, то * убивает этот экстеншен из regcontext
legacy_useroption_parsing=yes По умолчанию “no” Если включена и есть точка с запятой в sip URI, поле будет обрезано до первой точки с запятой. Это делает точку с запятой неиспользуемым символом в именах пиров, экстешенах итд. Это может быть полезно для улучшения совместимости с устройствами, которые хотели бы использовать пользовательские опции по каким-либо причинам Подобно тому как обрабатывались SIP URI в 1.6.2, а следовательно имена.
send_diversion=no По умолчанию “yes”. Обычно Asterisk отправляет Diversion хидеры с определенным SIP invites для ретрансляции данных о переадресованных звонках. Если выключено, Asterisk не будет отсылать Diversion хидеры, только если их не добавят вручную.
shrinkcallerid =yes убирает из номера все (-,.) если набрали 555.555 -> 555555
use_q850_reason =yes устанавливать или использовать reason header
refer_addheaders=yes Включено по умолчанию. Когда Transfer() отправляет REFER SIP сообщение, дополнительные заголовки, которые добавляются в диалплане с помощью SIPAddHeader также будут отправлены в этом сообщении. До 10 версии этого не происходило. Чтобы включить поведение как в 1.8 и ранее нужно добавить SIPRemoveHeader без аргументов до Transfer(). Опция для совместимости при переходе между версиями.
autocreatepeer=no Позволяет любому UAC регистрироваться БЕЗ АУТЕНТИФИКАЦИИ. Дыра в защите. Если “yes”, тогда пиры созданные таким образом будут урезаны после sip reload. Если “persist”, то пиры не будут удалены после sip reload.
TLS settings
tlscertfile=/path/to/certificate.pem файл сертификата (*.pem ) для TLS соединения. по-умолчанию asterisk.pem в текущей директории
tlsprivatekey=/path/to/private.pem Приватный ключ (*.pem ) для TLS соединения. Если не задано, то tlscertfile ищется для публичного и приватного ключа.
tlscafile=/path/to/certificate Если сервер, к которому вы конектитесь использует самоподписанные сертификаты, то нужно еще задать CA файл для проверки подлинности их сертификата.
tlscapath=/path/to/ca/dir путь к CA сертификатам. Файлы должны быть названы как хэш CA subject name
tlsdontverifyserver=[yes|no] если задано, то астер(как клиент) не проверяет сертификат сервера, если нет CA сервера, то установив в yes, мы подключимся без него. По умолчанию no.
tlscipher=SSL cipher string список доступных: http://www.openssl.org/docs/apps/ciphers.html#CIPHER_STRINGS
tlsclientmethod=tlsv1 определяет протокол для для исходящих клиентских подключений tlsv1, sslv3, sslv2. по умолчанию sslv2.
SIP timers
t1min=100 Минимальная задержка прохождения сообщений до хоста и обратно (roundtrip time), для которого отслеживается состояние (monitored host).
timert1=500 Таймер по умолчанию T1 по умолчанию 500 ms или измеренное round-trip time для пира(qualify=yes).
timerb=32000 Таймер для установки вызова. если ответа от устройства не поступило, вызов автоматически разрывается по умолчанию 64*timert1
RTP timers
для аудио и видео потоков. RTP таймауты только для аудио устанавливается как глобально так и для устройства
rtptimeout=60 Прерывать вызов, если нет активности RTP медиапотока более чем x секунд и если линия не находиться в режиме удержания (hold).
rtpholdtimeout=300 Прерывать вызов, если нет активности RTP медиапотока более чем x секунд, в режиме удержания линии (hold) (значение должно быть больше, чем rtptimeout)
rtpkeepalive=secs как часто сервер должен посылать сообщения проверки активности установленного соединения для поддержания NAT открытым. По умолчанию отключено
SIP Session-Timers (RFC 4028)
SIP Session-Timers предоставляют end-to-end keep-alive mechanism для активных SIP сессий. Этот механизм определяет и исправляет SIP каналы которые не были закрыты нормальным способом. Session-Timers настраиваются как глобально так и для пользователя.
session-timers
originate : запрос и запуск session-timers(всегда)
accept : запуск session-timers только по запросу другого UA(по умолчанию)
refuse : не запускать session timers
session-expires – Max интервал обновления сессии. По умолчанию 1800с.
session-minse – Min интервал обновления сессии. По умолчанию 90 secs.
session-refresher – кто обновляет сессию (uac|uas). по умолчанию ‘uas’.
SIP DEBUGGING
sipdebug = yes вкл дебаг сипа по умолчанию с момента открытия канала
recordhistory=yes записывает историю сипа по умолчанию (sip history)
dumphistory=yes Сохранять SIP историю(в DEBUG канал) в конце диалога
STATUS NOTIFICATIONS (SUBSCRIPTIONS)
вы можете получать статус доб номера с приоритетом “hint”
chan_sip поддерживает 2 формата информирования : dialog-info and SIMPLE
вы получите более детальный отчет (busy etc) если включен счетчик звонков на устройстве
если установить busylevel, мы получим сигнал ЗАНЯТО когда к-во звонков достигнет порога busylevel
для очередей вам потребуется такой уровень в отчете о состоянии, даже если вы используете SIP subscriptions.
очереди и менеджер используют тот же интерфейс для чтения информации о состоянии
ВНИМАНИЕ: Подписки не работают если у вас реалтайм диалплан и используется switch в реальном времени
allowsubscribe=no отключает подписки на информирование о состоянии доб номера
subscribecontext = default устанавливает контекст для SUBSCRIBE запросов полезно для ограничения подписок на local номера также устанавливается и для пользователя.
notifyringing = no должен ли Asterisk уведомлять подписчиков о состоянии RINGING когда установлен другой вызов.
notifyhold = yes должен ли Asterisk уведомлять подписчиков о состоянии HOLD, вкл notifyringing и notifyhold увеличит к-во транзакция в ДБ если исп реалтайм
notifycid = yes контролирует передается ли инфо о CID c dialog-info+xml сообщениями (snom телефоны). эта функция будет корректно работать только при входящем звонке использующим то же расширение и контекст, которые используются как hint для вызываемого номера. не будет работать если используется subscribecontext!=context, также огр для пользователя, если экстеншен звонит(несколько входящих) только один будет использоваться как источник CID. Укажите ‘ignore-context’ для игнора вызываемого контекста при просмотре канала звонящего.
callcounter = yes вкл счетчик звонков.
T.38 FAX SUPPORT
t38pt_udptl
yes – Поддержка T.38 с FEC коррекцией ошибок.
yes,fec – Поддержка T.38 с FEC коррекцией ошибок.
yes,redundancy – Включает T.38 с коррекцией ошибок с избыточностью.
yes,none – Включает T.38 без коррекции ошибок.
yes,fec,maxdatagram=400 Для некоторых шлюзов нужно задавать значение T38FaxMaxDatagram
faxdetect Заставляет астер перепрыгнуть в экстеншен ‘fax’. по умолчанию no
yes – включает CNG и T.38 определение
cng – включает CNG определение
t38 – включает T.38 определение
OUTBOUND SIP REGISTRATIONS
Asterisk как клиент
Синтаксис:
register => [peer?][transport://]user[@domain][:secret[:authuser]]@host[:port][/extension][~expiry]
domain это или
-domain в DNS
-host name в DNS
-имя пира определенного ниже или в реалтайме
домен это где вы зарегистрировали свое имя, ваше SIP uri username@domain
если экстеншен не задан используется ‘s’. для приема звонков экстеншен должен быть определен в extensions.conf
такой же результат достигается добавлением “callbackextension” в секцию пира.
это эквивалентно строке в general:
register => username:secret@host/callbackextension
и читабельнее потому что все собрано в одном месте (“port” игнорируется – должны пофиксить).
Строка register= не означает что мы будем обрабатывать входящий звонок любым другим способом, чем описано выше. Если хотите контролировать куда попадет вызов в вашем диалплане, в какой контекст, мы должны создать пир с хостнеймом сервера провайдера. если у провайдера несколько серверов, вы должны создать пир для каждого.
С 1.6.2, “user” в строке register содержит port number. разделитель : также он используется между “secret” и “authuser”. нужно явно задавать “secret” и “authuser” даже если они пусты
Примеры:
register => 1234:[email protected] звонки пойдут в экстеншен ‘s’
register => 2345:password@sip_proxy/1234 Юзер 2345 на провайдере ‘sip_proxy’. звонки от него пойдут в локальный экстеншен 1234 в extensions.conf, контекст default, если вы не создадите секцию [sip_proxy] ниже, и не укажите контекст
подсказка 1: не следует задавать hostname в sip.conf как [provider.com]
подсказка 2: используйте входящие и исходящие секции для провайдера вместо одной записи типа friend
register => 3456@mydomain:5082::@mysipprovider.com указаны дополнительные поля authuser и secret потому что у нас задан специфический порт
register => tls://username:[email protected]
‘transport’ по умолчанию ‘udp’ но можно поставить ‘tcp’ или ‘tls’.
используйте ‘udp://’ явно если username содержит ‘/’ (‘user/name’).
registertimeout=20 повторять попытки зарегистрироваться каждые 20 секунд
registerattempts=10 к-во попыток зарегистрироваться 0-повторять бесконечно
OUTBOUND MWI SUBSCRIPTIONS
получать MWI с другого SIP сервера и хранить локально для других телефонов только UDP
Формат регистрации:
mwi => user[:secret[:authuser]]@host[:port]/mailbox
Примеры:
mwi => 1234:[email protected]/1234
mwi => 1234:[email protected]:6969/1234
mwi => 1234:password:[email protected]/1234
mwi => 1234:password:[email protected]:6969/1234
MWI будут хранится в ящике 1234 контекста SIP_Remote. Другие телефоны смогут получить доступ по:
mailbox=1234@SIP_Remote
NAT SUPPORT
Геморой, но кое что сделать можно
Обязательно задавайте локалнет!
localnet указывает какие ип локальные и для них ненужно применять трансляцию
localnet=192.168.0.0/255.255.0.0 RFC 1918 addresses
localnet=10.0.0.0/255.0.0.0 Also RFC1918
localnet=172.16.0.0/12 Another RFC1918 with CIDR notation
localnet=169.254.0.0/255.255.0.0 Zero conf local network
externtcpport = 9900 Внешний tcp порт, когда Asterisk за статическим NAT или PAT.
externtlsport = 12600 Внешний tls порт, когда Asterisk за статическим NAT или PAT. по дефолту 5061
externaddr = hostname[:port]” определяет ип и порт для сообщений SIP и SDP
externaddr = 12.34.56.78
externhost = hostname[:port]” подобно “externaddr” за исключением того что hostname проверяется каждые externrefresh секунд (по умолчанию 10s). удобно при динамическом IP. Но лучше не использовать, проблемы с днс делают данную схему нерабочей!!
Пример:
externhost=foo.dyndns.net -периодическое обновление
externrefresh=180 -период обновлений
все эти механизмы работают для SIP сокета. поэтому не забывайте пробрасывать порты для данных. Также есть параметры для решения проблемы с натом для входящих соединений в зависимости от параметров ‘nat= ‘ , Asterisk может переписать address/port инфо в SIP/SDP сообщениях, и использовать адрес отправителя вместо реального адреса, полезно только если внешний трафик может к нам добраться.
nat
no по умолчанию. не использовать NAT.
force_rport Притворяется что установлен rport параметр, даже если его не было.
comedia Отправляет медиа данные на порт с которого астериск их получил, а не туда как указано в SDP.
auto_force_rport Устанавливает force_rport Если астериск находит НАТ, по умолчанию
auto_comedia Устанавливает comedia Если астериск находит NAT
Параметры НАТ могут быть совмещены. Например могут быть одновременно установлены force_rport и comedia nat=force_rport,comedia. Если один из пунктов ‘no’, астер проигнорирует остальные опции. Если один из пунктов “auto” используется, а второй параметр не-авто, то не-авто параметр будет проигнорирован.
RFC 3581 определяет ‘rport’ параметр, позволяет клиенту запрашивать у астера, чтобы тот отсылал SIP ответы к ип и порту, от которого пришел запрос вместо address/port в поле Via хидера. Полезно если клиент знает что он за НАТом и поэтому не может предположить с какого address/port был отправлен запрос. Asterisk будет всегда учитывать параметр ‘rport’ если он будет отправлен.
Нормальное поведение без RFC 3581
Как работает с RFC 3581
force_rport заставляет Asterisk всегда отправлять ответ на address/port с которого пришел запрос даже если другая сторона не поддерживает ‘rport’.
comedia RTP handling относится к технике отправки RTP к порту, другой конечной точки RTP из которой прибыл, и означает ‘connection-oriented media’. соединяет точки которые находятся за натом, так как те порты которые они сообщают серверу для передачи RTP могут не соответствовать портам с ближайшей стороны ната.
Астериск всегда использует ‘symmetric RTP'(RFC 4961) всегда отсылает RTP пакеты с того же порта с которого рассчитывает их получить.
media_address = 172.16.42.1 IP используемый (audio, video, и text) в SDP также может быть переписан используя media_address только для [general]
Очень рекомендуется задавать параметры НАТ только в GENERAL секции.
Если nat=force_rport в одной секции и nat=no в другой тогда действующие пиры с настройками отличными от настроек в секции GENERAL будут доступны.
Используя модуль res_stun_monitor, Asterisk может детектировать когда ожидаемый внешний адресс изменился. Если stun_monitor установлен и настроен, chan_sip обновит все исходящие регистрации если монитор найдет какие либо изменения сети. По умолчанию включено. Но работает только если res_stun_monitor настроен. Если res_stun_monitor включен и вы не хотите обновлять внешние реги то отключите опцию
subscribe_network_change_event = yes ; включено по дефолту
ICE/STUN/TURN может быть включено глобально или для пира(используется опция icesupport)
icesupport = no – по умолчанию выключено.
MEDIA HANDLING
По умолчанию астериск пытается перенаправить(re-invite) трафик по оптимальному пути, если нет необходимости быть транзитной точкой при передаче трафик, астериск переключит поток. не очень хорошо работает в случае если астериск вне ната, а клиенты за натом, в этом случае нужно directmedia=nonat.
directmedia=yes по умолчанию пускать трафик по оптимальному пути также полезно при прямом RTP во время установки звонка (новая функция в 1.4 – установка звокна напрямую между двумя точками вместо посылки re-INVITE). полностью не отключает reINVITE операции. заставялет Asterisk генерировать reINVITEs для особых целей установки прямой связи. если reINVITE нужен для переключения медиа потока в неактивное состояние (on hold) или T.38, будет до сих пор использоваться, несмотря на эту опцию. прямой T.38 не поддерживается.
nonat позволяет перенаправление трафика только когда отправитель не за натом
update использует UPDATE для перенаправления трафика, вместо INVITE. комбинация ‘directmedia=update,nonat’. = ‘yes’.
outgoing Когда отправляем directmedia реинвайты, не отсылать сразу reinvite на входящее плечо звонка. Полезно когда соединяемся с другим SIP UA который отправляет немедленные direct media reinvites после установления звонка. Позволяет предотвратить потенциальные ‘блики’ Установка этой опции предполагает ‘yes’. Например при прохождении звонка через несколько серверов в точку назначения Вики
directrtpsetup=yes новая экспериментальная прямая установка RTP. прямые звонки без реинвайтов. не будет работать для видео и в случае если получатель отправляет RTP информацию и fmtp заголовки как 200 OK которые не совпадают с отправленными INVITE. также не будет работать если устройства за натом.
directmediadeny=0.0.0.0/0 создает ACL доступа по directmedia
directmediapermit=172.16.0.0/16
directmediaacl=acl_example Использует именованный ACL из acl.conf
ignoresdpversion=yes Астериск будет учитывать номер версии в SDP пакетах, и будет модифицировать SDP сессию если номер версии измениться. Заставляет астер, игнорировать номер версии SDP сессии, и обрабатывать все SDP данные как новые. Эта опция позволяет взаимодействовать с устройствами, которые имеют нестандартную реализацию SDP(наблюдалось в Microsoft OCS). по умолчанию выкл.
sdpsession=Asterisk PBX изменяет имя SDP сессии, (s=)
sdpowner=root изменяет поле пользователя в SDP owner string, (o=) НЕ СОДЕРЖИТ ПРОБЕЛОВ
encryption=no Можно ли использовать SRTP шифрованную передачу (и только SRTP) для исходящих звонков
Звонок завершится неудачей с HANGUPCAUSE=58 если пир не поддерживает SRTP.
encryption_taglen=80 Устанавливает длину auth tag выставленную в INVITE (32/80) по умолчанию 80
avpf=yes Включение взаимодействия медиа-потоков с использованием AVPF RTP профиля. Это заставит все предложения и ответы использованать AVPF (или SAVPF). Эта опция может быть указана как глобально так и для пира.
REALTIME SUPPORT
rtcachefriends=yes Кешировать пиры в памяти,после их соединения с сервером(регистрация, звонок)
rtsavesysname=yes Когда пир зарегался, сохранять systemname(который задан в asterisk.conf) в поле regserver. Удобно когда храним пиры с нескольких серверов в одной базе.
rtupdate=yes Отсылает информацию такую как IP адрес, порт, рег период, имя пользователя в БД
rtautoclear=yes (знач в секундах) Автоматически завершать действие регистрации соединений типа friend, созданных «на лету», по тому же графику, как если бы они зарегистрировались в обычном режиме. Если задано значение yes, по истечении срока действия регистрации friend исчезнет из конфигурации до следующей регистрации. Если задано целое значение, регистрация будет действительна в течение этого количества секунд, а не в течение обычного срока действия регистрации
ignoreregexpire=yes Если включена пир не удаляется из памяти, после истечения регистрации.
SIP DOMAIN SUPPORT
Входящие INVITE и REFER могут сравниваться со списком разрешенных доменов, каждый из которых может совершать вызовы в заданном контексте. По умолчанию все домены разрешены, и направляют в дефольный контекст или контекст связанный с данным пиром. REGISTER к нелокальным доменам будет автоматически запрещен если настроен список доменов.
Синтаксис:
domain=
Пример:
domain=myasterisk.dom
domain=customer.com,customer-context
autodomain=yes Asterisk будет добавлять имя локального хоста и локальные IP-адреса в список доменов
allowexternaldomains=no запрет запросов для доменов не обслуживаемых этим сервером
domain=mydomain.tld,mydomain-incoming добавляем домен и конфигурируем входящий контекст для внешних вызовов в этом домене
domain=1.2.3.4 добавляет IP адреса как локальный домен можно использовать несколько опций “domain”
fromdomain=mydomain.tld Установка домена по умолчанию в поле From: SIP сообщений, при работе в качестве SIP ua (клиента).
Advice of Charge CONFIGURATION
snom_aoc_enabled = yes вкл отправку AOC-D и AOC-E к snom точкам.
JITTER BUFFER CONFIGURATION
jbenable = yes Активирует использование RTP-буфера, компенсирующего задержки, на принимающей стороне SIP-канала. Значение по умолчанию – no. Активированный буфер, компенсирующий задержки, будет использоваться, только если отправляющая сторона создает, а принимающая сторона не допускает джиттер. SIP-канал допускает джиттер; таким образом, компенсирующий задержки буфер на принимающей стороне будет использоваться, только если он активирован и задано его принудительное использование.
jbforce = no Принудительное использование RTP-буфера, компенсирующего задержки, на принимающей стороне SIP-канала. Значение по умолчанию – no
jbmaxsize = 200 Задает максимальный размер буфера, в мс
jbresyncthreshold = 1000 Переходит на временные метки кадров, из-за которых произошла рассинхронизация буфера, компенсирующего задержки. Полезно для улучшения качества голоса, переданного со скачкообразными, прерывистыми временными метками, которые обычно поступают с экзотических устройств и программ.
jbimpl = fixed Эта настройка используется для задания типа используемого буфера, компенсирующего задержки: fixed (фиксированный) или adaptive (адаптивный). Если используется буфер fixed, его размер всегда будет равен тому, который определен параметром jbmaxsize. Если задан буфер adaptive, его размер будет меняться вплоть до максимального, определенного параметром jbmaxsize. Значение по умолчанию fixed.
jbtargetextra = 40 Работает только если ‘jbimpl = adaptive’ . число мс которое новый буфер добавит к своему значению, те без изменения новый буфер получит размер +40мс увеличение этого значения может помочь если ваша сеть имеет низкий джиттер, но иногда есть скачки.
jblog = no Определяет, активирована или нет запись в журнал кадров буфера
[authentication]
Глобальные учетные данные для исходящих звонков, перезаписывает данные заданные в peer/register
Синтакс:
auth =
auth =
Пример:
auth=mark:[email protected]
Также можно добавить auth= к [peer] определению
Peer auth= перезаписывает все данные заданные выше для этого направления.
Настройки доступные для устройств
remotesecret для исходящей регистрации на других станциях, если не задан то используется secret
secret для входящих запросов регистрации.
context Контекст плана набора, в который попадают вызовы, поступающие от данного клиента.
callingpres Режим публикации CallerId, значения в файле doc/callingpres.txt из дистрибутива. http://asterisk.ru/knowledgebase/Asterisk+cmd+callingpres
permit Ограничения по IP адресу и IP сети для клиента.
deny Ограничения по IP адресу и IP сети для клиента.
md5secret MD5-Hash строки: “
transport какой протокол будет использоваться в качестве транспорта.
dtmfmode Как клиент обрабатывает сигнализацию DMTF
directmedia как передавать медиаданные
nat настройки НАТа
callgroup Определяет группу вызовов (call group) для вызовов через это устройство.
pickupgroup Группа для перехвата вызовов
language Код языка, где определяется язык приветствий и специфичные для каждой страны настройки сигналов телефонов.
allow настройка разрешенных кодеков
disallow настройка разрешенных кодеков
insecure Определяет как обрабатывать соединения с пирами. По-умолчанию значение ‘no’ (аутентификация для всех соединений включена).
port: игнорировать номер порта, с которого пришла аутентификация
invite: не требовать начальное сообщение INVITE для аутентификации
port,invite: не требовать начальное сообщение INVITE для аутентификации и игнорировать порт, с которого пришел запрос
trustrpid “yes”, если можно доверять полученному от SIP клиента Remote-Party-ID.
progressinband yes/no/never, по умолчанию: never. Должен ли asterisk генерировать самостоятельно звуковой сигнал вызова для вызывающего абонента (in-band ringing). Используйте значение ‘never’, чтобы никогда не производилась генерация этого сигнала, даже в случае, когда некоторые странные устройства не могут генерировать его самостоятельно.
promiscredir yes/no, по умолчанию: no. Если установлено в значение “yes”, то этим мы разрешаем отправлять SIP сообщения с кодом 302 или сообщения для переадресации вызова, для SIP клиентов с не локальными IP адресами. Стоит отметить, что поведение promiscredir при совершении переадресации вызова, который производиться в локальной системе, может привести к зацикливанию вызова, т.к. Asterisk не умеет обрабатывать “hairpin” вызовы.
useclientcode yes, тогда вызывающий в CDR будет заменен на то что указано в X-ClientCode SIP хидера.
accountcode Пользователь может быть ассоциирован с неким кодом доступа (accountcode). Используется для билинга.
setvar В значении указывается пара “переменная=значение” для переменной канала, при вызовах с данного девайса.
callerid Caller ID символьная составляющая.
amaflags Категория для CDR записей. Можно выбрать: default, omit, billing, documentation
callcounter вкл счетчик звонков.
busylevel К-во одновременных звонков при котором считается что абонент занят.
allowoverlap yes/no, по умолчанию: yes. Установка в “no” запрещает поддержку “overlap dialing”.
allowsubscribe yes/no, по умолчанию: no. Установка в “no” запрещает отслеживание состояние (subscriptions) данного клиента.
allowtransfer Разрешить (yes) или запретить (no) перевод вызова для этого пользователя.
ignoresdpversion
subscribecontext Указывается название контекста, в котором будут обрабатываться SIP запросы SUBSCRIBE.
template вроде как анахронизм
videosupport поддержка видео
maxcallbitrate максимальный битрейт видеосвязи
rfc2833compensate Значения: yes/no, по умолчанию: no. Включение компенсации передачи DTMF сигналов с других серверов asterisk версии до 1.4.*. В данных случаях, Вы должны включить эту функцию или прием DTMF сигналов не будет работать должным образом.
mailbox Екстеншен голосового ящика (для работы индикатора новых сообщений)
session-timers См в [general]
session-expires См в [general]
session-minse См в [general]
session-refresher См в [general]
t38pt_usertpsource для использования адреса источника RTP в качестве IP адреса назначения для UDPTL. Когда удалённая сторона правильно сконфигирирована (проброшены порты в NAT) UDPTL нормально дойдёт для адресата.
regexten Название екстеншена, для режима автоматического создания екстеншена при его регистрации. Только для типа “peer”.
fromdomain Установка домена по умолчанию в поле From:, SIP сообщений, когда происходит вызов с использованием этой записи.
fromuser Указываем имя пользователя для поля “from”, когда происходит вызов с использованием этой записи.
host Как нам найти нашего клиента – IP адрес или имя хоста. Если Вам нужно, чтоб телефон самостоятельно зарегистрировался, используйте значение dynamic вместо IP адреса или имени хоста.
port SIP порт клиента.
qualify проверка доступности хоста
qualifyfreq как часто проверять доступность хоста (в секундах).
keepalive Интервал с каким должны отсылаться keepalive пакеты yes (60 seconds), no, или к-во секунд.
defaultip IP адрес клиента по умолчанию, когда host= определен, как DYNAMIC. Используется, если клиент еще не зарегистрировался, при необходимости его вызова.
defaultuser Имя пользователя которое используется когда вы на него звоните ДО регистрации. Обычно его не указывают.
rtptimeout Прерывать вызов, если нет активности RTP медиапотока более чем x секунд и если линия не находиться в режиме удержания (hold).
rtpholdtimeout Прерывать вызов, если нет активности RTP медиапотока более чем x секунд, в режиме удержания линии (hold) (значение должно быть больше, чем rtptimeout)
sendrpid
yes -астер должен отправлять поле Remote-party-id
pai использует P-asserted-identify в хедере для идентиф. удаленной стороны
rpid – использует “Remote-Party-ID” в хидере
outboundproxy Адрес прокси сервера для исходящих вызовов (только для типа peer).
callbackextension = {SIP ID} В качестве callbackextension может быть указан любой номер, на который должны быть адресованы входящие звонки. Этот номер должен присутствовать в dialplan’е (файл extensions.conf) в указанном для этого транка контексте. Значение параметра callbackextension будет отображаться в Личном Кабинете провайдера в записи о подключенном (зарегистрированном) оборудовании. Вместо этого может быть использован и старый синтаксис с register= в секции [general] файла sip.conf.
timert1 Таймер T1 по умолчанию 500 ms или измеренное round-trip time для пира(qualify=yes).
timerb Таймер для установки вызова. если ответа от устройства не поступило, вызов автоматически разрывается по умолчанию 64*timert1
contactpermit создает ACL разрешающий регаться только определенным IP
contactdeny создает ACL запрещающий регаться только определенным IP
contactacl=named_acl_example используем именованные ACL определенные в acl.conf
directmediapermit создает ACL доступа по directmedia
directmediadeny создает ACL доступа по directmedia
directmediaacl Использует именованный ACL из acl.conf
unsolicited_mailbox=4015552299 Если удаленный SIP server отправляет нежелательное MWI NOTIFY сообщение новое или старое к-во сообщений будет храниться в виртуальном ящике. Может быть использовано любыми устройствами поддерживающими MWI с описанием ящика вида:
use_q850_reason станавливать или использовать reason header
maxforwards Установка SIP Max-Forwards: хидер (антипетли)
encryption Можно ли использовать SRTP шифрованную передачу
description описание пира, будет отображаться в консольке
cid_number Номерная часть поля CallerID.
namedcallgroup Именованные callgroup(позволяет обойти ограничение на 64 группы)
namedpickupgroup – Именованные pickupgroup(позволяет обойти ограничение на 64 группы)
subscribemwi=yes Отсылает оповещение о почте, если телефон подписан на них
tonezone=ru Устанавливать тонзону для каждого устройства
dtlsenable Смотри ниже.
dtlsverify Смотри ниже.
dtlsrekey Смотри ниже.
dtlscertfile Смотри ниже.
dtlsprivatekey Смотри ниже.
dtlscipher Смотри ниже.
dtlscafile Смотри ниже.
dtlscapath Смотри ниже.
dtlssetup Смотри ниже.
DTLS-SRTP (ШИФРОВАНИЕ)
DTLS-SRTP работает если нижележащий RTP поддерживает его.
dtlsenable = yes Включает поддержку DTLS-SRTP
dtlsverify = yes Проверяет на валидность сертифифкат пира
dtlsrekey = 60 Интервал переустановки сессии TLS, и повторного создания ключей SRTP сессии. Если не задано или 0, то повторное создание ключей отключено.
dtlscertfile = file путь к файлу сертификата
dtlsprivatekey = file путь к приватному ключу
dtlscipher =
http://www.openssl.org/docs/apps/ciphers.html#CIPHER_STRINGS
dtlscafile = file путь к СА файлу сертификата
dtlscapath = path путь к директории СА файла
dtlssetup = actpass Будем ли мы принимать соединения, создавать соединения или и то и другое. active – подключаемся к удаленной стороне,
passive – только принимать
actpass – и то и другое. Это значение будет использовано в исходящих SDP если предложим и для входящих SDP предложений когда удаленная сторона отправляет actpass.
Был непонятный момент с группами перехвата:
[user1] callgroup=1 pickupgroup=2 [user2] callgroup=2 pickupgroup=1 [user3] callgroup=3 pickupgroup=1,2
user1 может перехватить звонок, идущий на user2
user2 — // — user1
user3 — // — user1 и user2