3

Я пытаюсь настроить dnsmasq(8) в системе Debian GNU/Linux в частной сети на основе DHCP . Во время локальной настройки вручную - после установки dnsmasq istelf - можно просто включить строку

prepend domain-name-servers 127.0.0.1;

в /etc/dhcp/dhclient.conf и перезапустите сеть. Это будет включать локальный хост в /etc/resolv.conf и один готов к работе. (См. Также: http://wiki.debian.org/HowTo/dnsmasq#Local_Caching)

Но попытки сделать то же самое удаленно, особенно при работе с программным обеспечением для управления конфигурацией , могут привести к потере сетевого подключения. Ну, поскольку целью является не перезагрузка сети, а обновление resolv.conf ..:

Как можно заставить dhclient(8) обновить resolv.conf , сохраняя при этом работоспособность сетевых подключений?

[РЕДАКТИРОВАТЬ]

Ниже, пожалуйста, найдите скрипт, который работал для меня:

if grep '^\s*nameserver\>.\+\<127\.0\.0\.1\>' /etc/resolv.conf >/dev/null; then
    : # do nothing
else
    grep -v '^\s*nameserver\>' /etc/resolv.conf > /tmp/resolv.conf.new
    echo "nameserver 127.0.0.1" >> /tmp/resolv.conf.new
    grep '^\s*nameserver\>' /etc/resolv.conf >> /tmp/resolv.conf.new
    mv -f /tmp/resolv.conf.new /etc/resolv.conf
fi

Это немного неловко - и я все еще ищу лучшее решение.

1 ответ1

1

Я столкнулся с той же проблемой при установке dnsmasq через ansible. В Debian Jessie вы можете обновить dhclient.conf и сделать:

/usr/bin/killall dhclient
dhclient INTERFACE

Или, если вы предпочитаете:

dhclient -x
dhclient INTERFACE

Это не разрушит ваше соединение, пока не истечет срок аренды и вы не получите другой IP-адрес.

Вы упоминаете управление конфигурацией. Если вы используете ANSIBLE, вот соответствующая часть моей пьесы:

tasks:
- name: Ensure a correct resolv.conf
  template: src=templates/resolv.conf.j2 dest=/etc/resolv.conf

- name: Ensure dhclient config wont mess up my resolv.conf
  template: src=dhclient.conf.j2 dest=/etc/dhcp/dhclient.conf
  notify: Kill dhclient

handlers:
- name: Kill dhclient
  command: /usr/bin/killall dhclient
  ignore_errors: yes
  changed_when: false

Обратите внимание, что я не перезагружаю dhclient после его уничтожения. Это хорошо работает в моей среде, но YMMV. Вы можете добавить еще одну задачу, которая копирует скрипт для обработки остановки / запуска клиента и вызывать его из обработчика (возможно, даже используя {{ansible_default_ipv4.interface}} чтобы получить имя интерфейса).

Мой шаблон dhclient.conf выглядит примерно так:

send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers, host-name, interface-mtu, rfc3442-classless-static-routes, ntp-servers, dhcp6.fqdn, dhcp6.sntp-servers;

Таким образом, в основном dhclient.conf Debian по умолчанию не содержит директив, связанных с dns.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .