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

Используя unity-tweak-tool вместо этого:

Go to 'Switcher', looking options under 'Unity', and look for 'Switch between windows on all workspaces', and enable it.

92
задан 15.12.2016, 12:32

8 ответов

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).

106
ответ дан 16.10.2019, 14:43
  • 1
    " Don' t делают " сервис, объединяющийся в сеть restart"; that' s не надежный способ вниз повышающихся все интерфейсы " Хорошо работает для меня. Хороший для знания очевидного способа выполнения его все же. – Victor 03.10.2013, 12:49
  • 2
    Если Вы shouldn' t делают " сервис, объединяющийся в сеть restart" могу я предлагать Вас don' t помещают его в первую строку этого вопроса? Поспешно ища решение, первая вещь, которую я сделал, была скопировать, и вставлять первую команду я видел. – AbA2L 29.05.2014, 12:31
  • 3
    @RobinWinslow +1 для того, чтобы сделать мой день – silentsudo 05.08.2014, 19:51
  • 4
    Этот ответ от самого человека, который разработал resolvconf:) – Rishi Barve 23.06.2015, 00:50
  • 5
    Для перезапущения/перечитывания /etc/network/interfaces можно сделать это: ifdown eth0 && ifup eth0; это работает даже на удаленной ssh сессии. – Crt 24.11.2015, 15:55

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

sudo resolvconf -u
23
ответ дан 16.10.2019, 14:43

Для тех из вас, кто управляет своими серверами удаленно, вы можете:

  1. обновить строку dns-nameservers в /etc/network/interfaces
  2. # ifdown eth01; ifup eth01
[119 ] Обратите внимание, что это должно быть в одной строке, разделенной; (разделитель командной строки Linux). Вы не должны даже потерять ваше текущее соединение. Исключение составляет опечатка в файле интерфейсов. Если это произойдет, ifup потерпит неудачу, и вам потребуется физический доступ или другое ethxx соединение.

5
ответ дан 16.10.2019, 14:43

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

2
ответ дан 16.10.2019, 14:43
  • 1
    Я добираюсь Failed to restart resolvconf.service: Unit resolvconf.service not found. – Peter Lundgren 23.01.2018, 20:07
  • 2
    команда, завершенная однако не повторно созданный /etc/resolv.conf на сервере человечности 14.04 – Manto 17.05.2018, 10:59

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

Редактировать /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
1
ответ дан 16.10.2019, 14:43
  • 1
    Печально не может использовать это. Моим интерфейсом управляют администратор сети и DHCP, таким образом добавляя, что это к /etc/network/interfaces не является допустимая опция в этом случае. (Ubuntu 14.04) – Alexander Mills 16.02.2016, 14:29

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

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
ответ дан 16.10.2019, 14:43

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

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

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

1
ответ дан 16.10.2019, 14:43

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

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet
-3
ответ дан 16.10.2019, 14:43
  • 1
    Можно ли объяснить, почему эта команда должна работать? – Greg Wang 09.10.2014, 16:08
  • 2
    Это не работает правильно, если у Вас есть больше чем один IP сервера имен в строке dns-nameserver IP1 IP2. Строка должна тогда быть повторена в resolv.conf, но isn' t. – Mo J. Mughrabi 30.10.2015, 17:09
  • 3
    Кроме того, /etc/network/interfaces использование dns-nameservers (замечают s в конце), в то время как resolvconf использование nameserver. Команда не имеет дело с ним. И даже если все было корректно, конвейер sed | grep | sed определенно wouldn’t быть самым эффективным путем. – ejb 19.12.2016, 14:52

Теги

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