1Q: Why does dnsmasq open UDP ports >1024 as well as port 53.
2   Is this a security problem/trojan/backdoor?
3
4A: The high ports that dnsmasq opens are for replies from the upstream
5   nameserver(s). Queries from dnsmasq to upstream nameservers are sent
6   from these ports and replies received to them. The reason for doing this is
7   that most firewall setups block incoming packets _to_ port 53, in order
8   to stop DNS queries from the outside world. If dnsmasq sent its queries
9   from port 53 the replies would be _to_ port 53 and get blocked.
10
11   This is not a security hole since dnsmasq will only accept replies to that
12   port: queries are  dropped. The replies must be to oustanding queries
13   which dnsmasq has forwarded, otherwise they are dropped too.
14 
15   Addendum: dnsmasq now has the option "query-port" (-Q), which allows
16   you to specify the UDP port to be used for this purpose.  If not
17   specified, the operating system will select an available port number
18   just as it did before.
19
20   Second addendum: following the discovery of a security flaw in the
21   DNS protocol, dnsmasq from version 2.43 has changed behavior. It
22   now uses a new, randomly selected, port for each query. The old
23   default behaviour (use one port allocated by the OS) is available by
24   setting --query-port=0, and setting the query port to a positive
25   value is still works. You should think hard and know what you are
26   doing before using either of these options.
27 
28Q: Why doesn't dnsmasq support DNS queries over TCP? Don't the RFC's specify
29   that?
30
31A: Update: from version 2.10, it does. There are a few limitations:
32   data obtained via TCP is not cached, and source-address
33   or query-port specifications are ignored for TCP.
34
35Q: When I send SIGUSR1 to dump the contents of the cache, some entries have
36   no IP address and are for names like mymachine.mydomain.com.mydomain.com.
37   What are these?
38
39A: They are negative entries: that's what the N flag means. Dnsmasq asked 
40   an upstream nameserver to resolve that address and it replied "doesn't 
41   exist, and won't exist for <n> hours" so dnsmasq saved that information so
42   that if _it_ gets asked the same question it can answer directly without
43   having to go back to the upstream server again. The strange repeated domains
44   result from the way resolvers search short names. See "man resolv.conf" for
45   details.
46
47
48Q: Will dnsmasq compile/run on non-Linux systems?
49
50A: Yes, there is explicit support for *BSD and MacOS X and Solaris. 
51   There are start-up scripts for MacOS X Tiger and Panther 
52   in /contrib. Dnsmasq will link with uclibc to provide small
53   binaries suitable for use in embedded systems such as
54   routers. (There's special code to support machines with flash
55   filesystems and no battery-backed RTC.)
56   If you encounter make errors with *BSD, try installing gmake from
57   ports and building dnsmasq with "make MAKE=gmake" 
58   For other systems, try altering the settings in config.h.
59 
60Q: My company's nameserver knows about some names which aren't in the
61   public DNS. Even though I put it first in /etc/resolv.conf, it
62   dosen't work: dnsmasq seems not to use the nameservers in the order
63   given. What am I doing wrong?
64
65A: By default, dnsmasq treats all the nameservers it knows about as
66   equal: it picks the one to use using an algorithm designed to avoid 
67   nameservers which aren't responding. To make dnsmasq use the
68   servers in order, give it the -o flag. If you want some queries
69   sent to a special server, think about using the -S flag to give the
70   IP address of that server, and telling dnsmasq exactly which
71   domains to use the server for.
72
73Q: OK, I've got queries to a private nameserver working, now how about 
74   reverse queries for a range of IP addresses?
75
76A: Use the standard DNS convention of <reversed address>.in-addr.arpa.
77   For instance to send reverse queries on the range 192.168.0.0 to 
78   192.168.0.255 to a nameserver at 10.0.0.1 do
79   server=/0.168.192.in-addr.arpa/10.0.0.1
80   Note that the "bogus-priv" option take priority over this option,
81   so the above will not work when the bogus-priv option is set.
82
83Q: Dnsmasq fails to start with an error like this: "dnsmasq: bind
84   failed: Cannot assign requested address". What's the problem?
85
86A: This has been seen when a system is bringing up a PPP interface at
87   boot time: by the time dnsmasq start the interface has been
88   created, but not brought up and assigned an address. The easiest
89   solution is to use --interface flags to specify which interfaces
90   dnsmasq should listen on. Since you are unlikely to want dnsmasq to
91   listen on a PPP interface and offer DNS service to the world, the
92   problem is solved.
93
94Q: I'm running on BSD and dnsmasq won't accept long options on the
95   command line. 
96
97A: Dnsmasq when built on some BSD systems doesn't use GNU getopt by
98   default. You can either just use the single-letter options or
99   change config.h and the Makefile to use getopt-long. Note that
100   options in /etc/dnsmasq.conf must always be the long form,
101   on all platforms.
102
103Q: Names on the internet are working fine, but looking up local names 
104   from /etc/hosts or DHCP doesn't seem to work.
105
106A: Resolver code sometime does strange things when given names without
107   any dots in. Win2k and WinXP may not use the DNS at all and just
108   try and look up the name using WINS. On unix look at "options ndots:"
109   in "man resolv.conf" for details on this topic. Testing lookups
110   using "nslookup" or "dig" will work, but then attempting to run
111   "ping" will get a lookup failure, appending a dot to the end of the
112   hostname  will fix things. (ie "ping myhost" fails, but "ping
113   myhost." works. The solution is to make sure that all your hosts
114   have a domain set ("domain" in resolv.conf, or set a domain in 
115   your DHCP server, see below fr Windows XP and Mac OS X). 
116   Any domain  will do, but "localnet" is traditional. Now when you
117   resolve "myhost" the resolver will attempt to look up 
118   "myhost.localnet" so you need to have dnsmasq reply to that name. 
119   The way to do that is to include the domain in each name on
120   /etc/hosts  and/or to use the --expand-hosts and --domain options.
121
122Q: How do I set the DNS domain in Windows XP or MacOS X (ref: previous
123   question)?
124
125A: for XP, Control Panel > Network Connections > { Connection to gateway /
126   DNS } > Properties > { Highlight TCP/IP } > Properties > Advanced >
127   DNS Tab > DNS suffix for this connection: 
128
129A: for OS X, System Preferences > Network > {Connection to gateway / DNS } >
130   Search domains:
131
132Q: Can I get dnsmasq to save the contents of its cache to disk when
133   I shut my machine down and re-load when it starts again?
134
135A: No, that facility is not provided. Very few names in the DNS have
136   their time-to-live set for longer than a few hours so most of the
137   cache entries would have expired after a shutdown. For longer-lived
138   names it's much cheaper to just reload them from the upstream
139   server. Note that dnsmasq is not shut down between PPP sessions so
140   go off-line and then on-line again will not lose the contents of
141   the cache.
142
143Q: Who are Verisign, what do they have to do with the bogus-nxdomain
144   option in dnsmasq and why should I wory about it?
145
146A: [note: this was written in September 2003, things may well change.]
147   Versign run the .com and .net top-level-domains. They have just
148   changed the configuration of their servers so that unknown .com and
149   .net domains, instead of returning an error code NXDOMAIN, (no such
150   domain) return the address of a host at Versign which runs a web
151   server showing a search page. Most right-thinking people regard
152   this new behaviour as broken :-).  You can test to see if you are
153   suffering Versign brokeness by run a command like 
154   
155   host jlsdajkdalld.com
156
157   If you get "jlsdajkdalld.com" does not exist, then all is fine, if
158   host returns an IP address, then the DNS is broken. (Try a few
159   different unlikely domains, just in case you picked a wierd one
160   which really _is_ registered.)
161
162   Assuming that your DNS is broken, and you want to fix it, simply
163   note the IP address being returned and pass it to dnsmasq using the
164   --bogus-nxdomain flag. Dnsmasq will check for results returning
165   that address and substitute an NXDOMAIN instead. 
166
167   As of writing, the IP address in question for the .com and .net
168   domains is is 64.94.110.11. Various other, less prominent,
169   registries pull the same stunt; there is a list of them all, and
170   the addresses to block, at http://winware.org/bogus-domains.txt
171
172Q: This new DHCP server is well and good, but it doesn't work for me.
173   What's the problem?
174
175A: There are a couple of configuration gotchas which have been
176   encountered by people moving from the ISC dhcpd to the dnsmasq
177   integrated DHCP daemon. Both are related to differences in 
178   in the way the two daemons bypass the IP stack to do "ground up"
179   IP configuration and can lead to the dnsmasq daemon failing
180   whilst the ISC one works.
181
182   The first thing to check is the broadcast address set for the
183   ethernet interface. This is normally the adddress on the connected
184   network with all ones in the host part. For instance if the 
185   address of the ethernet interface is 192.168.55.7 and the netmask
186   is 255.255.255.0 then the broadcast address should be
187   192.168.55.255. Having a broadcast address which is not on the
188   network to which the interface is connected kills things stone
189   dead.
190
191   The second potential problem relates to firewall rules: since the ISC 
192   daemon in some configurations bypasses the kernel firewall rules 
193   entirely, the ability to run the ISC daemon does not indicate 
194   that the current configuration is OK for the dnsmasq daemon.
195   For the dnsmasq daemon to operate it's vital that UDP packets to 
196   and from ports 67 and 68 and broadcast packets with source 
197   address 0.0.0.0 and destination address 255.255.255.255 are not 
198   dropped by iptables/ipchains.
199
200Q: I'm running Debian, and my machines get an address fine with DHCP,
201   but their names are not appearing in the DNS.
202
203A: By default, none of the DHCP clients send the host-name when asking
204   for a lease. For most of the clients, you can set the host-name to
205   send with the "hostname" keyword in /etc/network/interfaces. (See
206   "man interfaces" for details.) That doesn't work for dhclient, were
207   you have to add something like "send host-name daisy" to
208   /etc/dhclient.conf [Update: the lastest dhcpcd packages _do_ send
209   the hostname by default.
210
211Q: I'm network booting my machines, and trying to give them static
212   DHCP-assigned addresses. The machine gets its correct address
213   whilst booting, but then the OS starts and it seems to get
214   allocated a different address.
215
216A: What is happening is this: The boot process sends a DHCP
217   request and gets allocated the static address corresponding to its
218   MAC address. The boot loader does not send a client-id. Then the OS
219   starts and repeats the DHCP process, but it it does send a
220   client-id. Dnsmasq cannot assume that the two requests are from the
221   same machine (since the client ID's don't match) and even though
222   the MAC address has a static allocation, that address is still in
223   use by the first incarnation of the machine (the one from the boot,
224   without a client ID.) dnsmasq therefore has to give the machine a
225   dynamic address from its pool. There are three ways to solve this:
226   (1) persuade your DHCP client not to send a client ID, or (2) set up
227   the static assignment to the client ID, not the MAC address. The
228   default client-id will be 01:<MAC address>, so change the dhcp-host
229   line from "dhcp-host=11:22:33:44:55:66,1.2.3.4" to
230   "dhcp-host=id:01:11:22:33:44:55:66,1.2.3.4" or (3) tell dnsmasq to
231   ignore client IDs for a particular MAC address, like this:
232   dhcp-host=11:22:33:44:55:66,id:*
233
234Q: What network types are supported by the DHCP server?
235  
236A: Ethernet (and 802.11 wireless) are supported on all platforms. On
237   Linux all network types (including FireWire) are supported.
238
239Q: What is this strange "bind-interface" option?
240
241A: The DNS spec says that the reply to a DNS query must come from the
242   same address it was sent to. The traditional way to write an UDP
243   server to do this is to find all of the addresses belonging to the
244   machine (ie all the interfaces on the machine) and then create a
245   socket for each interface which is bound to the address of the
246   interface. Then when a packet is sent to address A, it is received
247   on the socket bound to address A and when the reply is also sent
248   via that socket, the source address is set to A by the kernel and
249   everything works. This is the how dnsmasq works when
250   "bind-interfaces" is set, with the obvious extension that is misses
251   out creating sockets for some interfaces depending on the
252   --interface, --address and --except-interface flags.  The
253   disadvantage of this approach is that it breaks if interfaces don't
254   exist or are not configured when the daemon starts and does the
255   socket creation step. In a hotplug-aware world this is a real
256   problem.
257
258   The alternative approach is to have only one socket, which is bound
259   to the correct port and the wildcard IP address (0.0.0.0). That
260   socket will receive _all_ packets sent to port 53, no matter what
261   destination address they have. This solves the problem of
262   interfaces which are created or reconfigured after daemon
263   start-up. To make this work is more complicated because of the
264   "reply source address" problem. When a UDP packet is sent by a
265   socket bound to 0.0.0.0 its source address will be set to the
266   address of one of the machine's interfaces, but which one is not
267   determined and can vary depending on the OS being run. To get round
268   this it is neccessary to use a scary advanced API to determine the
269   address to which a query was sent, and force that to be the source
270   address in the reply. For IPv4 this stuff in non-portable and quite
271   often not even available (It's different between FreeBSD 5.x and
272   Linux, for instance, and FreeBSD 4.x, Linux 2.0.x and OpenBSD don't
273   have it at all.) Hence "bind-interfaces" has to always be available
274   as a fall back. For IPv6 the API is standard and universally
275   available.
276
277   It could be argued that if the --interface or --address flags are
278   used then binding interfaces is more appropriate, but using
279   wildcard binding means that dnsmasq will quite happily start up
280   after being told to use interfaces which don't exist, but which are
281   created later. Wildcard binding breaks the scenario when dnsmasq is
282   listening on one interface and another server (most probably BIND)
283   is listening on another. It's not possible for BIND to bind to an
284   (address,port) pair when dnsmasq has bound (wildcard,port), hence
285   the ability to explicitly turn off wildcard binding.
286
287Q: Why doesn't Kerberos work/why can't I get sensible answers to
288   queries for SRV records.
289
290A: Probably because you have the "filterwin2k" option set. Note that
291   it was on by default in example configuration files included in 
292   versions before 2.12, so you might have it set on without
293   realising.
294
295Q: Can I get email notification when a new version of dnsmasq is
296   released?
297
298A: Yes, new releases of dnsmasq are always announced through
299   freshmeat.net, and they allow you to subcribe to email alerts when
300   new versions of particular projects are released. New releases are
301   also announced in the dnsmasq-discuss mailing list, subscribe at 
302   http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
303
304Q: What does the dhcp-authoritative option do? 
305
306A: See http://www.isc.org/index.pl?/sw/dhcp/authoritative.php - that's
307   for the ISC daemon, but the same applies to dnsmasq.
308
309Q: Why does my Gentoo box pause for a minute before getting a new
310   lease?
311
312A: Because when a Gentoo box shuts down, it releases its lease with
313   the server but remembers it on the client; this seems to be a 
314   Gentoo-specific patch to dhcpcd. On restart it tries to renew
315   a lease which is long gone, as far as dnsmasq is concerned, and
316   dnsmasq ignores it until is times out and restarts the process.
317   To fix this, set the dhcp-authoritative flag in dnsmasq.
318
319Q: My laptop has two network interfaces, a wired one and a wireless
320   one. I never use both interfaces at the same time, and I'd like the
321   same IP and configuration to be used irrespective of which
322   interface is in use. How can I do that?
323
324A: By default, the identity of a machine is determined by using the
325   MAC address, which is associated with interface hardware. Once an
326   IP is bound to the MAC address of one interface, it cannot be
327   associated with another MAC address until after the DHCP lease
328   expires. The solution to this is to use a client-id as the machine
329   identity rather than the MAC address. If you arrange for the same
330   client-id to sent when either interface is in use, the DHCP server
331   will recognise the same machine, and use the same address. The
332   method for setting the client-id varies with DHCP client software,
333   dhcpcd uses the "-I" flag. Windows uses a registry setting,
334   see http://www.jsiinc.com/SUBF/TIP2800/rh2845.htm
335Addendum:
336   From version 2.46, dnsmasq has a solution to this which doesn't
337   involve setting client-IDs. It's possible to put more than one MAC
338   address in a --dhcp-host configuration. This tells dnsmasq that it
339   should use the specified IP for any of the specified MAC addresses,
340   and furthermore it gives dnsmasq permission to sumarily abandon a
341   lease to one of the MAC addresses if another one comes along. Note
342   that this will work fine only as longer as only one interface is
343   up at any time. There is no way for dnsmasq to enforce this
344   constraint: if you configure multiple MAC addresses and violate 
345   this rule, bad things will happen.
346
347Q: Can dnsmasq do DHCP on IP-alias interfaces?
348
349A: Yes, from version-2.21. The support is only available running under
350   Linux, on a kernel which provides the RT-netlink facility. All 2.4 
351   and 2.6 kernels provide RT-netlink and it's an option in 2.2
352   kernels. 
353   
354   If a physical interface has more than one IP address or aliases
355   with extra IP addresses, then any dhcp-ranges corresponding to
356   these addresses can be used for address allocation. So if an
357   interface has addresses 192.168.1.0/24 and 192.68.2.0/24 and there
358   are DHCP ranges 192.168.1.100-192.168.1.200 and
359   192.168.2.100-192.168.2.200 then both ranges would be used for host
360   connected to the physical interface. A more typical use might be to
361   have one of the address-ranges as static-only, and have known
362   hosts allocated addresses on that subnet using dhcp-host options,
363   while  anonymous hosts go on the other.
364
365
366Q: Dnsmasq sometimes logs "nameserver xxx.xxx.xxx.xxx refused
367   to do a recursive query" and DNS stops working. What's going on?
368
369A: Probably the nameserver is an authoritative nameserver for a
370   particular domain, but is not configured to answer general DNS
371   queries for an arbitrary domain. It is not suitable for use by
372   dnsmasq as an upstream server and should be removed from the
373   configuration. Note that if you have more than one upstream
374   nameserver configured dnsmasq will load-balance across them and
375   it may be some time before dnsmasq gets around to using a 
376   particular nameserver. This means that a particular configuration
377   may work for sometime with a broken upstream nameserver
378   configuration.
379
380
381Q: Does the dnsmasq DHCP server probe addresses before allocating
382   them, as recommended in RFC2131?
383
384A: Yes, dynmaically allocated IP addresses are checked by sending an
385   ICMP echo request (ping). If a reply is received, then dnsmasq
386   assumes that the address is in use, and attempts to allocate an
387   different address. The wait for a reply is between two and three
388   seconds. Because the DHCP server is not re-entrant, it cannot serve
389   other DHCP requests during this time. To avoid dropping requests,
390   the address probe may be skipped when dnsmasq is under heavy load.
391
392
393Q: I'm using dnsmasq on a machine with the Firestarter firewall, and
394   DHCP doesn't work. What's the problem?
395
396A: This a variant on the iptables problem. Explicit details on how to
397   proceed can be found at 
398   http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2005q3/000431.html
399 
400
401Q: I'm using dnsmasq on a machine with the shorewall firewall, and
402   DHCP doesn't work. What's the problem?
403
404A: This a variant on the iptables problem. Explicit details on how to
405   proceed can be found at 
406   http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2007q4/001764.html
407
408
409Q: Dnsmasq fails to start up with a message about capabilities.
410   Why did that happen and what can do to fix it?
411
412A: Change your kernel configuration: either deselect CONFIG_SECURITY
413   _or_ select CONFIG_SECURITY_CAPABILITIES. Alternatively, you can 
414   remove the need to set capabilities by running dnsmasq as root.
415
416Q: Where can I get .rpms Suitable for Suse?
417
418A: Dnsmasq is in Suse itself, and the latest releases are also
419   available at ftp://ftp.suse.com/pub/people/ug/
420
421
422Q: Can I run dnsmasq in a Linux vserver?
423
424A: Yes, as a DNS server, dnsmasq will just work in a vserver.
425   To use dnsmasq's DHCP function you need to give the vserver
426   extra system capabilities. Please note that doing so will lesser 
427   the overall security of your system. The capabilities 
428   required are NET_ADMIN and NET_RAW. NET_ADMIN is essential, NET_RAW
429   is required to do an ICMP "ping" check on newly allocated
430   addresses. If you don't need this check, you can disable it with
431   --no-ping and omit the NET_RAW capability. 
432   Adding the capabilities is done by adding them, one per line, to
433   either /etc/vservers/<vservername>/ccapabilities for a 2.4 kernel or
434   /etc/vservers/<vservername>/bcapabilities for a 2.6 kernel (please
435   refer to the vserver documentation for more information).
436
437
438Q: What's the problem with syslog and dnsmasq?
439
440A: In almost all cases: none. If you have the normal arrangement with
441   local daemons logging to a local syslog, which then writes to disk,
442   then there's never a problem. If you use network logging, then
443   there's a potential problem with deadlock: the syslog daemon will
444   do DNS lookups so that it can log the source of log messages,
445   these lookups will (depending on exact configuration) go through
446   dnsmasq, which also sends log messages. With bad timing, you can 
447   arrive at a situation where syslog is waiting for dnsmasq, and
448   dnsmasq is waiting for syslog; they will both wait forever. This
449   problem is fixed from dnsmasq-2.39, which introduces asynchronous
450   logging: dnsmasq no longer waits for syslog and the deadlock is
451   broken. There is a remaining problem in 2.39, where "log-queries"
452   is in use. In this case most DNS queries generate two log lines, if
453   these go to a syslog which is doing a DNS lookup for each log line,
454   then those queries will in turn generate two more log lines, and a 
455   chain reaction runaway will occur. To avoid this, use syslog-ng
456   and turn on syslog-ng's dns-cache function.
457
458
459
460
461
462
463
464 
465
466
467
468
469   
470
471	      
472