0887 371 498 support@itservice-bg.net
Обновяване на root hints файла в bind
25.09.2018 · Самуил Арсов · Debian, Hosting, Linux commands, Ubuntu

Обновяване на root hints файла в bind

Файлът с корените на DNS (root hints) казва на рекурсивния сървър откъде да започне, когато не знае нищо за търсената зона. Съдържа имената и адресите на тринайсетте коренни сървъра. Информацията се променя рядко — веднъж на няколко години — но когато някой корен смени адреса си, остарелият файл започва да струва по едно излишно запитване на всяка студена заявка.

Моят файл беше остарял, защото един сървър наскоро промени своя IP адрес. Ето как го обнових.

Обновяване

Първо запазвам стария файл настрани:

sudo mv /etc/bind/db.root /etc/bind/db.root.back

После тегля актуалния. По времето на оригиналната бележка това ставаше по FTP:

sudo wget --user=ftp --password=ftp ftp://ftp.rs.internic.net/domain/db.cache -O /etc/bind/db.root

Днес по-надеждният път е HTTPS — FTP достъпът на InterNIC отдавна не е сигурен вариант:

sudo wget https://www.internic.net/domain/named.root -O /etc/bind/db.root

Другият източник е самият корен, извлечен с dig — полезно на машина без изход към HTTPS:

dig . NS @a.root-servers.net > /etc/bind/db.root

Проверка преди рестарт

Това е стъпката, която спестява неприятности. Ако файлът е свален наполовина или е HTML страница с грешка, bind няма да тръгне:

sudo named-checkconf
grep -c 'NS' /etc/bind/db.root
head -20 /etc/bind/db.root

Трябва да видите коментари, започващи с ;, и записи за a.root-servers.net до m.root-servers.net.

Рестарт

sudo systemctl restart bind9.service
sudo systemctl status bind9.service

Проверка, че работи

dig . NS @localhost +short
dig google.com @localhost

Първата команда трябва да върне тринайсетте коренни сървъра, втората — нормален отговор със status: NOERROR.

Колко често и трябва ли изобщо

Едно уточнение, което си струва: bind носи вградени root hints в самия двоичен файл. Ако външният файл липсва или е остарял, сървърът пак ще работи — ще плати само по едно излишно запитване, докато научи верните адреси. Тоест това не е спешна поддръжка, а хигиена.

Проверката дали файлът е остарял е бърза — сравнява се с това, което корените отговарят в момента:

diff <(grep -oP '^\S+\s+\d+\s+IN\s+A\s+\K\S+' /etc/bind/db.root | sort) \
     <(dig . NS +short | while read n; do dig +short "$n" A; done | sort)

Ако решите да го автоматизирате, месечен cron е предостатъчен — но задължително със стъпката за проверка преди рестарта, иначе един провален download оставя DNS сървъра долу до следващата сутрин.