[Dnsmasq-discuss] CNAME

Merlin m0086417 at justus.chi.il.us
Thu Jan 26 03:16:21 GMT 2006


Hi, Simon,

Thanks for the detailed explanation. I think I understand now!

But would it not be possible achieve roughly the same functionality 
within the dnsmasq architecture (without using CNAMEs) if there were 
some sort of configuration option that says a lookup of "foo" should 
always be proxied to the upstream server(s) as a lookup of "bar" 
instead? (Kind of a name based version of the --alias option instead of 
the current IP based version?)

Merlin


Simon Kelley wrote:

> Merlin wrote:
>
>> Can dnsmasq serve up locally defined CNAME records?
>>
>> As an example, for a query of "ntp", I'd like to have dnsmasq return 
>> a CNAME record that points to an external NTP server by 
>> *name*--rather than defining "ntp" to return an A record by hard 
>> coding it with an IP address in /etc/hosts or an 'address' config 
>> line. This would be especially useful if the CNAME refers to a pool 
>> of addresses (such as pool.ntp.org).
>>
>> I've dug through the dnsmasq documentation and source and I can't 
>> find this. Which actually surprises me because dnsmasq already 
>> supports almost every other DNS record type and feature one can imagine!
>>
>
> It doesn't support CNAME, because it wouldn't work to do so. The 
> reason is a bit complicated, I'll try to explain,
>
> The architecture of dnsmasq is really that of a forwarder/proxy, with 
> the extra, local records added. When a DNS query arrives, dnsmasq has 
> two choices, it can answer the query from locally known information, 
> or it can forward the query, unaltered, to an upstream nameserver. 
> What can't be done it to break the down the query into constituent 
> parts, answer some from local info and some from upstream, and then 
> synthesise a new answer from both sources.
>
> When a a query arrives, dnsmasq could answer it from local 
> information, and produce an answer
>
> "foo is CNAME pointing to bar"
>
> _however_ if bar is a record that has to come from an upstream server, 
> there's no way that dnsmasq can add to the answer
>
> "and bar is A record 1.2.3.4"
>
> Now you might think that a client, on receiving the answer
>
> "foo is CNAME pointing to bar"
>
> would then do another query for bar, and all would be well, but that's 
> not what happens. In the dns protocol, an answer containing _just_ a C 
> record has a different meaning: it means "The CNAME exists, but the 
> target it points at doesn't, at least in the class (A, PTR, AAAA etc) 
> specified by the original query." So the client, on getting the 
> partial answer from dnsmasq, concludes that the thing it was looking 
> for doesn't exist, and gives up.
>
> There's really no way around this short of re-writing all of the DNS 
> section of dnsmasq as a much more heavyweight system.
>
> Cheers,
>
> Simon.




More information about the Dnsmasq-discuss mailing list