Ubuntu слетает dns после перезагрузки

Обновлено: 04.07.2024

Сервера DNS используются системой для преобразования сложных для запоминания IP адресов в простые доменные имена. Это делается потому что людям сложно запоминать несколько никак не связанных цифр, но очень просто запомнить слово.

Когда компьютеру нужно узнать IP адрес какого-либо домена, он отправляет запрос известному ему DNS серверу. Эти сервера могут быть получены автоматически от роутера по DHCP или же заданы в ручную. В этой статье мы рассмотрим как выполняется настройка DNS Ubuntu 16.04 и более старых версиях.

Настройка DNS в Ubuntu через GUI

Раньше, для настройки DNS серверов, которые будут использоваться системой было достаточно внести адреса нужных серверов в файл /etc/resolv.conf. Но сейчас всей конфигурацией сети в Ubuntu управляет NetworkManager, а этот файл теперь представляет собой только ссылку на файл NetworkManager.

Этот способ до сих пор работает, но в нем вы можете настроить DNS на LiveCD, или до перезагрузки. После перезагрузки все настройки собьются и придется все делать заново. Поэтому, чтобы все сохранилось нужно выполнять все действия через интерфейс NetworkManager. Сначала откройте контекстное меню для значка сети на панели и выберите "Изменить подключения":


Выберите ваше подключение и нажмите "Изменить":


В открывшемся окне перейдите на вкладку "Параметры IPv4":


Затем, в поле "Способ настройки" выберите "Автоматически (DHCP, только адрес)":


Теперь немного ниже появиться поле "Серверы DNS", где вам нужно прописать нужные серверы, можно несколько адресов через запятую. Например, можно указать сервера от Google:


Поле этого нажмите "Сохранить" и "Закрыть". Теперь можете переподключитесь к этому соединению и можете проверять текущий DNS сервер:


Собственно, это все, но есть еще один способ настройки через консоль, если этот не сработал или вы предпочитаете работать из консоли.

Настройка DNS через терминал Ubuntu

В Ubuntu есть унифицированный интерфейс настройки сети, который настраивается через конфигурационный файл /etc/network/interfaces. Сначала смотрим список сетевых интерфейсов:


Откройте файл для редактирования и найдите в нем имя своего сетевого интерфейса, например, auto enp0s3, если такой секции нет, ее нужно добавить:

sudo vi /etc/network/interfaces

auto enp0s3
iface enp0s3 inet dhcp

Затем, добавьте в эту секцию строчку:


Здесь адрес 8.8.8.8 - это адрес вашего DNS сервера. Но эта настройка сработает, только если ваш DHCP клиент не пытается назначить адрес самостоятельно. Чтобы указать DNS адрес на уровне DHCP сервера нужно добавить такую строчку в конфигурационный файл /etc/dhcp/dhclient.conf:

sudo vi /etc/dhcp/dhclient.conf

supersede domain-name-servers 8.8.8.8


Здесь тоже адрес 8.8.8.8 означает адрес DNS сервера. Для верности, вы можете добавить свои адреса DNS серверов в файл /etc/resolvconf/resolv.conf.d/base:

sudo vi /etc/resolvconf/resolv.conf.d/base


Чтобы настройки вступили в силу необходимо перезапустить сеть:

sudo systemctl restart networking

Возможно, даже лучше будет если вы полностью перезагрузите компьютер. Теперь вы можете открыть /etc/resolv.conf и посмотреть применялся ли новый адрес DNS:


Как видите, в моем примере все заработало. Подобно этому выполняется настройка dns linux для любого дистрибутива.

Выводы

В этой небольшой статье мы рассмотрели как выполняется настройка DNS Ubuntu 16.04 через графический интерфейс или терминал. В Ubuntu автоматической настройкой DNS могут заниматься множество утилит и это создает некоторые проблемы при настройке, но со всем можно разобраться. Надеюсь, эта информация была полезной для вас.

Я нуждаюсь в помощи, выясняя почему мой resolv.conf продолжает изменяться на это, заставляя меня не смочь получить доступ к внешнему Интернету и только локальной сети:

Я думал, что зафиксировал его путем избавления от петлевого интерфейса и добавления в интерфейсе eth0 в /etc/network/interfaces с инструкциями относительно блога posterous jontsai.

Я попробовал вещи как выполнение:

И затем вещи работали бы временно, и в конечном счете сервер имен в resolv.conf вернуться снова.

P.S. Я также отправил это на ubuntuforums.

Таким образом, я пробую это:

while true; do echo listening; lsof | grep /etc/resolv.conf; echo sleeping; sleep 1; done

Добавление вывода файлов:

Никакой такой файл как /etc/NetworkManager/NetworkManager.conf

Вы можете сделать статические дополнения к /etc/resolv.conf . Эти дополнения могут переопределять автоматически добавляемые вещи.

Сначала установите пакет resolvconf .

Затем нажмите Alt+F2 и запустите gksudo nautilus . Откройте /etc/resolvconf/resolv.conf.d/head , если хотите добавить в начало файла; откройте /etc/resolvconf/resolv.conf.d/tail , если хотите добавить в конец. Внесите изменения, сохраните/закройте файлы, а затем запустите sudo resolvconf -u , чтобы применить изменения.

(К сожалению, я не помню, имеют ли настройки в начале или в конце файла наивысший приоритет.)

(В этом ответе содержатся способы исследования происходящего. Я могу дать реальное решение, если вы используете эти методы для сбора и предоставления дополнительной информации.)

Возможным триггером для, казалось бы, спонтанных обновлений /etc/resolv.conf является момент, когда DHCP-аренда обновляется. Проверьте, на какой период времени вы получаете DHCP-аренду (это должно появиться в системных журналах, я думаю, в /var/log/syslog ).

Вы можете использовать auditd для того, чтобы узнать, что изменяет файл. Запустите демона ( sudo service auditd start ) и скажите ему, чтобы он следил за изменениями в этом файле:

Audit logs находятся в /var/log/audit/audit.log . Вы увидите время, когда файл был изменен, и имя программы, которая его модифицировала.

Если у вас установлен пакет resolvconf , Network Manager может наступать на ноги. Попробуйте выключить все сетевые интерфейсы, затем остановить сетевой менеджер ( sudo service network-manager stop ), затем перезапустить его.

Я отключаю обновление разрешения -to . conf , создав файл с именем disable_make_resolv_conf в /etc/dhcp3/dhclient-enter-hooks.d

Он заменяет стандартную функцию тем же именем, которое отвечает за обновление resolv.conf .

У меня была точно такая же проблема - resolv.conf переписывался каждый раз при перезагрузке сервера.

Это было вызвано DHCP. Чтобы установить resolv.conf таким, каким я хочу его видеть, я отредактировал /etc/dhcp/dhclient.conf и добавил следующее:

Фактически, вы можете немного контролировать свой файл resolv.conf. внесением изменений в это.

Надеюсь, это поможет.

ответ дан Peter Sankauskas 23 November 2019 в 00:53

Откройте терминал и введите

+ i позаботится о том, чтобы файл не сбрасывался при загрузке даже с правами root.

Для отмены вышеуказанного

Другой вариант, который мне повезло, связан с использованием resolvconf .

Добавьте любые записи в этот файл:

И они будут добавлены в /etc/resolv.conf .

Поздно, но я опубликую свой случай, поскольку он отличался от всего вышеперечисленного.

В моем случае /etc/resolv.conf является символической ссылкой на /var/run/NetworkManager/resolv.conf и по какой-то причине cat / etc /resolv.conf выдает ошибку: нет такого файла или каталога (может быть, потому что он пуст?)

Если я открою его с помощью vi и добавлю сервер имен xxxx , он будет работать, но очищается при перезагрузке.

Я попытался отредактировать / etc / network / interfaces и добавить dns-nameservers xxxx , изменить /etc/dhcp/dhclient.conf и удалить в запрос серверы доменных имен , также отредактированный , добавление серверов доменных имен xxxx [1170 403].

Двоичный файл Resolvconf не установлен, NetworkManager.conf не содержит ничего важного. Но каждый раз, когда я перезагружал машину, сервер домена отсутствовал.

Я не уверен, в чем причина, но похоже, что это связано с тем, что это машина VBox, запущенная GNS3 и из-за этого внутри Настройка VBox, я должен оставить его без создания интерфейса. Очевидно, GNS3 создает «интерфейс UDP» на лету, когда я запускаю машину, при условии, что я запускаю его из GNS3.


Прочтите это руководство, чтобы узнать, как внести постоянные изменения DNS в resolv.conf на Linux.

Файл предназначен для чтения человеком и содержит список ключевых слов со значениями, которые предоставляют различные типы информации о резолвере.

Файл конфигурации считается надежным источником информации 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, выполнив такую команду:

Использование фреймворка Resolvconf

Он настраивается как посредник между программами, которые предоставляют эту информацию (такими как ifup и ifdown, DHCP-клиенты, демон PPP и локальные серверы имен) и программами, которые используют эту информацию, такими как кэши DNS и библиотеки resolver).

В дистрибутивах Ubuntu/Debian вы можете установить resolvconf, выполнив команду ниже;

После установки фреймворк стартует и запускается при загрузке системы.

Затем отредактируйте файл конфигурации /etc/resolvconf/resolv.conf.d/base и введите настройки DNS.

Затем обновите файл /etc/resolv.conf, чтобы внести постоянные изменения в DNS:

Обновление настроек DNS-сервера в dhclient.conf

Если вы используете DHCPd для автоматического назначения IP-адреса, отредактируйте файл /etc/dhcp/dhclient.conf и добавьте следующую строку;

supersede domain-name-servers IP1, IP2;

Замените IP1 и IP2 соответствующими IP-адресами DNS:

Сохраните файл и выйдите.

Теперь, если вы запустите dhclient, ваш /etc/resolv.conf будет обновлен с использованием серверов DNS, определенных в dhclient.conf.

Вы можете использовать опцию prepend вместо supersede, чтобы добавить дополнительные IP-адреса к IP-адресу по умолчанию, предоставленному интернет-провайдером.

Как уcтановить IP-адрес сервера имен в настройках вашего интерфейса.

Отредактируйте файл конфигурации сетевого интерфейса и добавьте адрес сервера имен.

В Ubuntu 18.04/20.04 вы должны обновить файл конфигурации Netplan, например:

Мы устанавили DNS на публичный адрес DNS-сервера Google, 8.8.8.8.

В вашем случае все может быть иначе.

Перезапустите сеть, чтобы изменения вступили в силу;

На CentOS и аналогичных производных отредактируйте соответствующий интерфейс следующим образом.

Замените INTERFACE своим именем интерфейса.

Также отключите управление сетевым интерфейсом с помощью демона NetworkManager.

  • Вопрос задан более трёх лет назад
  • 2822 просмотра

dummyman

Вероятно, вы забыли что-то добавить в конфиг, всегда есть возможность установить dns-ы индивидуально локально.

Перезагружаем
sudo service network-manager restart

Вроде оно. Если ошибка повторяется, то можно добавить влоб

Есть вариант поставить dnsmasq

По аналогии перезагрузить и пользоваться.
sudo service dnsmasq restart

cat /etc/resolv.conf
это не помогло, ДНС остался только nameserver 127.0.1.1

а этого файла у меня НЕТУ ВООБЩЕ /etc/dhcp/dhclient.d/mydns.conf

Есть вариант поставить dnsmasq

sudo echo "server=8.8.8.8" >> /etc/dnsmasq.conf
sudo echo "server=8.8.4.4" >> /etc/dnsmasq.conf

НЕТУ У МЕНЯ ЭТИХ ФАЙЛОВ

dummyman

nosazus:
Все делать на клиенте.
/etc/resolvconf/resolv.conf.d/base
/etc/resolvconf/resolv.conf.d/head
/etc/dhcp/dhclient.d/mydns.conf
должны создаться.

dnsmasq еще нужно установить.
apt-get install dnsmasq

dummyman

Потому что убунта.

Ставил бы сразу слаку - не видел бы проблем!

Спасибо вам за советы. Вчера ночью психанул и бросил. Сегодня проснулся, загрузил комп и в /etc/resolv.conf появился nameserver 8.8.4.4. Попробовал подключится к ВПН - и он заработал. Не знаю почему. Ничего не менял. Получается перезагрузка обяхательно нужна после этих манипуляций? Я перезагружал только NetworkManager вчера. Делал только это:

sudo echo "nameserver 8.8.8.8" > /etc/resolvconf/resolv.conf.d/base
sudo echo "nameserver 8.8.4.4" > /etc/resolvconf/resolv.conf.d/head

Слака - это Slackware? Я читал что вроде ее бросили развивать. ВОобще думаю над переходом с Убунты, вы правы. Думал чистый Дебиан, но прочитал что там проблемы с вай-фаем после установки ОС, надо плясать. dummyman: sshuttle ОЧЕНЬ интересно. Я только вчера читал как тунеллировать через SSH, но встречал инструкции только как по отдельности направлять траффик, для SMTP, TCP и тд. Получается можно сразу все завернуть? Попробую!

dummyman

nosazus: слака жива. почему я говорю, что с ней бы не было таких проблем? когда вы дойдете до настройки dns, вы уже будете уметь программировать хотя б на базовом уровне, компилировать ядро, вносить коррективы в код Патрика. Вы будете в курсе обо всех компонентах, обеспечивающих работу сети. А уж конфиг dns для вас не будет вопросом.

dummyman написал варианты решения проблемы но не написал причины, куда можно посмотреть повнимательнее :
Если до подключения интернет работает а после - нет, значит вы в конфигурации VPN при подключении отдаете неверные DNS сервера с VPN сервера на ваш клиент. Это первый вариант, который можно проверить.
Путь решения описал dummyman :
- Вписать гарантированно работающие DNS серверы в ваш resolv.conf
- использовать dnsmasq и резолвить DNSы только через него, игнорируя приходящие настройки (это, по сути, еще одна программная прослойка которую нужно корректно настроить, поэтому этот путь спорный)
Я бы добавил еще путь "проверить настройки на VPN сервере : что отдается клиенту при подключении в качестве настроек сети(dns серверы)

Второй вариант проблемы - используемые вами до подключения DNS серверы пытаются ходить в интернет через VPN, а VPN им не разрешает по какой-то причине. Здесь только проверка (tracepath до прописанного в конфиге DNS сервера) и после получения результата - корректная настройка того узла где трейс теряется. Или же добавление маршрутов к DNS серверам через ваше интернет подключение, чтобы не ходили DNSы через VPN.

P.S. прочитал комментарии к ответу:


Что-то у вас намудрено. Проверьте для начала работоспособность интернета и содержимое /etc/resolv.conf без подключенного VPN.

Спасибо вам за советы. Вчера ночью психанул и бросил. Сегодня проснулся, загрузил комп и в /etc/resolv.conf появился nameserver 8.8.4.4. Попробовал подключится к ВПН - и он заработал. Не знаю почему. Ничего не менял. Получается перезагрузка обяхательно нужна после этих манипуляций? Я перезагружал только NetworkManager вчера. Делал только это:

sudo echo "nameserver 8.8.8.8" > /etc/resolvconf/resolv.conf.d/base
sudo echo "nameserver 8.8.4.4" > /etc/resolvconf/resolv.conf.d/head

dummyman

yellowmew: Да тут вопрос не в эталонной настройке vpn. Автору бы сначала сделать чтобы работало хоть как то. Знаю как это выглядет. Сотни вкладок с форумами на слабеньком нетбуке. Дикая головная боль.

А с нынешним количеством гайдов по настройке openvpn сложно понять что именно было упущено. Там надо принимать во внимание и тонкости дистрибутивов и особенности хостера. Как бы, уже надо разбираться что и как. А в настройках локально сложно что-либо упустить.

Граммотная настройка vpn придет с количеством настроенных серверов. А для первых разов на какое-то время сойдет и так. Понятное дело, что это не совсем правильно, но ведь и автор вопроса занят личными или корпоративными задачами (делами), а не написанием гайда по настройкам.

Пробовали, ваше мнение?

dummyman

?u=http%3A%2F%2Ffiles.cyberciti.biz%2Fup

nosazus: ну конкретно этот я не пробовал. Полследний раз vpn настраивал год назад. Вручную как-то надежнее. Ну а по добавлению / удалению юзера у меня свои скрипты. А автору вашего скрипта советовал бы использовать dialog если хочется добавить интерактива.

Читайте также: