Должен ли я отредактировать файл resolv.conf, чтобы исправить проблему с DNS?

35

У меня проблема в том, что мой компьютер с Ubuntu использует неправильный DNS-сервер. По какой-то причине машина запрашивает localhostинформацию DNS.

Я добавил DNS-сервер в графическом интерфейсе сетевых настроек, но /etc/resolv.confвсе еще содержит 127.0.0.1адрес DNS-сервера. Теперь я подумал, что могу просто отредактировать файл самостоятельно, но в нем прямо сказано, что я не должен редактировать файл вручную.

Теперь, поскольку графический интерфейс настройки сети не сгенерировал файл с правильными настройками, как я могу сгенерировать новый resolv.confфайл самостоятельно?

Ahatius
источник
1
Если вы используете Ubuntu Server 12.04 LTS, просто сделайте себе большую пользу и отредактируйте /etc/resolvconf/resolv.conf.d/head так же, как вы хотите, чтобы выглядел ваш прежний resolv.conf. У меня не было ничего, кроме проблем с разрешением проблем, пока я не переборщила их.
askubuntu.com/questions/157154/… возможно связанный вопрос.
Эхтеш Чоудхури

Ответы:

40

То, что ни один из ответов, опубликованных до сих пор, не является адресом, - это то, что спрашивающий не понимает, что наличие nameserver 127.0.0.1в нем /etc/resolv.confправильно, предполагая, что работает локальный сервер имен. А в Ubuntu 12.04 Desktop по умолчанию работает локальный сервер имен, а именно dnsmasqпроцесс, контролируемый NetworkManager, который прослушивает 127.0.0.1. В Ubuntu 12.10 адрес прослушивания был изменен на 127.0.1.1.

Поэтому решение не состоит в том, чтобы вносить какие-либо изменения в resolv.conf. Это правильно, предполагая, что спрашивающий хочет использовать локальный сервер имен.

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

Спрашивающий пытался использовать «GUI сетевых настроек», чтобы «создать файл с правильными настройками», и это не сработало. Я не знаю точно, что это значит, но вот правильный способ ввести адреса серверов имен, чтобы они оказались в resolv.confнужное время. Я предполагаю, что спрашивающий использует, NetworkManagerа не ifupдля настройки интерфейсов.

Чаще всего интерфейсы настраиваются с использованием протокола DHCP. В этом случае ничего не нужно настраивать в локальной системе. DHCP-сервер знает, какой адрес сервера имен должен использовать его клиент, и отправляет эту информацию DHCP-клиенту, который отправляет его в NetworkManager, который отправляет его в resolvconf, в который помещается информация resolv.conf. Так что в этом случае, возможно, необходимо настроить DHCP-сервер.

Если сетевой интерфейс на локальном компьютере настроен статически, в NetworkManager необходимо ввести правильные адреса серверов имен, например, индикатор сети | Редактировать соединения ... | Беспроводной | myconnection | Редактировать ... | Настройки IPv4 | Дополнительные DNS-серверы.

Возможно, локальный сервер имен не работает должным образом. В этом случае спрашивающий должен редактировать/etc/NetworkManager/NetworkManager.conf

sudo gedit /etc/NetworkManager/NetworkManager.conf

и закомментируйте строку

dns=dnsmasq

в разделе [[main] ». Чтобы закомментировать строку, поставьте #в начале строки, затем сохраните файл. Затем перезапустите сетевой менеджер.

sudo restart network-manager

После этого resolv.confвместо адреса 127. * будут вводиться нелокальные адреса серверов имен .

Если спрашивающий использует, ifupа не NetworkManager для настройки сетевых интерфейсов, то ответ jmartin2279 верен: вы должны добавить адреса сервера имен в / etc / network / interfaces так, как описано в jmartin2279.

Вопреки тому , что советуют некоторые другие ответы, в общем , вы должны не добавлять nameserver, domainили searchварианты файлов /etc/resolvconf/resolv.conf.d/. Смотрите мои комментарии к этим ответам.

jdthood
источник
1
«DHCP-сервер знает, какой адрес сервера имен должен использовать его клиент» - за исключением случаев, когда у вас нет контроля над DHCP-сервером (например, общедоступные точки доступа WiFi) и вы хотите переопределить используемый сервер имен ... Настройка той же конфигурации для каждого подключения основа - снова и снова для каждой точки доступа WiFi, к которой вы подключаетесь, - это не решение.
Теох Хан Хуэй
Кажется, мне нужно выполнить, dhclientчтобы изменения ( nameserverстроки) наконец пришли etc/resolv.conf. Я запускаю кастомную трансляцию Xubuntu 14.04 (возможно, в этом причина).
Сопалахо де Арриерес
Какими могут быть недостатки отключения DNSMasq, jdthood? Конечно, после этого разрешение имен и интернет работают нормально.
Сопалахо де Арриерес
См. Bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/1003842 , например, мой комментарий № 60.
Jdthood
Мой resolv.conf постоянно меняется , чтобы , 127.0.0.1несмотря на мой менеджер сети , имеющими другие namerservers + Dnsmasq быть закомментирован + перезагружается + Dnsmasq убит (как он все еще запускается) + сеть перезапущена: /
некоторые пользователь
17

Если вы используете ifup для статической настройки интерфейса, вы можете добавить его в файл / etc / network / interfaces.

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

sudo gedit /etc/network/interface*

Вы должны увидеть что-то вроде:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Изменить на:

auto eth0
iface eth1 inet static
address 192.168.1.10 
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8

используя вашу собственную информацию о сети. это позволит вам установить днс. Вы можете использовать несколько серверов DNS здесь:

dns-nameservers 8.8.8.8 8.8.4.4

После этого запустите

ifdown eth0
ifup eth0
jmartin2279
источник
Если это ваш случай, то это решение: «Если вы используете ifup для статической настройки интерфейса…»
angelcervera,
Вы даже проверяли это? ifdown: interface eth0 not configured
Cerin
3
если вы подключены через ssh, вы не можете использовать ifdown / ifup. вместо этого используйтеsudo /etc/init.d/networking restart
TD_Nijboer
11

В Ubuntu 12.04 изменилась обработка resolv.conf.

Если вы хотите добавить свой собственный адрес (а) сервера имен, то отредактируйте файл /etc/resolvconf/resolv.conf.d/ head

sudo nano /etc/resolvconf/resolv.conf.d/head

и добавьте туда свой сервер имен (например, Google open dns)

nameserver 8.8.8.8

сохраните файл и затем запустите

sudo resolvconf -u

Нет перезагрузки или что-то еще. Может быть, вам нужно будет перезагрузить Network-Manager

sudo service network-manager restart

Выполнено.

Вы можете проверить это с помощью команды

nslookup www.google.com

Результат должен быть похож на

Server: 8.8.8.8
Address: 8.8.8.8#53
NickTux
источник
4
Добавление строки "nameserver" в /etc/resolvconf/resolv.conf.d/head может работать как быстрый взлом, но это не является правильным решением любой проблемы. Это заставляет распознаватель использовать этот адрес сервера имен при любых обстоятельствах, тогда как используемые серверы имен зависят от обстоятельств. Например, если вы подключены к локальной сети (возможно, через VPN), вы обычно хотите использовать серверы имен локальной сети, чтобы иметь возможность разрешать частные имена в локальной сети. И в данном случае система работает с локальным кэширующим сервером имен, но добавление «сервера имен 8.8.8.8» просто обходит его.
Jdthood
@jdthood - Вы указали на проблему. Хотите предоставить решение?
TJ Biddle
@TJ Я уже опубликовал ответ на главный вопрос («Как мне отредактировать мой файл resolv.conf?»), Если вы это имеете в виду.
Jdthood
1
Пожалуйста, не рекомендую это. В самом верху файла: «НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ РУКАМИ - ВАШИ ИЗМЕНЕНИЯ БУДУТ ЗАПИСАНЫ».
Cerin
Я хотел бы отметить, что редактирование /etc/resolv.conf вручную перезаписывает изменения при перезагрузке, однако редактирование /etc/resolvconf/resolv.conf.d/head вручную НЕ перезаписывает изменения при перезагрузке, однако, скорее всего, это происходит при повторной загрузке. установка resolvconf, который, вероятно, почему предупреждение там.
Кен
1

Чтобы добавить больше записей /etc/resolv.conf, создайте /etc/resolvconf/resolv.conf.d/tailфайл и добавьте их туда.

Но если /etc/resolv.confсодержит 127.0.0.1, то добавление записей /etc/resolvconf/resolv.conf.d/tailне изменит ничего. Вы должны установить адреса вашего DNS-сервера статически в NetworkManager, который будет отправлять их на dnsmasq, который прослушивает 127.0.0.1.

Конфигурация DNS для статического интерфейса должна иметь вид записей « dns-nameservers», « dns-search» и « dns-domain», добавляемых в соответствующий раздел iface в/etc/network/interfaces

Прочитайте это для получения дополнительной информации.

`Более того:

Вы можете установить графический инструмент под названием gnome-network-admin, который установит ваш DNS. Попытайся :

sudo apt-get install gnome-network-admin
Кевин Боуэн
источник
3
(1) Нет, не добавляйте опции «nameserver» в /etc/resolvconf/resolv.conf.d/tail. Это неэффективно (потому что другие опции «nameserver» имеют приоритет) и неоптимально (потому что это статическая конфигурация, тогда как конфигурация должна отражать сетевые обстоятельства). (2) Нет, не используйте gnome-network-admin. Он не работает должным образом с resolvconf. См. Ошибку # 60518 ( bugs.launchpad.net/ubuntu/+source/gnome-system-tools/+bug/60518 ).
Jdthood