Настройка 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
Модуль resolve задействует механизм резолвинга имен внедренный в линукс командой, разрабатывающей systemd. Настраивается через /etc/systemd/resolved.conf. Соответственно узнать, какой DNS сервер сейчас используется можно посмотрев на диррективу «DNS=» в указанном файле. Если она закомментирована (перед строкой стоит решетка #), то systemd-resolved наследует конфигурацию либо у демона настройки сети systemd-networkd, либо берет информацию о доступных DNS серверах из /etc/resolv.conf. Если ему вообще не удается найти DNS сервера, то он попытается присоединиться к серверам Google: 8.8.8.8 и 8.8.4.4. Подробно о systemd-resolved в одной из наших предыдущих статей. В большинстве дистрибутивов по-умолчанию не задействован
myhostname
Модуль myhostname не настраиваются. Тоже часть systemd. Резолвит локальные имена машины сами в себя. Например можно пингануть hippo.localhost и вы получите результат. Зачем она надо, спросите вы, если уже есть /etc/hosts? Модуль myhostname надежнее. Редактируя /etc/hosts, человек может совершить ошибку, тогда как myhostname общается напрямую с ядром и ошибок не совершает
mymachines
Модуль mymachines позволяет резолвить имена контейнеров, запущенных systemd.
Модуль 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, можно с помощью systemctl
systemctl status nscd
ps -A | grep nscd
Настраивается nscd через /etc/nscd.conf. Его синтаксис перекликается с таковым у /etc/nsswitch.conf, например, имена сервисов и там, и там одинаковые. Кроме того, поддерживается ряд глобальных параметров
logfile
debug-level
threads
max-threads
server-user
stat-user
reload-count unlimited|
paranoia
restart-interval
enable-cache
positive-time-to-live
negative-time-to-live
suggested-size
check-files
persistent
shared
max-db-size
auto-propagate
Т.е. для включения кэша в nscd (этот кэш первичный, т.е. отрабатывает ДО вызова любого модуля из /etc/nsswitch.conf) вам достаточно убедиться в наличии строки
enable-cache hosts yes
Простого перезапуска nscd бывает недостаточно для очистки кэша. Для очистки кэша резолвинга имен хостов в nscd используйте команду
Этой же командой вы можете очистить кэш и других сервисов, например passwd или groups. Просто замените «hosts» на нужный сервис
systemd-resolved
О systemd-resolved мы уже писали в статье Переходим на systemd-resolved. Но на всякий случай напомним. Для очистки кэша systemd-resolved в большинстве случаев достаточно просто перезапустить systemd-resolved командой
systemctl restart systemd-resolved
Или, не перезапуская сервис
dnsmasq
Кэш dnsmasq вычищается простым перезапуском
Источник
Как посмотреть DNS в Linux
Служба DNS или Domain Name System позволяет превращать легко читаемый адрес сайта в ip адрес сервера на котором расположен этот сайт. Для этого используются DNS серверы, которые содержат таблицы соответствия ip адресов их доменным именам. По умолчанию система получает адрес DNS сервера автоматически по DHCP при подключении к сети.
В этой статье мы разберемся как посмотреть какие DNS серверы используются в Linux.
Как посмотреть DNS в Linux
Если вы уже имели опыт настройки сети в Linux, то знаете, что DNS серверы, используемые для резолвинга доменных имен указаны в файле /etc/resolv.conf:
sudo vi /etc/resolv.conf
Но в современных дистрибутивах Linux с системой инициализации systemd обычно запущен локальный DNS сервер, адрес которого и прописан в этом файле, а какие сервера используются на самом деле непонятно. В таком случае можно воспользоваться утилитой systemd-resolve:
В самом низу вывода утилиты можно посмотреть DNS в Linux, которые сейчас используются. Информация выводится по каждому сетевому интерфейсу отдельно.
Также для решения подобной задачи можно использовать утилиту nmcli:
nmcli dev show | grep DNS
Как видите, все очень просто. А чтобы изменить DNS сервер тоже трогать /etc/resolv.conf не желательно, так как он будет автоматически обновляться после перезагрузки. Если вы используете NetworkManager, то можно настроить DNS для сетевого подключения в интерфейсе программы. Или же можно отредактировать файл /etc/systemd/resolved.conf и добавить нужные адреса в секцию Resolve:
sudo vi /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8, 8.8.4.4
Как видите, все очень просто. Надеюсь, эта информация была вам полезной.
Источник
Как очистить кеш DNS на Linux
Компьютеры хранят записи каждого веб-сайта, который вы посещаете, в «кэше DNS». Цель этого кэша — сэкономить время, когда пользователь пытается получить доступ к домену; система не должна искать его каждый раз вручную. В целом, DNS-кеширование ускоряет использование интернета, поэтому практически все операционные системы от macOS до Windows и Linux делают это.
Тем не менее, при всей полезности кэширования DNS иногда могут возникать проблемы, такие как просмотр старого веб-сайта вместо нового обновленного, невозможность подключения к удаленному серверу и т. д. Отличный способ обойти подобные ошибки в Linux — очистить кэш DNS в Linux. Когда вы очищаете кэш DNS, он обновляет базу данных DNS и устраняет многие проблемы, с которыми сталкиваются пользователи.
Очистить DNS — systemd resolved
На этом этапе большинство пользователей Linux используют операционную систему, в которой встроена система инициализации Systemd. Хотя тема Systemd вызывает споры в сообществе, все знают одну вещь: Systemd делает глубокие, сложные настройки операционной системы и обслуживание намного проще, чем это было в прошлом. Этот факт особенно актуален при очистке кеша DNS.
Systemd обрабатывает DNS-кэш в так называемом «systemd resolved ». Это стандартная утилита, которая находит применение в большинстве операционных систем Linux. Чтобы определить, использует ли ваша ОС Systemd Resolved для обработки DNS и DNS-кеша в системе, запустите окно терминала, нажав Ctrl + Alt + T или Ctrl + Shift + T на клавиатуре. После этого выполните команду systemctl status в файле systemd-resolved.service.
systemctl status systemd-resolved.service
Просмотрите распечатку Systemd Resolved в окне терминала и найдите раздел «Active», как только вы найдете раздел «Active», и убедитесь, что рядом с ним «active (running)». Если это так, ваша система Linux использует это для управления DNS.
Чтобы очистить кэш DNS для Systemd Resolved, вам нужно использовать одну из встроенных функций Systemd Resolved. В частности, команда очистки кэша. Он мгновенно очистит DNS и снова заработает!
sudo systemd-resolved —flush-caches
Или, если вы не можете использовать sudo, выполните:
sudo systemctl restart systemd-resolved.service
Не можете использовать sudo? Войдите в систему как Root с su, прежде чем пытаться перезапустить сервис с помощью systemd.
systemctl restart systemd-resolved.service
Когда Systemd-Resolved завершит перезапуск, все проблемы с DNS должны быть исправлены!
Очистка DNS — DNS Masq
systemctl status dnsmasq.service
Прочитайте распечатку состояния, которую systemd предоставляет на экране. Доберитесь до «Active» раздела показаний. Просмотрите его и найдите «active (running)», чтобы убедиться, что служба активна. В этом случае можно сразу очистить кэш DNS для DNSMasq с помощью команды systemctl restart. В терминале введите следующую команду.
sudo systemctl restart dnsmasq.service
Или, для тех, кто не может использовать команды systemd с sudo, попробуйте войти в систему как Root, прежде чем пытаться перезапустить.
Очистка DNS — NSCD
NSCD является предпочтительной системой кеширования DNS для большинства операционных систем Linux на базе RedHat. Поэтому, если вы используете OpenSUSE Linux, CentOS или что-то подобное, есть хороший шанс, что вам придется возиться с этим, чтобы очистить кэш DNS.
Примечание: хотя Fedora Linux основана на RedHat, по умолчанию она не хранит кэш DNS.
Чтобы определить, использует ли ваша ОС Linux NSCD, вам нужно использовать команду status, так как это служба systemd.
systemctl status nscd.service
Выполнение команды состояния в службе NSCD даст вам много подробной информации о ней. Пролистайте и найдите раздел с надписью «Active». Если ваша система его использует, вы увидите зеленый текст с надписью « active (running) ».
Очистка кэша DNS с помощью NSCD работает почти так же, как любая другая система кэширования, которая работает с systemd. Все, что нужно сделать пользователю, это запустить команду systemctl restart. Команда перезагрузит службу и автоматически очистит кэш DNS, что устранит любые проблемы с DNS, с которыми вы можете столкнуться.
sudo systemctl restart nscd.service
Кроме того, если ваша ОС Linux отключает запуск команд systemctl с помощью sudo, вы можете перезапустить службу, сначала войдя в учетную запись Root с помощью su.
Источник