Модуль SIP
В SIP-модуле CommuniGate Pro реализован протокол SIP, работающий в сетях IP.
Модуль используется для приёма запросов с сигналами от удалённых участников и отправки сигналов удалённым участникам.
SIP протокол не включает в себя протоколы, необходимые для фактической передачи данных (протоколы передачи медиа). Вместо этого протокол SIP позволяет всем участвующим сторонам находить друг друга в сети, договариваться об использовании протоколов передачи медиа и о параметрах этих протоколов, устанавливать интерактивные сессии реального времени и управлять этими сессиями: добавлять новых участников, закрывать сессии, изменять параметры сессии и т.д.
Протокол установления сессии (SIP)
В модуле SIP CommuniGate Pro реализована функциональность SIP-протокола. Модуль использует TCP и UDP приёмники для приёма SIP-запросов и ответов на них через эти сетевые протоколы. Он также отправляет пакеты с запросами и получает ответы через сетевые протоколы TCP и UDP.
Модуль SIP разбирает все получаемые SIP-пакеты и использует субкомпоненты модуля для обработки разобранных пакетов. Пакеты с запросами передаются в субкомпонент SIP-сервер, новой или существующей транзакции SIP-сервера.
Компонент “SIP-сервер” использует модуль Signal для обработки запроса. Ответы, сгенерированные модулем Signal, поступают в транзакцию SIP-сервера, и SIP-сервер отправляет их обратно источнику SIP-запроса.
Модуль Signal может отправлять запросы на удалённое SIP-устройство или на удалённый SIP-сервер. Модуль использует субкомпонент SIP-клиент для создания транзакции SIP-клиента. Эта транзакция используется для отправки SIP-запроса через Интернет протокол и обработки посланного обратно ответа.
Пакеты с SIP-запросом, получаемые SIP-модулем, поступают субкомпоненту SIP-сервер, а пакеты с SIP-ответами поступают субкомпоненту SIP-клиент; из этого правила есть два исключения:
если не может быть найдено никакой транзакции для пакета с ответом, то пакет ретранслируется «вверх» инициатору звонка SIP-модулем самостоятельно, без использования модуля Signal.
если не может быть найдено никакой транзакции сервера для запроса ACK, то для дальнейшего ретранслирования от инициатора звонка «вниз» создаётся транзакция SIP-клиента.
Модуль SIP CommuniGate Pro поддерживает коммуникации через UDP и TCP, а также безопасные (TLS) коммуникации через протокол TCP.
SIP-модуль CommuniGate Pro поддерживает технологию прохождения ближнего и дальнего NAT, что делает возможным осуществление SIP коммуникаций как для больших корпораций со множеством внутренних локальных сетей, так и для домашних пользователей, выходящих в Интернет через «простые» NAT-устройства.
Схема установления сессии, описанная выше, работает корректно только если обе стороны осуществляют коммуникацию напрямую. Если между сторонами имеется межсетевой экран или NAT-устройство, то прямое взаимодействие между ними невозможно. В этом случае, SIP-модуль CommuniGate Pro осуществляет медиа проксирование, ретранслируя не только запросы и ответы протокола SIP, но также и медиаданные.
Настройки транспорта SIP
Чтобы настроить параметры SIP-модуля, используйте веб-интерфейс администратора. Откройте в разделе “установки” страницу “Real-Time”, затем откройте страницу “SIP”.
Нажмите на ссылку “транспорт” и откройте страницу с настройками транспорта SIP.
Транспорт
На панели транспортный уровень вы можете настроить опции уровня сети для приёма SIP пакетов:
Уровень журнала
Используйте эту настройку для указания, какую информацию о SIP пакетах и транспортном уровне SIP-модуль должен сохранять в журнале работы сервера. Обычно используется уровень “сбои” (только неразрешимые проблемы), уровень “основные” (отчёты об установлении сессий) или уровень “проблемы” (сбои, отчёты об установлении сессий и не фатальные ошибки).
В случае, если в работе SIP-модуля возникают проблемы, возможно, целесообразным будет увеличить детализацию до уровня “подробности” или “всё”: в этом случае в журнал работы сервера будут записываться содержимое пакетов и другие подробности. Когда проблема решена, верните настройку “уровень журнала” в её обычное значение, иначе ссистемный журнал будет очень быстро увеличивать свой размер.
Записи транспортного уровня модуля SIP в журнале работы сервера имеют пометку “SIPDATA”.
Общие SIP записи имеют пометку SIP.
Полные пакеты запросов в звонках
Когда эта настройка включена, то все запросы и ответы, относящиеся к звонкам (INVITE, BYE и так далее) пишутся в журнал полностью, как если бы уровень журнала был установлен в значение “всё”.
UDP
Чтобы настроить транспортный уровень UDP, нажмите на ссылку “UDP приёмник”. Откроется страница “UDP приёмника”. По умолчанию, номер порта SIP UDP имеет значение 5060.
TCP
Чтобы настроить транспортный уровень TCP, нажмите на ссылку “TCP приёмник”. Откроется страница “TCP приёмника”. Вы можете задать как безопасные, так и незащищённые порты TCP. По умолчанию, незащищённый номер порта SIP TCP имеет значение 5060, а безопасный SIP TLS порт — 5061.
Каналы
Используйте эту опцию для указания максимального числа коммуникационных каналов TCP, которые может открывать модуль. При превышении этого числа, модуль будет отвергать все новые входящие TCP соединения.
Тайм-аут по неактивности
Используйте эту опцию, чтобы указать, когда SIP-модуль должен закрывать коммуникационный канал TCP при отсутствии активности в этом канале. Это помогает сэкономить ресурсы, используемые для обслуживания коммуникационных каналов TCP на сильно загруженных серверах. С другой стороны, некоторые SIP-клиенты могут работать неправильно в случае, если сервер закрывает TCP-соединение по тайм-ауту.
Предварительные обработчики
Если эта опция установлена в ненулевое значение, то получаемые пакеты не будут обрабатываться немедленно: они помещаются в специальную очередь, и получающая нить немедленно становится готовой для получения новых пакетов. Эта опция задаёт число дополнительных нитей, который берут пакеты из очереди и обрабатывают их, отправляя из в SIP-транзакции сервер или клиент.
Ограничение на ждущих обработки
Если пакеты не обрабатываются немедленно, а помещаются сначала в специальную очередь (смотрите выше), то эта опция ограничивает размер этой очереди. При достижении числа пакетов в очереди заданного лимита, новые пакеты игнорируются. В этой ситуации, возможно, вам потребуется увеличить число предварительных обработчиков.
Использовать короткие имена полей
Если эта опция включена, то все SIP-пакеты (запросы клиента и ответы сервера) сервер будет генерировать с использованием альтернативных (односимвольных) имён полей заголовка пакета. Возможно вы захотите включить эту опцию для уменьшения размера пакетов.
Ограничение размера запросов для UDP
Используйте эту опцию, чтобы указать максимальный размер UDP-пакета, который может быть отправлен внутри вашей локальной сети и наружу. Если SIP-модулю необходимо доставить пакет и протокол не указан явно, то SIP-модуль, если размер пакета не превышает заданное ограничение, использует UDP-протокол. TCP протокол используется в последнюю очередь.
UDP TOS Тэг
Используйте эту настройку для указания тэга TOS для всех исходящих SIP UDP пакетов. Этот тэг может использоваться для задания приоритета SIP-трафика в вашей локальной сети.
Настройки SIP-сервера
Чтобы настроить параметры SIP-модуля, используйте веб-интерфейс администратора. Откройте в разделе “установки” страницу “Real-Time”, затем откройте страницу “SIP”.
Нажмите на ссылку “приём” и откройте страницу с настройками SIP-сервера (UAS).
Северные транзакции
На панели “серверные транзакции” вы можете указать каким образом SIP-модуль должен обрабатывать транзакции SIP сервера (UAS).
Уровень журнала
Используйте эту настройку, чтобы указать какую информацию субкомпонент SIP-сервер должен сохранять в журнале работы сервера. Обычно используется уровень “сбои” (только неразрешимые проблемы), уровень “основные” (отчёты об установлении сессий) или уровень “проблемы” (сбои, отчёты об установлении сессий и не фатальные ошибки).
Записи, помещённые субкомпонентом SIP-сервер в журнал работы сервера, имеют пометку SIPS.
Процессоры
Используйте эту настройку для указания числа нитей, используемых для обработки транзакций SIP-сервера.
Ограничение на объекты
Используйте эти настройки для задания максимального числа одновременно обслуживаемых серверных транзакций, которые может обрабатывать SIP-модуль. При достижении этого числа, входящие SIP-пакеты с новыми запросами будут игнорироваться.
Ограничение на события
Используйте эту настройку для задания максимального числа необработанных событий, отправленных во все активные SIP-транзакции сервера. При достижении этого числа, компонент SIP-сервер входит в режим перегрузки: никакие новые SIP-транзакции не создаются и все входящие SIP-пакеты с новыми запросами будут игнорироваться.
Протокол
В компоненте сервер SIP-модуля реализована аутентификация запросов для удалённых клиентов. Если внутренний компонент сервер отвергает запрос по причине отсутствия данных аутентификации, то модуль добавляет специальные поля в отправляемый ответ, помогающие проведению аутентификации.
Объявлять 'Digest'-аутентификацию
Выберите эту опцию для информирования SIP-клиентов о поддержке стандартного метода аутентификации DIGEST.
Объявлять 'NTLM'-аутентификацию
Выберите эту опцию для информирования SIP-клиентов о поддержке нестандартного метода аутентификации NTLM.
Имя пользователя, указанное в данных аутентификации, обрабатывается через компонент маршрутизатор, так что в именах аутентификации могут использоваться псевдонимы пользователя, переадресаторы и псевдонимы домена.
У указанного пользователя и в его домене услуга SIP должна быть включена.
Для SIP-аутентификации могут использоваться любые пароли пользователей CommuniGate Pro.
Если для указанного пользователя опция “пароль” включена, то SIP-модуль проверяет, задана ли для этого пользователя настройка SIPPassword. Если она задана, то она будет использоваться вместо стандартной настройки пароль. Это возможность позволяет администратору устанавливать пользователю дополнительный пароль, который будет использоваться только при проведении SIP-аутентификации.
Посылать '100 Trying' для не-INVITE запросов
Если эта опция включена и клиент перепосылает запрос, то SIP-модуль отправляет отклик 100 ("Trying") даже в том случае, если INVITE не был методом запроса.
Всегда посылать '100 Trying' для INVITE запросов
Если эта опция включена, то SIP-модуль всегда отправляет отклик ответ ("Trying") до начала обработки запроса INVITE.
Защита
В компоненте сервер SIP-модуля реализованы некоторые механизмы защиты:
Пакеты UDP и запросы на соединение TCP с сетевых адресов IP, включённых в список запрещённые адреса IP, полностью игнорируются.
Когда количество неправильно сформированных пакетов SIP, полученных от некоторого сетевого адреса IP, превышает некоторый предел за установленное время, этот адрес помещается во временно блокированные адреса.
Когда запрос SIP отвергается из-за ошибки аутентификации, ответ отправляется после некоторой задержки, а адрес помещается во временно блокированные адреса — если частота таких ошибок превышает установленный предел.
Когда запрос SIP приходит с сетевого адреса IP, включённого в список временно блокированные адреса, он полностью игнорируется.
Настройки SIP-клиента
Чтобы настроить параметры SIP-модуля, используйте веб-интерфейс администратора. Откройте в разделе “установки” страницу “Real-Time”, затем откройте страницу “SIP”.
Нажмите на ссылку “передача” и откройте страницу с настройками SIP клиента (UAC).
Клиентские транзакции
На панели “клиентские транзакции” вы можете указать, каким образом SIP-модуль должен обрабатывать транзакции SIP клиента (UAC).
Уровень журнала
Используйте эту настройку, чтобы указать какую информацию субкомпонент SIP-клиент должен сохранять в журнале работы сервера. Обычно используется уровень “сбои” (только неразрешимые проблемы), уровень “основные” (отчёты об установлении сессий) или уровень “проблемы” (сбои, отчёты об установлении сессий и нефатальные ошибки).
Записи, помещённые субкомпонентом SIP-клиент в журнал работы сервера, имеют пометку SIPC.
Процессоры
Используйте эту настройку для указания числа нитей, используемых для обработки транзакций SIP-клиента.
Ограничение на объекты
Используйте эти настройки для задания максимального числа одновременно обслуживаемых клиентских транзакций, которые может обрабатывать SIP-модуль.
Ограничение на события
Используйте эту настройку для задания максимального числа необработанных событий, отправленных во все активные SIP-транзакции клиента. При достижении этого числа, компонент SIP-клиент входит в режим перегрузки и никакие новые SIP-транзакции клиента не могут быть созданы.
Протокол
Всегда оставаться в диалогах
Если эта опция выключена, то SIP-модуль участвует только в тех SIP-диалогах, которые требуют его участия (например, для прохождения межсетевого экрана или NAT). Если эта опция включена, SIP-модуль участвует во всех открываемых SIP-диалогах. Эта возможность может использоваться для анализа и устранения неполадок, так как в журнал работы сервера записываются все подробности об транзакциях в диалогах.
Релеить на любой сетевой адрес
Если эта опция установлена в значение любой, то SIP-модуль функционирует как открытый релей: он ретранслирует все SIP-запросы любым получателям.
Для предотвращения злоупотреблений вашим сервером, разрешайте релеинг только для клиентов или установите эту опцию в значение “никто”.
SIP-модуль будет отправлять запросы если выполняется как минимум одно из условий:
адрес получателя перечислен в списке сетевые адреса клиентов.
Запрос ретранслируется на устройства, зарегистрированные за пользователем вашего ссервера.
Запрос сгенерирован локальным узлом (таким как задача PBX).
отправитель запроса аутентифицирован вашим сервером.
Запрос получен от сетевого адреса, имеющегося в списке сетевые адреса клиентов (только если эта опция установлена в значение клиенты).
Если никакое из этих условий не выполняется, то запрос отвергается с кодом ошибки 401 ("Authentication required").
Посылать через
Включите эту опцию если вы хотите ретранслировать все исходящие пакеты через какой-либо внешний SIP-сервер. Обратите внимание, что эта настройка не используется в случае адресов, которые были явным образом перенаправлены на внешние хосты с использованием суффикса ._via или других методов маршрутизации.
Таймер в
Эта опция управляет значением «Таймер в» (согласно RFC3261). Она контролирует максимальное время, которое транзакция типа INVITE будет ожидать первого ответа от вызываемой стороны.
Хотя согласно стандарту она должна иметь значение 32 секунды, мы настоятельно рекомендуем понизить её до 5-10 секунд: если удалённый участник никак не отвечает в течении этого времени (не посылая даже ответ типа 100-Trying) то, вероятнее всего, он не функционирует и нет необходимости выжидать все 32 секунды для уведомления инициатора звонка.
Понижение этого значения позволяет транзакции SIP-клиента попробовать использовать другую SRV-запись (если она есть): если же этот таймер имеет значение 32 секунды, то вызывающий абонент, вероятнее всего, прекратит соединение до попытки использования следующей SRV-записи.
487-Wait таймер
Когда транзакция SIP прерывается клиентом, то создаётся и отправляется запрос CANCEL. Эта настройка указывает, как долго должен модуль ожидать ответа 487 для фактического завершения транзакции.
Если такого ответа не будет, модуль создаст его самостоятельно.
Посылать P-Asserted-Identity
Если эта опция включена и отправитель запроса был аутентифицирован, то в SIP-запрос добавляется поле P-Asserted-Identity. Поле содержит SIP URI с полным именем аутентифицированного пользователя (accountName@domainName).
Поддержка работы Microsoft Windows Messenger
В продуктах Microsoft «RTC» (включая Windows Messenger) используется стандартный SIP-протокол для аудио и видео сессий.
Эти клиенты используют собственные расширения SIP-протокола для мгновенных сообщений, статуса присутствия, удалённого помощника и других сервисов. Для поддержки этих приложений в CommuniGate Pro также реализованы необходимые расширения.
Windows Messenger поддерживается, начиная с версии 5.0.
В SIP модуле CommuniGate Pro опция «объявлять 'NTLM'-аутентификацию» должна быть включена.
В Windows Messenger для аудио- и видеосессий используются стандартные RTP-медиапротоколы, и эти сессии могут устанавливаться через межсетевые экраны и / или NAT.
В Windows Messenger для обмена мгновенными сообщениями используется SIP-протокол для передачи медиа и сессии по обмену мгновенными сообщениями также могут устанавливаться через межсетевые экраны и / или NAT.
В сессиях Windows Messenger «общая доска», общие приложения и удалённый помощник используется T.120 и другие нестандартные протоколы, и эти сессии могут устанавливаться через межсетевые экраны и/или NAT.
В сессиях передачи файлов Windows Messenger используется нестандартный протокол и в настоящее время такие сессии не могут устанавливаться через межсетевые экраны и / или NAT.
Поддержка работы устройств SIP и компенсации
Во многих из имеющихся в настоящее время SIP-устройств и SIP-приложений неверно реализованы различные аспекты SIP-протокола.
SIP-модуль CommuniGate Pro пытается скомпенсировать некоторые из таких недоработок и ошибок, основываясь на типе соединённого с ним SIP устройства.
Чтобы настроить компенсации SIP, используйте веб-интерфейс администратора. Откройте в разделе “установки” страницу “Real-Time”, затем откройте страницу “SIP”. Нажмите на ссылку “компенсации”. Появится таблица компенсации:
Чтобы задать компенсации для конкретных продуктов, введите имя продукта в последний пустой элемент таблицы, выберите требуемые компенсации и нажмите на кнопку “модифицировать”.
Чтобы удалить конкретный продукт, удалите его имя из таблицы и нажмите на кнопку “модифицировать”.
Подобная таблица реализована и для удалённых сайтов:
Когда SIP-модуль должен ретранслировать запрос с сигналом удалённому адресату, он применяет методы компенсации, заданные для URI домена из запроса наряду с методами, заданными для URI домена-получателя.
В настоящее время реализованы следующие методы компенсаций:
Microsoft
Участник использует клиент Microsoft. Сообщения протокола подписывается, а также обрабатываются другие отклонения от SIP-протокола.
SubPresence
Клиент поддерживает статус присутствия, но в нём не реализован «проталкивающий» агент статуса присутствия (Publish). Сервер будет отправлять запросы SUBSCRIBE для мониторинга статуса присутствия.
noTCP, noMaddr
Клиент не поддерживает параметры заголовка Contact: transport и/или maddr. Сервер будет изменять данные Contact, отправляемые такому клиенту.
noPath
Клиент не поддерживает RFC3327 (поле Path).
Сервер будет изменять данные Contact, отправляемые такому клиенту.
badByeAuth
Клиент неверно вычисляет дайджест аутентификации для non-INVITE запросов (BYE, NOTIFY, REFER).
needsEpid
Клиент использует нестандартный параметр epid= в полях From/To URI и не может работать, если кто-либо из участников диалога не сохраняет эти нестандартные параметры.
NoSubMWI
Клиент поддерживает набор событий «сводка о сообщениях» (в нём реализована MWI — индикация ожидающих сообщений), но он не умеет отправлять запросы SUBSCRIBE для активации этого сервиса.
Сервер будет подписывать такого клиента при регистрации.
ActiveHold
Клиент испытывает проблемы с переключением режима медиапотока с обычного двунаправленного (sendRecv) в любой другой или обратно.
Сервер оставит режим медиапотока двунаправленным (sendRecv), даже если PBX приложение или удалённый коммутируемый клиент объявили режим медиапотока выключенным (inactive) или однонаправленным (sendOnly, recvOnly).
TCPPing
Когда такой клиент присылает запрос REGISTER через соединение по протоколу TCP из-за NAT файрвола, сервер не будет посылать PING пакеты такому клиенту. Вместо этого, для TCP соединения включается опция «Keep Alive».
Обратите внимание: большинство ОС используют довольно большие значения для тайм-аутов при использовании опции «Keep Alive». Если вы планируете использовать эту компенсацию, то рекомендуется сократить значение тайм-аута в настройках ОС до 1-3 минут.
badUpdate
Клиент объявляет о поддержке метода SIP UPDATE, но ошибается при обработке запросов SIP UPDATE.
На этом веб-сайте находится периодически обновляемый документ, в которым перечислены протестированные SIP-клиенты, обнаруженные проблемы и известные способы их решения.
Маршрутизация
SIP-модуль сразу же (при первом вызове маршрутизатора) принимает все адреса сигналов с IP-адресами вместо доменов, то есть с именами домена типа [xx.yy.zz.tt]. Пожалуйста, обратите внимание, что маршрутизатор добавляет квадратные скобки к IP тех адресов имён домена, которые не имеют их, а также изменяет IP-адреса локальных доменов на их имена. Маршрутизатор выполняет эти операции до вызова модулей.
В финальном вызове, SIP-модуль принимает сигналы для любого домена, если в имени этого домена содержится как минимум один символ точка (.). Если выбрана опция “посылать через”, то все эти адреса перенаправляются на заданный в этой опции домен.
До принятия адреса SIP-модуль проверяет, не содержит ли адрес вместо символа @ один или несколько символов %. В этом случае меняется самый правый символ % изменяется на символ @.
Если имя домена назначения содержит суффикс ._udp, ._tcp или ._tls, то используется соответствующий транспортный протокол, а сам суффикс удаляется из имени этого домена.
Мониторинг активности SIP
В разделе “наблюдение через веб-интерфейс администратора” можно наблюдать за активностью SIP-модуля. Страница “наблюдения” за SIP-модулем имеет две части: страница, отвечающая за приём (сервер) и страница, отвечающая за передачу (клиент).
На странице “SIP приём” отображаются активные транзакции SIP-сервера:
На странице “SIP-передача” отображаются активные транзакции SIP-клиента: