Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и 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.