- Настройка DNS в Linux
- files
- resolve
- myhostname
- mymachines
- dns
- Кэш DNS в linux
- NSCD
- systemd-resolved
- dnsmasq
- Как просмотреть и очистить кеш Bind DNS-сервера в Linux
- Очистить кэш
- Как установить ватсап на линукс
- MySQL: разрешить удаленные подключения
- MySQL: разрешить доступ с определенного IP-адреса
- How do you see the OS DNS cache on linux?
- systemd-resolve
- Question
Настройка DNS в Linux
Сразу отметим, что речь в данной статье пойдет исключительно о клиентской части системы DNS в linux. О серверной части мы поговорим в другой статье (она-то как раз гораздо проще для восприятия). Итак, начнем.
Разобраться, как работает DNS в вашей системе, можно только поняв, как устроена та программа, которую вы запускаете. Серьезно, только сама программа определяет, как она будет работать с DNS, а не операционная система в целоми и не linux в частности. Нужно смотреть, как была написана вот эта вот конкретная программа. Но не огорчайтесь сразу, вам скорее всего не понадобится срочно изучать все возможные языки программирования, только чтобы настроить вашу программу на работу с DNS. Указанный выше случай справедлив больше для программ собраных статически, разнообразных самопалов или чисто академических творений всемозможных энтузиастов.
Современные программисты достаточно ленивы и собирают свои программы динамически, т.е. с использованием разделяемых библиотек. Они позволяют им не заботиться о ряде функциональных возможностей, таких как работа с сетью, шифрованием или DNS. Действительно, вам бы не понравилось переносить один и тот же код из программы в программу только ради того, чтобы дать ей возможность преобразовывать имена в IP адреса. А если в этом коде потом обнаружиться баг или серьезная уязвимость? Нет. Вся функциональность нынче вынесена в библиотеки. И так уж получилось, что в linux самой популярной библиотекой для преобразования имен является libnss. Т.е. повторюсь, это совсем не обязательно, что ваша программа будет собрана с использованием libnss. Да, большинство (99% программ) будут следовать законам libnss, однако имейте ввиду, что возможна сборка с какой-нибудь другой библиотекой, или вообще статически с самописным кодом. Это будет лишь означать, что настраиваться DNS в этих немногочисленных случаев по-особому.
Итак, после того, как мы выяснили, что большинство программ в linux использует библиотеку libnss для преобразования имен в IP адреса, осталось лишь понять, как настроить этот самый libnss, и дело в шляпе. И тут мы натыкаемся на очередной сюрприз — libnss сам динамический. Да, это не конец цепочки Программа -> libnss -> dns-сервер. Оказывается, есть множество способов для резолвинга. Например, libnss, с помощью, опять же, подключаемых модулей, может заглянуть в файлик (например /etc/hosts) в поиске IP адреса, а потом спросить у местного MySQL, а далее еще пройти чере фильтр-сервер, отдающий запросы в соответствии со своим API по http протоколу. Т.е. вы уже начинаете понимать, что DNS сервера в этой цепочке-то может и не быть. Как же всем этим хозяйством управлять? Головным конфигурационным файлом для libnss является /etc/nsswitch.conf, именно там мы указываем:
- какие модули libnss будет использовать для перобразования имен в адреса
- в каком порядке (приоритет) их вызывать.
И только когда libnss, пройдясь по всем модулям, так и не сможет найти соответствующий запрашиваемому имени IP адрес, тогда вам будет возвращен ответ примерно такого вида
# ping google.com
ping: google.com: Name or service not known
Заглянем в /etc/nsswitch.conf
# Name Service Switch configuration file.
# See nsswitch.conf(5) for details.
passwd: files mymachines systemd
group: files mymachines systemd
shadow: files
hosts: files mymachines myhostname dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
Мы видим много разных строчек. Действительно, libnss отвечает далеко не только за преобразование имен хостов в IP-адреса, а также за преобразование имен пользователей в uid, групп в gid, имен протоколов в номера портов и т.д. Заострим наш взгляд на строке начинающейся с «hosts:», ведь именно о ней-то мы и говорим. Здесь все очень просто — мы определяем, какие модули мы хотим использовать для преобразования имен хостов в IP-адреса и в какой последовательности. Почти наверняка на первом месте у вас будет «files», что означает, что при поступлении запроса на резолвинг, мы сначала вызываем модуль «files», который в свою очеред заглядывает в /etc/hosts в поисках интересующего пользователя имени. Рассмотрим самые распространенные модули, что они делают и как настраиваются на диаграмме
Подведем промежуточный итог:
files
Модуль files не настраивается. Работает с /etc/hosts в качестве базы данных имен и адресов. Синтаксис /etc/hosts предельно простой: IP адрес, полное имя (FQDN) набор алиасов (дополнительных имен)
# cat /etc/hosts
127.0.0.1 www.hippolab.ru hippolab.ru
127.0.0.1 localhost
resolve
myhostname
Модуль myhostname не настраиваются. Тоже часть systemd. Резолвит локальные имена машины сами в себя. Например можно пингануть hippo.localhost и вы получите результат. Зачем она надо, спросите вы, если уже есть /etc/hosts? Модуль myhostname надежнее. Редактируя /etc/hosts, человек может совершить ошибку, тогда как myhostname общается напрямую с ядром и ошибок не совершает
mymachines
Модуль mymachines позволяет резолвить имена контейнеров, запущенных systemd.
dns
Модуль dns настраивается через /etc/resolv.conf, в качестве базы данных использует DNS сервера, обращаясь к ним через сеть. Соответственно узнать или прописать адреса DNS серверов можно в указанном файле. И тут стоит быть осторожным. Так как модуль dns является самым популярным способом резолвинга имен хостов в linux, файл /etc/resolv.conf является объектом пристального внимания разнообразных автоматических конфигураторов сети, таких как NetworkManager и т.п. Если вы работаете с одним из таких конфигураторов, то менять настройки надо в их собственных конфигурационных файлах, а не напрямую в /etc/resolv.conf, так как весьма вероятно, что им это не понравится, и ваша конфигурация будет перезаписана. Синтаксис /etc/resolv.conf простой и задается в формате ключ/значение: nameserver указывает на IP адрес DNS сервера, search позволяет указать домен поиска при использовании коротких имен без доменной части.
# cat /ets/resolve.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
search hippolab.ru
Модульная архитектура libnss позволяет действительно творить чудеса. Мы уже упомянули в начале статьи, что вы можете потенциально подключить модуль, который будет резолвить имена, используя базы данных MySQL или HTTP сервера. Возможности по истине безграничные
Кэш DNS в linux
Настало время поговорить о кэшэ DNS в linux. Кэш по-умолчанию в вашем дистрибутиве скорее всего выключен, однако мест, где его можно поискать не так уж и много. Понимая модульность libnss, вы наверняка уже догадались, что кэш можно встретить
- на этапе вызова модуля (например systemd-resolved, имеют свой собственный кэш)
- в самом libnss (демон nscd если запущен, то скорее всего кэширует результаты резолвинга)
- в демонах кэша, которые еще называют stub-resolver, такие как dnsmasq и systemd-resolved, с недавних пор получивший функцию stub-resolver’а
- на самих DNS серверах
NSCD
Проверить, запущен ли nscd, можно с помощью systemctl
Настраивается nscd через /etc/nscd.conf. Его синтаксис перекликается с таковым у /etc/nsswitch.conf, например, имена сервисов и там, и там одинаковые. Кроме того, поддерживается ряд глобальных параметров
Т.е. для включения кэша в nscd (этот кэш первичный, т.е. отрабатывает ДО вызова любого модуля из /etc/nsswitch.conf) вам достаточно убедиться в наличии строки
Простого перезапуска nscd бывает недостаточно для очистки кэша. Для очистки кэша резолвинга имен хостов в nscd используйте команду
Этой же командой вы можете очистить кэш и других сервисов, например passwd или groups. Просто замените «hosts» на нужный сервис
systemd-resolved
О systemd-resolved мы уже писали в статье Переходим на systemd-resolved. Но на всякий случай напомним. Для очистки кэша systemd-resolved в большинстве случаев достаточно просто перезапустить systemd-resolved командой
systemctl restart systemd-resolved
Или, не перезапуская сервис
dnsmasq
Кэш dnsmasq вычищается простым перезапуском
systemctl restart dnsmasq
Как просмотреть и очистить кеш Bind DNS-сервера в Linux
Настроенный сервер службы доменных имен (DNS), такой как Bind, может хранить ранее разрешенные доменные имена в локальном кэше. По умолчанию кэшированные записи хранятся 7 дней. Кэш можно повторно использовать для будущих разрешений доменных имен. Во-первых, давайте посмотрим, как мы можем просмотреть все кешированные разрешения доменных имен:
Приведенная выше команда сбрасывает кеш привязки в /var/cache/bind/named_dump.db . Если вы не можете найти этот файл после выполнения указанной выше команды, проверьте файлы конфигурации вашего сервера, чтобы определить расположение файла дампа кеша. Чтобы просмотреть кэшированные записи DNS просто Кот или grep получившийся файл дампа. Например:
# grep gnu.org /var/ named/data/cache_dump.db. gnu.org. 86358 NS ns1.gnu.org. 86358 NS ns2.gnu.org. 86358 NS ns3.gnu.org. ns1.gnu.org. 86358 А 208.118.235.164. ns2.gnu.org. 86358 А 87.98.253.102. ns3.gnu.org. 86358 А 46.43.37.70.
Очистить кэш
Следующие команда linux s поможет вам, если вы захотите очистить кеш сервера Bind. Сначала очистите все записи кеша:
После этого перезагрузите привязку:
# rndc reload. перезагрузка сервера прошла успешно.
Если после очистки кеша привязки и перезагрузки DNS запросов DNS не было, новый файл дампа кеша будет пустым:
# rndc dumpdb -cache. # cat /var/ named/data/cache_dump.db;; Начать просмотр _default.; ;; Дамп кеша представления _default (cache _default); $ DATE 20160824004622.; ; Дамп адресной базы данных.; ;; Несвязанные записи.; ;; Плохой кеш.; ;; Начать просмотр _bind.; ;; Дамп кеша представления _bind (cache _bind); $ DATE 20160824004622.; ; Дамп адресной базы данных.; ;; Несвязанные записи.; ;; Плохой кеш.; ; Дамп завершен.
Подпишитесь на новостную рассылку Linux Career Newsletter, чтобы получать последние новости, вакансии, советы по карьере и рекомендуемые руководства по настройке.
LinuxConfig ищет технических писателей, специализирующихся на технологиях GNU / Linux и FLOSS. В ваших статьях будут представлены различные руководства по настройке GNU / Linux и технологии FLOSS, используемые в сочетании с операционной системой GNU / Linux.
Ожидается, что при написании статей вы сможете идти в ногу с технологическим прогрессом в вышеупомянутой технической области. Вы будете работать независимо и сможете выпускать не менее 2 технических статей в месяц.
Как установить ватсап на линукс
WhatsApp — это телекоммуникационное приложение для видеосвязи, чата и голосовой связи между компьютерами, планшетами и мобильными устройствами через Интернет. Все, что вам нужно, это номер телефона для регистрации, а затем вы можете отправлять соо.
MySQL: разрешить удаленные подключения
После установки сервера MySQL на Linux-система, по умолчанию он будет принимать входящие соединения только от себя (т.е. петлевой адрес 127.0.0.1). Эта конфигурация по умолчанию отлично работает, если вы пытаетесь только читать или записывать инфо.
MySQL: разрешить доступ с определенного IP-адреса
Если вам нужно разрешить удаленный доступ к вашему серверу MySQL, рекомендуется разрешать доступ только с одного или нескольких определенных IP-адресов. Таким образом, вы не будете без необходимости раскрывать вектор атаки всему Интернету. В этом .
How do you see the OS DNS cache on linux?
According to Cloudflare docs, the sequence of a DNS query from Chrome to the recursive resolver looks something like this:
Check browser DNS cache --miss--> Check OS DNS cache --miss--> Recursive resolver | | V V hit hit
Chrome’s DNS cache chrome://net-internals/#dns and firefox’s DNS cache about:networking#dns lists entries in one or another, and the Windows DNS cache can be accessed with ipconfig /displaydns . The Windows version looks like this:
PS C:\> ipconfig /displaydns Windows IP Configuration chrome.cloudflare-dns.com ---------------------------------------- Record Name . . . . . : chrome.cloudflare-dns.com Record Type . . . . . : 1 Time To Live . . . . : 54 Data Length . . . . . : 4 Section . . . . . . . : Answer A (Host) Record . . . : 104.18.27.211 vortex.data.microsoft.com ---------------------------------------- Record Name . . . . . : vortex.data.microsoft.com Record Type . . . . . : 5 Time To Live . . . . : 6 Data Length . . . . . : 8 Section . . . . . . . : Answer CNAME Record . . . . : asimov.vortex.data.trafficmanager.net .
systemd-resolve
rj@VPS:~$ systemd-resolve motel6.com motel6.com: 23.35.171.243 -- link: eth0 -- Information acquired via protocol DNS in 85.2ms. -- Data is authenticated: no rj@VPS:~$ systemd-resolve motel6.com motel6.com: 23.35.171.243 -- link: eth0 -- Information acquired via protocol DNS in 1.4ms. -- Data is authenticated: no
I would assume on the second instance, it’s pulling from the OS DNS cache, but a DNS request to VPS’ DNS server could also be 1.4ms and now cached.
Question
How do you see all entries in the DNS cache for Linux? (Bonus points for macos as well, but I’m scoping this to Linux)