[Dnsmasq-discuss] dnsmasq command to add dhcp-host record?

Geert Stappers stappers at stappers.nl
Wed Jan 6 21:44:08 GMT 2021


On Wed, Jan 06, 2021 at 09:00:12PM +0100, Jelle de Jong wrote:
> On 1/6/21 7:29 PM, After Sales wrote:
> > On Sun, Jan 03, 2021 at 09:46:51PM +0100, Geert Stappers wrote:
> > > On Sun, Jan 03, 2021 at 09:03:57PM +0100, Jelle de Jong wrote:
> > > > What is a good way to dynamically add a dhcp-host record, so a machine will
> > > > get the ipaddr I assign to it?
> > > > 
> > > > example:
> > > > dhcp-host=52:54:00:e6:f4:8a,192.168.40.29,nginx01.example.lan,infinite
> > > > 
> > > > I want to automate the process and be able to integrate it with my ansible
> > > > deployment systems.
> > > > 
> > > > Adding the line to the dnsmasq config file and reloading it will do the
> > > > trick but is there a way to dynamically add it with some dnsmasq command?
> > > > 
> > > > Tips?
> > > 
> > > Quoting the manual page
> > > 
> > >   --dhcp-hostsdir=<path>
> > >          This is equivalent to --dhcp-hostsfile, except for the following. The path MUST  be
> > >          a  directory, and not an individual file. Changed or new files within the directory
> > >          are read automatically, without the need to send SIGHUP.  If a file is  deleted  or
> > >          changed  after  it has been read by dnsmasq, then the host record it contained will
> > >          remain until dnsmasq receives a SIGHUP, or is restarted; ie host records  are  only
> > >          added dynamically.
> > > 
> > 
> > Does it fit your  needs?
> 
> Well... issues... again...
> 
> TL;DR please add a dnsmasq delay after a inotify event trigger to actually
> read the file... and please add option to remove host as well at  inotify
> watch event.
> 
> dhcp-hostsdir=/etc/dnsmasq.d/dhcp
> hostsdir=/etc/wireguard
> 
> - name: create /etc/dnsmasq.d/dhcp/ directory if it does not exist with parents
>   file:
>     path: /etc/dnsmasq.d/dhcp/
>     state: directory
>   delegate_to: "{{ dnsmasq }}"
>   tags: dnsmasq
> 
> - name: creating a file with content /etc/dnsmasq.d/dhcp/{{inventory_hostname}}.conf
>   copy:
>     dest: "/etc/dnsmasq.d/dhcp/{{inventory_hostname}}.conf"
>     content: |
>       {{mac.stdout}},{{ipaddr}},{{inventory_hostname}}
>     mode: 0644
>     owner: root
>   delegate_to: "{{ dnsmasq }}"
>   when: ipaddr is defined and inventory_hostname in groups.virtual
>   tags: dnsmasq
> 
> dnsmasq inotify is trigger happy and it would be nice to have a second or so
> delay in the actual re-scanning, that would help a lot...
> 
> currently when ansible places the file dnsmasq tries to read the config
> file, but the content is not always there yet and then it is messed up.
> 
> dhcp-host=52:54:00:ce:02:48,192.168.25.32,samba09.powercraft.lan,infinite
> 
> I was first using the infinite part to have a more static lease, but
> especially when I want to change the IP later. I have to manually stop the
> service remove it from the /var/lib../lease file and start dnsmasq again.
> Thankfully removing the infinite part makes it more flexible now. and it is
> working most of the times...
> 
> I got the same issue with the hostsdir system ... but when I need to
> dynamical remove hosts and have to reload dnsmasq. I wrote a bash script
> that checks if a host got removed and then reloads the dnsmasq systemd,
> however on my busy network +100 systems dnsmasq got reloaded often sometimes
> every second, and it seems dnsmasq does not like this so much and sometimes
> gets into a state where it needs a complete reboot to be able to have
> working DNS resolving again.
> 
> I need to rewrite the scripts to work in some notification bus and collects
> the reloads and only do them every minute or so if they happen... possible
> workaround is to to just have dnsmasq reload every minute, despite any host
> changes, but this sounds just wrong to do...


I feel the pain.

And I think relief can be found at a DHCP server with better API control.



Regards
Geert Stappers
Farely happy with dnsmasq for his use case ...
-- 
Silence is hard to parse



More information about the Dnsmasq-discuss mailing list