Как сделать адрес сервера имен постоянным в /etc/resolv.conf?

14

Я не могу сохранить адрес сервера имен, который я установил через /etc/resolv.conf. Каждый раз, когда я устанавливаю значение, менеджер сети перезагружает его шлюзом по умолчанию при перезагрузке.

Как правильно это настроить?

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

Ashildr
источник
Вы должны изменить его с помощью NetworkManager(как указано в первой строке). Этот файл заново генерируется при каждой загрузке NetworkManager. Это зависит от вашего linux-дистрибутива (о котором вы не упоминали), как получить к нему доступ NetworkManager.
Рик

Ответы:

13

По-разному. Пожалуйста, прочитайте до конца.

Если у вас не установлен пакет resolvconf , то это легко: после его изменения выполните команду

 sudo chattr +i /etc/resolv.conf

Команда изменяет атрибуты файла, делая его immutable(опция + i).

Однако, если у вас установлен пакет resolvconf, файл /etc/resolv.conf может быть преобразован в символическую ссылку,

 # file /etc/resolv.conf
 /etc/resolv.conf: symbolic link to `../run/resolvconf/resolv.conf'

который является файлом в виртуальной файловой системе, воплощением непостоянной версии. Самое смешное, что вы, возможно, не знаете, что у вас установлен resolvconf, потому что последние версии Debian-подобных ОС поставляются с предустановленным. Вы можете установить, установил ли он ваш дистрибутив, выполнив команду:

 #whereis resolvconf
 resolvconf: /sbin/resolvconf /etc/resolvconf /lib/resolvconf /usr/share/man/man8/resolvconf.8.gz

Даже самое главное, вы можете установить, была ли ваша /etc/resolv.confссылка преобразована в ссылку, с помощью команды (file /etc/resolv.conf), приведенной выше. Если ответ ASCII text, используйте chattr, иначе ...

Если вы используете статический IP-адрес, проще всего добавить следующую строку (или что-то подобное)

 dns-nameservers 8.8.4.4 8.8.8.8

раздел, определяющий свойства вашего статического интерфейса в / etc / network / interfaces.

Если вы вместо этого находитесь на ноутбуке, который все время подключается к различным сетям, вы можете последовать LawrenceCотличному совету. Но если в вашей системе есть resolvconf , правильный (и самый простой) способ предоставить фиксированный набор DNS - это использовать файлы в /etc/resolvconf/resolv.conf.d . В частности, используются следующие файлы (см . Страницу Стефана Грабера ):

база : используется, когда никакие другие данные не могут быть найдены

head : Используется для заголовка resolv.conf, может использоваться для обеспечения того, чтобы DNS-сервер всегда был первым в списке

tail : любая запись в tail добавляется в конце результирующего resolv.conf.

Итак, поместите ваши любимые сервера имен в голову следующим образом

  nameserver 8.8.8.8

и вы сделали.

MariusMatutiae
источник
2
@dhiller Ultrasawblade изменил свое имя на LawrenceCследующее.
MariusMatutiae
Очень хороший и интересный пост, я хотел бы, чтобы вы добавили несколько ссылок на документацию по этой теме для пользователей, которые хотят узнать больше о теме, Thx
Philippe Gachoud
/etc/resolvconf/не существует по умолчанию в Ubuntu 18.04.
Дан Дакалеску
9

Добавьте аналогичную строку для /etc/dhcp/dhclient.confиспользования корневого терминала:

supersede domain-name-servers 74.122.198.48, 50.116.23.211;

Это приводит к тому dhclient, что программа, которая выдает запрос DHCP и вносит изменения в соответствии с тем, что было сказано в ответе, заменяет информацию, полученную от сервера DHCP, на приведенную выше, прежде чем вносить изменения.

Выше приведены два сервера OpenNIC DNS. Замените по мере необходимости для любых серверов, которые вы хотите использовать.

Поскольку это происходит всякий раз, когда вы получаете информацию о конфигурации от DHCP, используйте dhclient -v eth0любой другой интерфейс, чтобы обновить его и увидеть изменения.

LawrenceC
источник
1
Вместо того, чтобы просто переопределять DNS (обычно маршрутизатор), можно добавить строку, prepend domain-name-servers 8.8.8.8например. Это будет использовать DNS провайдера, когда доступно.
Аксель Латвала
3

@Rik, как уже упоминалось, говорит о том, что причина замены DNS при перезагрузке кроется в сетевом менеджере / утилите, которые установлены так. В Linux Mint, как показано на снимке экрана, мой метод IPv4 был установлен только на автоматические (DHCP) адреса. Затем вы можете ввести правильные настройки в /etc/resolv.conf или в разделе DNS-серверов. Я помню, что в Ubuntu 13.04 мои серверы имен менялись несколько раз в течение длительного периода времени, но после того, как я действительно перешел и отредактировал их в графическом интерфейсе, с этого момента все казалось стабильным.

введите описание изображения здесь

введите описание изображения здесь

Рудольф
источник
3

Была такая же проблема, но я использую статический IP-адрес. Исправление было просто добавление DNS в / etc / network / interfaces

iface eth0 inet static
    address [your ip>
    netmask [your netmask]
    network [your network]
    broadcast [your broadcast]
    gateway [your gateway]
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers [dns server1] [dns server2]
    dns-search [your domain]
kanelbolle
источник
Да, это исправляет, потому что NetworkManager игнорирует интерфейсы, перечисленные в /etc/network/interfaces. Хороший улов!
Иззи
1

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

Проверьте использование статического DNS и в строке с надписью DNS-сервер 1 введите IP-адрес для Google DNS, 8.8.8.8а в строке для DNS-сервера 2 введите и 8.8.4.4нажмите «ОК».

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

Yames
источник
0

Взломать ваш путь с помощью chattr +iили схожим способом - это в лучшем случае быстрый обходной путь , и его следует избегать всякий раз, когда это возможно (по крайней мере, в долгосрочной перспективе - как уже говорилось, это краткосрочный обход, пока не будет найдено время для реального решения) , Как уже указывалось, это работа для NetworkManager, который предлагает CLI, который мы можем использовать для этого:

# найти какой интерфейс настроить
устройство nmcli
# вывод выглядит так:
# УСТРОЙСТВО ТИПА СОЕДИНЕНИЯ
# enp0s3 ethernet подключен мой офис
# lo loopback неуправляемый -
# От этого нам нужно СОЕДИНЕНИЕ.

# Теперь добавьте наши «поисковые домены»:
Соединение nmcli изменить my-office ipv4.dns-search example1.com
nmcli con mod my-office + ipv4.dns-search example2.com

# И наши серверы имен:
nmcli con изменяет my-office ipv4.dns 213.73.91.35
nmcli con изменить my-office + ipv4.dns 87.118.100.175
# отметьте «+» во второй строке: добавьте еще один,
# в то время как первая строка перезаписывает существующую запись.
# мы могли бы сделать это с помощью одного вызова:
nmcli con изменить my-office ipv4.dns "213.73.91.35 87.118.100.175"

# ОК, теперь давайте скажем игнорировать обновления с DHCP-сервера:
nmcli con изменить my-office ipv4.ignore-auto-dns да

# и применить изменения к нашей рабочей конфигурации
nmcli con up my-office

Если вы используете статический IP-адрес, вы также можете использовать решение из ответа kanelbolle .

Иззи
источник
0

Удивительно , как расстраивает эту маленькую проблему можно получить, когда эти решения , приведенные для него больше не будет работать на Ubunutu 18.04.

Для меня работало просто перезаписывать nameserverзначение при /etc/resolv.confкаждой загрузке. sudoотредактируйте /etc/rc.localи добавьте эту строку:

 sed -i "s/nameserver 127.0.0.53/nameserver 8.8.8.8/" /etc/resolv.confsudo /etc/rc.local
Дан Дакалеску
источник