Как установить статический DNS-сервер имен на сервере Ubuntu?

7

Я пытаюсь статически устанавливать адреса DNS-сервера на моем сервере Ubuntu, работающем как виртуальная машина. Я следил за всеми рекомендациями на официальных страницах поддержки Ubuntu, но я просто не могу избавиться от DNS-серверов моего ISP, установленных DHCP.

Я назначил интерфейс br0 на статическом IP-адресе хост-машины и eth0 на виртуальной машине для использования Google DNS и моего собственного локального DNS, работающего на втором vm, установив его в /etc/network/interfaces . Пытался возиться с файлами головы и хвоста в /etc/resolvconf/resolv.conf.d/ и пытался перетасовать интерфейс-порядок в /etc/resolvconf/interface-order , но когда я перезапустил сетевую услугу, я каждый раз возвращал DNS-адреса ISP.

Есть ли способ отключить resolvconf и настроить файл resolv.conf вручную, как я всегда делал в Red Hat? Или вы можете сказать мне, какой сценарий крючка хранит DNS-серверы ISP в файле resolv.conf? Мой интернет-провайдер не позволяет мне изменять настройки DHCP на моем маршрутизаторе, поэтому я не могу этого сделать.

Почему такая простая вещь, как настройка DNS-серверов, стала настолько сложной?

    
задан Aleks 04.11.2012 в 14:07
источник

3 ответа

5

1: Resolvconf записывает свой динамический файл resolv.conf в /run/resolvconf/resolv.conf . /etc/resolv.conf является символической ссылкой на последнее место. Если вы хотите использовать статический файл resolv.conf, просто замените символическую ссылку /etc/resolv.conf на файл. В настоящее время поддерживается, но не рекомендуется.

2: Насколько я понимаю, на зараженном компьютере запущена версия Ubuntu Server. В этом случае он настраивает интерфейсы с помощью программы ifup , конфигурационным файлом которой является /etc/network/interfaces . Для интерфейсов, сконфигурированных с помощью метода dhcp , ifup (обычно) использует dhclient из пакета isc-dhcp-client . Dhclient получает информацию о сервере имен от DHCP-сервера, а его скрипт hook /etc/dhcp/dhclient-enter-hooks.d/resolvconf отправляет эту информацию в resolvconf , которая помещает ее в resolv.conf .

Можно только отредактировать /etc/resolvconf/interface-order , чтобы eth0.dhcp приходилось до eth0.dhclient . (Я предполагаю, что соответствующий интерфейс eth0 .) Если у вас есть значение по умолчанию interface-order , вы можете, например, просто добавить строку eth0.dhcp до строки eth* .

--- interface-order_ORIG    2012-11-06 10:12:47.630529145 +0100
+++ interface-order 2012-11-06 10:13:16.410529800 +0100
@@ -9,6 +9,7 @@
 hso*
 em+([0-9])?(_+([0-9]))*
 p+([0-9])p+([0-9])?(_+([0-9]))*
+eth0.dhcp
 eth*
 ath*
 wlan*

Затем добавьте строку dns-nameservers в iface eth0 stanza в /etc/network/interfaces с правильным адресом сервера имен.

iface eth0 inet dhcp
    dns-nameservers 1.2.3.4

Поскольку eth0.dhcp приходит до eth0.dhclient , правильный адрес сервера имен будет включен в resolv.conf до неправильного.

Еще один способ переопределить нежелательное поведение, включая адрес сервера имен, предоставленный DHCP-сервером, - это отредактировать скрипт hook dhclient. Например, вы можете добавить строку, подобную следующей (где 1.2.3.4 - это адрес сервера имен, который вы хотели бы отменить).

--- resolvconf_ORIG 2012-03-29 22:37:14.000000000 +0200
+++ resolvconf  2012-11-05 20:53:33.312681077 +0100
@@ -54,6 +54,7 @@
            fi
            shopt -s nocasematch
            for nameserver in $new_dhcp6_name_servers ; do
+               [ "$nameserver" = "1.2.3.4" ] && continue

Еще одна возможность (слегка грубая, поскольку она полностью статична) заключается в добавлении опции сервера имен в /etc/resolvconf/resolv.conf.d/head .

3: Настройка DNS-адресов имен серверов стала более сложной, потому что машины становятся мобильными, становятся все больше и больше интерфейсов, а статическая конфигурация постепенно заменяется автоконфигурацией.

    
ответ дан jdthood 05.11.2012 в 20:59
3

Просто используйте dhclient (например, для использования Google DNS). Это намного чище, чем другие ответы IMO:

  1. Резервное копирование /etc/resolv.conf: sudo cp /etc/resolv.conf /etc/resolv.conf.auto

  2. Изменить /etc/dhcp[3]/dhclient.conf (ubuntu 14.04 исключает 3): sudo vi /etc/dhcp/dhclient.conf

  3. Если есть строка, содержащая сервер доменных имен, запишите IP-адреса для дальнейшего использования.
  4. Замените эту строку или добавьте следующую строку: Для IPv4: prepend domain-name-servers 8.8.8.8, 8.8.4.4; Для IPv6: prepend domain-name-servers 2001:4860:4860::8888, 2001:4860:4860::8844;
  5. Теперь отпустите и обновите IP: ifdown eth0 && ifup eth0

Теперь перезапустите все сетевые клиенты, которые вы используете (например, chrome или whatnot)

    
ответ дан rynop 29.04.2014 в 22:32
0

IMO: это ошибка в графическом инструменте конфигурации.

Мое самое простое исправление заключается в комментировании (или удалении) строки, начинающейся с запросом ... в файле /etc/dhcp/dhclient.conf

    
ответ дан ubuntu_new69 24.07.2014 в 09:49