После обновления /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
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).
Для тех из Вас управляющий Вашими серверами удаленно Вы можете:
dns-nameservers
строка в /etc/network/interfaces
# ifdown eth01; ifup eth01
Заметьте, что это должно быть на одной строке, разделенной с; (разделитель командной строки Linux). Вы даже не должны терять свое текущее соединение. Исключение делает опечатку в файле интерфейсов. Если это происходит ifup
перестанет работать и у Вас должны будут быть физический доступ или другой ethxx
соединение.
Этот ответ аналогичен приведенному выше, но для ответа на вопрос используется пример конфигурации вопросов. Плюс это объясняет, почему обе команды необходимы.
Редактировать /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
Хотя man-страница по умолчанию не установлена, она задокументирована с помощью опции update scripts, просто запустите:
sudo resolvconf -u
service resolvconf restart
восстановит файл /etc/resolv.conf
без особых хлопот.
Простой ответ:
Просто установите resolvconf. apt install resolvconf
После этого ifup eth0
обновляет днс в 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
На настольной версии Ubuntu 18.04, где нет никакого сервиса networking
, и resolvconf
, не установлен по умолчанию, я преуспел в том, чтобы повторно создать resolv.conf
путем перезапуска network-manager
:
sudo service network-manager restart