Asterisk chan_sip: Peer is not responding to OPTIONS keepalive (UNREACHABLE)
- В консоли Asterisk появляется предупреждение
WARNING chan_sip.c: Peer 'peer_name' is not responding to OPTIONS keepalive. Status is now UNREACHABLE!. - Входящие и исходящие звонки через данный транк или на телефон абонента перестают проходить.
- Команда
sip show peersпоказывает статус пираUNREACHABLEс задержкой0 ms. - Проблема периодически исчезает после выполнения команды
sip reloadили перезагрузки телефона.
1. Принцип работы механизма Qualify (OPTIONS Keepalive)
Параметр qualify=yes в chan_sip заставляет Asterisk регулярно отправлять SIP-запросы OPTIONS на удаленный пир для измерения задержки (RTT) и поддержания открытой трансляции портов (UDP NAT pinhole). Если удаленная сторона не отвечает в течение времени qualifymtimeout (по умолчанию 2000 мс), пир переводится в статус UNREACHABLE.
2. Проверка статуса пиров в Asterisk CLI
asterisk -rx "sip show peers"
asterisk -rx "sip show peer <имя_пира>"Включите трассировку пакетов OPTIONS:
asterisk -rx "sip set debug on"3. Основные причины сбоя:
- Сброс сессии в файрволе: роутер закрывает NAT-трансляцию быстрее, чем Asterisk шлет keep-alive (например, таймаут UDP 30 секунд).
- Блокировка ICMP / SIP со стороны ISP: оператор или локальный роутер блокирует пакеты OPTIONS как потенциальный SIP-скан.
- Спящий режим Wi-Fi телефонов: беспроводные трубки уходят в энергосбережение и не отвечают на периодические пакеты.
4. Оптимизация параметров в `/etc/asterisk/sip.conf`
[my_peer]
type=friend
host=dynamic
defaultuser=200
secret=StrongPassword123
context=from-internal
; Включение и тюнинг Qualify
qualify=5000 ; Увеличение таймаута ожидания ответа до 5000 мс
qualifyfreq=25 ; Отправка OPTIONS каждые 25 секунд (до закрытия NAT-сессии роутером)
qualifynokfreq=10 ; Частота опроса недоступного пира
; Настройка NAT
nat=force_rport,comedia
keepalive=205. Проверка блокировок на уровне iptables / fail2ban
iptables -L -n -v | grep 5060
fail2ban-client status asterisk Частые вопросы (FAQ)
Почему статус пира меняется на UNREACHABLE, хотя телефон включен в сеть?
Телефон может иметь проблемы со стабильностью сетевого подключения, терять пакеты из-за плохого Wi-Fi сигнала, либо промежуточный маршрутизатор сбрасывает состояние UDP таблицы NAT.
Что произойдет, если отключить qualify (qualify=no)?
Asterisk перестанет контролировать доступность пира и будет считать его всегда активным (OK). Однако при динамическом IP за NAT входящие звонки на телефон перестанут поступать при закрытии порта роутером.
Как принудительно опросить статус конкретного пира?
В консоли Asterisk выполните команду sip qualify <имя_пира>.
Влияет ли SIP ALG на статус UNREACHABLE?
Да. Функции SIP ALG на роутерах часто повреждают заголовки пакетов OPTIONS или удаляют их из потока данных, что приводит к ложному статусу UNREACHABLE.