By default, dnsmasq stores DHCP lease data in (volatile) RAM. This means that operations such as a reboot will erase the lease database, forcing a new one to be created. This could be inconvenient, since client devices might receive a new IP address after DHCP renewal. For dnsmasq to maintain its DHCP lease information, the router needs persistent storage, (such as USB).
There are currently two common methods for dealing with this.
The first method does not use scripting. The goal of the first method is to store the lease database on permanent storage.
dhcp-leasefile=/mnt/usb/dnsmasq/dnsmasq.leases
The second approach is to keep the lease database in its default location and copy it to permanent storage at “halt” time. It is later restored when the init process runs during boot.
For example, in the Init field in the Scripts menu, enter:
[ -f /mnt/usb/dnsmasq.leases ] && { sort -b -k 2 -u -z /tmp/var/lib/misc/dnsmasq.leases > /tmp/dnsmasq.tmp1 sort -b -k 2 -u -z /mnt/usb/dnsmasq.leases > /tmp/dnsmasq.tmp2 diff -a /tmp/dnsmasq.tmp1 /tmp/dnsmasq.tmp2 | grep -E '^>' | sed 's/^>\ //' >> /tmp/var/lib/misc/dnsmasq.leases kill -HUP `ps | grep -E [d]nsmasq | awk '{ print $1 }'` rm /tmp/dnsmasq.tmp1 rm /tmp/dnsmasq.tmp2 rm -f /mnt/usb/dnsmasq.leases }
in the Halt field In the Scripts menu, enter:
cp -f /tmp/var/lib/misc/dnsmasq.leases /mnt/usb/dnsmasq.leases
Method 2 can be used with any type of storage, including JFFS. When using method 2 only with USB, an alternative is to enter the former set of configuration lines into the Run after mounting field and the latter set of lines in the Run before unmounting fields in the USB Support menu.