Прочтите это руководство, чтобы узнать, как внести постоянные изменения DNS в resolv.conf на Linux.
Согласно man resolv.conf, resolv.conf – это файл конфигурации резолвера.
Resolver – это набор процедур в библиотеке C, которые обеспечивают доступ к системе доменных имен Интернета (DNS).
Файл предназначен для чтения человеком и содержит список ключевых слов со значениями, которые предоставляют различные типы информации о резолвере.
Файл конфигурации считается надежным источником информации DNS (например, информация о битах AD DNSSEC будет возвращена из этого источника без изменений).
Если этот файл не существует, будет опрошен только сервер имен (nameserver) на локальном компьютере, а список search будет содержать имя локального домена, определенное по имени хоста.
Внесем постоянные изменения DNS в resolv.conf
Внесем постоянные изменения DNS в resolv.conf
Любые изменения, внесенные вручную в файл конфигурации /etc/resolv.conf, обязательно будут перезаписаны при изменениях в сети или перезагрузке системы.
Согласно комментариям, сделанным в файле, файл является динамическим. «DO NOT EDIT THIS FILE BY HAND — YOUR CHANGES WILL BE OVERWRITTEN».
Итак, возьмем, к примеру, если вы хотите добавить DNS-сервер в свой Linux-сервер, вы обычно обновляете этот файл, указывая IP-адрес сервера имен, который должен запрашивать резолвер.
См. Приведенную ниже команду, которая обновляет файл resolv.conf общедоступным первичным DNS-сервером Google DNS, выполнив такую команду:
echo "nameserver 8.8.8.8" > /etc/resolv.conf
Использование фреймворка Resolvconf
Resolvconf – это платформа для обновления системной информации о серверах DNS.
Он настраивается как посредник между программами, которые предоставляют эту информацию (такими как ifup и ifdown, DHCP-клиенты, демон PPP и локальные серверы имен) и программами, которые используют эту информацию, такими как кэши DNS и библиотеки resolver).
В дистрибутивах Ubuntu/Debian вы можете установить resolvconf, выполнив команду ниже;
sudo apt install resolvconf
После установки фреймворк стартует и запускается при загрузке системы.
Затем отредактируйте файл конфигурации /etc/resolvconf/resolv.conf.d/base и введите настройки DNS.
Пример настройки:
sudo vim /etc/resolvconf/resolv.conf.d/base
domain itisgood.ru
nameserver 8.8.8.8
nameserver 8.8.4.4
Затем обновите файл /etc/resolv.conf, чтобы внести постоянные изменения в DNS:
sudo resolvconf -u
Обновление настроек DNS-сервера в dhclient.conf
Если вы используете DHCPd для автоматического назначения IP-адреса, отредактируйте файл /etc/dhcp/dhclient.conf и добавьте следующую строку;
supersede domain-name-servers IP1, IP2;
Замените IP1 и IP2 соответствующими IP-адресами DNS:
vim /etc/dhcp/dhclient.conf
supersede domain-name-servers 8.8.8.8, 8.8.4.4;
Сохраните файл и выйдите.
Теперь, если вы запустите dhclient, ваш /etc/resolv.conf будет обновлен с использованием серверов DNS, определенных в dhclient.conf.
Вы можете использовать опцию prepend вместо supersede, чтобы добавить дополнительные IP-адреса к IP-адресу по умолчанию, предоставленному интернет-провайдером.
Больше информации:
man dhclient.conf
Как уcтановить IP-адрес сервера имен в настройках вашего интерфейса.
Отредактируйте файл конфигурации сетевого интерфейса и добавьте адрес сервера имен.
В Ubuntu 18.04/20.04 вы должны обновить файл конфигурации Netplan, например:
sudo vim /etc/netplan/01-network-manager-all.yaml
network:
version: 2
renderer: networkd
ethernets:
wlp0s20f3:
dhcp4: no
addresses: [192.168.100.80/24]
gateway4: 192.168.100.1
nameservers:
addresses: [8.8.8.8]
Мы устанавили DNS на публичный адрес DNS-сервера Google, 8.8.8.8.
В вашем случае все может быть иначе.
Применим изменения:
sudo netplan apply
На Debian и <= Ubuntu 16.04;
I think the issue here is with NetworkManager that is populating your resolv.conf file.
To disable dns updates.
1- Open the conf file with an editor :
sudo vi /etc/NetworkManager/NetworkManager.conf
2- Add the above to [main] section :
dns=none
3- Restart NetworkManager :
sudo service network-manager restart
SINCE you last EDIT :
As I see here you are using NetworkManager.service :
A- If you are using dhcp for your interface, then check the DNS setup by your DHCP server :
cat /var/lib/NetworkManager/*.lease | grep 'domain-name-servers'
You can set directly your dns entries needed in this case and disabling DHCP from supplying them :
# Edit dhclient configuration file
vi /etc/dhcp/dhclient.conf
# Set the fixed your dns server entries
supersede domain-name-servers 84.200.69.80, 84.200.70.40;
B- It’s clear here that your /etc/resolv.conf is clearly managed by systemd-resolved service.
So you can disable this service or let it running and edit its configuration in /etc/systemd/resolved.conf, so to disable it :
1- First check the output of the current systemd-resolved.conf file & check systemd-resolved is running :
sudo cat /run/systemd/resolve/resolv.conf
sudo systemd-resolve status
2- Stop / Disable the service :
sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved.service
3- Set the DNS processing mode in NetworkManager so it will not be anymore managed by systemd-resolved nor NetworKService ( Edit /etc/NetworkManager/NetworkManager.conf
) :
[main]
dns=none
4- Destroy the symlink /etc/resolv.conf -> /run/systemd/resolve/resolv.conf :
sudo unlink /etc/resolv.conf
5- Restart NetworkManager :
sudo systemctl restart NetworkManager
6- Recreate resolv.conf file :
sudo touch /etc/resolv.conf
sudo chown root:root /etc/resolv.conf
sudo chmod 644 /etc/resolv.conf
7- Populate manually resolv.conf file :
echo 'nameserver 84.200.70.40
nameserver 84.200.69.80
nameserver 192.168.4.1
nameserver 192.168.4.1
nameserver 192.168.1.1
nameserver 1.1.1.1' > /etc/resolv.conf
Итак, сегодня мы поговорим с вами о настройке DNS в Debian. Тем, кто «в теме», не потребуются объяснения, но для остальных пройдемся от малого. Что такое DNS? Это компьютерная распределенная система для получения информации о доменах. Она используется для получения IP-адреса той самой уютной ЖЖшки, или ВК. Нужна она прежде всего для человека, так как нам, как ни странно, будет проще запомнить адрес в буквенном формате, чем в числовом. Но это не единственный плюс.
Раньше сеть была гораздо меньше нынешней и на каждой машине находился файл hosts, его рассылали автоматически и «централизованно». Он отвечал за преобразование между доменными и IP-адресами, но сеть непрерывно росла, а данный метод уже явно не справлялся с поставленными задачами. Вот здесь и выходит на сцену механизм, способный делать все то же самое и в больших объемах — DNS. С основными определениями разобрались, теперь перейдем к сути статьи.
Сперва мы ознакомимся с файлом /etc/resolv.conf. Это — это основной файл настройки библиотеки распознавателя имен DNS. Распознаватель — это библиотека на языке Cи, именно она обеспечивает доступ к DNS для программ в системе.
Его функции настроены на следующее:
- На проверку записей в файле /etc/hosts или на нескольких серверах DNS;
- На использование базы данных хостов NIS (Информационная служба сети);
В современных Linux-системах, которые используют systemd, локальные приложения получают доступ к DNS через демон system—resolved. По умолчанию эта служба имеет четыре различных режима и использует по умолчанию файл-заглушку. Его путь: /run/systemd/resolve/stub-resolv.conf.
В данном файле используется в качестве единственного DNS—сервера заглушка — 127.0.0.53, которая перенаправляет обращения к локальному DNS серверу, а он, в свою очередь уже получает информацию от других серверов в интернете. Надеюсь, вы поняли суть.
К сожалению, из-за того, что /etc/resolv.conf не прямо управляется службой systemd-resolved, а иногда с помощью использования initscripts или NetworkManager, любые пользовательские изменения НЕ будут сохранены. С учетом всех сложностей, описанных выше, я хочу поделиться с вами информацией о том, как настроить DNS на Debian в этом злополучном файле /etc/resolv.conf.
Шаг 1. Содержимое /etc/resolv.conf
Чтобы это сделать мы откроем терминал и напишем команду:
cat /etc/resolv.conf
В нем мы видим имя сервера nameserver 192.168.1.1 и больше ничего. Это пока что, но мы к нему вернемся.
Шаг 2. Установка resolvconf
Обязательно обновим систему с помощью команды:
sudo apt update
После обновления устанавливаем resolvconf. Для этого пишем команду:
sudo apt install resolvconf
После установки система должна автоматически запустить службу resolvconf.service. Чтобы проверить так ли это вам надо будет использовать команду:
sudo systemctl status resolvconf.service
Здесь мы видим, что служба не запущена, но бывает, что триггер срабатывает автоматически. Так или иначе, нам надо запустить эту службу. Используем следующие команды:
sudo systemctl start resolvconf.service
sudo systemctl enable resolvconf.service
sudo systemctl status resolvconf.service
Как вы поняли, с помощью sudo systemctl start resolvconf.service и sudo systemctl enable resolvconf.service мы запускаем службу, а sudo systemctl status resolvconf.service отобразит состояние активности этой службы.
Шаг 3. Настройка DNS
Теперь откройте файл /etc/resolvconf/resolv.conf.d/head. Делается это с помощью команды:
sudo nano /etc/resolvconf/resolv.conf.d/head
Прекрасно, следующим шагом будет внесение данных в этот файл. Вписываем в него следующие строки так, как это показано на скриншоте:
nameserver 8.8.8.8
nameserver 8.8.4.4
Сохраняем изменения с помощью ctrl+o -> Enter -> ctrl+x. Теперь надо перезагрузить систему, чтобы изменения пришли в действие.
Шаг 4. Проверяем файл /etc/resolv.conf
После перезагрузки снова открываем терминал и пишем команду для запуска службы (это вторичная мера, у меня, например, триггер сработал автоматически):
sudo systemctl start resolvconf.service
Видим, что служба запущена. Переходим в наш конфигурационный файл, который был описан в самом начале статьи. Используем команду:
cat /etc/resolv.conf
На скриншоте отображены те самые данные, которые мы внесли в файл — nameserver 8.8.8.8 и nameserver 8.8.4.4 На этом все! Настройка DNS Debian завершена. Достаточно легко и просто, а главное, что все работает.
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Red Hat Training
A Red Hat training course is available for RHEL 8
By default, NetworkManager on Red Hat Enterprise Linux (RHEL) 8 dynamically updates the /etc/resolv.conf
file with the DNS settings from active NetworkManager connection profiles. However, you can disable this behavior and manually configure DNS settings in /etc/resolv.conf
.
32.1. Disabling DNS processing in the NetworkManager configuration
By default, NetworkManager manages DNS settings in the /etc/resolv.conf
file, and you can configure the order of DNS servers. Alternatively, you can disable DNS processing in NetworkManager if you prefer to manually configure DNS settings in /etc/resolv.conf
.
Procedure
-
As the root user, create the
/etc/NetworkManager/conf.d/90-dns-none.conf
file with the following content by using a text editor:[main] dns=none
-
Reload the
NetworkManager
service:# systemctl reload NetworkManager
After you reload the service, NetworkManager no longer updates the
/etc/resolv.conf
file. However, the last contents of the file are preserved. -
Optionally, remove the
Generated by NetworkManager
comment from/etc/resolv.conf
to avoid confusion.
Verification steps
-
Edit the
/etc/resolv.conf
file and manually update the configuration. -
Reload the
NetworkManager
service:# systemctl reload NetworkManager
-
Display the
/etc/resolv.conf
file:# cat /etc/resolv.conf
If you successfully disabled DNS processing, NetworkManager did not override the manually configured settings.
32.2. Replacing /etc/resolv.conf with a symbolic link to manually configure DNS settings
By default, NetworkManager manages DNS settings in the /etc/resolv.conf
file, and you can configure the order of DNS servers. Alternatively, you can disable DNS processing in NetworkManager if you prefer to manually configure DNS settings in /etc/resolv.conf
. For example, NetworkManager does not automatically update the DNS configuration if /etc/resolv.conf
is a symbolic link.
Prerequisites
-
The NetworkManager
rc-manager
configuration option is not set tofile
. To verify, use theNetworkManager --print-config
command.
Procedure
-
Create a file, such as
/etc/resolv.conf.manually-configured
, and add the DNS configuration for your environment to it. Use the same parameters and syntax as in the original/etc/resolv.conf
. -
Remove the
/etc/resolv.conf
file:# rm /etc/resolv.conf
-
Create a symbolic link named
/etc/resolv.conf
that refers to/etc/resolv.conf.manually-configured
:# ln -s /etc/resolv.conf.manually-configured /etc/resolv.conf
Стало достаточно традиционным для Linux запускать небольшой локальный DNS-сервер, который ускоряет работу, кешируя ответы на повторяющиеся DNS-запросы. В этом случае в общесистемный /etc/resolv.conf
помещается директива nameserver 127.0.0.1
, а ip-адреса внешних DNS-серверов переносятся в настройки локального.
При изменении сетевой конфигурации, запуске и остановке процессов, некоторым программам необходимо динамически изменять файл resolv.conf
. При одновременном доступе программы мешают друг другу и сохраняют неверную информацию в файл. Утилита resolvconf
действует как посредник между программами, которые предоставляют информацию о сервере имен, и программами, которые используют информацию о сервере имен.
При этом файл resolv.conf
заменяется символической ссылкой на /run/resolvconf/resolv.conf
и программы используют динамически сгенерированный файл. В системе без службы resolvconf.service
файл resolv.conf
поддерживается вручную или набором скриптов. И эти скрипты могут мешать друг другу при попытках одновременного доступа к файлу.
Всё работало хорошо, пока не появились NetworkManager и Systemd. Система инициализации Systemd имеет свой собственный резолвер systemd-resolved
, запущенный по умолчанию и требующий отдельной настройки. А NetworkManager пытается дружить со всеми — с resolvconf
, с Systemd
, с наиболее распространёнными DNS-резолверами.
Всё это привело к тому, что теперь в одной системе порт 53 может слушать несколько разных резолверов, причём для избежания конфликтов NetworkManager
и systemd-resolved
используют вместо 127.0.0.1
другие ip-адреса в loopback-сети:
127.0.0.1
—dnsmasq
илиunbound
с настройками по умолчанию127.0.1.1
—dnsmasq
илиunbound
, запущенный NetworkManager127.0.0.53
—systemd-resolved
, запущенный по умолчанию
Настройка службы systemd-resolved
В Ubuntu Server эта служба уже установлена и запущена сразу после установки операционной системы. Но если это не так, установить ее несложно:
# apt install systemd-resolved
Следующим шагом будет правка файла /etc/nsswitch.conf
— находим строку, которая начинается с hosts
:
# nano /etc/nsswitch.conf
passwd: compat systemd
group: compat systemd
shadow: compat
gshadow: files
hosts: files resolve dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Эта строка отвечает за последовательность обращений приложения к системным компонентам с целью резолвинга доменного имени. В данном случае сначала программа заглянет в файл /etc/hosts
, затем запросит демона systemd-resolved
, а потом — к DNS серверам.
Осталось сообщить systemd-resolved
ip-адреса DNS-серверов, к которым следует обращаться для резолвинга:
# nano /etc/systemd/resolved.conf
[Resolve] # сервера DNS от Cloudflare DNS=1.1.1.1 1.0.0.1 #FallbackDNS= #Domains= #LLMNR=no #MulticastDNS=no #DNSSEC=no #Cache=yes #DNSStubListener=yes
Для целей совместимости с приложениями, которые не используют библиотечные вызовы, а обращаются к DNS-серверам напрямую, получая их ip-адреса из /etc/resolv.conf
, следует создать символическую ссылку. Обычно этого не требуется, ссылка уже существует после установки systemd-resolved
:
# ln -svi /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
В файле /run/systemd/resolve/stub-resolv.conf
указан один-единственный сервер 127.0.0.53
:
$ cat /run/systemd/resolve/stub-resolv.conf
nameserver 127.0.0.53 option edns0
Кроме того, можно создать символическую ссылку на /run/systemd/resolve/resolv.conf
. Этот файл содержит DNS-сервера, полученные от DHCP-сервера и из файла конфигурации /etc/systemd/resolved.conf
. В этом случае локальный кеширующий сервер не используется, что замедлит резолвинг.
# ln -svi /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ cat /run/systemd/resolve/resolv.conf
nameserver 1.1.1.1 # из файла конфигурации /etc/systemd/resolved.conf nameserver 1.0.0.1 # из файла конфигурации /etc/systemd/resolved.conf nameserver 8.8.8.8 # этот DNS-сервер получен от DHCP-сервера сети # Too many DNS servers configured, the following entries may be ignored. nameserver 8.8.4.4 # этот DNS-сервер получен от DHCP-сервера сети
Как видите, у меня DNS-серверов получилось слишком много, так что последняя запись может быть проигнорирована. Все готово, остается только разрешить запуск службы при загрузке системы, если это еще не было сделано:
# systemdctl enable systemd-resolved # reboot
Настройка службы resolvconf.service
Служба предоставляет остальным программам централизованный интерфейс для добавления и удаления записей в /etc/resolv.conf
при изменении сетевой конфигурации, запуске и остановке процессов и т.д.
# apt install resolvconf
После установки /etc/resolv.conf
будет представлять из себя ссылку на /run/resolvconf/resolv.conf
.
$ cat /run/resolvconf/resolv.conf
nameserver 127.0.0.53 option edns0
При этом исходный файл /etc/resolv.conf
(который на самом деле ссылка на /run/systemd/resolve/resolv.conf
) будет сохранен как original
в директории /etc/resolvconf/resolv.conf.d/
(чтобы восстановить его при удалении службы resolvconf.service
). В этой же директории есть есть еще три файла — base
, head
и tail
— которые позволяют вручную добавить записи в динамически формируемый /run/resolvconf/resolv.conf
.
/etc/resolvconf/resolv.conf.d/base File containing basic resolver information. The lines in this file are included in the resolver configuration file even when no interfaces are configured. /etc/resolvconf/resolv.conf.d/head File to be prepended to the dynamically generated resolver configuration file. Normally this is just a comment line. /etc/resolvconf/resolv.conf.d/tail File to be appended to the dynamically generated resolver configuration file. To append nothing, make this an empty file. This file is a good place to put a resolver options line if one is needed, e.g. options inet6
Теперь добавим пару записей в файл tail
(сервера OpenDNS):
# nano /etc/resolvconf/resolv.conf.d/tail
# сервера DNS от OpenDNS
nameserver 208.67.222.222
nameserver 208.67.220.220
Перезагрузим службу и посмотрим сформированный /run/resolvconf/resolv.conf
:
# systemctl restart resolvconf.service
$ cat /run/resolvconf/resolv.conf
nameserver 127.0.0.53
# сервера DNS от OpenDNS
nameserver 208.67.222.222
nameserver 208.67.220.220
Первая запись — это резолвер systemd-resolved
, а две другие записи были добавлены в конец resolv.conf
из файла tail
. Благодаря тому, что первая запись это 127.0.0.53
— резолвинг будет работать быстро, потому что systemd-resolved
кеширует ответы DNS-серверов.
$ nslookup ya.ru Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: ya.ru Address: 87.250.250.242 Name: ya.ru Address: 2a02:6b8::2:242
Но если мы остановим службу systemd-resolved
, резолвинг все равно будет работать, используя сервера 208.67.222.222
и 208.67.220.220
— хотя и гораздо медленнее.
# systemctl stop systemd-resolved.service # systemctl disable systemd-resolved.service # reboot
$ cat /etc/resolv.conf
# сервера DNS от OpenDNS
nameserver 208.67.222.222
nameserver 208.67.220.220
$ nslookup ya.ru Server: 208.67.222.222 Address: 208.67.222.222#53 Non-authoritative answer: Name: ya.ru Address: 87.250.250.242 Name: ya.ru Address: 2a02:6b8::2:242
Используем только resolv.conf
Так делать не рекомендуется, потому что резолвинг будет работать медленно, но рассмотрим и этот вариант для полноты картины. Первым делом изменим имя файла /etc/resolv.conf
на /etc/resolv.conf.back
, а потом создадим свой resolv.conf
:
# mv /etc/resolv.conf /etc/resolv.conf.back # nano /etc/resolv.conf
# сервера DNS от Yandex
nameserver 77.88.8.8
nameserver 77.88.8.1
Для Ubuntu Desktop запретим вездесущему NetworkManager вмешиваться в процесс распознавания доменных имен:
# nano /etc/NetworkManager/conf.d/dns.conf
[main] dns=no rc-manager=unmanaged
Остановим службы resolvconf.service
и systemd-resolved.service
:
# systemctl stop resolvconf.service # systemctl disable resolvconf.service # systemctl stop systemd-resolved.service # systemctl disable systemd-resolved.service # reboot
Проверим, как теперь работает распознавание доменных имен:
$ nslookup ya.ru Server: 77.88.8.8 Address: 77.88.8.8#53 Non-authoritative answer: Name: ya.ru Address: 87.250.250.242 Name: ya.ru Address: 2a02:6b8::2:242
Поиск:
Linux • Ubuntu • Кеширование • Конфигурация • Настройка • Сервер • Установка • DNS • nslookup • resolv.conf
Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Файл настроек /etc/resolv.conf
содержит информацию, которая позволяет компьютеру преобразовывать буквенно-цифровые доменные имена в цифровые IP адреса.
При использовании DHCP, dhclient обычно перезаписывает resolv.conf информацией полученной от DHCP сервера.
Как редактировать файл «/etc/resolv.conf»?
Используйте текстовые редакторы, такие как vi или gedit, в Linux:
# vi /etc/resolv.conf
В /etc/resolv.conf
настраиваются три основные опции (директивы):
nameserver # IP адрес DNS сервера domain # Доменное Имя локального хоста search # Какие Доменные Имена искать
Директива «nameserver»
Опция nameserver
указывает на IP адрес DNS сервера.
nameserver <IP адрес>
Это может быть Ваш личный DNS сервер, какой-либо публичный DNS сервер либо DNS сервер Вашего интернет провайдера.
Замечание: Вы можете указать максимум 3 DNS сервера.
Пример:
nameserver 192.168.0.100 nameserver 8.8.8.8 nameserver 8.8.4.4
Директива «domain»
Локальное доменное имя хоста.
domain <локальное доменное имя>
Пример:
domain domain.com nameserver 192.168.0.100 nameserver 8.8.4.4
Как работает директива «domain» в файле «resolv.conf»?
Вы можете использовать директиву domain
для преобразования коротких доменных имен. В качестве примера, предположим, что в домене есть компьютер с именем test
.
Таким образом, если в файл /etc/resolv.conf
поместить следующую строку:
domain example.com
Тогда, Ваш компьютер будет пытаться преобразовать test
, как доменное имя test.example.com
.
Директива «search»
Задает список поиска для имен хостов. Список поиска обычно определяется по имени локального домена. Это можно изменить, перечислив список доменов для поиска в этой директиве.
search <список поиска>
Пример:
search example.com company.net nameserver 192.168.0.100 nameserver 8.8.8.8
Как работает директива «search» в файле «resolv.conf»?
Вам необходимо использовать директиву search
для преобразования коротких доменных имен. В качестве примера, предположим, что в домене есть компьютер с именем test
.
Таким образом, если в файл /etc/resolv.conf
поместить следующие строки:
search example.com company.net
Тогда, Ваш компьютер будет пытаться преобразовать test
, как доменное имя test.example.com
, а затем как test.company.net
. В качестве IP адреса будет возвращено первое успешное преобразование.
Post Views:
2 587
Translation(s): 한국어
Ordinarily, the resolv.conf(5) file is managed dynamically by various network service daemons. This is the default, and is intended for laptops and other highly mobile systems which may connect to different networks. It also works well for many desktop and server systems, so long as the network infrastructure is perfect.
For some systems, on some networks, the system administrator may wish to configure /etc/resolv.conf by hand. This leads to a conflict between the administrator’s changes, and the dynamic changes performed by the network service daemons.
If you edit resolv.conf by hand, and need to stop daemons from overwriting your changes, this page documents some of your options.
Configuring openresolv or resolvconf
Debian provides two packages, each of which contains a program named resolvconf, which may be used to control (or outright prevent) the alteration of the /etc/resolv.conf file by various networking programs. These packages are openresolv and resolvconf. They conflict with each other, because they literally both provide the same program, so you have to pick at most one of them.
These packages include various configuration files for other packages (such as isc-dhcp-client). For example, resolvconf includes a file which modifies the make_resolv_conf shell function used by dhclient-script(8).
If openresolv is installed, you can tell it to do nothing whenever some daemon tries to modify resolv.conf, by putting resolvconf=NO in the /etc/resolvconf.conf file. (Note: this is not the /etc/resolv.conf file!)
If resolvconf is installed, and if you’re using ifupdown to configure your interface(s), you can use dns-nameserver entries in the appropriate stanza(s) in /etc/network/interfaces:
iface eth0 inet static address 192.168.1.3 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameserver 192.168.1.254 dns-nameserver 8.8.8.8 dns-search foo.org bar.com
Configuring dhclient
The most common daemon which overwrites resolv.conf is dhclient(8) (from isc-dhcp-client). In many cases, simply stopping this one daemon from touching the file will suffice.
Stop dhclient from modifying /etc/resolv.conf
Another approach makes use of dhclient-script’s hook scripts. According to dhclient-script(8):
- When it starts, the client script first defines a shell function, make_resolv_conf , which is later used to create the /etc/resolv.conf file. To override the default behaviour, redefine this function in the enter hook script.
Therefore, we can stop dhclient from overwriting resolv.conf by doing the following:
echo 'make_resolv_conf() { :; }' > /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone chmod 755 /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone
The execute bit is required because dhclient-script uses run-parts(8) to decide which files to read. For that same reason, the filename must not contain anything but letters, digits, underscores and hyphens.
Modifying /etc/dhcp/dhclient.conf
The /etc/dhcp/dhclient.conf file can be populated with directives that will override the options sent by the DHCP server. For example, these directives will override the domain, search, and nameserver parameters that are placed into /etc/resolv.conf:
supersede domain-name "example.com"; supersede domain-search "example.com"; supersede domain-name-servers 127.0.0.1;
Another option is to remove «domain-name, domain-name-servers, domain-search» from the request line. However, this only works on some networks, and not on others. If the DHCP server sends unsolicited domain-name-servers (et al.) responses, dhclient will still heed them, and will still overwrite the resolv.conf file.
Making /etc/resolv.conf immutable
This approach will render /etc/resolv.conf immutable so that it cannot be changed, regardless of what packages are installed or what tries to modify it.
rm -f /etc/resolv.conf editor /etc/resolv.conf chattr +i /etc/resolv.conf
Obviously, you will need to put the appropriate content into the file before setting the immutable bit. Any time you wish to change the file, you will have to remove the bit, make your change, and then restore the bit.
A consequence of making /etc/resolv.conf immutable is that if dhclient-script tries to change it and fails, it clutters /etc with temporary files. See 860928 for details. The user/admin may need to periodically clean these files out of /etc until #860928 is fixed.
CategoryNetwork
The /etc/resolv.conf is the main configuration file for the DNS name resolver library. The resolver is a set of functions in the C library that provide access to the Internet Domain Name System (DNS). The functions are configured to check entries in the /etc/hosts file, or several DNS name servers, or to use the host’s database of Network Information Service (NIS).
On modern Linux systems that use systemd (system and service manager), the DNS or name resolution services are provided to local applications via the systemd-resolved service. By default, this service has four different modes for handling the Domain name resolution and uses the systemd DNS stub file (/run/systemd/resolve/stub-resolv.conf) in the default mode of operation.
The DNS stub file contains the local stub 127.0.0.53 as the only DNS server, and it is redirected to the /etc/resolv.conf file which was used to add the name servers used by the system.
If you run the following ls command on the /etc/resolv.conf, you will see that this file is a symlink to the /run/systemd/resolve/stub-resolv.conf file.
$ ls -l /etc/resolv.conf lrwxrwxrwx 1 root root 39 Feb 15 2019 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
Unfortunately, because the /etc/resolv.conf is indirectly managed by the systemd-resolved service, and in some cases by the network service (by using initscripts or NetworkManager), any changes made manually by a user can not be saved permanently or only last for a while.
In this article, we will show how to install and use the resolvconf program to set permanent DNS name servers in /etc/resolv.conf file under Debian and Ubuntu Linux distributions.
Why Would You Want to Edit /etc/resolv.conf File?
The main reason could be because the system’s DNS settings are misconfigured or you prefer to use specific name servers or your own. The following cat command shows the default name server in the /etc/resolv.conf file on my Ubuntu system.
$ cat /etc/resolv.conf
In this case, when local applications such as the APT package manager try to access FQDNs (Fully Qualified Domain Names) on the local network, the result is a “Temporary failure in name resolution” error as shown in the next screenshot.
The same happens when you run a ping command.
$ ping google.com
So when a user tries to manually set the name servers, the changes do not last for long or are revoked after a reboot. To resolve this, you can install and use the reolvconf utility to make the changes permanent.
To install the resolvconf package as shown in the next section, you need to first manually set the following name servers in the /etc/resolv.conf file, so that you access the FQDMs of Ubuntu repository servers on the internet.
nameserver 8.8.4.4 nameserver 8.8.8.8
Read Also: How to Setup Local DNS Using /etc/hosts File in Linux
Installing resolvconf in Ubuntu and Debian
First, update the system software packages and then install resolvconf from the official repositories by running the following commands.
$ sudo apt update $ sudo apt install resolvconf
Once the resolvconf installation is complete, the systemd will trigger the resolvconf.service to be automatically started and enabled. To check if it is up and running issues the following command.
$ sudo systemctl status resolvconf.service
If the service is not started and enabled automatically for any reason, you can start and enable it as follows.
$ sudo systemctl start resolvconf.service $ sudo systemctl enable resolvconf.service $ sudo systemctl status resolvconf.service
Set Permanent DNS Nameservers in Ubuntu and Debian
Next, open the /etc/resolvconf/resolv.conf.d/head configuration file.
$ sudo nano /etc/resolvconf/resolv.conf.d/head
and add the following lines in it:
nameserver 8.8.8.8 nameserver 8.8.4.4
Save the changes and restart the resolvconf.service and systemd-resolved or reboot the system.
$ sudo systemctl restart resolvconf.service $ sudo systemctl restart systemd-resolved.service
Now when you check the /etc/resolv.conf file, the name server entries should be stored there permanently. Henceforth, you will not face any issues concerning name resolution on your system.
I hope this quick article helped you in setting the permanent DNS nameservers in your Ubuntu and Debian systems. If you have any queries or suggestions, do share them with us in the comments section below.
If You Appreciate What We Do Here On TecMint, You Should Consider:
TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.
If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.
We are thankful for your never ending support.