dnsmasq: use host-record instead of address

Hi all,

TL;DR - using "--address" for individual host A records is broken, use "--host-record" instead.

The following patch changes dnsmasq.init to build individual host records using "--host-record" instead of "--address". Using "--address" in this context is incorrect. For example, the current init script will create the following two entries in /var/etc/dnsmasq.conf:

address=/OpenWrt.lan/192.168.1.1
ptr-record=1.1.168.192.in-addr.arpa,OpenWrt.lan

At first glance this has the desired effect, "OpenWrt.lan" resolves to 192.168.1.1. However, what it really says is "for anything that ends with "OpenWrt.lan," that I don't have a record for, return 192.168.1.1". For example:

fakeaddress.OpenWrt.lan would return 192.168.1.1.
adsfasdfsdfsd.OpenWrt.lan would return 192.168.1.1.

That's wrong and it causes problems when using a real domain name, such as domain.com. Often it's desirable to have "domain.com" resolve to an address so users can hit the http service at http://domain.com. By using the existing "config domain" option, you would configure this as follows:

config domain
	option name 'domain.com'
	option ip '192.168.1.100'

This would create these config items:

address=/domain.com/192.168.1.100
ptr-record=100.1.168.192.in-addr.arpa,domain.com

Now, as a result, anything that doesn't have its own, preexisting record, will also resolve to 192.168.1.100. That's no good because things like Windows do proxy requests by default for wpad.domain.com and instead of getting back an NXDOMAIN, it gets 192.168.1.100 and goes hunting for a pac file that doesn't exist.

The solution for this is to use "--host-record". This is actually a lot easier to configure because dnsmasq will create the PTR records automatically, so there's no need to manual calculate it like is done today. This means that IPv6 addresses can be supported as well. The attached patch makes this adjustment and accomplishes the following:

1. By default, the router's hostname is now added to the configuration using "--host-record" instead of "--address". If there's a domain configured, the default host-record entry looks like this:

host-record=OpenWrt.lan,OpenWrt,192.168.1.1

With this, now both "OpenWrt.lan" and "OpenWrt" will both resolve to 192.168.1.1. In the reverse, 192.168.1.1 will resolve to only "OpenWrt.lan".

2. It introduces a new configuration structure to define additional host records. For example:

config hostrecord
	list name 'mail.domain.com'
	list name 'www.domain.com'
	list name 'domain.com'
	list ip '192.168.1.100'

It uses lists here because dnsmasq can accept multiple hostnames and IP addresses in a single host-record. This generates the following config:

host-record=mail.domain.com,www.domain.com,domain.com,192.168.1.100

All of those hostnames will resolve to 192.168.1.100 in the forward direction. 192.168.1.100 will resolve to "mail.domain.com" in the reverse.

3. It restructures "dhcp_domain_add()" to remove the manual PTR record calculation and configuration. This only supported IPv4 and isn't the proper use of the "--address" option. Now it will build a proper "--address" config that can support multiple domain names to a single IP address as per the dnsmasq MAN page.

Note, the domain name is no longer automatically appended to the end of either "config hostrecord" or "config domain" entries as was previously the case. To define a specific fqdn, one needs to manually configure it as such. This makes the configuration more consistent; only what's configured is what is generated for dnsmasq.

Sorry for the long email. I hope it all made sense. If not, please let me know.

Thanks,
Adam

Signed-off-by: Adam Gensler <openwrt at gnslr.us>
Merge branch 'master' of github.com:dtaht/cerowrt-next
Fix lanaddr interface name for dnsmasq.
Update feeds.source.