После обновления /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
Хотя man-страница не установлена по умолчанию, она задокументирована с помощью опции сценариев обновления, просто запустите:
sudo resolvconf -u
Для удаленного управления серверами вы можете:
обновить строку dns-nameservers в /etc/network/interfaces # ifdown eth01; ifup eth01Обратите внимание, что это должно быть на одной строке делится на; (разделитель командной строки linux). Вы даже не должны терять свое текущее соединение. Исключение составляет опечатка в файле интерфейсов. Если это произойдет, ifup завершится с ошибкой, и вам придется иметь физический доступ или другое соединение ethxx.
service resolvconf restart будет регенерировать файл /etc/resolv.conf без особых проблем.
Этот ответ аналогичен приведенному выше, но использует конфигурацию примера вопросов для ответа на вопрос. Плюс это объясняет, почему обе команды необходимы.
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
Простой ответ:
Просто установите resolvconf. apt install resolvconf
После этого ifup eth0 обновляет dns в etc/resolv.conf в соответствии с линией dns-nameservers в /etc/network/interfaces.
Это сработало для меня:
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
Настроить соответственно.
В 18.04 следующее работает надежно (выполняется как root):
systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking
Важно: убедитесь, что у вас установлен пакет resolvconf. По-видимому, это не по умолчанию, и без него некоторые (!) Изменения от /etc/network/interfaces молча игнорируются (например, dns-*).
Также вы можете попробовать эту команду:
cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet