Annotation of embedaddon/dnsmasq/contrib/wrt/README, revision 1.1
1.1 ! misho 1: This script can be used to implement persistent leases on openWRT, DD-WRT
! 2: etc. Persistent leases are good: if the lease database is lost on a
! 3: reboot, then it will eventually be restored as hosts renew their
! 4: leases. Until a host renews (which may take hours/days) it will
! 5: not exist in the DNS if dnsmasq's DDNS function is in use.
! 6:
! 7: *WRT systems remount all non-volatile fileystems read-only after boot,
! 8: so the normal leasefile will not work. They do, however have NV
! 9: storage, accessed with the nvram command:
! 10:
! 11: /usr/lib # nvram
! 12: usage: nvram [get name] [set name=value] [unset name] [show]
! 13:
! 14: The principle is that leases are kept in NV variable with data
! 15: corresponding to the line in a leasefile:
! 16:
! 17: dnsmasq_lease_192.168.1.56=3600 00:41:4a:05:80:74 192.168.1.56 * *
! 18:
! 19: By giving dnsmasq the leasefile-ro command, it no longer creates or writes a
! 20: leasefile; responsibility for maintaining the lease database transfers
! 21: to the lease change script. At startup, in leasefile-ro mode,
! 22: dnsmasq will run
! 23:
! 24: "<lease_change_script> init"
! 25:
! 26: and read whatever that command spits out, expecting it to
! 27: be in dnsmasq leasefile format.
! 28:
! 29: So the lease change script, given "init" as argv[1] will
! 30: suck existing leases out of the NVRAM and emit them from
! 31: stdout in the correct format.
! 32:
! 33: The second part of the problem is keeping the NVRAM up-to-date: this
! 34: is done by the lease-change script which dnsmasq runs when a lease is
! 35: updated. When it is called with argv[1] as "old", "add", or "del"
! 36: it updates the relevant nvram entry.
! 37:
! 38: So, dnsmasq should be run as :
! 39:
! 40: dnsmasq --leasefile-ro --dhcp-script=/path/to/lease_update.sh
! 41:
! 42: or the same flags added to /etc/dnsmasq.conf
! 43:
! 44:
! 45:
! 46: Notes:
! 47:
! 48: This needs dnsmasq-2.33 or later to work.
! 49:
! 50: This technique will work with, or without, compilation with
! 51: HAVE_BROKEN_RTC. Compiling with HAVE_BROKEN_RTC is
! 52: _highly_recommended_ for this application since is avoids problems
! 53: with the system clock being warped by NTP, and it vastly reduces the
! 54: number of writes to the NVRAM. With HAVE_BROKEN_RTC, NVRAM is updated
! 55: only when a lease is created or destroyed; without it, a write occurs
! 56: every time a lease is renewed.
! 57:
! 58: It probably makes sense to restrict the number of active DHCP leases
! 59: to an appropriate number using dhcp-lease-max. On a new DD_WRT system,
! 60: there are about 10K bytes free in the NVRAM. Each lease record is
! 61: about 100 bytes, so restricting the number of leases to 50 will limit
! 62: use to half that. (The default limit in the distributed source is 150)
! 63:
! 64: Any UI script which reads the dnsmasq leasefile will have to be
! 65: ammended, probably by changing it to read the output of
! 66: `lease_update init` instead.
! 67:
! 68:
! 69: Thanks:
! 70:
! 71: To Steve Horbachuk for checks on the script and debugging beyond the
! 72: call of duty.
! 73:
! 74:
! 75: Simon Kelley
! 76: Fri Jul 28 11:51:13 BST 2006
! 77:
! 78:
! 79:
! 80:
! 81:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>