SIP настройка в Asterisk: Как явно указать expires 300 (Таймеры регистрации)
Архитектура SIP Registration и Session Timers
В протоколе SIP параметр Expires определяет время жизни регистрации (Registration) устройства или транка на сервере. Если параметр не согласован, провайдер телефонии (Ростелеком, Манго, МТС) может принудительно разрывать транк или отбивать попытки регистрации с ошибкой 423 Interval Too Brief или 401 Unauthorized. Жесткое требование провайдеров использовать expires=300 (5 минут) связано с механизмами NAT Keep-Alive и защитой от зависших сессий (Ghost Calls). Бизнес-риски: отвал транка, невозможность дозвониться в компанию (входящие не работают, абонент недоступен).
Симптоматика проблем с Expires
| Проявление | Сообщение в логах Asterisk | Причина |
|---|---|---|
| Входящие звонки периодически отваливаются | Registration for 'xxx' timed out | Провайдер разорвал сессию, а Asterisk считает её еще активной (свой expires=3600). |
| Провайдер отклоняет регистрацию | SIP/2.0 423 Interval Too Brief | Вы запрашиваете слишком маленькое время (например, 60), а провайдер требует минимум 300. |
| Микрообрывы связи | Session timer expired | Рассинхронизация Session-Expires (Min-SE) при долгих разговорах (UPDATE/INVITE). |
Настройка Expires в современных версиях Asterisk
Сценарий 1: Настройка в PJSIP (pjsip.conf)
Драйвер chan_pjsip является современным стандартом. Настраивается в секции [registration].
# /etc/asterisk/pjsip.conf
[my_provider_reg]
type=registration
transport=transport-udp
outbound_auth=my_provider_auth
server_uri=sip:sip.provider.ru
client_uri=sip:74951112233@sip.provider.ru
# Принудительно задаем время жизни регистрации (в секундах)
expiration=300
# Для сессионных таймеров (в секции endpoint)
[my_provider]
type=endpoint
timers=yes
timers_min_se=90
timers_sess_expires=300Сценарий 2: Настройка в устаревшем chan_sip (sip.conf)
Если вы всё еще используете старый chan_sip, настройка глобальных таймеров и строки регистрации.
# /etc/asterisk/sip.conf
[general]
# Глобальные настройки по умолчанию
defaultexpiry=300
minexpiry=60
maxexpiry=3600
# Синтаксис строки регистрации (Register string)
# формат: user[:secret[:authuser]]@host[:port][/extension][~expiry]
register => 74951112233:password@sip.provider.ru/74951112233~300Сценарий 3: NAT Keep-Alive (Qualify)
Часто проблема не в самом expires, а в том, что роутер (NAT) закрывает UDP-порт до истечения таймера регистрации (обычно через 3 минуты). Обязательно включите поддержку сессии (пингование OPTIONS).
- PJSIP (endpoint):
qualify_frequency=60(отправлять пинг каждые 60 секунд). - SIP (peer):
qualify=yesилиqualify=60000.
Типовые ошибки администраторов
- Игнорирование ответов провайдера: При регистрации провайдер отвечает пакетом
200 OK, внутри которого в заголовкеContactуказан реальныйexpires, который принял сервер. Asterisk подчинится этому значению. Если провайдер режет таймер до 120, настройка в 300 в конфиге не поможет — звоните провайдеру.
Траблшутинг SIP-протокола за NAT (NAT Traversal, STUN, Session Timers) — задача для экспертов. Инженеры ITSTM снимут дампы трафика (tcpdump/sngrep), найдут виновника потери пакетов (роутер, провайдер или АТС) и настроят бесперебойную работу транков.
Частые вопросы (FAQ)
В чем разница между Registration Expires и Session-Expires?
Registration Expires (expiration в pjsip) — это частота, с которой АТС сообщает провайдеру 'я тут, мой IP такой-то'. Session-Expires (сессионные таймеры) — это механизм контроля АКТИВНОГО разговора. Если разговор длится долго, АТС периодически шлют re-INVITE, чтобы подтвердить, что трубка не зависла.
Почему при expires=300 Asterisk отправляет запрос на регистрацию через 285 секунд?
Asterisk и другие софтсвичи умные: они не ждут точного истечения таймера до нуля (иначе транк отвалится на долю секунды). Они отправляют запрос на продление (re-register) чуть заранее (обычно за 15-30 секунд до конца), это абсолютно нормальное поведение.
Что означает ошибка 423 Interval Too Brief?
Провайдер защищается от DDoS (слишком частых регистраций). Ваш сервер просит регистрацию на 60 секунд (нагружая ядро провайдера), а политика безопасности оператора связи требует минимум 300 (или 3600) секунд. Увеличьте параметр expiration.
Нужно ли ставить expires 300 для внутренних абонентов (телефонов в офисе)?
Не обязательно. Для локальной сети (без NAT) можно ставить 3600 (час), чтобы не спамить в сеть. Но для удаленщиков и софтфонов на смартфонах за 4G лучше ставить 300-600 и включать qualify_frequency=30 для удержания портов на сотовых вышках.