Редактирование DNS-серверов имен в / etc / network / interfaces без перезапуска [дубликат]

18

После редактирования dns-nameservers в /etc/network/interfaces , как я могу сообщить resolvconf(8) для чтения нового значения без перезапуска сети? (вызывает прерывание обслуживания)

Параметр -u , похоже, не работает, он просто обновляется до тех же значений.

    
задан Eric 19.10.2012 в 22:44
источник

3 ответа

25

Вы правы, «resolvconf -u» недостаточно для активации сделанного вами изменения. Эта команда только обновляет resolv.conf из базы данных resolvconf, тогда как вам необходимо обновить базу данных.

Предположим, что рассматриваемый интерфейс является eth0. Предположим, что в / etc / network / interfaces у вас есть строфа, которая выглядит так.

iface eth0 inet static
    [...]
    dns-nameservers 1.1.1.1 2.2.2.2

Теперь вы меняете строку «dns-nameservers». Чтобы активировать это изменение, сделайте (обратите внимание на & amp; & amp; избегать нарушения потенциально открытого ssh-соединения)

ifdown eth0 && ifup eth0

или перезагрузка.

    
ответ дан jdthood 29.10.2012 в 07:29
12

Недавно я столкнулся с этим дважды.

В первый раз я сделал sudo ifdown eth0 , который, конечно же, убил мое ssh-соединение и оставил машину, игнорируя ее NIC. Уч. Мне нужно было пройти через интерфейс IPMI на сервере, чтобы снова получить контроль.

Во второй раз я узнал из своих предыдущих ошибок и сделал sudo ifdown eth0 ; sudo ifup eth0 . Конечно, окно ssh умерло, но машина быстро откликнулась на новое соединение ssh, и мои модификации DNS были в силе. Я сделал то же самое на втором сервере, но на этот раз я ждал, прежде чем вводить что-либо в окно ssh. Окно оставалось, и изменения DNS были применены. Высокий.

Критически важно было использовать оператор с запятой оболочки, чтобы обе команды были в одной строке. Таким образом, команда восстановления интерфейса уже была введена к моменту срыва интерфейса. Полагаю, я мог бы написать сценарий и выполнить это, но это оказалось проще.

ОБНОВЛЕНИЕ: Есть еще один способ сделать это. Вы также можете перезапустить сетевую службу Ubuntu за один шаг: sudo /etc/init.d/networking restart или sudo service network-interface restart INTERFACE=eth0 . Спасибо JFA за вдохновение.

    
ответ дан Randall Cook 23.02.2013 в 00:53
2

Просто прошел эту же проблему; даже перезагрузка будет потерять изменение при ручном вызове hook libc.

Таким образом, самый стабильный способ, который я нашел, - после добавления желаемого содержимого в /etc/network/interfaces , чтобы отредактировать /etc/resolvconf/resolv.conf.d/original , чтобы включить нужные строки, убедитесь, что tail (в этом каталоге) отсутствует, cd /etc/resolvconf/resolv.conf.d , а затем вызовите /etc/resolvconf/update.d/libc .

Обратите внимание, что если присутствует tail (по умолчанию указано original , то содержимое, полученное из /etc/network/interfaces , будет сопровождаться исходной настройкой тоже.

То, что эти изменения могут быть наиболее безопасно применены при перезагрузке, является, откровенно говоря, безумным. Текущая система использует то, что раньше было «редактировать этот файл, возможно, развертывать из системы управления конфигурацией», и скрывает его за несколькими уровнями абстракции и не имеет никакого чистого способа вызывать для обслуживания вне нормальной среды загрузки.

    
ответ дан Phil P 10.04.2013 в 06:48