SIP с CommuniGate Pro
- Проверено на версии — 2.3
- Требуется — кластер балансировки с двумя модулями балансировки, сервер CommuniGate Pro (CGP) с SIP-доменом и абонентами
Сценарий описывает настройку SIP-сигнализации через балансировщик 5А, когда вызовы обслуживает CommuniGate Pro. По итогу софтфон регистрируется и совершает звонок, а сигнализация проходит через балансировщик. Если бэкенд — Asterisk, см. SIP с Asterisk.
Что получится
- Софтфон MicroSIP регистрируется через адрес балансировщика
172.27.2.13:60. - Вызовы между абонентами
2001и2002проходят в обе стороны тем же путём. - Доступность CGP проверяет SIP-монитор: он отправляет
OPTIONSи получает SIP-ответ.
Сквозной пример
Во всех шагах используются одни и те же значения. Подставьте вместо них свои.
| Объект | Значение |
|---|---|
| Адрес балансировщика (для клиента) | 172.27.2.13 |
| Входной UDP-порт сервиса | 60 |
| Модули балансировки | 172.27.2.13, 172.27.2.14 |
| Клиентский сервер CGP | 172.27.2.22 |
| Порт участника группы (SIP UDP) | 5070 |
| SIP-домен | cgate.local |
| Абоненты | 2001, 2002 |
Имя SIP-домена должно разрешаться в адрес балансировщика. Для проверки допустима запись в файле hosts:
172.27.2.13 cgate.localПеред началом
- В CGP созданы SIP-домен
cgate.localи учётные записи абонентов2001и2002. - CGP слушает SIP по UDP на порту
5070. - Модули балансировки и ПК с софтфоном имеют маршрут до CGP.
Настройка CommuniGate Pro
- Войдите в WebAdmin CGP.
- Откройте
Settings → Real-Time → SIP → Transport. - В блоке UDP задайте Local IP Address —
all addressesи порт5070. - Откройте
Settings → Network → LAN IPsи добавьте подсеть модулей балансировки172.27.2.0-172.27.2.255и их адреса172.27.2.13,172.27.2.14. - При необходимости разрешите сигнализацию от этих адресов в
Settings → Network → Client IPs.

Настройка SIP-транспорта CGP

Адреса балансировщика в LAN IPs CGP

Адреса балансировщика в Client IPs CGP
Порт 8010, который часто виден в конфигурации CGP, относится к WebAdmin и в SIP-сигнализации не участвует.
Отдельных настроек CGP «под балансировщик» не требуется: сигнализация проходит как есть, когда адреса балансировщика для CGP свои (LAN IPs).
Создание SIP-монитора
-
Откройте раздел Мониторы кластера и нажмите Добавить монитор.
-
Заполните форму Новый монитор:
- Название —
sip-udp-options; - Протокол —
SIP; - Описание —
Проверка SIP-ответа CGP запросом OPTIONS; - Таймаут проверки, мс —
3000; - Перегрузка порта — выключена (проверяется порт участника группы
5070);
Секция Запрос:
- Метод —
OPTIONS; - Транспорт —
UDP; - SIP URI —
sip:cgate.local; - Пользователь в From —
5a-monitor(значение по умолчанию).
Секция Ожидаемый ответ: Допустимые коды ответа —
100, 200. - Название —
-
Нажмите Сохранить.
Допустимые коды ответа должны включать 100. CGP может сначала ответить промежуточным 100 Trying, а затем финальным 200, а монитор проверяет строку статуса первого полученного сообщения. Если оставить только 200, проверка будет падать, хотя сервер отвечает.
Обычный монитор с протоколом UDP для проверки SIP не подходит. Он отправляет одно и то же тело запроса, поэтому CGP принимает пробы за повтор одной транзакции и отвечает на порт первой из них: монитор ответа не получает и переводит группу в состояние недоступности. Монитор с протоколом SIP собирает каждый запрос заново — с новыми Call-ID, Via и tag, — поэтому CGP отвечает на каждую пробу.
Создание группы серверов
- Откройте раздел Клиентские серверы и выберите вкладку Группы серверов.
- Если сервер CGP ещё не добавлен, добавьте его: Имя сервера —
172.27.2.22, IP-адрес —172.27.2.22. - Нажмите Добавить группу и заполните форму создания группы:
- секция Информация о группе: Имя группы —
sip, Описание —sip; - секция Серверы в группе: Добавить сервер — Сервер
172.27.2.22, Порт5070, Вес1; - секция Проверка здоровья: Подключенные мониторы —
sip-udp-options; Порог успешных проверок —1; - секция Условия переключения группы: Параметр — Количество доступных серверов, значение —
1.
- секция Информация о группе: Имя группы —
- Нажмите Сохранить. В таблице серверов группы колонка Состояние покажет
ОК: 2/2— сервер доступен с обоих модулей балансировки.

Группа серверов sip
Создание конфигурации балансировки
- Откройте раздел со списком конфигураций балансировки и нажмите Добавить конфигурацию.
- На вкладке L4/L7 в секции Общие настройки конфигурации:
- Название —
sip_cgate.local; - Адрес — оставьте пустым, тогда сервис принимает трафик на адресах модулей балансировки;
- Порт —
60; - L4 протокол —
UDP; - L7 протокол — оставьте пустым;
- VRF — оставьте пустым, если серверы в общей сети.
- Название —
- На вкладке Сервисы в секции Настройки сервиса нажмите Добавить группу серверов: Приоритет —
1, Группа —sip. - В секции Трансляция адресов выберите Режим трансляции адресов — Автоматически.
- Нажмите Добавить.
- В списке конфигураций балансировки включите созданную конфигурацию переключателем в её строке. Появится уведомление «Конфигурация балансировки "sip_cgate.local" включена».

Конфигурации балансировки, вкладка L4/L7

Конфигурации балансировки, Настройки сервиса
Важно: порт конфигурации должен быть уникален в кластере. Подробнее.
Поле Адрес пустое, поэтому сервис слушает на адресах модулей балансировки, а софтфон обращается к одному из них — в примере 172.27.2.13. Если в конфигурации включена отказоустойчивость (HA), в поле Адрес указывают VIP, и софтфон обращается к нему: параметры отказоустойчивости.
Настройка MicroSIP
-
В MicroSIP откройте настройки аккаунта (правой кнопкой мыши по окну → Параметры).
-
Заполните поля:
- Имя аккаунта —
balancer; - SIP-сервер —
cgate.local:60; - SIP-прокси —
cgate.local:60; - Имя пользователя —
2001; - Логин —
2001; - Домен —
cgate.local; - Транспорт —
UDP; - Публичный адрес — локальный IP ПК с софтфоном, на автоподстановку не полагайтесь;
- Перерегистрация —
300; - Keep-alive —
15; - STUN, ICE и внешний сервер выключены.
- Имя аккаунта —
Поле SIP-прокси обязательно должно указывать на адрес балансировщика и входной порт сервиса. Причины — в следующем разделе.

Настройки SIP-аккаунта MicroSIP
На скриншоте поле SIP-прокси ещё не заполнено — это состояние до исправления.
Все учётные записи на ПК с софтфоном должны обращаться к балансировщику. Если у какой-то записи в SIP-сервере указан адрес CGP напрямую, она может не зарегистрироваться, и вызовы на неё будут завершаться кодом 480.
Почему звонок не проходит без SIP-прокси
Регистрация и звонок — разные механизмы. REGISTER софтфон отправляет на адрес из поля SIP-сервер — в примере cgate.local:60, то есть через балансировщик. INVITE при наборе номера MicroSIP строит как INVITE sip:<номер>@<домен> без порта и отправляет на адрес из поля SIP-прокси.
Если SIP-прокси пустое, INVITE отправляется на порт по умолчанию 5060, где сервис не слушает. Регистрация при этом проходит, а вызов завершается по таймауту. Если в прокси указан адрес CGP напрямую, INVITE идёт мимо балансировщика.
| SIP-прокси | Куда отправляется INVITE | Результат |
|---|---|---|
cgate.local:60 | на адрес балансировщика | звонок проходит |
172.27.2.22:5070 | напрямую на CGP | CGP отвечает, но балансировка не участвует |
| пусто | на cgate.local:5060, где сервис не слушает | звонок падает по таймауту |
Проверка регистрации
-
Убедитесь, что в MicroSIP появился статус «На линии».
-
Откройте журнал CGP:
WebAdmin → Monitors → Logs, и выберите файл за нужное время. Успешная регистрация выглядит как последовательность:REGISTER sip:cgate.local:60 from udp[172.27.2.13] 401-REGISTER (запрос пароля, это нормально) REGISTER + Digest 200-REGISTER -
Проверьте
Contactабонента вUsers → <абонент> → Real-Time → Registrations: там должен быть локальный адрес ПК с софтфоном, а не адрес Docker-сети вида172.18.*и не чужой NAT.
Источник в первой строке — адрес модуля балансировки, через который прошёл запрос, а не адрес ПК.
Время в журнале CGP идёт по часовому поясу сервера. Веб-просмотрщик показывает только хвост файла, полный текст проще выгрузить. Для разбора звонков удобен уровень логирования SIP All Info.
Проверка звонка
Звонок проверяется в обе стороны: 2002 → 2001 и 2001 → 2002. Ниже — звонок абонента 2002 на абонента 2001.
- Позвоните между абонентами
2001и2002: в примере вызывающий —2002, вызываемый —2001. - Дождитесь соединения и убедитесь, что голос слышен в обе стороны.
- Завершите разговор и понаблюдайте за
BYEв журнале CGP.
Успешный вызов в журнале CGP выглядит так (сокращённо):
08:35:05.240 inp: req <- udp[172.27.2.13]:52811 INVITE sip:2001@cgate.local ← пришёл через балансировщик
08:35:05.242 2001@cgate.local has 1 registration(s)
08:35:05.242 out: req [172.27.2.22]:5070 -> udp[172.27.1.121]:57195 INVITE ← к вызываемому напрямую
08:35:05.287 out: rsp -> udp[172.27.2.13]:52811 180-INVITE
08:35:20.332 ACCOUNT(2001@cgate.local) inp call connected. alerting=15 sec
08:35:20.334 out: rsp -> udp[172.27.2.13]:52811 200-INVITE(final)
08:35:20.377 inp: req <- udp[172.27.2.13]:52811 ACK
08:35:28.045 inp: req <- udp[172.27.1.121]:25285 BYE ← отбой нажал абонент
08:35:28.095 ACCOUNT(2001@cgate.local) inp call completed(2002@cgate.local). duration=8 secПризнаки успеха:
INVITEприходит в CGP от адреса модуля балансировки, а не от ПК напрямую;- есть цепочка
180→200-INVITE→ACK→BYE, строкиcall connectedиcall completed; - проверено в обе стороны, голос слышен.
Входящий INVITE к вызываемому абоненту и запросы внутри разговора (BYE) идут между сервером и софтфоном напрямую, минуя балансировщик, — это штатное поведение, см. как идёт трафик.
Частые ошибки
| Ошибка | Причина | Исправление |
|---|---|---|
| Группа не переходит в статус Активна | монитор со статичным телом, CGP отвечает на порт первой пробы | используйте монитор с протоколом SIP |
| SIP-монитор недоступен | сервер отвечает 100, а в допустимых кодах только 200 | добавьте 100 в Допустимые коды ответа |
| «На линии», но звонок не проходит | INVITE ушёл на порт 5060, где сервис не слушает | заполните SIP-прокси адресом балансировщика и входным портом |
| Звонок сразу сбрасывается | вызываемый абонент не зарегистрирован (его учётка идёт мимо балансировщика) | направьте учётку вызываемого абонента на балансировщик |
| Соединение есть, но голоса нет | Contact или SDP содержит Docker- или NAT-адрес | укажите в MicroSIP Публичный адрес — локальный IP ПК |
| Звонок соединился и через несколько секунд оборвался | call completed и BYE от адреса клиента | трубку положил абонент; обрыва на балансировщике нет |
Много строк 401-INVITE(resending) | клиент не подтвердил 401 своим ACK | на звонок не влияет, особенность клиента |
483 Too Many Hops | REGISTER зацикливается через балансировщик | проверьте LAN IPs и Trusted Proxy в CGP; в MicroSIP заполните SIP-прокси |
404 или «неверный номер» | INVITE дошёл, но абонента или маршрута нет | проверьте абонента и маршруты в CGP, а не в 5А |
В журнале CGP SIP failed to parse PROXY protocol headers | к CGP обращается TCP-проба, а адрес балансировщика указан доверенным прокси | на UDP-сигнализацию не влияет; проверьте, каким монитором проверяется сервер |
Ограничения
- L4 UDP-балансировка не анализирует и не переписывает поля
Via,Contact,Record-RouteиSDP: сигнализация транслируется как есть. - Статус «На линии» — это успешная регистрация, а не подтверждение прохождения звонка.
- Голос (RTP) идёт напрямую между абонентами и через балансировщик не проходит.
- Входящий
INVITEвызываемому абоненту и запросы внутри разговора идут от сервера к клиенту напрямую, минуя балансировщик; через него проходит только сигнализация от клиента к серверу. - Для нескольких серверов CGP в группе нужна общая база регистраций (кластер CGP) или persistence по IP клиента, иначе регистрация и вызов могут попасть на разные серверы.
- Сценарий проверен с софтфоном MicroSIP по транспорту UDP.
Дальше
- SIP с Asterisk — второй бэкенд и разбор его отличий.
- Как идёт трафик — что проходит через балансировщик, а что идёт напрямую.
- Добавление монитора — описание всех полей формы монитора.