Jak zdalnie ponownie załadować klienta DHCP, aby napisać nowy plik resolv.conf?

3

Próbuję skonfigurować dnsmasq(8)system Debian GNU / Linux w DHCPsieci prywatnej . Podczas lokalnej, ręcznej konfiguracji - po instalacji dnsmasqistelf - można po prostu dołączyć linię

prepend domain-name-servers 127.0.0.1;

w /etc/dhcp/dhclient.confi restart sieci. Obejmie to lokalnego hosta /etc/resolv.confi jeden jest gotowy do pracy. (Zobacz także: http://wiki.debian.org/HowTo/dnsmasq#Local_Caching )

Jednak próby zrobienia tego samego zdalnie, szczególnie podczas pracy z oprogramowaniem do zarządzania konfiguracją , spowodowałyby utratę połączenia sieciowego. Cóż, ponieważ celem nie jest ponowne uruchomienie sieci, ale aktualizacja resolv.conf..:

Jak można zmusić dhclient(8)do aktualizacji resolv.conf, utrzymując połączenia sieciowe w dobrym stanie?

[EDYTOWAĆ]

Poniżej znajduje się skrypt, który zadziałał dla mnie:

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

To trochę niezręczne - wciąż szukam lepszego rozwiązania.

mjhennig
źródło
1
Strona dhclient(8)podręcznika informuje, że obsługuje jakiś funky protokół o nazwie „Omapi”, który umożliwia zdalną konfigurację, i odnosi się do omshellnarzędzia, którego można użyć do ustawienia / rozbrojenia niektórych parametrów w kliencie i zaktualizowania go, a także do wyłączenia i ponownego uruchomienia. Czy odkryłeś tę trasę?
kostix
1
Tak, ale nie zapewnia sposobu aktualizacji resolv.conf. Zauważ, że sam klient DHCP nie jest tutaj problemem, to resolv.confplik: jest rozpatrywany przez resolver(3)C-API, a zatem wykorzystywany przez inne oprogramowanie. Zazwyczaj aktualizacja jest wykonywana przez jedną dhclient(8)albo resolvconf(8), ale pierwsze resetuje połączenie sieciowe, a drugi nie, aby zachować istniejącą konfigurację -
mjhennig
Oczekuję, że odpowiedź będzie zależeć od twojego klienta. W kliencie OpenBSD opartym na ISC DHCP (który może być tym, którego używasz) zwykle używany jest plik /etc/dhclient.conf. „dhclient -c /etc/dhclient.conf” może określać plik niestandardowy. Plik określa takie rzeczy, jak wykrywanie maski podsieci, routerów (brama domyślna) i rzeczy DNS. Możesz wyjąć, co chcesz. Ale adres IP nie wydaje się być jedną z opcji. Może nie być domyślnej wbudowanej obsługi, która nie umożliwia zapytania. Jednak „supersede” .conf może zignorować informacje. Może zobacz także: man dhclient-script
TOOGAM

Odpowiedzi:

2

Napotkałem ten sam problem podczas ustawiania dnsmasq przez ansible. W debian jessie możesz zaktualizować plik dhclient.conf i wykonać:

/usr/bin/killall dhclient
dhclient INTERFACE

Lub jeśli wolisz:

dhclient -x
dhclient INTERFACE

Nie powoduje to utraty połączenia, chyba że wygasa umowa dzierżawy i nie otrzymasz innego adresu IP.

Wspominasz o zarządzaniu konfiguracją. Jeśli używasz ansible, oto odpowiednia część mojego poradnika:

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

Zauważ, że nie uruchamiam ponownie dhclient po jego zabiciu. Działa to dobrze w moim środowisku, ale YMMV. Możesz dodać kolejne zadanie, które kopiuje skrypt, aby obsłużyć dhclient stop / start i wywołać je z modułu obsługi (być może nawet używając {{ansible_default_ipv4.interface}}nazwy interfejsu).

Mój dhclient.confszablon jest mniej więcej taki:

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;

Tak więc głównie domyślny debian nie dhclient.confzawiera dyrektyw związanych z dns.

GnP
źródło
1
Ponadto twierdzę, że to pytanie było właściwe dla ServerFault
GnP