четверг, 28 ноября 2024 г.

Strict и loose маршрутизация SIP, модуль rr в Opensips

Строгая (strict) и свободная (loose) маршрутизация SIP отличаются наличием или отсутствием модификации заголовка Request-URI (R-URI). Строгая маршрутизация устарела, сейчас обычно используется свободная.

При строгой маршрутизации SIP прокси обязан использовать для маршрутизации адреса из заголовка Route повторных запросов (ACK, BYE, Re-INVITE). При этом адрес в R-URI заменяется на "верхний" адрес из Route и сообщение передаётся на этот новый R-URI. Таким образом R-URI всегда содержит адрес следующего хоста (например, следующего прокси или уже самого получателя). Строгая маршрутизация подразумевает, что сообщение пройдет только по хостам, перечисленным в заголовке Route.



При свободной маршрутизации SIP прокси следует (should) использовать адреса из заголовка Route повторных запросов. При этом запрос также передается на "верхний" хост из заголовка Route, но адрес в R-URI не меняется. Свободная маршрутизация подразумевает, что сообщение пройдет по хостам, перечисленным в заголовке Route и, возможно, ещё по каким-либо хостам с поддержкой loose routing.



!!! Тут надо отметить, что передача поля Route в начальном запросе недопустима из соображений безопасности.

Route: <sip:proxy1.mydomain.org;lr>,<sip:proxy2.mydomain.org;lr>,<sip:proxy3.mydomain.org;lr>

Наличие параметра lr говорит о том, что прокси поддерживает loose routing.

Детали в RFC3261.


В Opensips свободная маршрутизация осуществляется функцией loose_route() модуля rr.

Эта функция анализирует заголовок Route. Если его нет, то функция возвращает FALSE и маршрутизация происходит только на основании значения R-URI.

Выбор между строгой и свободной маршрутизацией происходит на основе анализа заголовков R-URI и Route: Opensips проверяет, в каком заголовке указан его собственный адрес. Если в R-URI, то это сценарий строгой маршрутизации. Если "вверху" списка хостов Route, то это сценарий свободной маршрутизации. Сравнение адреса идёт как с IP-адресом интерфейса, так и с доменными именами модуля domain.

Комментариев нет:

Отправить комментарий