Как получить resolvconf для восстановления resolv.conf после изменения / etc / network / interfaces?

После обновления /etc/network/interfaces чем-то очень похожим на приведенное ниже, как мне получить /etc/resolv.conf для обновления? Я пытался (как root) resolver -u, service networking restart, но они не работали. Я также исправил символическую ссылку для resolv.conf и попробовал resolver -u снова. Наконец, в отчаянии я перезагрузился, что решило проблему путем восстановления /etc/resolv.conf.

Ubuntu 12.04, 64-битный сервер, установлены все последние исправления.

Пример /etc/network/interfaces:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10
92
задан 15 December 2016 в 13:32

10 ответов

service networking restart не всегда является надежным способом отключения всех интерфейсов.

Команда resolvconf -u обновляет resolv.conf только из собственной базы данных resolvconf. Вам необходимо обновить базу данных.

Чтобы обновить базу данных, вы должны вызвать resolvconf с опцией -a или -d. Это происходит за кулисами, когда вы запускаете ifup или ifdown. Поэтому, как и в случае любого другого изменения в /etc/network/interfaces, чтобы активировать изменения в параметрах dns- *, необходимо выключить соответствующий интерфейс и снова выполнить его. Или вы можете перезагрузиться.

Если вы хотите внести изменения в интерфейс, не отключая его (возможно, из-за того, что вы управляете машиной удаленно и случайно подключаетесь через этот интерфейс, natch), вы можете достичь того же результата, запустив resolvconf непосредственно из командной строки. , Это требует немного больше знаний о семантике resolvconf. Предположим, что соответствующий раздел / e / n / i равен

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

, где FFFF - это семейство адресов («inet» или «inet6»).

Чтобы активировать эти опции dns- *, вы запускаете resolvconf следующим образом (да, с символами новой строки в строке, переданной в resolvconf).

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF

Для строфы, приведенной в вопросе, это будет следующим.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Для получения дополнительной информации обратитесь к странице руководства resolvconf (8) и к файлу README пакета resolvconf (/usr/share/doc/resolvconf/README.gz).

0
ответ дан 15 December 2016 в 13:32

Для тех из Вас управляющий Вашими серверами удаленно Вы можете:

  1. обновите dns-nameservers строка в /etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Заметьте, что это должно быть на одной строке, разделенной с; (разделитель командной строки Linux). Вы даже не должны терять свое текущее соединение. Исключение делает опечатку в файле интерфейсов. Если это происходит ifup перестанет работать и у Вас должны будут быть физический доступ или другой ethxx соединение.

5
ответ дан 15 December 2016 в 13:32

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

Редактировать /etc/network/interfaces:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

Эти изменения не произойдут, пока вы не перезагрузите или не перезагрузите файл конфигурации:

Для обновления файла интерфейсов в реальном времени необходимо выполните следующую команду:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Это позволяет обновить интерфейс без перезагрузки или перезагрузки.

Однако вышеупомянутые изменения команды будут потеряны после перезагрузки, если изменения в /etc/network/interfaces не были сделаны.

Кстати, последний ответ от BDenis в этом списке фактически работает вместо последней команды, анализируя файл /etc/network/interfaces и добавляя эти строки в команду sudo resolvconf -a eth0 Это фактически половина ответа и действительно хороший пример встроенный синтаксический анализ. Если вы хотите увидеть, как это происходит, просто запустите первую часть команды и посмотрите, как она разбирает файл /etc/network/interfaces и выкладывает всю необходимую информацию, необходимую для запуска команды sudo resolvconf -a eth0:

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'
[ 1119] Обратите внимание, что это приведет к тому же выводу, что и команда:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

При условии, что файл /etc/network/interfaces сконфигурирован с этой информацией:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10
0
ответ дан 15 December 2016 в 13:32

Хотя man-страница по умолчанию не установлена, она задокументирована с помощью опции update scripts, просто запустите:

sudo resolvconf -u
0
ответ дан 15 December 2016 в 13:32

service resolvconf restart восстановит файл /etc/resolv.conf без особых хлопот.

0
ответ дан 15 December 2016 в 13:32

Простой ответ:

Просто установите resolvconf. apt install resolvconf

После этого ifup eth0 обновляет днс в etc/resolv.conf, согласно строке dns-nameservers в /etc/network/interfaces.

0
ответ дан 15 December 2016 в 13:32

Это сработало для меня:

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

Отрегулируйте соответственно.

0
ответ дан 15 December 2016 в 13:32

18.04 следующие функции работают надежно (от имени пользователя root):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

Важно: Убедитесь, что у вас установлен пакет resolvconf.
Похоже, что это не по умолчанию, и без него некоторые (!) Изменения из /etc/network/interfaces молча игнорируются (например, dns-*).

0
ответ дан 15 December 2016 в 13:32

Также вы можете попробовать эту команду:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet
0
ответ дан 15 December 2016 в 13:32

На настольной версии Ubuntu 18.04, где нет никакого сервиса networking, и resolvconf, не установлен по умолчанию, я преуспел в том, чтобы повторно создать resolv.conf путем перезапуска network-manager:

sudo service network-manager restart
0
ответ дан 16 October 2019 в 14:43

Другие вопросы по тегам:

Похожие вопросы: