Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

NETSOCK2_DNS_FAIL IP-Телефония и СКУД

Asterisk: getaddrinfo() failed for host (Ошибка резолвинга DNS в netsock2.c)

Обновлено: 24.08.2026 · Официальная документация ↗
  • В системном журнале Asterisk фиксируется ERROR[5678]: netsock2.c: getaddrinfo() failed for host 'sip.trunk-provider.com': Name or service not known.
  • Падение исходящей маршрутизации и SIP-транков к внешним провайдерам связи.
  • Зависание каналов и длительные задержки (freeze) при выполнении функции Dial() в диалплане.
  • Команда pjsip show registrations переводит транк в статус Rejected или Unregistered.

1. Проверка системного разрешения DNS на сервере

dig +short sip.trunk-provider.com A
getent hosts sip.trunk-provider.com

2. Настройка надежных DNS-серверов в /etc/resolv.conf

Добавьте отказоустойчивые резолверы и уменьшите таймауты запросов:

options timeout:2 attempts:3 rotate
nameserver 127.0.0.1
nameserver 1.1.1.1
nameserver 8.8.8.8

3. Конфигурация локального кэширующего DNS (Dnsmasq / systemd-resolved)

Для предотвращения блокировок потоков Asterisk при сетевых задержках поднимите локальный кэш:

apt-get install -y dnsmasq || dnf install -y dnsmasq
systemctl enable --now dnsmasq

4. Тюнинг транспорта и таймеров PJSIP

В /etc/asterisk/pjsip.conf для транспорта и транка задайте таймауты и параметры DNS:

[system]
type = system
dns_cache_stale_data = yes

[trunk-out]
type = endpoint
outbound_auth = trunk-auth
aors = trunk-aor
timer_t1 = 500
timer_b = 32000

5. Применение изменений

asterisk -rx "core reload"
asterisk -rx "pjsip reload"
💡 Практика специалистов: Никогда не направляйте Asterisk на удаленные публичные DNS без локального кэша (Dnsmasq / Unbound / systemd-resolved). Любая микропотеря пакетов до внешнего DNS немедленно приводит к дропу транков и ошибкам netsock2.c.

Частые вопросы (FAQ)

Почему Asterisk блокирует весь поток звонка при DNS-ошибке?

Вызов getaddrinfo() является синхронным блокирующим системным вызовом glibc. Если DNS-сервер недоступен, поток обработки звонка зависает на системный таймаут (до 30-60 секунд).

Поможет ли прописывание IP транка в /etc/hosts?

Да, добавление записи в /etc/hosts полностью исключает DNS-запросы, но это небезопасно, если оператор использует GeoDNS, Round-Robin или SRV-записи для балансировки SIP-трафика.

Как PJSIP обрабатывает SRV и NAPTR записи?

PJSIP использует встроенную библиотеку pjproject, которая автоматически запрашивает NAPTR и SRV записи (_sip._udp.domain.com), если порт не указан жестко в URI.

Как отключить IPv6 резолвинг, если у провайдера только IPv4?

В /etc/asterisk/pjsip.conf в секции [transport-udp] укажите bind = 0.0.0.0:5060 (только IPv4), а в /etc/gai.conf раскомментируйте строку precedence ::ffff:0:0/96 100.

Полезные материалы
Рекомендуем