1DNSMASQ(8) System Manager's Manual DNSMASQ(8)
2
3
4
6 dnsmasq - A lightweight DHCP and caching DNS server.
7
9 dnsmasq [OPTION]...
10
12 dnsmasq is a lightweight DNS, TFTP, PXE, router advertisement and DHCP
13 server. It is intended to provide coupled DNS and DHCP service to a
14 LAN.
15
16 Dnsmasq accepts DNS queries and either answers them from a small,
17 local, cache or forwards them to a real, recursive, DNS server. It
18 loads the contents of /etc/hosts so that local hostnames which do not
19 appear in the global DNS can be resolved and also answers DNS queries
20 for DHCP configured hosts. It can also act as the authoritative DNS
21 server for one or more domains, allowing local names to appear in the
22 global DNS. It can be configured to do DNSSEC validation.
23
24 The dnsmasq DHCP server supports static address assignments and multi‐
25 ple networks. It automatically sends a sensible default set of DHCP
26 options, and can be configured to send any desired set of DHCP options,
27 including vendor-encapsulated options. It includes a secure, read-only,
28 TFTP server to allow net/PXE boot of DHCP hosts and also supports
29 BOOTP. The PXE support is full featured, and includes a proxy mode
30 which supplies PXE information to clients whilst DHCP address alloca‐
31 tion is done by another server.
32
33 The dnsmasq DHCPv6 server provides the same set of features as the
34 DHCPv4 server, and in addition, it includes router advertisements and a
35 neat feature which allows naming for clients which use DHCPv4 and
36 stateless autoconfiguration only for IPv6 configuration. There is sup‐
37 port for doing address allocation (both DHCPv6 and RA) from subnets
38 which are dynamically delegated via DHCPv6 prefix delegation.
39
40 Dnsmasq is coded with small embedded systems in mind. It aims for the
41 smallest possible memory footprint compatible with the supported func‐
42 tions, and allows unneeded functions to be omitted from the compiled
43 binary.
44
46 Note that in general missing parameters are allowed and switch off
47 functions, for instance "--pid-file" disables writing a PID file. On
48 BSD, unless the GNU getopt library is linked, the long form of the
49 options does not work on the command line; it is still recognised in
50 the configuration file.
51
52 --test Read and syntax check configuration file(s). Exit with code 0 if
53 all is OK, or a non-zero code otherwise. Do not start up dns‐
54 masq.
55
56 -w, --help
57 Display all command-line options. --help dhcp will display
58 known DHCPv4 configuration options, and --help dhcp6 will dis‐
59 play DHCPv6 options.
60
61 -h, --no-hosts
62 Don't read the hostnames in /etc/hosts.
63
64 -H, --addn-hosts=<file>
65 Additional hosts file. Read the specified file as well as
66 /etc/hosts. If --no-hosts is given, read only the specified
67 file. This option may be repeated for more than one additional
68 hosts file. If a directory is given, then read all the files
69 contained in that directory.
70
71 --hostsdir=<path>
72 Read all the hosts files contained in the directory. New or
73 changed files are read automatically. See --dhcp-hostsdir for
74 details.
75
76 -E, --expand-hosts
77 Add the domain to simple names (without a period) in /etc/hosts
78 in the same way as for DHCP-derived names. Note that this does
79 not apply to domain names in cnames, PTR records, TXT records
80 etc.
81
82 -T, --local-ttl=<time>
83 When replying with information from /etc/hosts or configuration
84 or the DHCP leases file dnsmasq by default sets the time-to-live
85 field to zero, meaning that the requester should not itself
86 cache the information. This is the correct thing to do in almost
87 all situations. This option allows a time-to-live (in seconds)
88 to be given for these replies. This will reduce the load on the
89 server at the expense of clients using stale data under some
90 circumstances.
91
92 --dhcp-ttl=<time>
93 As for --local-ttl, but affects only replies with information
94 from DHCP leases. If both are given, --dhcp-ttl applies for DHCP
95 information, and --local-ttl for others. Setting this to zero
96 eliminates the effect of --local-ttl for DHCP.
97
98 --neg-ttl=<time>
99 Negative replies from upstream servers normally contain time-to-
100 live information in SOA records which dnsmasq uses for caching.
101 If the replies from upstream servers omit this information, dns‐
102 masq does not cache the reply. This option gives a default value
103 for time-to-live (in seconds) which dnsmasq uses to cache nega‐
104 tive replies even in the absence of an SOA record.
105
106 --max-ttl=<time>
107 Set a maximum TTL value that will be handed out to clients. The
108 specified maximum TTL will be given to clients instead of the
109 true TTL value if it is lower. The true TTL value is however
110 kept in the cache to avoid flooding the upstream DNS servers.
111
112 --max-cache-ttl=<time>
113 Set a maximum TTL value for entries in the cache.
114
115 --min-cache-ttl=<time>
116 Extend short TTL values to the time given when caching them.
117 Note that artificially extending TTL values is in general a bad
118 idea, do not do it unless you have a good reason, and understand
119 what you are doing. Dnsmasq limits the value of this option to
120 one hour, unless recompiled.
121
122 --auth-ttl=<time>
123 Set the TTL value returned in answers from the authoritative
124 server.
125
126 -k, --keep-in-foreground
127 Do not go into the background at startup but otherwise run as
128 normal. This is intended for use when dnsmasq is run under dae‐
129 montools or launchd.
130
131 -d, --no-daemon
132 Debug mode: don't fork to the background, don't write a pid
133 file, don't change user id, generate a complete cache dump on
134 receipt on SIGUSR1, log to stderr as well as syslog, don't fork
135 new processes to handle TCP queries. Note that this option is
136 for use in debugging only, to stop dnsmasq daemonising in pro‐
137 duction, use --keep-in-foreground.
138
139 -q, --log-queries
140 Log the results of DNS queries handled by dnsmasq. Enable a full
141 cache dump on receipt of SIGUSR1. If the argument "extra" is
142 supplied, ie --log-queries=extra then the log has extra informa‐
143 tion at the start of each line. This consists of a serial num‐
144 ber which ties together the log lines associated with an indi‐
145 vidual query, and the IP address of the requestor.
146
147 -8, --log-facility=<facility>
148 Set the facility to which dnsmasq will send syslog entries, this
149 defaults to DAEMON, and to LOCAL0 when debug mode is in opera‐
150 tion. If the facility given contains at least one '/' character,
151 it is taken to be a filename, and dnsmasq logs to the given
152 file, instead of syslog. If the facility is '-' then dnsmasq
153 logs to stderr. (Errors whilst reading configuration will still
154 go to syslog, but all output from a successful startup, and all
155 output whilst running, will go exclusively to the file.) When
156 logging to a file, dnsmasq will close and reopen the file when
157 it receives SIGUSR2. This allows the log file to be rotated
158 without stopping dnsmasq.
159
160 --log-async[=<lines>]
161 Enable asynchronous logging and optionally set the limit on the
162 number of lines which will be queued by dnsmasq when writing to
163 the syslog is slow. Dnsmasq can log asynchronously: this allows
164 it to continue functioning without being blocked by syslog, and
165 allows syslog to use dnsmasq for DNS queries without risking
166 deadlock. If the queue of log-lines becomes full, dnsmasq will
167 log the overflow, and the number of messages lost. The default
168 queue length is 5, a sane value would be 5-25, and a maximum
169 limit of 100 is imposed.
170
171 -x, --pid-file=<path>
172 Specify an alternate path for dnsmasq to record its process-id
173 in. Normally /var/run/dnsmasq.pid.
174
175 -u, --user=<username>
176 Specify the userid to which dnsmasq will change after startup.
177 Dnsmasq must normally be started as root, but it will drop root
178 privileges after startup by changing id to another user. Nor‐
179 mally this user is "nobody" but that can be over-ridden with
180 this switch.
181
182 -g, --group=<groupname>
183 Specify the group which dnsmasq will run as. The default is
184 "dip", if available, to facilitate access to
185 /etc/ppp/resolv.conf which is not normally world readable.
186
187 -v, --version
188 Print the version number.
189
190 -p, --port=<port>
191 Listen on <port> instead of the standard DNS port (53). Setting
192 this to zero completely disables DNS function, leaving only DHCP
193 and/or TFTP.
194
195 -P, --edns-packet-max=<size>
196 Specify the largest EDNS.0 UDP packet which is supported by the
197 DNS forwarder. Defaults to 4096, which is the RFC5625-recom‐
198 mended size.
199
200 -Q, --query-port=<query_port>
201 Send outbound DNS queries from, and listen for their replies on,
202 the specific UDP port <query_port> instead of using random
203 ports. NOTE that using this option will make dnsmasq less secure
204 against DNS spoofing attacks but it may be faster and use less
205 resources. Setting this option to zero makes dnsmasq use a sin‐
206 gle port allocated to it by the OS: this was the default behav‐
207 iour in versions prior to 2.43.
208
209 --min-port=<port>
210 Do not use ports less than that given as source for outbound DNS
211 queries. Dnsmasq picks random ports as source for outbound
212 queries: when this option is given, the ports used will always
213 to larger than that specified. Useful for systems behind fire‐
214 walls. If not specified, defaults to 1024.
215
216 --max-port=<port>
217 Use ports lower than that given as source for outbound DNS
218 queries. Dnsmasq picks random ports as source for outbound
219 queries: when this option is given, the ports used will always
220 be lower than that specified. Useful for systems behind fire‐
221 walls.
222
223 -i, --interface=<interface name>
224 Listen only on the specified interface(s). Dnsmasq automatically
225 adds the loopback (local) interface to the list of interfaces to
226 use when the --interface option is used. If no --interface or
227 --listen-address options are given dnsmasq listens on all avail‐
228 able interfaces except any given in --except-interface options.
229 On Linux, when --bind-interfaces or --bind-dynamic are in
230 effect, IP alias interface labels (eg "eth1:0") are checked,
231 rather than interface names. In the degenerate case when an
232 interface has one address, this amounts to the same thing but
233 when an interface has multiple addresses it allows control over
234 which of those addresses are accepted. The same effect is
235 achievable in default mode by using --listen-address. A simple
236 wildcard, consisting of a trailing '*', can be used in --inter‐
237 face and --except-interface options.
238
239 -I, --except-interface=<interface name>
240 Do not listen on the specified interface. Note that the order of
241 --listen-address --interface and --except-interface options does
242 not matter and that --except-interface options always override
243 the others. The comments about interface labels for --listen-
244 address apply here.
245
246 --auth-server=<domain>,[<interface>|<ip-address>...]
247 Enable DNS authoritative mode for queries arriving at an inter‐
248 face or address. Note that the interface or address need not be
249 mentioned in --interface or --listen-address configuration,
250 indeed --auth-server will override these and provide a different
251 DNS service on the specified interface. The <domain> is the
252 "glue record". It should resolve in the global DNS to an A
253 and/or AAAA record which points to the address dnsmasq is lis‐
254 tening on. When an interface is specified, it may be qualified
255 with "/4" or "/6" to specify only the IPv4 or IPv6 addresses
256 associated with the interface. Since any defined authoritative
257 zones are also available as part of the normal recusive DNS ser‐
258 vice supplied by dnsmasq, it can make sense to have an --auth-
259 server declaration with no interfaces or address, but simply
260 specifying the primary external nameserver.
261
262 --local-service
263 Accept DNS queries only from hosts whose address is on a local
264 subnet, ie a subnet for which an interface exists on the server.
265 This option only has effect if there are no --interface,
266 --except-interface, --listen-address or --auth-server options.
267 It is intended to be set as a default on installation, to allow
268 unconfigured installations to be useful but also safe from being
269 used for DNS amplification attacks.
270
271 -2, --no-dhcp-interface=<interface name>
272 Do not provide DHCP or TFTP on the specified interface, but do
273 provide DNS service.
274
275 -a, --listen-address=<ipaddr>
276 Listen on the given IP address(es). Both --interface and --lis‐
277 ten-address options may be given, in which case the set of both
278 interfaces and addresses is used. Note that if no --interface
279 option is given, but --listen-address is, dnsmasq will not auto‐
280 matically listen on the loopback interface. To achieve this, its
281 IP address, 127.0.0.1, must be explicitly given as a --listen-
282 address option.
283
284 -z, --bind-interfaces
285 On systems which support it, dnsmasq binds the wildcard address,
286 even when it is listening on only some interfaces. It then dis‐
287 cards requests that it shouldn't reply to. This has the advan‐
288 tage of working even when interfaces come and go and change
289 address. This option forces dnsmasq to really bind only the
290 interfaces it is listening on. About the only time when this is
291 useful is when running another nameserver (or another instance
292 of dnsmasq) on the same machine. Setting this option also
293 enables multiple instances of dnsmasq which provide DHCP service
294 to run in the same machine.
295
296 --bind-dynamic
297 Enable a network mode which is a hybrid between --bind-inter‐
298 faces and the default. Dnsmasq binds the address of individual
299 interfaces, allowing multiple dnsmasq instances, but if new
300 interfaces or addresses appear, it automatically listens on
301 those (subject to any access-control configuration). This makes
302 dynamically created interfaces work in the same way as the
303 default. Implementing this option requires non-standard network‐
304 ing APIs and it is only available under Linux. On other plat‐
305 forms it falls-back to --bind-interfaces mode.
306
307 -y, --localise-queries
308 Return answers to DNS queries from /etc/hosts and --interface-
309 name which depend on the interface over which the query was
310 received. If a name has more than one address associated with
311 it, and at least one of those addresses is on the same subnet as
312 the interface to which the query was sent, then return only the
313 address(es) on that subnet. This allows for a server to have
314 multiple addresses in /etc/hosts corresponding to each of its
315 interfaces, and hosts will get the correct address based on
316 which network they are attached to. Currently this facility is
317 limited to IPv4.
318
319 -b, --bogus-priv
320 Bogus private reverse lookups. All reverse lookups for private
321 IP ranges (ie 192.168.x.x, etc) which are not found in
322 /etc/hosts or the DHCP leases file are answered with "no such
323 domain" rather than being forwarded upstream. The set of pre‐
324 fixes affected is the list given in RFC6303, for IPv4 and IPv6.
325
326 -V, --alias=[<old-ip>]|[<start-ip>-<end-ip>],<new-ip>[,<mask>]
327 Modify IPv4 addresses returned from upstream nameservers; old-ip
328 is replaced by new-ip. If the optional mask is given then any
329 address which matches the masked old-ip will be re-written. So,
330 for instance --alias=1.2.3.0,6.7.8.0,255.255.255.0 will map
331 1.2.3.56 to 6.7.8.56 and 1.2.3.67 to 6.7.8.67. This is what
332 Cisco PIX routers call "DNS doctoring". If the old IP is given
333 as range, then only addresses in the range, rather than a whole
334 subnet, are re-written. So
335 --alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0 maps
336 192.168.0.10->192.168.0.40 to 10.0.0.10->10.0.0.40
337
338 -B, --bogus-nxdomain=<ipaddr>
339 Transform replies which contain the IP address given into "No
340 such domain" replies. This is intended to counteract a devious
341 move made by Verisign in September 2003 when they started
342 returning the address of an advertising web page in response to
343 queries for unregistered names, instead of the correct NXDOMAIN
344 response. This option tells dnsmasq to fake the correct response
345 when it sees this behaviour. As at Sept 2003 the IP address
346 being returned by Verisign is 64.94.110.11
347
348 --ignore-address=<ipaddr>
349 Ignore replies to A-record queries which include the specified
350 address. No error is generated, dnsmasq simply continues to
351 listen for another reply. This is useful to defeat blocking
352 strategies which rely on quickly supplying a forged answer to a
353 DNS request for certain domain, before the correct answer can
354 arrive.
355
356 -f, --filterwin2k
357 Later versions of windows make periodic DNS requests which don't
358 get sensible answers from the public DNS and can cause problems
359 by triggering dial-on-demand links. This flag turns on an option
360 to filter such requests. The requests blocked are for records of
361 types SOA and SRV, and type ANY where the requested name has
362 underscores, to catch LDAP requests.
363
364 -r, --resolv-file=<file>
365 Read the IP addresses of the upstream nameservers from <file>,
366 instead of /etc/resolv.conf. For the format of this file see
367 resolv.conf(5). The only lines relevant to dnsmasq are name‐
368 server ones. Dnsmasq can be told to poll more than one
369 resolv.conf file, the first file name specified overrides the
370 default, subsequent ones add to the list. This is only allowed
371 when polling; the file with the currently latest modification
372 time is the one used.
373
374 -R, --no-resolv
375 Don't read /etc/resolv.conf. Get upstream servers only from the
376 command line or the dnsmasq configuration file.
377
378 -1, --enable-dbus[=<service-name>]
379 Allow dnsmasq configuration to be updated via DBus method calls.
380 The configuration which can be changed is upstream DNS servers
381 (and corresponding domains) and cache clear. Requires that dns‐
382 masq has been built with DBus support. If the service name is
383 given, dnsmasq provides service at that name, rather than the
384 default which is uk.org.thekelleys.dnsmasq
385
386 --enable-ubus[=<service-name>]
387 Enable dnsmasq UBus interface. It sends notifications via UBus
388 on DHCPACK and DHCPRELEASE events. Furthermore it offers met‐
389 rics. Requires that dnsmasq has been built with UBus support.
390 If the service name is given, dnsmasq provides service at that
391 namespace, rather than the default which is dnsmasq
392
393 -o, --strict-order
394 By default, dnsmasq will send queries to any of the upstream
395 servers it knows about and tries to favour servers that are
396 known to be up. Setting this flag forces dnsmasq to try each
397 query with each server strictly in the order they appear in
398 /etc/resolv.conf
399
400 --all-servers
401 By default, when dnsmasq has more than one upstream server
402 available, it will send queries to just one server. Setting this
403 flag forces dnsmasq to send all queries to all available
404 servers. The reply from the server which answers first will be
405 returned to the original requester.
406
407 --dns-loop-detect
408 Enable code to detect DNS forwarding loops; ie the situation
409 where a query sent to one of the upstream server eventually
410 returns as a new query to the dnsmasq instance. The process
411 works by generating TXT queries of the form <hex>.test and send‐
412 ing them to each upstream server. The hex is a UID which encodes
413 the instance of dnsmasq sending the query and the upstream
414 server to which it was sent. If the query returns to the server
415 which sent it, then the upstream server through which it was
416 sent is disabled and this event is logged. Each time the set of
417 upstream servers changes, the test is re-run on all of them,
418 including ones which were previously disabled.
419
420 --stop-dns-rebind
421 Reject (and log) addresses from upstream nameservers which are
422 in the private ranges. This blocks an attack where a browser
423 behind a firewall is used to probe machines on the local net‐
424 work. For IPv6, the private range covers the IPv4-mapped
425 addresses in private space plus all link-local (LL) and site-
426 local (ULA) addresses.
427
428 --rebind-localhost-ok
429 Exempt 127.0.0.0/8 and ::1 from rebinding checks. This address
430 range is returned by realtime black hole servers, so blocking it
431 may disable these services.
432
433 --rebind-domain-ok=[<domain>]|[[/<domain>/[<domain>/]
434 Do not detect and block dns-rebind on queries to these domains.
435 The argument may be either a single domain, or multiple domains
436 surrounded by '/', like the --server syntax, eg. --rebind-
437 domain-ok=/domain1/domain2/domain3/
438
439 -n, --no-poll
440 Don't poll /etc/resolv.conf for changes.
441
442 --clear-on-reload
443 Whenever /etc/resolv.conf is re-read or the upstream servers are
444 set via DBus, clear the DNS cache. This is useful when new
445 nameservers may have different data than that held in cache.
446
447 -D, --domain-needed
448 Tells dnsmasq to never forward A or AAAA queries for plain
449 names, without dots or domain parts, to upstream nameservers. If
450 the name is not known from /etc/hosts or DHCP then a "not found"
451 answer is returned.
452
453 -S, --local,
454 --server=[/[<domain>]/[domain/]][<ipaddr>[#<port>]][@<source-
455 ip>|<interface>[#<port>]]
456 Specify IP address of upstream servers directly. Setting this
457 flag does not suppress reading of /etc/resolv.conf, use --no-
458 resolv to do that. If one or more optional domains are given,
459 that server is used only for those domains and they are queried
460 only using the specified server. This is intended for private
461 nameservers: if you have a nameserver on your network which
462 deals with names of the form xxx.internal.thekelleys.org.uk at
463 192.168.1.1 then giving the flag --server=/internal.thekel‐
464 leys.org.uk/192.168.1.1 will send all queries for internal
465 machines to that nameserver, everything else will go to the
466 servers in /etc/resolv.conf. DNSSEC validation is turned off for
467 such private nameservers, UNLESS a --trust-anchor is specified
468 for the domain in question. An empty domain specification, //
469 has the special meaning of "unqualified names only" ie names
470 without any dots in them. A non-standard port may be specified
471 as part of the IP address using a # character. More than one
472 --server flag is allowed, with repeated domain or ipaddr parts
473 as required.
474
475 More specific domains take precedence over less specific
476 domains, so: --server=/google.com/1.2.3.4
477 --server=/www.google.com/2.3.4.5 will send queries for
478 *.google.com to 1.2.3.4, except *www.google.com, which will go
479 to 2.3.4.5
480
481 The special server address '#' means, "use the standard
482 servers", so --server=/google.com/1.2.3.4
483 --server=/www.google.com/# will send queries for *.google.com to
484 1.2.3.4, except *www.google.com which will be forwarded as
485 usual.
486
487 Also permitted is a -S flag which gives a domain but no IP
488 address; this tells dnsmasq that a domain is local and it may
489 answer queries from /etc/hosts or DHCP but should never forward
490 queries on that domain to any upstream servers. --local is a
491 synonym for --server to make configuration files clearer in this
492 case.
493
494 IPv6 addresses may include an %interface scope-id, eg
495 fe80::202:a412:4512:7bbf%eth0.
496
497 The optional string after the @ character tells dnsmasq how to
498 set the source of the queries to this nameserver. It can either
499 be an ip-address, an interface name or both. The ip-address
500 should belong to the machine on which dnsmasq is running, other‐
501 wise this server line will be logged and then ignored. If an
502 interface name is given, then queries to the server will be
503 forced via that interface; if an ip-address is given then the
504 source address of the queries will be set to that address; and
505 if both are given then a combination of ip-address and interface
506 name will be used to steer requests to the server. The query-
507 port flag is ignored for any servers which have a source address
508 specified but the port may be specified directly as part of the
509 source address. Forcing queries to an interface is not imple‐
510 mented on all platforms supported by dnsmasq.
511
512 --rev-server=<ip-address>/<prefix-len>[,<ipaddr>][#<port>][@<source-
513 ip>|<interface>[#<port>]]
514 This is functionally the same as --server, but provides some
515 syntactic sugar to make specifying address-to-name queries eas‐
516 ier. For example --rev-server=1.2.3.0/24,192.168.0.1 is exactly
517 equivalent to --server=/3.2.1.in-addr.arpa/192.168.0.1
518
519 -A, --address=/<domain>[/<domain>...]/[<ipaddr>]
520 Specify an IP address to return for any host in the given
521 domains. Queries in the domains are never forwarded and always
522 replied to with the specified IP address which may be IPv4 or
523 IPv6. To give both IPv4 and IPv6 addresses for a domain, use
524 repeated --address flags. To include multiple IP addresses for
525 a single query, use --addn-hosts=<path> instead. Note that
526 /etc/hosts and DHCP leases override this for individual names. A
527 common use of this is to redirect the entire doubleclick.net
528 domain to some friendly local web server to avoid banner ads.
529 The domain specification works in the same was as for --server,
530 with the additional facility that /#/ matches any domain. Thus
531 --address=/#/1.2.3.4 will always return 1.2.3.4 for any query
532 not answered from /etc/hosts or DHCP and not sent to an upstream
533 nameserver by a more specific --server directive. As for
534 --server, one or more domains with no address returns a no-such-
535 domain answer, so --address=/example.com/ is equivalent to
536 --server=/example.com/ and returns NXDOMAIN for example.com and
537 all its subdomains. An address specified as '#' translates to
538 the NULL address of 0.0.0.0 and its IPv6 equivalent of :: so
539 --address=/example.com/# will return NULL addresses for exam‐
540 ple.com and its subdomains. This is partly syntactic sugar for
541 --address=/example.com/0.0.0.0 and --address=/example.com/:: but
542 is also more efficient than including both as separate configu‐
543 ration lines. Note that NULL addresses normally work in the same
544 way as localhost, so beware that clients looking up these names
545 are likely to end up talking to themselves.
546
547 --ipset=/<domain>[/<domain>...]/<ipset>[,<ipset>...]
548 Places the resolved IP addresses of queries for one or more
549 domains in the specified Netfilter IP set. If multiple setnames
550 are given, then the addresses are placed in each of them, sub‐
551 ject to the limitations of an IP set (IPv4 addresses cannot be
552 stored in an IPv6 IP set and vice versa). Domains and subdo‐
553 mains are matched in the same way as --address. These IP sets
554 must already exist. See ipset(8) for more details.
555
556 -m, --mx-host=<mx name>[[,<hostname>],<preference>]
557 Return an MX record named <mx name> pointing to the given host‐
558 name (if given), or the host specified in the --mx-target switch
559 or, if that switch is not given, the host on which dnsmasq is
560 running. The default is useful for directing mail from systems
561 on a LAN to a central server. The preference value is optional,
562 and defaults to 1 if not given. More than one MX record may be
563 given for a host.
564
565 -t, --mx-target=<hostname>
566 Specify the default target for the MX record returned by dns‐
567 masq. See --mx-host. If --mx-target is given, but not --mx-
568 host, then dnsmasq returns a MX record containing the MX target
569 for MX queries on the hostname of the machine on which dnsmasq
570 is running.
571
572 -e, --selfmx
573 Return an MX record pointing to itself for each local machine.
574 Local machines are those in /etc/hosts or with DHCP leases.
575
576 -L, --localmx
577 Return an MX record pointing to the host given by --mx-target
578 (or the machine on which dnsmasq is running) for each local
579 machine. Local machines are those in /etc/hosts or with DHCP
580 leases.
581
582 -W, --srv-host=<_service>.<_prot>.[<domain>],[<target>[,<port>[,<prior‐
583 ity>[,<weight>]]]]
584 Return a SRV DNS record. See RFC2782 for details. If not sup‐
585 plied, the domain defaults to that given by --domain. The
586 default for the target domain is empty, and the default for port
587 is one and the defaults for weight and priority are zero. Be
588 careful if transposing data from BIND zone files: the port,
589 weight and priority numbers are in a different order. More than
590 one SRV record for a given service/domain is allowed, all that
591 match are returned.
592
593 --host-
594 record=<name>[,<name>....],[<IPv4-address>],[<IPv6-address>][,<TTL>]
595 Add A, AAAA and PTR records to the DNS. This adds one or more
596 names to the DNS with associated IPv4 (A) and IPv6 (AAAA)
597 records. A name may appear in more than one --host-record and
598 therefore be assigned more than one address. Only the first
599 address creates a PTR record linking the address to the name.
600 This is the same rule as is used reading hosts-files. --host-
601 record options are considered to be read before host-files, so a
602 name appearing there inhibits PTR-record creation if it appears
603 in hosts-file also. Unlike hosts-files, names are not expanded,
604 even when --expand-hosts is in effect. Short and long names may
605 appear in the same --host-record, eg. --host-record=laptop,lap‐
606 top.thekelleys.org,192.168.0.1,1234::100
607
608 If the time-to-live is given, it overrides the default, which is
609 zero or the value of --local-ttl. The value is a positive inte‐
610 ger and gives the time-to-live in seconds.
611
612 -Y, --txt-record=<name>[[,<text>],<text>]
613 Return a TXT DNS record. The value of TXT record is a set of
614 strings, so any number may be included, delimited by commas;
615 use quotes to put commas into a string. Note that the maximum
616 length of a single string is 255 characters, longer strings are
617 split into 255 character chunks.
618
619 --ptr-record=<name>[,<target>]
620 Return a PTR DNS record.
621
622 --naptr-record=<name>,<order>,<preference>,<flags>,<service>,<reg‐
623 exp>[,<replacement>]
624 Return an NAPTR DNS record, as specified in RFC3403.
625
626 --caa-record=<name>,<flags>,<tag>,<value>
627 Return a CAA DNS record, as specified in RFC6844.
628
629 --cname=<cname>,[<cname>,]<target>[,<TTL>]
630 Return a CNAME record which indicates that <cname> is really
631 <target>. There is a significant limitation on the target; it
632 must be a DNS record which is known to dnsmasq and NOT a DNS
633 record which comes from an upstream server. The cname must be
634 unique, but it is permissible to have more than one cname point‐
635 ing to the same target. Indeed it's possible to declare multiple
636 cnames to a target in a single line, like so:
637 --cname=cname1,cname2,target
638
639 If the time-to-live is given, it overrides the default, which is
640 zero or the value of --local-ttl. The value is a positive inte‐
641 ger and gives the time-to-live in seconds.
642
643 --dns-rr=<name>,<RR-number>,[<hex data>]
644 Return an arbitrary DNS Resource Record. The number is the type
645 of the record (which is always in the C_IN class). The value of
646 the record is given by the hex data, which may be of the form
647 01:23:45 or 01 23 45 or 012345 or any mixture of these.
648
649 --interface-name=<name>,<interface>[/4|/6]
650 Return DNS records associating the name with the address(es) of
651 the given interface. This flag specifies an A or AAAA record for
652 the given name in the same way as an /etc/hosts line, except
653 that the address is not constant, but taken from the given
654 interface. The interface may be followed by "/4" or "/6" to
655 specify that only IPv4 or IPv6 addresses of the interface should
656 be used. If the interface is down, not configured or non-exis‐
657 tent, an empty record is returned. The matching PTR record is
658 also created, mapping the interface address to the name. More
659 than one name may be associated with an interface address by
660 repeating the flag; in that case the first instance is used for
661 the reverse address-to-name mapping. Note that a name used in
662 --interface-name may not appear in /etc/hosts.
663
664 --synth-domain=<domain>,<address range>[,<prefix>[*]]
665 Create artificial A/AAAA and PTR records for an address range.
666 The records either seqential numbers or the address, with peri‐
667 ods (or colons for IPv6) replaced with dashes.
668
669 An examples should make this clearer. First sequential numbers.
670 --synth-domain=thekel‐
671 leys.org.uk,192.168.0.50,192.168.0.70,internal-* results in the
672 name internal-0.thekelleys.org.uk. returning 192.168.0.50,
673 internal-1.thekelleys.org.uk returning 192.168.0.51 and so on.
674 (note the *) The same principle applies to IPv6 addresses (where
675 the numbers may be very large). Reverse lookups from address to
676 name behave as expected.
677
678 Second, --synth-domain=thekelleys.org.uk,192.168.0.0/24,inter‐
679 nal- (no *) will result in a query for inter‐
680 nal-192-168-0-56.thekelleys.org.uk returning 192.168.0.56 and a
681 reverse query vice versa. The same applies to IPv6, but IPv6
682 addresses may start with '::' but DNS labels may not start with
683 '-' so in this case if no prefix is configured a zero is added
684 in front of the label. ::1 becomes 0--1.
685
686 V4 mapped IPv6 addresses, which have a representation like
687 ::ffff:1.2.3.4 are handled specially, and become like
688 0--ffff-1-2-3-4
689
690 The address range can be of the form <ip address>,<ip address>
691 or <ip address>/<netmask> in both forms of the option.
692
693 --dumpfile=<path/to/file>
694 Specify the location of a pcap-format file which dnsmasq uses to
695 dump copies of network packets for debugging purposes. If the
696 file exists when dnsmasq starts, it is not deleted; new packets
697 are added to the end.
698
699 --dumpmask=<mask>
700 Specify which types of packets should be added to the dumpfile.
701 The argument should be the OR of the bitmasks for each type of
702 packet to be dumped: it can be specified in hex by preceding the
703 number with 0x in the normal way. Each time a packet is written
704 to the dumpfile, dnsmasq logs the packet sequence and the mask
705 representing its type. The current types are: 0x0001 - DNS
706 queries from clients 0x0002 DNS replies to clients 0x0004 - DNS
707 queries to upstream 0x0008 - DNS replies from upstream 0x0010 -
708 queries send upstream for DNSSEC validation 0x0020 - replies to
709 queries for DNSSEC validation 0x0040 - replies to client queries
710 which fail DNSSEC validation 0x0080 replies to queries for
711 DNSSEC validation which fail validation.
712
713 --add-mac[=base64|text]
714 Add the MAC address of the requestor to DNS queries which are
715 forwarded upstream. This may be used to DNS filtering by the
716 upstream server. The MAC address can only be added if the
717 requestor is on the same subnet as the dnsmasq server. Note that
718 the mechanism used to achieve this (an EDNS0 option) is not yet
719 standardised, so this should be considered experimental. Also
720 note that exposing MAC addresses in this way may have security
721 and privacy implications. The warning about caching given for
722 --add-subnet applies to --add-mac too. An alternative encoding
723 of the MAC, as base64, is enabled by adding the "base64" parame‐
724 ter and a human-readable encoding of hex-and-colons is enabled
725 by added the "text" parameter.
726
727 --add-cpe-id=<string>
728 Add an arbitrary identifying string to DNS queries which are
729 forwarded upstream.
730
731 --add-subnet[[=[<IPv4 address>/]<IPv4 prefix length>][,[<IPv6
732 address>/]<IPv6 prefix length>]]
733 Add a subnet address to the DNS queries which are forwarded
734 upstream. If an address is specified in the flag, it will be
735 used, otherwise, the address of the requestor will be used. The
736 amount of the address forwarded depends on the prefix length
737 parameter: 32 (128 for IPv6) forwards the whole address, zero
738 forwards none of it but still marks the request so that no
739 upstream nameserver will add client address information either.
740 The default is zero for both IPv4 and IPv6. Note that upstream
741 nameservers may be configured to return different results based
742 on this information, but the dnsmasq cache does not take
743 account. Caching is therefore disabled for such replies, unless
744 the subnet address being added is constant.
745
746 For example, --add-subnet=24,96 will add the /24 and /96 subnets
747 of the requestor for IPv4 and IPv6 requestors, respectively.
748 --add-subnet=1.2.3.4/24 will add 1.2.3.0/24 for IPv4 requestors
749 and ::/0 for IPv6 requestors. --add-sub‐
750 net=1.2.3.4/24,1.2.3.4/24 will add 1.2.3.0/24 for both IPv4 and
751 IPv6 requestors.
752
753
754 -c, --cache-size=<cachesize>
755 Set the size of dnsmasq's cache. The default is 150 names. Set‐
756 ting the cache size to zero disables caching. Note: huge cache
757 size impacts performance.
758
759 -N, --no-negcache
760 Disable negative caching. Negative caching allows dnsmasq to
761 remember "no such domain" answers from upstream nameservers and
762 answer identical queries without forwarding them again.
763
764 -0, --dns-forward-max=<queries>
765 Set the maximum number of concurrent DNS queries. The default
766 value is 150, which should be fine for most setups. The only
767 known situation where this needs to be increased is when using
768 web-server log file resolvers, which can generate large numbers
769 of concurrent queries.
770
771 --dnssec
772 Validate DNS replies and cache DNSSEC data. When forwarding DNS
773 queries, dnsmasq requests the DNSSEC records needed to validate
774 the replies. The replies are validated and the result returned
775 as the Authenticated Data bit in the DNS packet. In addition the
776 DNSSEC records are stored in the cache, making validation by
777 clients more efficient. Note that validation by clients is the
778 most secure DNSSEC mode, but for clients unable to do valida‐
779 tion, use of the AD bit set by dnsmasq is useful, provided that
780 the network between the dnsmasq server and the client is
781 trusted. Dnsmasq must be compiled with HAVE_DNSSEC enabled, and
782 DNSSEC trust anchors provided, see --trust-anchor. Because the
783 DNSSEC validation process uses the cache, it is not permitted to
784 reduce the cache size below the default when DNSSEC is enabled.
785 The nameservers upstream of dnsmasq must be DNSSEC-capable, ie
786 capable of returning DNSSEC records with data. If they are not,
787 then dnsmasq will not be able to determine the trusted status of
788 answers and this means that DNS service will be entirely broken.
789
790 --trust-anchor=[<class>],<domain>,<key-tag>,<algorithm>,<digest-
791 type>,<digest>
792 Provide DS records to act a trust anchors for DNSSEC validation.
793 Typically these will be the DS record(s) for Key Signing key(s)
794 (KSK) of the root zone, but trust anchors for limited domains
795 are also possible. The current root-zone trust anchors may be
796 downloaded from https://data.iana.org/root-anchors/root-
797 anchors.xml
798
799 --dnssec-check-unsigned[=no]
800 As a default, dnsmasq checks that unsigned DNS replies are
801 legitimate: this entails possible extra queries even for the
802 majority of DNS zones which are not, at the moment, signed. If
803 --dnssec-check-unsigned=no appears in the configuration, then
804 such replies they are assumed to be valid and passed on (without
805 the "authentic data" bit set, of course). This does not protect
806 against an attacker forging unsigned replies for signed DNS
807 zones, but it is fast.
808
809 Versions of dnsmasq prior to 2.80 defaulted to not checking
810 unsigned replies, and used --dnssec-check-unsigned to switch
811 this on. Such configurations will continue to work as before,
812 but those which used the default of no checking will need to be
813 altered to explicitly select no checking. The new default is
814 because switching off checking for unsigned replies is inher‐
815 ently dangerous. Not only does it open the possiblity of forged
816 replies, but it allows everything to appear to be working even
817 when the upstream namesevers do not support DNSSEC, and in this
818 case no DNSSEC validation at all is occurring.
819
820 --dnssec-no-timecheck
821 DNSSEC signatures are only valid for specified time windows, and
822 should be rejected outside those windows. This generates an
823 interesting chicken-and-egg problem for machines which don't
824 have a hardware real time clock. For these machines to determine
825 the correct time typically requires use of NTP and therefore
826 DNS, but validating DNS requires that the correct time is
827 already known. Setting this flag removes the time-window checks
828 (but not other DNSSEC validation.) only until the dnsmasq
829 process receives SIGINT. The intention is that dnsmasq should be
830 started with this flag when the platform determines that reli‐
831 able time is not currently available. As soon as reliable time
832 is established, a SIGINT should be sent to dnsmasq, which
833 enables time checking, and purges the cache of DNS records which
834 have not been thoroughly checked.
835
836 Earlier versions of dnsmasq overloaded SIGHUP (which re-reads
837 much configuration) to also enable time validation.
838
839 If dnsmasq is run in debug mode (--no-daemon flag) then SIGINT
840 retains its usual meaning of terminating the dnsmasq process.
841
842 --dnssec-timestamp=<path>
843 Enables an alternative way of checking the validity of the sys‐
844 tem time for DNSSEC (see --dnssec-no-timecheck). In this case,
845 the system time is considered to be valid once it becomes later
846 than the timestamp on the specified file. The file is created
847 and its timestamp set automatically by dnsmasq. The file must be
848 stored on a persistent filesystem, so that it and its mtime are
849 carried over system restarts. The timestamp file is created
850 after dnsmasq has dropped root, so it must be in a location
851 writable by the unprivileged user that dnsmasq runs as.
852
853 --proxy-dnssec
854 Copy the DNSSEC Authenticated Data bit from upstream servers to
855 downstream clients. This is an alternative to having dnsmasq
856 validate DNSSEC, but it depends on the security of the network
857 between dnsmasq and the upstream servers, and the trustworthi‐
858 ness of the upstream servers. Note that caching the Authenti‐
859 cated Data bit correctly in all cases is not technically possi‐
860 ble. If the AD bit is to be relied upon when using this option,
861 then the cache should be disabled using --cache-size=0. In most
862 cases, enabling DNSSEC validation within dnsmasq is a better
863 option. See --dnssec for details.
864
865 --dnssec-debug
866 Set debugging mode for the DNSSEC validation, set the Checking
867 Disabled bit on upstream queries, and don't convert replies
868 which do not validate to responses with a return code of SERV‐
869 FAIL. Note that setting this may affect DNS behaviour in bad
870 ways, it is not an extra-logging flag and should not be set in
871 production.
872
873 --auth-zone=<domain>[,<subnet>[/<prefix length>][,<subnet>[/<prefix
874 length>].....][,exclude:<subnet>[/<prefix length>]].....]
875 Define a DNS zone for which dnsmasq acts as authoritative
876 server. Locally defined DNS records which are in the domain will
877 be served. If subnet(s) are given, A and AAAA records must be in
878 one of the specified subnets.
879
880 As alternative to directly specifying the subnets, it's possible
881 to give the name of an interface, in which case the subnets
882 implied by that interface's configured addresses and net‐
883 mask/prefix-length are used; this is useful when using con‐
884 structed DHCP ranges as the actual address is dynamic and not
885 known when configuring dnsmasq. The interface addresses may be
886 confined to only IPv6 addresses using <interface>/6 or to only
887 IPv4 using <interface>/4. This is useful when an interface has
888 dynamically determined global IPv6 addresses which should appear
889 in the zone, but RFC1918 IPv4 addresses which should not.
890 Interface-name and address-literal subnet specifications may be
891 used freely in the same --auth-zone declaration.
892
893 It's possible to exclude certain IP addresses from responses. It
894 can be used, to make sure that answers contain only global
895 routeable IP addresses (by excluding loopback, RFC1918 and ULA
896 addresses).
897
898 The subnet(s) are also used to define in-addr.arpa and ip6.arpa
899 domains which are served for reverse-DNS queries. If not speci‐
900 fied, the prefix length defaults to 24 for IPv4 and 64 for IPv6.
901 For IPv4 subnets, the prefix length should be have the value 8,
902 16 or 24 unless you are familiar with RFC 2317 and have arranged
903 the in-addr.arpa delegation accordingly. Note that if no subnets
904 are specified, then no reverse queries are answered.
905
906 --auth-soa=<serial>[,<hostmaster>[,<refresh>[,<retry>[,<expiry>]]]]
907 Specify fields in the SOA record associated with authoritative
908 zones. Note that this is optional, all the values are set to
909 sane defaults.
910
911 --auth-sec-servers=<domain>[,<domain>[,<domain>...]]
912 Specify any secondary servers for a zone for which dnsmasq is
913 authoritative. These servers must be configured to get zone data
914 from dnsmasq by zone transfer, and answer queries for the same
915 authoritative zones as dnsmasq.
916
917 --auth-peer=<ip-address>[,<ip-address>[,<ip-address>...]]
918 Specify the addresses of secondary servers which are allowed to
919 initiate zone transfer (AXFR) requests for zones for which dns‐
920 masq is authoritative. If this option is not given but --auth-
921 sec-servers is, then AXFR requests will be accepted from any
922 secondary. Specifying --auth-peer without --auth-sec-servers
923 enables zone transfer but does not advertise the secondary in NS
924 records returned by dnsmasq.
925
926 --conntrack
927 Read the Linux connection track mark associated with incoming
928 DNS queries and set the same mark value on upstream traffic used
929 to answer those queries. This allows traffic generated by dns‐
930 masq to be associated with the queries which cause it, useful
931 for bandwidth accounting and firewalling. Dnsmasq must have con‐
932 ntrack support compiled in and the kernel must have conntrack
933 support included and configured. This option cannot be combined
934 with --query-port.
935
936 -F, --dhcp-range=[tag:<tag>[,tag:<tag>],][set:<tag>,]<start-
937 addr>[,<end-addr>|<mode>][,<netmask>[,<broadcast>]][,<lease time>]
938
939 -F, --dhcp-range=[tag:<tag>[,tag:<tag>],][set:<tag>,]<start-
940 IPv6addr>[,<end-IPv6addr>|constructor:<interface>][,<mode>][,<prefix-
941 len>][,<lease time>]
942
943 Enable the DHCP server. Addresses will be given out from the
944 range <start-addr> to <end-addr> and from statically defined
945 addresses given in --dhcp-host options. If the lease time is
946 given, then leases will be given for that length of time. The
947 lease time is in seconds, or minutes (eg 45m) or hours (eg 1h)
948 or "infinite". If not given, the default lease time is one hour
949 for IPv4 and one day for IPv6. The minimum lease time is two
950 minutes. For IPv6 ranges, the lease time maybe "deprecated";
951 this sets the preferred lifetime sent in a DHCP lease or router
952 advertisement to zero, which causes clients to use other
953 addresses, if available, for new connections as a prelude to
954 renumbering.
955
956 This option may be repeated, with different addresses, to enable
957 DHCP service to more than one network. For directly connected
958 networks (ie, networks on which the machine running dnsmasq has
959 an interface) the netmask is optional: dnsmasq will determine it
960 from the interface configuration. For networks which receive
961 DHCP service via a relay agent, dnsmasq cannot determine the
962 netmask itself, so it should be specified, otherwise dnsmasq
963 will have to guess, based on the class (A, B or C) of the net‐
964 work address. The broadcast address is always optional. It is
965 always allowed to have more than one --dhcp-range in a single
966 subnet.
967
968 For IPv6, the parameters are slightly different: instead of net‐
969 mask and broadcast address, there is an optional prefix length
970 which must be equal to or larger then the prefix length on the
971 local interface. If not given, this defaults to 64. Unlike the
972 IPv4 case, the prefix length is not automatically derived from
973 the interface configuration. The minimum size of the prefix
974 length is 64.
975
976 IPv6 (only) supports another type of range. In this, the start
977 address and optional end address contain only the network part
978 (ie ::1) and they are followed by constructor:<interface>. This
979 forms a template which describes how to create ranges, based on
980 the addresses assigned to the interface. For instance
981
982 --dhcp-range=::1,::400,constructor:eth0
983
984 will look for addresses on eth0 and then create a range from
985 <network>::1 to <network>::400. If the interface is assigned
986 more than one network, then the corresponding ranges will be
987 automatically created, and then deprecated and finally removed
988 again as the address is deprecated and then deleted. The inter‐
989 face name may have a final "*" wildcard. Note that just any
990 address on eth0 will not do: it must not be an autoconfigured or
991 privacy address, or be deprecated.
992
993 If a --dhcp-range is only being used for stateless DHCP and/or
994 SLAAC, then the address can be simply ::
995
996 --dhcp-range=::,constructor:eth0
997
998
999 The optional set:<tag> sets an alphanumeric label which marks
1000 this network so that DHCP options may be specified on a per-net‐
1001 work basis. When it is prefixed with 'tag:' instead, then its
1002 meaning changes from setting a tag to matching it. Only one tag
1003 may be set, but more than one tag may be matched.
1004
1005 The optional <mode> keyword may be static which tells dnsmasq to
1006 enable DHCP for the network specified, but not to dynamically
1007 allocate IP addresses: only hosts which have static addresses
1008 given via --dhcp-host or from /etc/ethers will be served. A
1009 static-only subnet with address all zeros may be used as a
1010 "catch-all" address to enable replies to all Information-request
1011 packets on a subnet which is provided with stateless DHCPv6, ie
1012 --dhcp-range=::,static
1013
1014 For IPv4, the <mode> may be proxy in which case dnsmasq will
1015 provide proxy-DHCP on the specified subnet. (See --pxe-prompt
1016 and --pxe-service for details.)
1017
1018 For IPv6, the mode may be some combination of ra-only, slaac,
1019 ra-names, ra-stateless, ra-advrouter, off-link.
1020
1021 ra-only tells dnsmasq to offer Router Advertisement only on this
1022 subnet, and not DHCP.
1023
1024 slaac tells dnsmasq to offer Router Advertisement on this subnet
1025 and to set the A bit in the router advertisement, so that the
1026 client will use SLAAC addresses. When used with a DHCP range or
1027 static DHCP address this results in the client having both a
1028 DHCP-assigned and a SLAAC address.
1029
1030 ra-stateless sends router advertisements with the O and A bits
1031 set, and provides a stateless DHCP service. The client will use
1032 a SLAAC address, and use DHCP for other configuration informa‐
1033 tion.
1034
1035 ra-names enables a mode which gives DNS names to dual-stack
1036 hosts which do SLAAC for IPv6. Dnsmasq uses the host's IPv4
1037 lease to derive the name, network segment and MAC address and
1038 assumes that the host will also have an IPv6 address calculated
1039 using the SLAAC algorithm, on the same network segment. The
1040 address is pinged, and if a reply is received, an AAAA record is
1041 added to the DNS for this IPv6 address. Note that this is only
1042 happens for directly-connected networks, (not one doing DHCP via
1043 a relay) and it will not work if a host is using privacy exten‐
1044 sions. ra-names can be combined with ra-stateless and slaac.
1045
1046 ra-advrouter enables a mode where router address(es) rather than
1047 prefix(es) are included in the advertisements. This is
1048 described in RFC-3775 section 7.2 and is used in mobile IPv6. In
1049 this mode the interval option is also included, as described in
1050 RFC-3775 section 7.3.
1051
1052 off-link tells dnsmasq to advertise the prefix without the on-
1053 link (aka L) bit set.
1054
1055
1056 -G, --dhcp-
1057 host=[<hwaddr>][,id:<client_id>|*][,set:<tag>][tag:<tag>][,<ipaddr>][,<host‐
1058 name>][,<lease_time>][,ignore]
1059 Specify per host parameters for the DHCP server. This allows a
1060 machine with a particular hardware address to be always allo‐
1061 cated the same hostname, IP address and lease time. A hostname
1062 specified like this overrides any supplied by the DHCP client on
1063 the machine. It is also allowable to omit the hardware address
1064 and include the hostname, in which case the IP address and lease
1065 times will apply to any machine claiming that name. For example
1066 --dhcp-host=00:20:e0:3b:13:af,wap,infinite tells dnsmasq to give
1067 the machine with hardware address 00:20:e0:3b:13:af the name
1068 wap, and an infinite DHCP lease. --dhcp-host=lap,192.168.0.199
1069 tells dnsmasq to always allocate the machine lap the IP address
1070 192.168.0.199.
1071
1072 Addresses allocated like this are not constrained to be in the
1073 range given by the --dhcp-range option, but they must be in the
1074 same subnet as some valid dhcp-range. For subnets which don't
1075 need a pool of dynamically allocated addresses, use the "static"
1076 keyword in the --dhcp-range declaration.
1077
1078 It is allowed to use client identifiers (called client DUID in
1079 IPv6-land) rather than hardware addresses to identify hosts by
1080 prefixing with 'id:'. Thus: --dhcp-host=id:01:02:03:04,.....
1081 refers to the host with client identifier 01:02:03:04. It is
1082 also allowed to specify the client ID as text, like this:
1083 --dhcp-host=id:clientidastext,.....
1084
1085 A single --dhcp-host may contain an IPv4 address or one or more
1086 IPv6 addresses, or both. IPv6 addresses must be bracketed by
1087 square brackets thus: --dhcp-host=laptop,[1234::56] IPv6
1088 addresses may contain only the host-identifier part: --dhcp-
1089 host=laptop,[::56] in which case they act as wildcards in con‐
1090 structed DHCP ranges, with the appropriate network part
1091 inserted. For IPv6, an address may include a prefix length:
1092 --dhcp-host=laptop,[1234:50/126] which (in this case) specifies
1093 four addresses, 1234::50 to 1234::53. This (an the ability to
1094 specify multiple addresses) is useful when a host presents
1095 either a consistent name or hardware-ID, but varying DUIDs,
1096 since it allows dnsmasq to honour the static address allocation
1097 but assign a different adddress for each DUID. This typically
1098 occurs when chain netbooting, as each stage of the chain gets in
1099 turn allocates an address.
1100
1101 Note that in IPv6 DHCP, the hardware address may not be avail‐
1102 able, though it normally is for direct-connected clients, or
1103 clients using DHCP relays which support RFC 6939.
1104
1105
1106 For DHCPv4, the special option id:* means "ignore any client-id
1107 and use MAC addresses only." This is useful when a client
1108 presents a client-id sometimes but not others.
1109
1110 If a name appears in /etc/hosts, the associated address can be
1111 allocated to a DHCP lease, but only if a --dhcp-host option
1112 specifying the name also exists. Only one hostname can be given
1113 in a --dhcp-host option, but aliases are possible by using
1114 CNAMEs. (See --cname ).
1115
1116 The special keyword "ignore" tells dnsmasq to never offer a DHCP
1117 lease to a machine. The machine can be specified by hardware
1118 address, client ID or hostname, for instance --dhcp-
1119 host=00:20:e0:3b:13:af,ignore This is useful when there is
1120 another DHCP server on the network which should be used by some
1121 machines.
1122
1123 The set:<tag> construct sets the tag whenever this --dhcp-host
1124 directive is in use. This can be used to selectively send DHCP
1125 options just for this host. More than one tag can be set in a
1126 --dhcp-host directive (but not in other places where "set:<tag>"
1127 is allowed). When a host matches any --dhcp-host directive (or
1128 one implied by /etc/ethers) then the special tag "known" is set.
1129 This allows dnsmasq to be configured to ignore requests from
1130 unknown machines using --dhcp-ignore=tag:!known If the host
1131 matches only a --dhcp-host directive which cannot be used
1132 because it specifies an address on different subnet, the tag
1133 "known-othernet" is set.
1134
1135 The tag:<tag> construct filters which dhcp-host directives are
1136 used. Tagged directives are used in preference to untagged ones.
1137
1138 Ethernet addresses (but not client-ids) may have wildcard bytes,
1139 so for example --dhcp-host=00:20:e0:3b:13:*,ignore will cause
1140 dnsmasq to ignore a range of hardware addresses. Note that the
1141 "*" will need to be escaped or quoted on a command line, but not
1142 in the configuration file.
1143
1144 Hardware addresses normally match any network (ARP) type, but it
1145 is possible to restrict them to a single ARP type by preceding
1146 them with the ARP-type (in HEX) and "-". so --dhcp-
1147 host=06-00:20:e0:3b:13:af,1.2.3.4 will only match a Token-Ring
1148 hardware address, since the ARP-address type for token ring is
1149 6.
1150
1151 As a special case, in DHCPv4, it is possible to include more
1152 than one hardware address. eg: --dhcp-
1153 host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.2 This allows
1154 an IP address to be associated with multiple hardware addresses,
1155 and gives dnsmasq permission to abandon a DHCP lease to one of
1156 the hardware addresses when another one asks for a lease. Beware
1157 that this is a dangerous thing to do, it will only work reliably
1158 if only one of the hardware addresses is active at any time and
1159 there is no way for dnsmasq to enforce this. It is, for
1160 instance, useful to allocate a stable IP address to a laptop
1161 which has both wired and wireless interfaces.
1162
1163 --dhcp-hostsfile=<path>
1164 Read DHCP host information from the specified file. If a direc‐
1165 tory is given, then read all the files contained in that direc‐
1166 tory. The file contains information about one host per line. The
1167 format of a line is the same as text to the right of '=' in
1168 --dhcp-host. The advantage of storing DHCP host information in
1169 this file is that it can be changed without re-starting dnsmasq:
1170 the file will be re-read when dnsmasq receives SIGHUP.
1171
1172 --dhcp-optsfile=<path>
1173 Read DHCP option information from the specified file. If a
1174 directory is given, then read all the files contained in that
1175 directory. The advantage of using this option is the same as for
1176 --dhcp-hostsfile: the --dhcp-optsfile will be re-read when dns‐
1177 masq receives SIGHUP. Note that it is possible to encode the
1178 information in a --dhcp-boot flag as DHCP options, using the
1179 options names bootfile-name, server-ip-address and tftp-server.
1180 This allows these to be included in a --dhcp-optsfile.
1181
1182 --dhcp-hostsdir=<path>
1183 This is equivalent to --dhcp-hostsfile, except for the follow‐
1184 ing. The path MUST be a directory, and not an individual file.
1185 Changed or new files within the directory are read automati‐
1186 cally, without the need to send SIGHUP. If a file is deleted or
1187 changed after it has been read by dnsmasq, then the host record
1188 it contained will remain until dnsmasq receives a SIGHUP, or is
1189 restarted; ie host records are only added dynamically.
1190
1191 --dhcp-optsdir=<path>
1192 This is equivalent to --dhcp-optsfile, with the differences
1193 noted for --dhcp-hostsdir.
1194
1195 -Z, --read-ethers
1196 Read /etc/ethers for information about hosts for the DHCP
1197 server. The format of /etc/ethers is a hardware address, fol‐
1198 lowed by either a hostname or dotted-quad IP address. When read
1199 by dnsmasq these lines have exactly the same effect as --dhcp-
1200 host options containing the same information. /etc/ethers is re-
1201 read when dnsmasq receives SIGHUP. IPv6 addresses are NOT read
1202 from /etc/ethers.
1203
1204 -O, --dhcp-option=[tag:<tag>,[tag:<tag>,]][encap:<opt>,][vi-
1205 encap:<enterprise>,][vendor:[<vendor-class>],][<opt>|option:<opt-
1206 name>|option6:<opt>|option6:<opt-name>],[<value>[,<value>]]
1207 Specify different or extra options to DHCP clients. By default,
1208 dnsmasq sends some standard options to DHCP clients, the netmask
1209 and broadcast address are set to the same as the host running
1210 dnsmasq, and the DNS server and default route are set to the
1211 address of the machine running dnsmasq. (Equivalent rules apply
1212 for IPv6.) If the domain name option has been set, that is sent.
1213 This configuration allows these defaults to be overridden, or
1214 other options specified. The option, to be sent may be given as
1215 a decimal number or as "option:<option-name>" The option numbers
1216 are specified in RFC2132 and subsequent RFCs. The set of option-
1217 names known by dnsmasq can be discovered by running "dnsmasq
1218 --help dhcp". For example, to set the default route option to
1219 192.168.4.4, do --dhcp-option=3,192.168.4.4 or --dhcp-option =
1220 option:router, 192.168.4.4 and to set the time-server address to
1221 192.168.0.4, do --dhcp-option = 42,192.168.0.4 or --dhcp-option
1222 = option:ntp-server, 192.168.0.4 The special address 0.0.0.0 is
1223 taken to mean "the address of the machine running dnsmasq".
1224
1225 Data types allowed are comma separated dotted-quad IPv4
1226 addresses, []-wrapped IPv6 addresses, a decimal number, colon-
1227 separated hex digits and a text string. If the optional tags are
1228 given then this option is only sent when all the tags are
1229 matched.
1230
1231 Special processing is done on a text argument for option 119, to
1232 conform with RFC 3397. Text or dotted-quad IP addresses as argu‐
1233 ments to option 120 are handled as per RFC 3361. Dotted-quad IP
1234 addresses which are followed by a slash and then a netmask size
1235 are encoded as described in RFC 3442.
1236
1237 IPv6 options are specified using the option6: keyword, followed
1238 by the option number or option name. The IPv6 option name space
1239 is disjoint from the IPv4 option name space. IPv6 addresses in
1240 options must be bracketed with square brackets, eg. --dhcp-
1241 option=option6:ntp-server,[1234::56] For IPv6, [::] means "the
1242 global address of the machine running dnsmasq", whilst [fd00::]
1243 is replaced with the ULA, if it exists, and [fe80::] with the
1244 link-local address.
1245
1246 Be careful: no checking is done that the correct type of data
1247 for the option number is sent, it is quite possible to persuade
1248 dnsmasq to generate illegal DHCP packets with injudicious use of
1249 this flag. When the value is a decimal number, dnsmasq must
1250 determine how large the data item is. It does this by examining
1251 the option number and/or the value, but can be overridden by
1252 appending a single letter flag as follows: b = one byte, s = two
1253 bytes, i = four bytes. This is mainly useful with encapsulated
1254 vendor class options (see below) where dnsmasq cannot determine
1255 data size from the option number. Option data which consists
1256 solely of periods and digits will be interpreted by dnsmasq as
1257 an IP address, and inserted into an option as such. To force a
1258 literal string, use quotes. For instance when using option 66 to
1259 send a literal IP address as TFTP server name, it is necessary
1260 to do --dhcp-option=66,"1.2.3.4"
1261
1262 Encapsulated Vendor-class options may also be specified (IPv4
1263 only) using --dhcp-option: for instance --dhcp-option=ven‐
1264 dor:PXEClient,1,0.0.0.0 sends the encapsulated vendor class-spe‐
1265 cific option "mftp-address=0.0.0.0" to any client whose vendor-
1266 class matches "PXEClient". The vendor-class matching is sub‐
1267 string based (see --dhcp-vendorclass for details). If a vendor-
1268 class option (number 60) is sent by dnsmasq, then that is used
1269 for selecting encapsulated options in preference to any sent by
1270 the client. It is possible to omit the vendorclass completely;
1271 --dhcp-option=vendor:,1,0.0.0.0 in which case the encapsulated
1272 option is always sent.
1273
1274 Options may be encapsulated (IPv4 only) within other options:
1275 for instance --dhcp-option=encap:175, 190, iscsi-client0 will
1276 send option 175, within which is the option 190. If multiple
1277 options are given which are encapsulated with the same option
1278 number then they will be correctly combined into one encapsu‐
1279 lated option. encap: and vendor: are may not both be set in the
1280 same --dhcp-option.
1281
1282 The final variant on encapsulated options is "Vendor-Identifying
1283 Vendor Options" as specified by RFC3925. These are denoted like
1284 this: --dhcp-option=vi-encap:2, 10, text The number in the vi-
1285 encap: section is the IANA enterprise number used to identify
1286 this option. This form of encapsulation is supported in IPv6.
1287
1288 The address 0.0.0.0 is not treated specially in encapsulated
1289 options.
1290
1291 --dhcp-option-force=[tag:<tag>,[tag:<tag>,]][encap:<opt>,][vi-
1292 encap:<enterprise>,][vendor:[<vendor-class>],]<opt>,[<value>[,<value>]]
1293 This works in exactly the same way as --dhcp-option except that
1294 the option will always be sent, even if the client does not ask
1295 for it in the parameter request list. This is sometimes needed,
1296 for example when sending options to PXELinux.
1297
1298 --dhcp-no-override
1299 (IPv4 only) Disable re-use of the DHCP servername and filename
1300 fields as extra option space. If it can, dnsmasq moves the boot
1301 server and filename information (from --dhcp-boot) out of their
1302 dedicated fields into DHCP options. This make extra space avail‐
1303 able in the DHCP packet for options but can, rarely, confuse old
1304 or broken clients. This flag forces "simple and safe" behaviour
1305 to avoid problems in such a case.
1306
1307 --dhcp-relay=<local address>,<server address>[,<interface]
1308 Configure dnsmasq to do DHCP relay. The local address is an
1309 address allocated to an interface on the host running dnsmasq.
1310 All DHCP requests arriving on that interface will we relayed to
1311 a remote DHCP server at the server address. It is possible to
1312 relay from a single local address to multiple remote servers by
1313 using multiple --dhcp-relay configs with the same local address
1314 and different server addresses. A server address must be an IP
1315 literal address, not a domain name. In the case of DHCPv6, the
1316 server address may be the ALL_SERVERS multicast address,
1317 ff05::1:3. In this case the interface must be given, not be
1318 wildcard, and is used to direct the multicast to the correct
1319 interface to reach the DHCP server.
1320
1321 Access control for DHCP clients has the same rules as for the
1322 DHCP server, see --interface, --except-interface, etc. The
1323 optional interface name in the --dhcp-relay config has a differ‐
1324 ent function: it controls on which interface DHCP replies from
1325 the server will be accepted. This is intended for configurations
1326 which have three interfaces: one being relayed from, a second
1327 connecting the DHCP server, and a third untrusted network, typi‐
1328 cally the wider internet. It avoids the possibility of spoof
1329 replies arriving via this third interface.
1330
1331 It is allowed to have dnsmasq act as a DHCP server on one set of
1332 interfaces and relay from a disjoint set of interfaces. Note
1333 that whilst it is quite possible to write configurations which
1334 appear to act as a server and a relay on the same interface,
1335 this is not supported: the relay function will take precedence.
1336
1337 Both DHCPv4 and DHCPv6 relay is supported. It's not possible to
1338 relay DHCPv4 to a DHCPv6 server or vice-versa.
1339
1340 -U, --dhcp-vendorclass=set:<tag>,[enterprise:<IANA-enterprise num‐
1341 ber>,]<vendor-class>
1342 Map from a vendor-class string to a tag. Most DHCP clients pro‐
1343 vide a "vendor class" which represents, in some sense, the type
1344 of host. This option maps vendor classes to tags, so that DHCP
1345 options may be selectively delivered to different classes of
1346 hosts. For example --dhcp-vendorclass=set:printers,Hewlett-
1347 Packard JetDirect will allow options to be set only for HP
1348 printers like so: --dhcp-option=tag:printers,3,192.168.4.4 The
1349 vendor-class string is substring matched against the vendor-
1350 class supplied by the client, to allow fuzzy matching. The set:
1351 prefix is optional but allowed for consistency.
1352
1353 Note that in IPv6 only, vendorclasses are namespaced with an
1354 IANA-allocated enterprise number. This is given with enterprise:
1355 keyword and specifies that only vendorclasses matching the spec‐
1356 ified number should be searched.
1357
1358 -j, --dhcp-userclass=set:<tag>,<user-class>
1359 Map from a user-class string to a tag (with substring matching,
1360 like vendor classes). Most DHCP clients provide a "user class"
1361 which is configurable. This option maps user classes to tags, so
1362 that DHCP options may be selectively delivered to different
1363 classes of hosts. It is possible, for instance to use this to
1364 set a different printer server for hosts in the class "accounts"
1365 than for hosts in the class "engineering".
1366
1367 -4, --dhcp-mac=set:<tag>,<MAC address>
1368 Map from a MAC address to a tag. The MAC address may include
1369 wildcards. For example --dhcp-mac=set:3com,01:34:23:*:*:* will
1370 set the tag "3com" for any host whose MAC address matches the
1371 pattern.
1372
1373 --dhcp-circuitid=set:<tag>,<circuit-id>, --dhcp-
1374 remoteid=set:<tag>,<remote-id>
1375 Map from RFC3046 relay agent options to tags. This data may be
1376 provided by DHCP relay agents. The circuit-id or remote-id is
1377 normally given as colon-separated hex, but is also allowed to be
1378 a simple string. If an exact match is achieved between the cir‐
1379 cuit or agent ID and one provided by a relay agent, the tag is
1380 set.
1381
1382 --dhcp-remoteid (but not --dhcp-circuitid) is supported in IPv6.
1383
1384 --dhcp-subscrid=set:<tag>,<subscriber-id>
1385 (IPv4 and IPv6) Map from RFC3993 subscriber-id relay agent
1386 options to tags.
1387
1388 --dhcp-proxy[=<ip addr>]......
1389 (IPv4 only) A normal DHCP relay agent is only used to forward
1390 the initial parts of a DHCP interaction to the DHCP server. Once
1391 a client is configured, it communicates directly with the
1392 server. This is undesirable if the relay agent is adding extra
1393 information to the DHCP packets, such as that used by --dhcp-
1394 circuitid and --dhcp-remoteid. A full relay implementation can
1395 use the RFC 5107 serverid-override option to force the DHCP
1396 server to use the relay as a full proxy, with all packets pass‐
1397 ing through it. This flag provides an alternative method of
1398 doing the same thing, for relays which don't support RFC 5107.
1399 Given alone, it manipulates the server-id for all interactions
1400 via relays. If a list of IP addresses is given, only interac‐
1401 tions via relays at those addresses are affected.
1402
1403 --dhcp-match=set:<tag>,<option number>|option:<option name>|vi-
1404 encap:<enterprise>[,<value>]
1405 Without a value, set the tag if the client sends a DHCP option
1406 of the given number or name. When a value is given, set the tag
1407 only if the option is sent and matches the value. The value may
1408 be of the form "01:ff:*:02" in which case the value must match
1409 (apart from wildcards) but the option sent may have unmatched
1410 data past the end of the value. The value may also be of the
1411 same form as in --dhcp-option in which case the option sent is
1412 treated as an array, and one element must match, so --dhcp-
1413 match=set:efi-ia32,option:client-arch,6 will set the tag "efi-
1414 ia32" if the the number 6 appears in the list of architectures
1415 sent by the client in option 93. (See RFC 4578 for details.) If
1416 the value is a string, substring matching is used.
1417
1418 The special form with vi-encap:<enterprise number> matches
1419 against vendor-identifying vendor classes for the specified
1420 enterprise. Please see RFC 3925 for more details of these rare
1421 and interesting beasts.
1422
1423 --dhcp-name-match=set:<tag>,<name>[*]
1424 Set the tag if the given name is supplied by a DHCP client.
1425 There may be a single trailing wildcard *, which has the usual
1426 meaning. Combined with dhcp-ignore or dhcp-ignore-names this
1427 gives the ability to ignore certain clients by name, or disallow
1428 certain hostnames from being claimed by a client.
1429
1430 --tag-if=set:<tag>[,set:<tag>[,tag:<tag>[,tag:<tag>]]]
1431 Perform boolean operations on tags. Any tag appearing as
1432 set:<tag> is set if all the tags which appear as tag:<tag> are
1433 set, (or unset when tag:!<tag> is used) If no tag:<tag> appears
1434 set:<tag> tags are set unconditionally. Any number of set: and
1435 tag: forms may appear, in any order. --tag-if lines are exe‐
1436 cuted in order, so if the tag in tag:<tag> is a tag set by
1437 another --tag-if, the line which sets the tag must precede the
1438 one which tests it.
1439
1440 -J, --dhcp-ignore=tag:<tag>[,tag:<tag>]
1441 When all the given tags appear in the tag set ignore the host
1442 and do not allocate it a DHCP lease.
1443
1444 --dhcp-ignore-names[=tag:<tag>[,tag:<tag>]]
1445 When all the given tags appear in the tag set, ignore any host‐
1446 name provided by the host. Note that, unlike --dhcp-ignore, it
1447 is permissible to supply no tags, in which case DHCP-client sup‐
1448 plied hostnames are always ignored, and DHCP hosts are added to
1449 the DNS using only --dhcp-host configuration in dnsmasq and the
1450 contents of /etc/hosts and /etc/ethers.
1451
1452 --dhcp-generate-names=tag:<tag>[,tag:<tag>]
1453 (IPv4 only) Generate a name for DHCP clients which do not other‐
1454 wise have one, using the MAC address expressed in hex, separated
1455 by dashes. Note that if a host provides a name, it will be used
1456 by preference to this, unless --dhcp-ignore-names is set.
1457
1458 --dhcp-broadcast[=tag:<tag>[,tag:<tag>]]
1459 (IPv4 only) When all the given tags appear in the tag set,
1460 always use broadcast to communicate with the host when it is
1461 unconfigured. It is permissible to supply no tags, in which case
1462 this is unconditional. Most DHCP clients which need broadcast
1463 replies set a flag in their requests so that this happens auto‐
1464 matically, some old BOOTP clients do not.
1465
1466 -M, --dhcp-boot=[tag:<tag>,]<filename>,[<servername>[,<server
1467 address>|<tftp_servername>]]
1468 (IPv4 only) Set BOOTP options to be returned by the DHCP server.
1469 Server name and address are optional: if not provided, the name
1470 is left empty, and the address set to the address of the machine
1471 running dnsmasq. If dnsmasq is providing a TFTP service (see
1472 --enable-tftp ) then only the filename is required here to
1473 enable network booting. If the optional tag(s) are given, they
1474 must match for this configuration to be sent. Instead of an IP
1475 address, the TFTP server address can be given as a domain name
1476 which is looked up in /etc/hosts. This name can be associated in
1477 /etc/hosts with multiple IP addresses, which are used round-
1478 robin. This facility can be used to load balance the tftp load
1479 among a set of servers.
1480
1481 --dhcp-sequential-ip
1482 Dnsmasq is designed to choose IP addresses for DHCP clients
1483 using a hash of the client's MAC address. This normally allows a
1484 client's address to remain stable long-term, even if the client
1485 sometimes allows its DHCP lease to expire. In this default mode
1486 IP addresses are distributed pseudo-randomly over the entire
1487 available address range. There are sometimes circumstances (typ‐
1488 ically server deployment) where it is more convenient to have IP
1489 addresses allocated sequentially, starting from the lowest
1490 available address, and setting this flag enables this mode. Note
1491 that in the sequential mode, clients which allow a lease to
1492 expire are much more likely to move IP address; for this reason
1493 it should not be generally used.
1494
1495 --dhcp-ignore-clid
1496 Dnsmasq is reading 'client identifier' (RFC 2131) option sent by
1497 clients (if available) to identify clients. This allow to serve
1498 same IP address for a host using several interfaces. Use this
1499 option to disable 'client identifier' reading, i.e. to always
1500 identify a host using the MAC address.
1501
1502 --pxe-service=[tag:<tag>,]<CSA>,<menu text>[,<basename>|<bootservice‐
1503 type>][,<server address>|<server_name>]
1504 Most uses of PXE boot-ROMS simply allow the PXE system to obtain
1505 an IP address and then download the file specified by --dhcp-
1506 boot and execute it. However the PXE system is capable of more
1507 complex functions when supported by a suitable DHCP server.
1508
1509 This specifies a boot option which may appear in a PXE boot
1510 menu. <CSA> is client system type, only services of the correct
1511 type will appear in a menu. The known types are x86PC, PC98,
1512 IA64_EFI, Alpha, Arc_x86, Intel_Lean_Client, IA32_EFI,
1513 X86-64_EFI, Xscale_EFI, BC_EFI, ARM32_EFI and ARM64_EFI; an
1514 integer may be used for other types. The parameter after the
1515 menu text may be a file name, in which case dnsmasq acts as a
1516 boot server and directs the PXE client to download the file by
1517 TFTP, either from itself ( --enable-tftp must be set for this to
1518 work) or another TFTP server if the final server address/name is
1519 given. Note that the "layer" suffix (normally ".0") is supplied
1520 by PXE, and need not be added to the basename. Alternatively,
1521 the basename may be a filename, complete with suffix, in which
1522 case no layer suffix is added. If an integer boot service type,
1523 rather than a basename is given, then the PXE client will search
1524 for a suitable boot service for that type on the network. This
1525 search may be done by broadcast, or direct to a server if its IP
1526 address/name is provided. If no boot service type or filename
1527 is provided (or a boot service type of 0 is specified) then the
1528 menu entry will abort the net boot procedure and continue boot‐
1529 ing from local media. The server address can be given as a
1530 domain name which is looked up in /etc/hosts. This name can be
1531 associated in /etc/hosts with multiple IP addresses, which are
1532 used round-robin.
1533
1534 --pxe-prompt=[tag:<tag>,]<prompt>[,<timeout>]
1535 Setting this provides a prompt to be displayed after PXE boot.
1536 If the timeout is given then after the timeout has elapsed with
1537 no keyboard input, the first available menu option will be auto‐
1538 matically executed. If the timeout is zero then the first avail‐
1539 able menu item will be executed immediately. If --pxe-prompt is
1540 omitted the system will wait for user input if there are multi‐
1541 ple items in the menu, but boot immediately if there is only
1542 one. See --pxe-service for details of menu items.
1543
1544 Dnsmasq supports PXE "proxy-DHCP", in this case another DHCP
1545 server on the network is responsible for allocating IP
1546 addresses, and dnsmasq simply provides the information given in
1547 --pxe-prompt and --pxe-service to allow netbooting. This mode is
1548 enabled using the proxy keyword in --dhcp-range.
1549
1550 --dhcp-pxe-vendor=<vendor>[,...]
1551 According to UEFI and PXE specifications, DHCP packets between
1552 PXE clients and proxy PXE servers should have PXEClient in their
1553 vendor-class field. However, the firmware of computers from a
1554 few vendors is customized to carry a different identifier in
1555 that field. This option is used to consider such identifiers
1556 valid for identifying PXE clients. For instance
1557
1558 --dhcp-pxe-vendor=PXEClient,HW-Client
1559
1560 will enable dnsmasq to also provide proxy PXE service to those
1561 PXE clients with HW-Client in as their identifier. >>>>>>>
1562 907def3... pxe: support pxe clients with custom vendor-class
1563
1564 -X, --dhcp-lease-max=<number>
1565 Limits dnsmasq to the specified maximum number of DHCP leases.
1566 The default is 1000. This limit is to prevent DoS attacks from
1567 hosts which create thousands of leases and use lots of memory in
1568 the dnsmasq process.
1569
1570 -K, --dhcp-authoritative
1571 Should be set when dnsmasq is definitely the only DHCP server on
1572 a network. For DHCPv4, it changes the behaviour from strict RFC
1573 compliance so that DHCP requests on unknown leases from unknown
1574 hosts are not ignored. This allows new hosts to get a lease
1575 without a tedious timeout under all circumstances. It also
1576 allows dnsmasq to rebuild its lease database without each client
1577 needing to reacquire a lease, if the database is lost. For
1578 DHCPv6 it sets the priority in replies to 255 (the maximum)
1579 instead of 0 (the minimum).
1580
1581 --dhcp-rapid-commit
1582 Enable DHCPv4 Rapid Commit Option specified in RFC 4039. When
1583 enabled, dnsmasq will respond to a DHCPDISCOVER message includ‐
1584 ing a Rapid Commit option with a DHCPACK including a Rapid Com‐
1585 mit option and fully committed address and configuration infor‐
1586 mation. Should only be enabled if either the server is the only
1587 server for the subnet, or multiple servers are present and they
1588 each commit a binding for all clients.
1589
1590 --dhcp-alternate-port[=<server port>[,<client port>]]
1591 (IPv4 only) Change the ports used for DHCP from the default. If
1592 this option is given alone, without arguments, it changes the
1593 ports used for DHCP from 67 and 68 to 1067 and 1068. If a single
1594 argument is given, that port number is used for the server and
1595 the port number plus one used for the client. Finally, two port
1596 numbers allows arbitrary specification of both server and client
1597 ports for DHCP.
1598
1599 -3, --bootp-dynamic[=<network-id>[,<network-id>]]
1600 (IPv4 only) Enable dynamic allocation of IP addresses to BOOTP
1601 clients. Use this with care, since each address allocated to a
1602 BOOTP client is leased forever, and therefore becomes perma‐
1603 nently unavailable for re-use by other hosts. if this is given
1604 without tags, then it unconditionally enables dynamic alloca‐
1605 tion. With tags, only when the tags are all set. It may be
1606 repeated with different tag sets.
1607
1608 -5, --no-ping
1609 (IPv4 only) By default, the DHCP server will attempt to ensure
1610 that an address is not in use before allocating it to a host. It
1611 does this by sending an ICMP echo request (aka "ping") to the
1612 address in question. If it gets a reply, then the address must
1613 already be in use, and another is tried. This flag disables this
1614 check. Use with caution.
1615
1616 --log-dhcp
1617 Extra logging for DHCP: log all the options sent to DHCP clients
1618 and the tags used to determine them.
1619
1620 --quiet-dhcp, --quiet-dhcp6, --quiet-ra
1621 Suppress logging of the routine operation of these protocols.
1622 Errors and problems will still be logged. --quiet-dhcp and
1623 quiet-dhcp6 are over-ridden by --log-dhcp.
1624
1625 -l, --dhcp-leasefile=<path>
1626 Use the specified file to store DHCP lease information.
1627
1628 --dhcp-duid=<enterprise-id>,<uid>
1629 (IPv6 only) Specify the server persistent UID which the DHCPv6
1630 server will use. This option is not normally required as dnsmasq
1631 creates a DUID automatically when it is first needed. When
1632 given, this option provides dnsmasq the data required to create
1633 a DUID-EN type DUID. Note that once set, the DUID is stored in
1634 the lease database, so to change between DUID-EN and automati‐
1635 cally created DUIDs or vice-versa, the lease database must be
1636 re-initialised. The enterprise-id is assigned by IANA, and the
1637 uid is a string of hex octets unique to a particular device.
1638
1639 -6 --dhcp-script=<path>
1640 Whenever a new DHCP lease is created, or an old one destroyed,
1641 or a TFTP file transfer completes, the executable specified by
1642 this option is run. <path> must be an absolute pathname, no
1643 PATH search occurs. The arguments to the process are "add",
1644 "old" or "del", the MAC address of the host (or DUID for IPv6) ,
1645 the IP address, and the hostname, if known. "add" means a lease
1646 has been created, "del" means it has been destroyed, "old" is a
1647 notification of an existing lease when dnsmasq starts or a
1648 change to MAC address or hostname of an existing lease (also,
1649 lease length or expiry and client-id, if --leasefile-ro is set
1650 and lease expiry if --script-on-renewal is set). If the MAC
1651 address is from a network type other than ethernet, it will have
1652 the network type prepended, eg "06-01:23:45:67:89:ab" for token
1653 ring. The process is run as root (assuming that dnsmasq was
1654 originally run as root) even if dnsmasq is configured to change
1655 UID to an unprivileged user.
1656
1657 The environment is inherited from the invoker of dnsmasq, with
1658 some or all of the following variables added
1659
1660 For both IPv4 and IPv6:
1661
1662 DNSMASQ_DOMAIN if the fully-qualified domain name of the host is
1663 known, this is set to the domain part. (Note that the hostname
1664 passed to the script as an argument is never fully-qualified.)
1665
1666 If the client provides a hostname, DNSMASQ_SUPPLIED_HOSTNAME
1667
1668 If the client provides user-classes, DNSMASQ_USER_CLASS0..DNS‐
1669 MASQ_USER_CLASSn
1670
1671 If dnsmasq was compiled with HAVE_BROKEN_RTC, then the length of
1672 the lease (in seconds) is stored in DNSMASQ_LEASE_LENGTH, other‐
1673 wise the time of lease expiry is stored in DNS‐
1674 MASQ_LEASE_EXPIRES. The number of seconds until lease expiry is
1675 always stored in DNSMASQ_TIME_REMAINING.
1676
1677 If a lease used to have a hostname, which is removed, an "old"
1678 event is generated with the new state of the lease, ie no name,
1679 and the former name is provided in the environment variable DNS‐
1680 MASQ_OLD_HOSTNAME.
1681
1682 DNSMASQ_INTERFACE stores the name of the interface on which the
1683 request arrived; this is not set for "old" actions when dnsmasq
1684 restarts.
1685
1686 DNSMASQ_RELAY_ADDRESS is set if the client used a DHCP relay to
1687 contact dnsmasq and the IP address of the relay is known.
1688
1689 DNSMASQ_TAGS contains all the tags set during the DHCP transac‐
1690 tion, separated by spaces.
1691
1692 DNSMASQ_LOG_DHCP is set if --log-dhcp is in effect.
1693
1694 For IPv4 only:
1695
1696 DNSMASQ_CLIENT_ID if the host provided a client-id.
1697
1698 DNSMASQ_CIRCUIT_ID, DNSMASQ_SUBSCRIBER_ID, DNSMASQ_REMOTE_ID if
1699 a DHCP relay-agent added any of these options.
1700
1701 If the client provides vendor-class, DNSMASQ_VENDOR_CLASS.
1702
1703 DNSMASQ_REQUESTED_OPTIONS a string containing the decimal values
1704 in the Parameter Request List option, comma separated, if the
1705 parameter request list option is provided by the client.
1706
1707 For IPv6 only:
1708
1709 If the client provides vendor-class, DNSMASQ_VENDOR_CLASS_ID,
1710 containing the IANA enterprise id for the class, and DNS‐
1711 MASQ_VENDOR_CLASS0..DNSMASQ_VENDOR_CLASSn for the data.
1712
1713 DNSMASQ_SERVER_DUID containing the DUID of the server: this is
1714 the same for every call to the script.
1715
1716 DNSMASQ_IAID containing the IAID for the lease. If the lease is
1717 a temporary allocation, this is prefixed to 'T'.
1718
1719 DNSMASQ_MAC containing the MAC address of the client, if known.
1720
1721 Note that the supplied hostname, vendorclass and userclass data
1722 is only supplied for "add" actions or "old" actions when a host
1723 resumes an existing lease, since these data are not held in dns‐
1724 masq's lease database.
1725
1726
1727
1728 All file descriptors are closed except stdin, which is open to
1729 /dev/null, and stdout and stderr which capture output for log‐
1730 ging by dnsmasq. (In debug mode, stdio, stdout and stderr file
1731 are left as those inherited from the invoker of dnsmasq).
1732
1733 The script is not invoked concurrently: at most one instance of
1734 the script is ever running (dnsmasq waits for an instance of
1735 script to exit before running the next). Changes to the lease
1736 database are which require the script to be invoked are queued
1737 awaiting exit of a running instance. If this queueing allows
1738 multiple state changes occur to a single lease before the script
1739 can be run then earlier states are discarded and the current
1740 state of that lease is reflected when the script finally runs.
1741
1742 At dnsmasq startup, the script will be invoked for all existing
1743 leases as they are read from the lease file. Expired leases will
1744 be called with "del" and others with "old". When dnsmasq
1745 receives a HUP signal, the script will be invoked for existing
1746 leases with an "old" event.
1747
1748
1749 There are four further actions which may appear as the first
1750 argument to the script, "init", "arp-add", "arp-del" and "tftp".
1751 More may be added in the future, so scripts should be written to
1752 ignore unknown actions. "init" is described below in --lease‐
1753 file-ro The "tftp" action is invoked when a TFTP file transfer
1754 completes: the arguments are the file size in bytes, the address
1755 to which the file was sent, and the complete pathname of the
1756 file.
1757
1758 The "arp-add" and "arp-del" actions are only called if enabled
1759 with --script-arp They are are supplied with a MAC address and
1760 IP address as arguments. "arp-add" indicates the arrival of a
1761 new entry in the ARP or neighbour table, and "arp-del" indicates
1762 the deletion of same.
1763
1764
1765 --dhcp-luascript=<path>
1766 Specify a script written in Lua, to be run when leases are cre‐
1767 ated, destroyed or changed. To use this option, dnsmasq must be
1768 compiled with the correct support. The Lua interpreter is ini‐
1769 tialised once, when dnsmasq starts, so that global variables
1770 persist between lease events. The Lua code must define a lease
1771 function, and may provide init and shutdown functions, which are
1772 called, without arguments when dnsmasq starts up and terminates.
1773 It may also provide a tftp function.
1774
1775 The lease function receives the information detailed in --dhcp-
1776 script. It gets two arguments, firstly the action, which is a
1777 string containing, "add", "old" or "del", and secondly a table
1778 of tag value pairs. The tags mostly correspond to the environ‐
1779 ment variables detailed above, for instance the tag "domain"
1780 holds the same data as the environment variable DNSMASQ_DOMAIN.
1781 There are a few extra tags which hold the data supplied as argu‐
1782 ments to --dhcp-script. These are mac_address, ip_address and
1783 hostname for IPv4, and client_duid, ip_address and hostname for
1784 IPv6.
1785
1786 The tftp function is called in the same way as the lease func‐
1787 tion, and the table holds the tags destination_address,
1788 file_name and file_size.
1789
1790 The arp and arp-old functions are called only when enabled with
1791 --script-arp and have a table which holds the tags mac_address
1792 and client_address.
1793
1794 --dhcp-scriptuser
1795 Specify the user as which to run the lease-change script or Lua
1796 script. This defaults to root, but can be changed to another
1797 user using this flag.
1798
1799 --script-arp
1800 Enable the "arp" and "arp-old" functions in the --dhcp-script
1801 and --dhcp-luascript.
1802
1803 -9, --leasefile-ro
1804 Completely suppress use of the lease database file. The file
1805 will not be created, read, or written. Change the way the lease-
1806 change script (if one is provided) is called, so that the lease
1807 database may be maintained in external storage by the script. In
1808 addition to the invocations given in --dhcp-script the lease-
1809 change script is called once, at dnsmasq startup, with the sin‐
1810 gle argument "init". When called like this the script should
1811 write the saved state of the lease database, in dnsmasq lease‐
1812 file format, to stdout and exit with zero exit code. Setting
1813 this option also forces the leasechange script to be called on
1814 changes to the client-id and lease length and expiry time.
1815
1816 --script-on-renewal
1817 Call the DHCP script when the lease expiry time changes, for
1818 instance when the lease is renewed.
1819
1820 --bridge-interface=<interface>,<alias>[,<alias>]
1821 Treat DHCP (v4 and v6) requests and IPv6 Router Solicit packets
1822 arriving at any of the <alias> interfaces as if they had arrived
1823 at <interface>. This option allows dnsmasq to provide DHCP and
1824 RA service over unaddressed and unbridged Ethernet interfaces,
1825 e.g. on an OpenStack compute host where each such interface is a
1826 TAP interface to a VM, or as in "old style bridging" on BSD
1827 platforms. A trailing '*' wildcard can be used in each <alias>.
1828
1829 It is permissible to add more than one alias using more than one
1830 --bridge-interface option since --bridge-inter‐
1831 face=int1,alias1,alias2 is exactly equivalent to --bridge-inter‐
1832 face=int1,alias1 --bridge-interface=int1,alias2
1833
1834 --shared-network=<interface>,<addr>
1835 --shared-network=<addr>,<addr>
1836 The DHCP server determines which DHCP ranges are useable for
1837 allocating an address to a DHCP client based on the network from
1838 which the DHCP request arrives, and the IP configuration of the
1839 server's interface on that network. The shared-network option
1840 extends the available subnets (and therefore DHCP ranges) beyond
1841 the subnets configured on the arrival interface.
1842
1843 The first argument is either the name of an interface, or an
1844 address that is configured on a local interface, and the second
1845 argument is an address which defines another subnet on which
1846 addresses can be allocated.
1847
1848 To be useful, there must be a suitable dhcp-range which allows
1849 address allocation on this subnet and this dhcp-range MUST
1850 include the netmask.
1851
1852 Using shared-network also needs extra consideration of routing.
1853 Dnsmasq does not have the usual information that it uses to
1854 determine the default route, so the default route option (or
1855 other routing) MUST be configured manually. The client must have
1856 a route to the server: if the two-address form of shared-network
1857 is used, this needs to be to the first specified address. If the
1858 interface,address form is used, there must be a route to all of
1859 the addresses configured on the interface.
1860
1861 The two-address form of shared-network is also usable with a
1862 DHCP relay: the first address is the address of the relay and
1863 the second, as before, specifies an extra subnet which addresses
1864 may be allocated from.
1865
1866
1867 -s, --domain=<domain>[,<address range>[,local]]
1868 Specifies DNS domains for the DHCP server. Domains may be be
1869 given unconditionally (without the IP range) or for limited IP
1870 ranges. This has two effects; firstly it causes the DHCP server
1871 to return the domain to any hosts which request it, and secondly
1872 it sets the domain which it is legal for DHCP-configured hosts
1873 to claim. The intention is to constrain hostnames so that an
1874 untrusted host on the LAN cannot advertise its name via DHCP as
1875 e.g. "microsoft.com" and capture traffic not meant for it. If no
1876 domain suffix is specified, then any DHCP hostname with a domain
1877 part (ie with a period) will be disallowed and logged. If suffix
1878 is specified, then hostnames with a domain part are allowed,
1879 provided the domain part matches the suffix. In addition, when a
1880 suffix is set then hostnames without a domain part have the suf‐
1881 fix added as an optional domain part. Eg on my network I can set
1882 --domain=thekelleys.org.uk and have a machine whose DHCP host‐
1883 name is "laptop". The IP address for that machine is available
1884 from dnsmasq both as "laptop" and "laptop.thekelleys.org.uk". If
1885 the domain is given as "#" then the domain is read from the
1886 first "search" directive in /etc/resolv.conf (or equivalent).
1887
1888 The address range can be of the form <ip address>,<ip address>
1889 or <ip address>/<netmask> or just a single <ip address>. See
1890 --dhcp-fqdn which can change the behaviour of dnsmasq with
1891 domains.
1892
1893 If the address range is given as ip-address/network-size, then a
1894 additional flag "local" may be supplied which has the effect of
1895 adding --local declarations for forward and reverse DNS queries.
1896 Eg. --domain=thekelleys.org.uk,192.168.0.0/24,local is identi‐
1897 cal to --domain=thekelleys.org.uk,192.168.0.0/24
1898 --local=/thekelleys.org.uk/ --local=/0.168.192.in-addr.arpa/ The
1899 network size must be 8, 16 or 24 for this to be legal.
1900
1901 --dhcp-fqdn
1902 In the default mode, dnsmasq inserts the unqualified names of
1903 DHCP clients into the DNS. For this reason, the names must be
1904 unique, even if two clients which have the same name are in dif‐
1905 ferent domains. If a second DHCP client appears which has the
1906 same name as an existing client, the name is transferred to the
1907 new client. If --dhcp-fqdn is set, this behaviour changes: the
1908 unqualified name is no longer put in the DNS, only the qualified
1909 name. Two DHCP clients with the same name may both keep the
1910 name, provided that the domain part is different (ie the fully
1911 qualified names differ.) To ensure that all names have a domain
1912 part, there must be at least --domain without an address speci‐
1913 fied when --dhcp-fqdn is set.
1914
1915 --dhcp-client-update
1916 Normally, when giving a DHCP lease, dnsmasq sets flags in the
1917 FQDN option to tell the client not to attempt a DDNS update with
1918 its name and IP address. This is because the name-IP pair is
1919 automatically added into dnsmasq's DNS view. This flag sup‐
1920 presses that behaviour, this is useful, for instance, to allow
1921 Windows clients to update Active Directory servers. See RFC 4702
1922 for details.
1923
1924 --enable-ra
1925 Enable dnsmasq's IPv6 Router Advertisement feature. DHCPv6
1926 doesn't handle complete network configuration in the same way as
1927 DHCPv4. Router discovery and (possibly) prefix discovery for au‐
1928 tonomous address creation are handled by a different protocol.
1929 When DHCP is in use, only a subset of this is needed, and dns‐
1930 masq can handle it, using existing DHCP configuration to provide
1931 most data. When RA is enabled, dnsmasq will advertise a prefix
1932 for each --dhcp-range, with default router as the relevant
1933 link-local address on the machine running dnsmasq. By default,
1934 the "managed address" bits are set, and the "use SLAAC" bit is
1935 reset. This can be changed for individual subnets with the mode
1936 keywords described in --dhcp-range. RFC6106 DNS parameters are
1937 included in the advertisements. By default, the relevant link-
1938 local address of the machine running dnsmasq is sent as recur‐
1939 sive DNS server. If provided, the DHCPv6 options dns-server and
1940 domain-search are used for the DNS server (RDNSS) and the domain
1941 search list (DNSSL).
1942
1943 --ra-param=<interface>,[mtu:<integer>|<interface>|off,][high,|low,]<ra-
1944 interval>[,<router lifetime>]
1945 Set non-default values for router advertisements sent via an
1946 interface. The priority field for the router may be altered from
1947 the default of medium with eg --ra-param=eth0,high. The inter‐
1948 val between router advertisements may be set (in seconds) with
1949 --ra-param=eth0,60. The lifetime of the route may be changed or
1950 set to zero, which allows a router to advertise prefixes but not
1951 a route via itself. --ra-param=eth0,0,0 (A value of zero for
1952 the interval means the default value.) All four parameters may
1953 be set at once. --ra-param=eth0,mtu:1280,low,60,1200
1954
1955 The interface field may include a wildcard.
1956
1957 The mtu: parameter may be an arbitrary interface name, in which
1958 case the MTU value for that interface is used. This is useful
1959 for (eg) advertising the MTU of a WAN interface on the other
1960 interfaces of a router.
1961
1962 --dhcp-reply-delay=[tag:<tag>,]<integer>
1963 Delays sending DHCPOFFER and PROXYDHCP replies for at least the
1964 specified number of seconds. This can be used as workaround for
1965 bugs in PXE boot firmware that does not function properly when
1966 receiving an instant reply. This option takes into account the
1967 time already spent waiting (e.g. performing ping check) if any.
1968
1969 --enable-tftp[=<interface>[,<interface>]]
1970 Enable the TFTP server function. This is deliberately limited to
1971 that needed to net-boot a client. Only reading is allowed; the
1972 tsize and blksize extensions are supported (tsize is only sup‐
1973 ported in octet mode). Without an argument, the TFTP service is
1974 provided to the same set of interfaces as DHCP service. If the
1975 list of interfaces is provided, that defines which interfaces
1976 receive TFTP service.
1977
1978 --tftp-root=<directory>[,<interface>]
1979 Look for files to transfer using TFTP relative to the given
1980 directory. When this is set, TFTP paths which include ".." are
1981 rejected, to stop clients getting outside the specified root.
1982 Absolute paths (starting with /) are allowed, but they must be
1983 within the tftp-root. If the optional interface argument is
1984 given, the directory is only used for TFTP requests via that
1985 interface.
1986
1987 --tftp-no-fail
1988 Do not abort startup if specified tftp root directories are
1989 inaccessible.
1990
1991 --tftp-unique-root[=ip|mac]
1992 Add the IP or hardware address of the TFTP client as a path com‐
1993 ponent on the end of the TFTP-root. Only valid if a --tftp-root
1994 is set and the directory exists. Defaults to adding IP address
1995 (in standard dotted-quad format). For instance, if --tftp-root
1996 is "/tftp" and client 1.2.3.4 requests file "myfile" then the
1997 effective path will be "/tftp/1.2.3.4/myfile" if /tftp/1.2.3.4
1998 exists or /tftp/myfile otherwise. When "=mac" is specified it
1999 will append the MAC address instead, using lowercase zero padded
2000 digits separated by dashes, e.g.: 01-02-03-04-aa-bb Note that
2001 resolving MAC addresses is only possible if the client is in the
2002 local network or obtained a DHCP lease from us.
2003
2004 --tftp-secure
2005 Enable TFTP secure mode: without this, any file which is read‐
2006 able by the dnsmasq process under normal unix access-control
2007 rules is available via TFTP. When the --tftp-secure flag is
2008 given, only files owned by the user running the dnsmasq process
2009 are accessible. If dnsmasq is being run as root, different rules
2010 apply: --tftp-secure has no effect, but only files which have
2011 the world-readable bit set are accessible. It is not recommended
2012 to run dnsmasq as root with TFTP enabled, and certainly not
2013 without specifying --tftp-root. Doing so can expose any world-
2014 readable file on the server to any host on the net.
2015
2016 --tftp-lowercase
2017 Convert filenames in TFTP requests to all lowercase. This is
2018 useful for requests from Windows machines, which have case-
2019 insensitive filesystems and tend to play fast-and-loose with
2020 case in filenames. Note that dnsmasq's tftp server always con‐
2021 verts "\" to "/" in filenames.
2022
2023 --tftp-max=<connections>
2024 Set the maximum number of concurrent TFTP connections allowed.
2025 This defaults to 50. When serving a large number of TFTP connec‐
2026 tions, per-process file descriptor limits may be encountered.
2027 Dnsmasq needs one file descriptor for each concurrent TFTP con‐
2028 nection and one file descriptor per unique file (plus a few oth‐
2029 ers). So serving the same file simultaneously to n clients will
2030 use require about n + 10 file descriptors, serving different
2031 files simultaneously to n clients will require about (2*n) + 10
2032 descriptors. If --tftp-port-range is given, that can affect the
2033 number of concurrent connections.
2034
2035 --tftp-mtu=<mtu size>
2036 Use size as the ceiling of the MTU supported by the intervening
2037 network when negotiating TFTP blocksize, overriding the MTU set‐
2038 ting of the local interface if it is larger.
2039
2040 --tftp-no-blocksize
2041 Stop the TFTP server from negotiating the "blocksize" option
2042 with a client. Some buggy clients request this option but then
2043 behave badly when it is granted.
2044
2045 --tftp-port-range=<start>,<end>
2046 A TFTP server listens on a well-known port (69) for connection
2047 initiation, but it also uses a dynamically-allocated port for
2048 each connection. Normally these are allocated by the OS, but
2049 this option specifies a range of ports for use by TFTP trans‐
2050 fers. This can be useful when TFTP has to traverse a firewall.
2051 The start of the range cannot be lower than 1025 unless dnsmasq
2052 is running as root. The number of concurrent TFTP connections is
2053 limited by the size of the port range.
2054
2055 --tftp-single-port
2056 Run in a mode where the TFTP server uses ONLY the well-known
2057 port (69) for its end of the TFTP transfer. This allows TFTP to
2058 work when there in NAT is the path between client and server.
2059 Note that this is not strictly compliant with the RFCs specify‐
2060 ing the TFTP protocol: use at your own risk.
2061
2062 -C, --conf-file=<file>
2063 Specify a configuration file. The presence of this option stops
2064 dnsmasq from reading the default configuration file (normally
2065 /etc/dnsmasq.conf). Multiple files may be specified by repeating
2066 the option either on the command line or in configuration files.
2067 A filename of "-" causes dnsmasq to read configuration from
2068 stdin.
2069
2070 -7, --conf-dir=<directory>[,<file-extension>......],
2071 Read all the files in the given directory as configuration
2072 files. If extension(s) are given, any files which end in those
2073 extensions are skipped. Any files whose names end in ~ or start
2074 with . or start and end with # are always skipped. If the exten‐
2075 sion starts with * then only files which have that extension are
2076 loaded. So --conf-dir=/path/to/dir,*.conf loads all files with
2077 the suffix .conf in /path/to/dir. This flag may be given on the
2078 command line or in a configuration file. If giving it on the
2079 command line, be sure to escape * characters. Files are loaded
2080 in alphabetical order of filename.
2081
2082 --servers-file=<file>
2083 A special case of --conf-file which differs in two respects.
2084 Firstly, only --server and --rev-server are allowed in the con‐
2085 figuration file included. Secondly, the file is re-read and the
2086 configuration therein is updated when dnsmasq receives SIGHUP.
2087
2089 At startup, dnsmasq reads /etc/dnsmasq.conf, if it exists. (On FreeBSD,
2090 the file is /usr/local/etc/dnsmasq.conf ) (but see the --conf-file and
2091 --conf-dir options.) The format of this file consists of one option per
2092 line, exactly as the long options detailed in the OPTIONS section but
2093 without the leading "--". Lines starting with # are comments and
2094 ignored. For options which may only be specified once, the configura‐
2095 tion file overrides the command line. Quoting is allowed in a config
2096 file: between " quotes the special meanings of ,:. and # are removed
2097 and the following escapes are allowed: \\ \" \t \e \b \r and \n. The
2098 later corresponding to tab, escape, backspace, return and newline.
2099
2101 When it receives a SIGHUP, dnsmasq clears its cache and then re-loads
2102 /etc/hosts and /etc/ethers and any file given by --dhcp-hostsfile,
2103 --dhcp-hostsdir, --dhcp-optsfile, --dhcp-optsdir, --addn-hosts or
2104 --hostsdir. The DHCP lease change script is called for all existing
2105 DHCP leases. If --no-poll is set SIGHUP also re-reads /etc/resolv.conf.
2106 SIGHUP does NOT re-read the configuration file.
2107
2108 When it receives a SIGUSR1, dnsmasq writes statistics to the system
2109 log. It writes the cache size, the number of names which have had to
2110 removed from the cache before they expired in order to make room for
2111 new names and the total number of names that have been inserted into
2112 the cache. The number of cache hits and misses and the number of
2113 authoritative queries answered are also given. For each upstream server
2114 it gives the number of queries sent, and the number which resulted in
2115 an error. In --no-daemon mode or when full logging is enabled (--log-
2116 queries), a complete dump of the contents of the cache is made.
2117
2118 The cache statistics are also available in the DNS as answers to
2119 queries of class CHAOS and type TXT in domain bind. The domain names
2120 are cachesize.bind, insertions.bind, evictions.bind, misses.bind,
2121 hits.bind, auth.bind and servers.bind. An example command to query
2122 this, using the dig utility would be
2123
2124 dig +short chaos txt cachesize.bind
2125
2126
2127 When it receives SIGUSR2 and it is logging direct to a file (see --log-
2128 facility ) dnsmasq will close and reopen the log file. Note that during
2129 this operation, dnsmasq will not be running as root. When it first cre‐
2130 ates the logfile dnsmasq changes the ownership of the file to the non-
2131 root user it will run as. Logrotate should be configured to create a
2132 new log file with the ownership which matches the existing one before
2133 sending SIGUSR2. If TCP DNS queries are in progress, the old logfile
2134 will remain open in child processes which are handling TCP queries and
2135 may continue to be written. There is a limit of 150 seconds, after
2136 which all existing TCP processes will have expired: for this reason, it
2137 is not wise to configure logfile compression for logfiles which have
2138 just been rotated. Using logrotate, the required options are create and
2139 delaycompress.
2140
2141
2142
2143 Dnsmasq is a DNS query forwarder: it is not capable of recursively
2144 answering arbitrary queries starting from the root servers but forwards
2145 such queries to a fully recursive upstream DNS server which is typi‐
2146 cally provided by an ISP. By default, dnsmasq reads /etc/resolv.conf to
2147 discover the IP addresses of the upstream nameservers it should use,
2148 since the information is typically stored there. Unless --no-poll is
2149 used, dnsmasq checks the modification time of /etc/resolv.conf (or
2150 equivalent if --resolv-file is used) and re-reads it if it changes.
2151 This allows the DNS servers to be set dynamically by PPP or DHCP since
2152 both protocols provide the information. Absence of /etc/resolv.conf is
2153 not an error since it may not have been created before a PPP connection
2154 exists. Dnsmasq simply keeps checking in case /etc/resolv.conf is cre‐
2155 ated at any time. Dnsmasq can be told to parse more than one
2156 resolv.conf file. This is useful on a laptop, where both PPP and DHCP
2157 may be used: dnsmasq can be set to poll both /etc/ppp/resolv.conf and
2158 /etc/dhcpc/resolv.conf and will use the contents of whichever changed
2159 last, giving automatic switching between DNS servers.
2160
2161 Upstream servers may also be specified on the command line or in the
2162 configuration file. These server specifications optionally take a
2163 domain name which tells dnsmasq to use that server only to find names
2164 in that particular domain.
2165
2166 In order to configure dnsmasq to act as cache for the host on which it
2167 is running, put "nameserver 127.0.0.1" in /etc/resolv.conf to force
2168 local processes to send queries to dnsmasq. Then either specify the
2169 upstream servers directly to dnsmasq using --server options or put
2170 their addresses real in another file, say /etc/resolv.dnsmasq and run
2171 dnsmasq with the --resolv-file /etc/resolv.dnsmasq option. This second
2172 technique allows for dynamic update of the server addresses by PPP or
2173 DHCP.
2174
2175 Addresses in /etc/hosts will "shadow" different addresses for the same
2176 names in the upstream DNS, so "mycompany.com 1.2.3.4" in /etc/hosts
2177 will ensure that queries for "mycompany.com" always return 1.2.3.4 even
2178 if queries in the upstream DNS would otherwise return a different
2179 address. There is one exception to this: if the upstream DNS contains a
2180 CNAME which points to a shadowed name, then looking up the CNAME
2181 through dnsmasq will result in the unshadowed address associated with
2182 the target of the CNAME. To work around this, add the CNAME to
2183 /etc/hosts so that the CNAME is shadowed too.
2184
2185
2186 The tag system works as follows: For each DHCP request, dnsmasq col‐
2187 lects a set of valid tags from active configuration lines which include
2188 set:<tag>, including one from the --dhcp-range used to allocate the
2189 address, one from any matching --dhcp-host (and "known" or "known-oth‐
2190 ernet" if a --dhcp-host matches) The tag "bootp" is set for BOOTP
2191 requests, and a tag whose name is the name of the interface on which
2192 the request arrived is also set.
2193
2194 Any configuration lines which include one or more tag:<tag> constructs
2195 will only be valid if all that tags are matched in the set derived
2196 above. Typically this is --dhcp-option. --dhcp-option which has tags
2197 will be used in preference to an untagged --dhcp-option, provided that
2198 _all_ the tags match somewhere in the set collected as described above.
2199 The prefix '!' on a tag means 'not' so --dhcp-option=tag:!pur‐
2200 ple,3,1.2.3.4 sends the option when the tag purple is not in the set of
2201 valid tags. (If using this in a command line rather than a configura‐
2202 tion file, be sure to escape !, which is a shell metacharacter)
2203
2204 When selecting --dhcp-options, a tag from --dhcp-range is second class
2205 relative to other tags, to make it easy to override options for indi‐
2206 vidual hosts, so --dhcp-range=set:interface1,...... --dhcp-
2207 host=set:myhost,..... --dhcp-option=tag:interface1,option:nis-
2208 domain,"domain1" --dhcp-option=tag:myhost,option:nis-domain,"domain2"
2209 will set the NIS-domain to domain1 for hosts in the range, but override
2210 that to domain2 for a particular host.
2211
2212
2213 Note that for --dhcp-range both tag:<tag> and set:<tag> are allowed, to
2214 both select the range in use based on (eg) --dhcp-host, and to affect
2215 the options sent, based on the range selected.
2216
2217 This system evolved from an earlier, more limited one and for backward
2218 compatibility "net:" may be used instead of "tag:" and "set:" may be
2219 omitted. (Except in --dhcp-host, where "net:" may be used instead of
2220 "set:".) For the same reason, '#' may be used instead of '!' to indi‐
2221 cate NOT.
2222
2223 The DHCP server in dnsmasq will function as a BOOTP server also, pro‐
2224 vided that the MAC address and IP address for clients are given, either
2225 using --dhcp-host configurations or in /etc/ethers , and a --dhcp-range
2226 configuration option is present to activate the DHCP server on a par‐
2227 ticular network. (Setting --bootp-dynamic removes the need for static
2228 address mappings.) The filename parameter in a BOOTP request is used as
2229 a tag, as is the tag "bootp", allowing some control over the options
2230 returned to different classes of hosts.
2231
2232
2234 Configuring dnsmasq to act as an authoritative DNS server is compli‐
2235 cated by the fact that it involves configuration of external DNS
2236 servers to provide delegation. We will walk through three scenarios of
2237 increasing complexity. Prerequisites for all of these scenarios are a
2238 globally accessible IP address, an A or AAAA record pointing to that
2239 address, and an external DNS server capable of doing delegation of the
2240 zone in question. For the first part of this explanation, we will call
2241 the A (or AAAA) record for the globally accessible address server.exam‐
2242 ple.com, and the zone for which dnsmasq is authoritative our.zone.com.
2243
2244 The simplest configuration consists of two lines of dnsmasq configura‐
2245 tion; something like
2246
2247 --auth-server=server.example.com,eth0
2248 --auth-zone=our.zone.com,1.2.3.0/24
2249
2250 and two records in the external DNS
2251
2252 server.example.com A 192.0.43.10
2253 our.zone.com NS server.example.com
2254
2255 eth0 is the external network interface on which dnsmasq is listening,
2256 and has (globally accessible) address 192.0.43.10.
2257
2258 Note that the external IP address may well be dynamic (ie assigned from
2259 an ISP by DHCP or PPP) If so, the A record must be linked to this
2260 dynamic assignment by one of the usual dynamic-DNS systems.
2261
2262 A more complex, but practically useful configuration has the address
2263 record for the globally accessible IP address residing in the authori‐
2264 tative zone which dnsmasq is serving, typically at the root. Now we
2265 have
2266
2267 --auth-server=our.zone.com,eth0
2268 --auth-zone=our.zone.com,1.2.3.0/24
2269
2270 our.zone.com A 1.2.3.4
2271 our.zone.com NS our.zone.com
2272
2273 The A record for our.zone.com has now become a glue record, it solves
2274 the chicken-and-egg problem of finding the IP address of the nameserver
2275 for our.zone.com when the A record is within that zone. Note that this
2276 is the only role of this record: as dnsmasq is now authoritative from
2277 our.zone.com it too must provide this record. If the external address
2278 is static, this can be done with an /etc/hosts entry or --host-record.
2279
2280 --auth-server=our.zone.com,eth0
2281 --host-record=our.zone.com,1.2.3.4
2282 --auth-zone=our.zone.com,1.2.3.0/24
2283
2284 If the external address is dynamic, the address associated with
2285 our.zone.com must be derived from the address of the relevant inter‐
2286 face. This is done using --interface-name Something like:
2287
2288 --auth-server=our.zone.com,eth0
2289 --interface-name=our.zone.com,eth0
2290 --auth-zone=our.zone.com,1.2.3.0/24,eth0
2291
2292 (The "eth0" argument in --auth-zone adds the subnet containing eth0's
2293 dynamic address to the zone, so that the --interface-name returns the
2294 address in outside queries.)
2295
2296 Our final configuration builds on that above, but also adds a secondary
2297 DNS server. This is another DNS server which learns the DNS data for
2298 the zone by doing zones transfer, and acts as a backup should the pri‐
2299 mary server become inaccessible. The configuration of the secondary is
2300 beyond the scope of this man-page, but the extra configuration of dns‐
2301 masq is simple:
2302
2303 --auth-sec-servers=secondary.myisp.com
2304
2305 and
2306
2307 our.zone.com NS secondary.myisp.com
2308
2309 Adding auth-sec-servers enables zone transfer in dnsmasq, to allow the
2310 secondary to collect the DNS data. If you wish to restrict this data to
2311 particular hosts then
2312
2313 --auth-peer=<IP address of secondary>
2314
2315 will do so.
2316
2317 Dnsmasq acts as an authoritative server for in-addr.arpa and ip6.arpa
2318 domains associated with the subnets given in --auth-zone declarations,
2319 so reverse (address to name) lookups can be simply configured with a
2320 suitable NS record, for instance in this example, where we allow
2321 1.2.3.0/24 addresses.
2322
2323 3.2.1.in-addr.arpa NS our.zone.com
2324
2325 Note that at present, reverse (in-addr.arpa and ip6.arpa) zones are not
2326 available in zone transfers, so there is no point arranging secondary
2327 servers for reverse lookups.
2328
2329
2330 When dnsmasq is configured to act as an authoritative server, the fol‐
2331 lowing data is used to populate the authoritative zone.
2332
2333 --mx-host, --srv-host, --dns-rr, --txt-record, --naptr-record, --caa-
2334 record, as long as the record names are in the authoritative domain.
2335
2336 --cname as long as the record name is in the authoritative domain. If
2337 the target of the CNAME is unqualified, then it is qualified with the
2338 authoritative zone name. CNAME used in this way (only) may be wild‐
2339 cards, as in
2340
2341 --cname=*.example.com,default.example.com
2342
2343
2344 IPv4 and IPv6 addresses from /etc/hosts (and --addn-hosts ) and --host-
2345 record and --interface-name provided the address falls into one of the
2346 subnets specified in the --auth-zone.
2347
2348 Addresses of DHCP leases, provided the address falls into one of the
2349 subnets specified in the --auth-zone. (If constructed DHCP ranges are
2350 is use, which depend on the address dynamically assigned to an inter‐
2351 face, then the form of --auth-zone which defines subnets by the dynamic
2352 address of an interface should be used to ensure this condition is
2353 met.)
2354
2355 In the default mode, where a DHCP lease has an unqualified name, and
2356 possibly a qualified name constructed using --domain then the name in
2357 the authoritative zone is constructed from the unqualified name and the
2358 zone's domain. This may or may not equal that specified by --domain.
2359 If --dhcp-fqdn is set, then the fully qualified names associated with
2360 DHCP leases are used, and must match the zone's domain.
2361
2362
2363
2364
2366 0 - Dnsmasq successfully forked into the background, or terminated nor‐
2367 mally if backgrounding is not enabled.
2368
2369 1 - A problem with configuration was detected.
2370
2371 2 - A problem with network access occurred (address in use, attempt to
2372 use privileged ports without permission).
2373
2374 3 - A problem occurred with a filesystem operation (missing file/direc‐
2375 tory, permissions).
2376
2377 4 - Memory allocation failure.
2378
2379 5 - Other miscellaneous problem.
2380
2381 11 or greater - a non zero return code was received from the lease-
2382 script process "init" call. The exit code from dnsmasq is the script's
2383 exit code with 10 added.
2384
2385
2387 The default values for resource limits in dnsmasq are generally conser‐
2388 vative, and appropriate for embedded router type devices with slow pro‐
2389 cessors and limited memory. On more capable hardware, it is possible to
2390 increase the limits, and handle many more clients. The following
2391 applies to dnsmasq-2.37: earlier versions did not scale as well.
2392
2393
2394 Dnsmasq is capable of handling DNS and DHCP for at least a thousand
2395 clients. The DHCP lease times should not be very short (less than one
2396 hour). The value of --dns-forward-max can be increased: start with it
2397 equal to the number of clients and increase if DNS seems slow. Note
2398 that DNS performance depends too on the performance of the upstream
2399 nameservers. The size of the DNS cache may be increased: the hard limit
2400 is 10000 names and the default (150) is very low. Sending SIGUSR1 to
2401 dnsmasq makes it log information which is useful for tuning the cache
2402 size. See the NOTES section for details.
2403
2404
2405 The built-in TFTP server is capable of many simultaneous file trans‐
2406 fers: the absolute limit is related to the number of file-handles
2407 allowed to a process and the ability of the select() system call to
2408 cope with large numbers of file handles. If the limit is set too high
2409 using --tftp-max it will be scaled down and the actual limit logged at
2410 start-up. Note that more transfers are possible when the same file is
2411 being sent than when each transfer sends a different file.
2412
2413
2414 It is possible to use dnsmasq to block Web advertising by using a list
2415 of known banner-ad servers, all resolving to 127.0.0.1 or 0.0.0.0, in
2416 /etc/hosts or an additional hosts file. The list can be very long, dns‐
2417 masq has been tested successfully with one million names. That size
2418 file needs a 1GHz processor and about 60Mb of RAM.
2419
2420
2422 Dnsmasq can be compiled to support internationalisation. To do this,
2423 the make targets "all-i18n" and "install-i18n" should be used instead
2424 of the standard targets "all" and "install". When internationalisation
2425 is compiled in, dnsmasq will produce log messages in the local language
2426 and support internationalised domain names (IDN). Domain names in
2427 /etc/hosts, /etc/ethers and /etc/dnsmasq.conf which contain non-ASCII
2428 characters will be translated to the DNS-internal punycode representa‐
2429 tion. Note that dnsmasq determines both the language for messages and
2430 the assumed charset for configuration files from the LANG environment
2431 variable. This should be set to the system default value by the script
2432 which is responsible for starting dnsmasq. When editing the configura‐
2433 tion files, be careful to do so using only the system-default locale
2434 and not user-specific one, since dnsmasq has no direct way of determin‐
2435 ing the charset in use, and must assume that it is the system default.
2436
2437
2439 /etc/dnsmasq.conf
2440
2441 /usr/local/etc/dnsmasq.conf
2442
2443 /etc/resolv.conf /var/run/dnsmasq/resolv.conf /etc/ppp/resolv.conf
2444 /etc/dhcpc/resolv.conf
2445
2446 /etc/hosts
2447
2448 /etc/ethers
2449
2450 /var/lib/dnsmasq/dnsmasq.leases
2451
2452 /var/db/dnsmasq.leases
2453
2454 /var/run/dnsmasq.pid
2455
2457 hosts(5), resolver(5)
2458
2460 This manual page was written by Simon Kelley <simon@thekelleys.org.uk>.
2461
2462
2463
2464
2465
2466 2020-04-05 DNSMASQ(8)