<?xml version="1.0" encoding="UTF-8" ?><oembed><version>1.0</version><provider_name>Чудо{вищные} заметки</provider_name><provider_url>https://miracle.rpz.name</provider_url><author_name>MiRacLe</author_name><author_url>https://miracle.rpz.name/author/miracle/</author_url><title>Доверяете ли вы своему DNS-хостеру ?</title><html>Один известный dns-хостер преподнёс неожиданный сюрприз, в результате которого b2b-площадка стала потихоньку &quot;недоступна&quot; клиентам потому, что указанные в описании домена NS-серверы (все пять, ага) перестали корректно резолвить имя (server can&#039;t find example.org: REFUSED), мониторинг предупредить об опасности вовремя не смог (как известно метрики мониторинга добавляются по мере возникновения несчастных случаев). К счастью &quot;дно кризиса&quot; пришлось на вечер воскресенья, к несчастью &quot;круглосуточная техническая поддержка&quot; хостера показала себя во всей красе, объяснив что на дворе в общем-то вечер, воскресенье, а ваша проблема до понедельника только ваша.&lt;img src=&quot;//miracle.rpz.name/shared/2015/shit-happens.jpg&quot; alt=&quot;Ну бывает&quot; align=&quot;right&quot; hspace=&quot;10&quot; /&gt; Чудо{вищная} часть на этом закончена, основная часть заметки не о том, что Русский Сервис™ не даст вам расслабиться, а о том, shit happens, страховаться от подобных случаев можно и нужно. Но первым делом нужно узнать о том, что проблема есть. И желательно не от ваших клиентов.

Итак задача - узнать отвечают ли NS-серверы правильным адресом.&lt;!--more--&gt;
&lt;pre class=&quot;php&quot;&gt;#!/bin/sh
DOMAIN=${DOMAIN:-$1}
IPADDR=${IPADDR:-$2}

NAMESERVERS=$(dig +short @8.8.8.8 NS $DOMAIN)

if [ -z &quot;${NAMESERVERS}&quot; ]; then
    echo -999 # &quot;Unknown domain: $DOMAIN&quot;
else
    EXPECTEDCOUNT=0
    ACTUALCOUNT=0

    for ns in $NAMESERVERS; do 
        EXPECTEDCOUNT=$((EXPECTEDCOUNT + 1))
        ACTUALCOUNT=$((ACTUALCOUNT + `dig +short $DOMAIN @$ns|grep -c ${IPADDR}`))
    done
    echo $((EXPECTEDCOUNT - ACTUALCOUNT))
fi

&lt;/pre&gt;
Скрипт покажет количество NS-серверов, которые не вернули ожидаемый адрес. При любых ответах отличных от нуля стоит бить тревогу.

Теперь можно добавить в zabbix метрики вида &lt;a href=&quot;https://www.zabbix.com/documentation/2.4/ru/manual/config/items/itemtypes/external&quot; target=&quot;_blank&quot;&gt;external check&lt;/a&gt; или (как сделал я) &lt;a href=&quot;https://www.zabbix.com/documentation/2.4/ru/manual/config/items/itemtypes/trapper&quot; target=&quot;_blank&quot;&gt;zabbix trapper&lt;/a&gt; и переодически проверять &quot;работоспособность&quot; ваших DNS-ов. В перерывах между проверками можно основательно пересмотреть степень вашего доверия к своему DNS-хостеру, диверсифицировать DNS-хранилище, даже взять dns в свои умелые руки и разместить NS-серверы на подконтрольных машинах в разных частях света.</html><type>rich</type></oembed>