Техническая база знаний
SIP
Проверка доступности удалённых узлов
За проверку доступности отвечает параметр qualify
в описании конфигурации канала или абонентской учетной записи.
Сервер проверяет доступность абонентов (и удалённых узлов связи) периодической отправкой SIP OPTIONS пакетов на IP и порт, с которого была получена регистрация или которые были указаны в описании канала связи с удалённым узлом. Это UDP пакет, а т.к. UDP транспорт является транспортом без подтверждения о доставке, то любой ответ на уровне приложения, т.е. протокола SIP будет являться корректным ответом, сообщающим о доступности абонента.
Например, отправили SIP OPTIONS, а в ответ пришло SIP Not found или SIP Unauthorized - не важно, сервер телефонии понимает, что с ним общаются на удалённой стороне по ранее известному ему IP адресу и по ранее известному для него порту, а значит удалённый узел доступен.
Это также позволяет поддерживать NAT сессию на граничных маршрутизаторах в корпоративных сетях, чтобы не получилось так, что абоненту был отправлен звонок, т.е. отправлен пакет SIP INVITE, а NAT сессия на маршрутизаторе оказалась закрыта, пакет отброшен, не дошел до абонента, софтфон не звонил, а сервер телефонии шлёт пакеты и ждёт хотя бы какого-то ответа.
Параметры протокола
Наименование | По-умолчанию | Описание |
---|---|---|
RTP Timeout | 60 | Устанавливает ограничение по времени ожидания активности потока RTP в секундах. Если нет активности потока RTP (т.е. не передаются пакеты в течении указанного количества секунд), соединение разрывается. |
Timer B | 32000 | Устанавливает ограничение по времени ожидания ответа от вызываемой стороны при инициализации вызова (INVITE) в миллисекундах. Если не был получен ответ на отправленный пакет INVITE в течении указанного времени, попытка вызова узла прекращается, канал имеет статус CONGESTION. |
Fromuser | asterisk | Указывает значение, которое будет подставляться в качестве "номера" абонента А (вызывающего), при вызове удалённого узла. |
Defaultuser | asterisk | Указывает имя пользователя, которое будет использоваться при ответе сервером телефонии на запрос авторизации от оператора связи. |
Параметры канала связи
Если параметр имеет пустое значение, то его не нужно писать в конфигурационный файл.
Наименование | Значения | Описание |
---|---|---|
[name] | не может быть пустым | Имя канала. Также используется для аутентификации входящих запросов, соответствует имени пользователя при проверке аутентификации удалённого узла. |
type | "peer", "friend", не может быть пустым | Тип подключаемого канала.Устанавливается в зависимости от значения параметра `insecure`. В частности, если параметр `insecure` принимает значение "no", то данный параметр принимает значение "friend". В других случаях данный параметр принимает значение "peer". |
host | "Домен", или адрес удалённого SIP узла, для которого создаётся канал, задаётся пользователем. Не может быть пустым. | |
port | Порт, на котором удалённый узел слушает входящие подключения. Не может быть пустым. Может быть в диапазоне 1000 - 65536 | |
defaultuser | "Имя пользователя", используемое для аутентификации на удалённом узле. Задаётся пользователем. Может быть пустым. | |
secret | "Пароль" используемый для аутентификации на удалённом узле. Задаётся пользователем. Может быть пустым. | |
remotesecret | Пароль для регистрации на удалённом узле. Принимает значение равное значению параметра secret. Устанавливается только в том случае, если пользователь поставил галку "Регистрироваться в домене". | |
callbackextension | Номер, куда должны поступать входящие вызовы. Задаётся пользователем. Устанавливается только в том случае, если пользователь поставил галку "Регистрироваться в домене". | |
insecure | Параметр проверки аутентификации входящего запроса на подключение. Устанавливается пользователем. Может принимать значение "port,invite", "no", "port", "invite". Автоматически принимает значение "no", если параметру host устанавлно значенеи "dynamic" | |
fromuser | Подстановка "номера" в адресе вызывающего при исходящем вызове. Задаётся пользователем. Может быть пустым. | |
fromdomain | подстановка "домена" в адресе вызывающего при исходящем вызове. Задаётся пользователем. Может быть пустым. | |
disallow | Прописывается для всех каналов перед списком разрешенных кодеков | |
allow | Строка из списка разрешенных голосовых кодеков, по одной строке для каждого кодека. Значение не может быть пустым. | |
dtmfmode | Метод сигнализации DTMF, не может быть пустым, задаётся пользователем. | |
context | Часть номерного плана (контекст), в котором обрабатываются входящие вызовы по данному каналу. Задаётся пользователем, не может быть пустым. | |
nat | "yes", "no", "force_rport", "comedia", "auto_force_rport", "auto_comedia", "force_rport,comedia" | Параметр NAT, указывает, является ли соединение между узлами за NAT. Устанавливается пользователем, не может быть пустым.
|
t38pt_udptl | "yes", "no" | Параметр "Факсы в Т.38", принимает значения yes или no. Устанавливается пользователем, не может быть пустым. |
Отладка в asterisk
Команда CLI | Назначение |
---|---|
sip set debug ip 192.168.1.5 | Включить в CLI отладку по SIP протоколу для IP 192.168.1.5. После выполнения этой команды в CLI будут отображаться пакеты, которыми обменивается твой сервер с 192.168.1.5 по SIP протоколу (на уровне приложения, конечно, а не ядра системы, т.е. те пакеты, которые были обработаны сервисом asterisk). |
sip set debug off | Отключить отладку по протоколу SIP. |
При входящем звонке в CLI отображается множество информации, простыня будет начинаться со строк:
<--- SIP read from UDP:192.168.1.5:5060 ---> INVITE sip:198@192.168.1.79:5060 SIP/2.0
Сообщение "SIP read from" пишет asterisk о том, что получил входящий пакет от 192.168.1.5 Начиная со строки INVITE идёт описание самого полученного пакета.
Пакет INVITE говорит о том, что инициируется звонок. По заголовкам можно понять откуда и куда (From:, To:) - всё довольно читаемо, очень схоже с HTTP заголовками.
Всё что идёт после строк пакета INVITE
Content-Type: application/sdp Content-Length: 261
называется SDP информацией (session description protocol), тут отображены сведения куда и на какой порт нужно слать голосовой трафик, по каким кодекам, какой длительностью голос в одном пакете и т.п. Нам пока это не интересно.
Итересно то, что после пакета INVITE, который заканчивается строкой <-------------> идёт процесс парсинга астериском полученных данных. В частности, сразу после окончания INVITE пакета Asterisk пишет, какому описанному каналу он определил этот входящий вызов
Found peer 'trunk1' for '104' from 192.168.1.5:5060
А затем и пишет то, что он будет искать и где по входящему звонку:
Looking for 198 in incoming (domain 192.168.1.79)
Нужна строка "Found peer", остальное не важно.
Задаётся пользователем, не может быть пустым.