Как мне получить 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
1
задан 15 December 2016 в 14:32

8 ответов

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

sudo resolvconf -u
19
ответ дан 25 May 2018 в 03:43

Для удаленного управления серверами вы можете:

обновить строку dns-nameservers в /etc/network/interfaces # ifdown eth01; ifup eth01

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

3
ответ дан 25 May 2018 в 03:43

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

2
ответ дан 25 May 2018 в 03:43
  • 1
    Я получаю Failed to restart resolvconf.service: Unit resolvconf.service not found. – Mobigital 23 January 2018 в 22:07
  • 2
    команда завершена, но не восстановлена ​​/etc/resolv.conf на сервере ubuntu 14.04 – Jossef Harush 17 May 2018 в 10:59

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

Edit /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. Это фактически половина ответа и действительно хороший пример синтаксического анализа inline. Если вы хотите посмотреть, как это происходит, просто запустите первую часть команды и посмотрите, как она анализирует файл /etc/network/interfaces и выплевывает всю необходимую информацию, необходимую для запуска команды sudo resolvconf -a eth0:

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

Обратите внимание, что это приведет к тому же, что и команда:

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
ответ дан 25 May 2018 в 03:43
  • 1
    К сожалению, нельзя использовать это. Мой интерфейс управляется сетевым менеджером и DHCP, поэтому добавление его к /etc/network/interfaces не является допустимым вариантом в этом случае. (Ubuntu 14.04) – Tino 16 February 2016 в 16:29

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

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

После этого ifup eth0 обновляет dns в etc/resolv.conf в соответствии с линией dns-nameservers в /etc/network/interfaces.

0
ответ дан 25 May 2018 в 03:43

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

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
ответ дан 25 May 2018 в 03:43

В 18.04 следующее работает надежно (выполняется как root):

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

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

0
ответ дан 25 May 2018 в 03:43

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

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet
-2
ответ дан 25 May 2018 в 03:43
  • 1
    Можете ли вы объяснить, почему эта команда должна работать? – αғsнιη 9 October 2014 в 18:08
  • 2
    Это не работает правильно, если в строке dns-nameserver IP1 IP2 имеется несколько IP-адресов имен. Затем строка должна быть повторена в resolv.conf, но это не так. – Tino 30 October 2015 в 19:09
  • 3
    Кроме того, /etc/network/interfaces использует dns-nameservers (обратите внимание на s в конце), тогда как resolvconf использует nameserver. Команда не справляется с этим. И даже если бы все было правильно, конвейер sed | grep | sed определенно не был бы самым эффективным способом. – Melebius 19 December 2016 в 16:52

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

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