dnsmasq 是一个轻量级的DNS

dnsmasq [选项] …  

描述

dnsmasq 是一个轻量级的DNS,TFTP,PXE,路由器通告和DHCP服务器。它旨在为LAN提供耦合的DNS和DHCP服务。

Dnsmasq接受DNS查询,并从一个小的本地缓存中回答它们,或者将它们转发给一个真正的递归DNS服务器。它加载/ etc / hosts的内容,以便可以解析未出现在全局DNS中的本地主机名,并且还可以解答DHCP配置主机的DNS查询。它也可以充当一个或多个域的权威DNS服务器,允许本地名称出现在全球DNS中。它可以配置为进行DNSSEC验证。

dnsmasq DHCP服务器支持静态地址分配和多个网络。它会自动发送一组合理的默认DHCP选项,并且可以配置为发送任何所需的一组DHCP选项,包括供应商封装的选项。它包括一个安全的只读TFTP服务器,允许DHCP主机进行net / PXE引导,并支持BOOTP。PXE支持功能全面,包括向客户端提供PXE信息的代理模式,而DHCP地址分配则由另一台服务器完成。

dnsmasq DHCPv6服务器提供了与DHCPv4服务器相同的一组功能,此外,它还包含路由器通告和一个整洁的功能,它允许为使用DHCPv4的客户端命名,而仅为IPv6配置使用无状态自动配置。支持从通过DHCPv6前缀委托动态委派的子网进行地址分配(DHCPv6和RA)。

Dnsmasq考虑了小型嵌入式系统。它旨在尽可能小的内存空间与所支持的功能兼容,并允许在编译后的二进制文件中省略不需要的功能。  

OPTIONS

请注意,通常缺少参数是允许的并关闭函数,例如“–pid-file”禁止写入PID文件。在BSD上,除非链接GNU getopt库,否则选项的长形式在命令行上不起作用; 它仍然在配置文件中被识别。

– 测试
阅读和语法检查配置文件。如果一切正常,则退出代码0,否则退出非零代码。不要启动dnsmasq。
-w, – 帮助
显示所有命令行选项。 –help dhcp 将显示已知的DHCPv4配置选项,– help dhcp6 将显示DHCPv6选项。
-h, – 无主机
不要读取/ etc / hosts中的主机名。
-H,–addn-hosts = <file>
其他主机文件。读取指定的文件以及/ etc / hosts。如果给出-h,则只读取指定的文件。此选项可能会重复多个其他主机文件。如果给出了一个目录,那么读取该目录中包含的所有文件。
–hostsdir = <路径>
读取目录中包含的所有主机文件。新的或更改的文件会自动读取。有关详细信息,请参阅–dhcp-hostsdir。
-E,–expand-hosts
将域添加到/ etc / hosts中的简单名称(没有句点),方法与DHCP派生名称相同。请注意,这不适用于cnames,PTR记录,TXT记录等中的域名。
-T,–local-ttl = <时间>
当使用来自/ etc / hosts或配置的信息或DHCP租用文件dnsmasq进行回复时,默认情况下会将生存时间字段设置为零,这意味着请求者不应该自己缓存信息。这在几乎所有情况下都是正确的。该选项允许为这些回复提供生存时间(以秒为单位)。这会减少服务器上的负载,但会损害在某些情况下使用陈旧数据的客户端。
–dhcp-TTL = <时间>
至于–local-ttl,但只影响来自DHCP租约的信息。如果两者都给出,则–dhcp-ttl适用于DHCP信息, – – local-ttl适用于其他方式。将其设置为零可以消除DHCP的–local-ttl的影响。
–neg-TTL = <时间>
上游服务器的否定回复通常包含dnsmasq用于缓存的SOA记录中的生存时间信息。如果来自上游服务器的回复省略了此信息,则dnsmasq不会缓存回复。此选项为dnsmasq用于缓存否定响应(即使没有SOA记录)的生存时间(以秒为单位)提供默认值。
–max-TTL = <时间>
设置将分配给客户端的最大TTL值。如果指定的最大TTL较低,则将给予客户端而不是真正的TTL值。但是真正的TTL值保存在缓存中以避免洪泛上游DNS服务器。
–max缓存-TTL = <时间>
为高速缓存中的条目设置最大TTL值。
–min缓存-TTL = <时间>
将短TTL值扩展到缓存时的时间。请注意,人为地扩展TTL值通常是一个糟糕的主意,除非您有充分的理由,并明白自己在做什么,否则不要这样做。除非重新编译,否则Dnsmasq会将此选项的值限制为一小时。
–auth-TTL = <时间>
设置授权服务器答复中返回的TTL值。
-k, – 保持在前景
不要在启动时进入后台,否则照常运行。这适用于在daemontools或launchd下运行dnsmasq时使用。
-d,–no-daemon
调试模式:不要叉到后台,不要写pid文件,不要更改用户ID,在SIGUSR1上收到时生成一个完整的缓存转储,记录到stderr以及syslog,不要fork新进程处理TCP查询。请注意,此选项仅用于调试,以停止生产中的dnsmasq守护进程,请使用 -k。
-q,–log-queries
记录由dnsmasq处理的DNS查询的结果。收到SIGUSR1后启用完整缓存转储。如果提供参数“extra”,即 –log-queries = extra, 那么日志在每行的开始处都有额外的信息。它由一个序列号组成,该序列号将与单个查询关联的日志行与请求者的IP地址绑定在一起。
-8,–log-facility = <facility>
设置dnsmasq将发送系统日志条目的设备,默认设置为DAEMON,当调试模式运行时设置为LOCAL0。如果给定的设施至少包含一个’/’字符,则它被视为文件名,并且dnsmasq将记录到给定文件,而不是syslog。如果设施是’ – ‘,那么dnsmasq记录到stderr。(读取配置时的错误仍会转到syslog,但所有成功启动的输出以及运行时的所有输出将专门用于该文件。)在记录到文件时,当接收到SIGUSR2时,dnsmasq将关闭并重新打开该文件。这允许日志文件在不停止dnsmasq的情况下进行旋转。
–log-异步[= <线>]
启用异步日志记录,并且可选地设置写入syslog时将由dnsmasq排队的行数限制较慢。Dnsmasq可以异步登录:这可以让它在不被syslog阻塞的情况下继续工作,并允许syslog为DNS查询使用dnsmasq而不会造成死锁。如果日志队列变满,dnsmasq会记录溢出,并且丢失的消息数量。默认队列长度为5,理智值为5-25,最大值为100。
-x,–pid-file = <path>
为dnsmasq指定一个备用路径来记录其进程ID。通常是/var/run/dnsmasq.pid。
-u,–user = <username>
指定启动后dnsmasq将更改的用户标识。Dnsmasq通常必须以root用户身份启动,但它会在启动后通过将id更改为另一个用户来删除root权限。通常情况下,这个用户是“没有人”,但是可以用这个开关覆盖。
-g,–group = <组名>
指定dnsmasq将运行的组。默认为“dip”(如果可用),以方便访问通常不具有世界可读性的/etc/ppp/resolv.conf。
-v,–version
打印版本号。
-p,–port = <port>
在<port>上监听,而不是标准的DNS端口(53)。将其设置为零可以完全禁用DNS功能,只保留DHCP和/或TFTP。
-P,–edns-packet-max = <size>
指定DNS转发器支持的最大EDNS.0 UDP数据包。默认为4096,这是RFC5625推荐的大小。
-Q,–query-port = <query_port>
从特定UDP端口<query_port>发送出站DNS查询,并侦听它们的回复,而不是使用随机端口。请注意,使用此选项将使dnsmasq对DNS欺骗攻击的安全性降低,但它可能会更快并且使用更少的资源。将此选项设置为零会使dnsmasq使用操作系统分配给它的单个端口:这是2.43之前版本中的默认行为。
–min端口= <端口>
不要使用小于指定的端口作为出站DNS查询的源。Dnsmasq选择随机端口作为出站查询的来源:当给出此选项时,使用的端口将始终大于指定的端口。对防火墙后面的系统有用。如果未指定,则默认为1024。
–max端口= <端口>
使用低于给定的端口作为出站DNS查询的源。Dnsmasq选择随机端口作为出站查询的来源:当给出此选项时,使用的端口将始终低于指定的端口。对防火墙后面的系统有用。
-i,–interface = <接口名称> 只在指定的接口上进行监听。当使用–interface 选项时,Dnsmasq会自动将环回(本地)接口添加到要使用的接口列表中 如果没有 给出–interface 或 –listen -address选项,则除了–except-interface 选项中给出的任何接口外,dnsmasq会侦听所有可用接口 在Linux上,当 –bind-interfaces 或 –bind-dynamic 实际上是检查IP别名接口标签(例如“eth1:0”),而不是接口名称。在退化的情况下,当一个接口有一个地址时,这相当于同样的事情,但是当一个接口有多个地址时,它允许控制哪些地址被接受。通过使用–listen-address,可以在默认模式下实现相同的效果  可以在–interface 和 –except-interface 选项中使用包含尾部’*’的简单通配符 
-I,–except-interface = <接口名称>
不要在指定的界面上监听。请注意,— listen -address –interface 和 –except-interface 选项的顺序 无关紧要,并且 –except-interface 选项总是覆盖其他选项。关于–listen-address的接口标签的评论 适用于此处。
–auth服务器= <域>,<接口> | <IP地址>
为到达接口或地址的查询启用DNS授权模式。请注意,无需在–interface 或 –listen -address 配置中提及接口或地址,事实上–auth-server 将覆盖这些接口或地址 , 并在指定的接口上提供不同的DNS服务。<domain>是“胶水记录”。它应该在全局DNS中解析指向地址dnsmasq正在监听的A和/或AAAA记录。当指定接口时,可以使用“/ 4”或“/ 6”进行限定,以仅指定与该接口关联的IPv4或IPv6地址。
–local服务
仅接受来自地址位于本地子网上的主机的DNS查询,即服务器上存在接口的子网。如果没有–interface –except-interface,–listen-address或–auth-server选项,此选项才有效。它旨在设置为安装时的默认值,以允许未配置的安装有用,但也可安全地用于DNS放大攻击。
-2,–no-dhcp-interface = <接口名称>
不要在指定的接口上提供DHCP或TFTP,但要提供DNS服务。
-a,–listen-address = <ipaddr>
监听给定的IP地址。既 –interface 和 –listen地址 选项可以被给予,在这种情况下,组两个接口和地址被使用。请注意,如果没有 给出–interface选项,但是 –listen-address 是,则dnsmasq将不会自动侦听回送接口。为了达到这个目的,它的IP地址127.0.0.1必须作为–listen-address 选项明确给出 
-z,–bind-interfaces
在支持它的系统上,即使只在某些接口上侦听,dnsmasq也会绑定通配符地址。然后它丢弃它不应该回复的请求。即使接口来去变更地址,这也具有工作的优点。该选项强制dnsmasq真正绑定它正在监听的接口。关于唯一有用的时间是在同一台计算机上运行另一个名称服务器(或另一个dnsmasq实例)。设置此选项还会启用提供DHCP服务的多个dnsmasq实例在同一台计算机上运行。
–bind动态
启用网络模式,该模式是–bind-interfaces 和默认模式之间的混合模式 Dnsmasq绑定各个接口的地址,允许多个dnsmasq实例,但是如果出现新的接口或地址,它会自动侦听这些接口(受限于任何访问控制配置)。这使得动态创建的接口的工作方式与默认相同。实现这个选项需要非标准的网络API,它只能在Linux下使用。在其他平台上,它会回落到–bind-interfaces模式。
-y, – 本地化查询
返回来自/ etc / hosts和–interface-name的DNS查询的答案,这取决于接收查询的接口。如果名称有多个地址与其关联,并且这些地址中的至少一个与发送查询的接口在同一子网上,则只返回该子网上的地址。这允许服务器在每个接口对应的/ etc / hosts中有多个地址,并且主机将根据它们所连接的网络来获取正确的地址。目前该设施仅限于IPv4。
-b,–bogus-priv
伪装私人反向查找。对于在/ etc / hosts或DHCP租约文件中找不到的专用IP范围(即192.168.xx等)的所有反向查找,将以“无此域”进行回答,而不是向上游转发。受影响的前缀集是RFC6303中给出的IPv4和IPv6列表。
-V,–alias = [<old-ip>] | [<start-ip> – <end-ip>],<new-ip> [,<mask>]
修改从上游名称服务器返回的IPv4地址; old-ip被new-ip替换。如果给出了可选的掩码,那么与被掩码的old-ip相匹配的任何地址都将被重写。因此,例如 –alias = 1.2.3.0,6.7.8.0,255.255.255.0 将映射1.2.3.56到6.7.8.56和1.2.3.67到6.7.8.67。这是Cisco PIX路由器称之为“DNS修复”的原因。如果旧IP是作为范围给出的,则只重写该范围内的地址,而不是整个子网。所以 –alias = 192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0 maps 192.168.0.10-> 192.168.0.40 to 10.0.0.10-> 10.0.0.40
-B,–bogus-nxdomain = <ipaddr>
将包含IP地址的回复转换为“无此域”回复。这旨在抵消Verisign在2003年9月做出的迂回举动,当时他们开始返回广告网页的地址以响应未注册名称的查询,而不是正确的NXDOMAIN响应。该选项告诉dnsmasq在看到此行为时会伪造正确的响应。截至2003年9月,Verisign返回的IP地址为64.94.110.11
– 忽略地址= <IP地址>
忽略对包含指定地址的A记录查询的答复。没有错误产生,dnsmasq只是继续听另一个答复。这对于在正确答案到达之前打败依赖于快速提供针对某个域的DNS请求的伪造答案的阻止策略很有用。
-f,–filterwin2k
后来的Windows版本会定期发出DNS请求,这些请求不会从公共DNS获得明智的答案,并可能通过触发按需拨号链接导致问题。该标志打开一个选项来过滤这些请求。阻止的请求是针对SOA和SRV类型的记录,并键入ANY(其中请求的名称具有下划线)以捕获LDAP请求。
-r,–resolv-file = <文件>
从<file>中读取上游名称服务器的IP地址,而不是/etc/resolv.conf。有关此文件的格式,请参阅 resolv.conf(5)。唯一与dnsmasq相关的行是nameserver。可以通知Dnsmasq轮询多个resolv.conf文件,指定的第一个文件名将覆盖默认值,随后的文件名将添加到列表中。这仅在轮询时才被允许; 具有当前最新修改时间的文件是使用的文件。
-R, – 无分解
不要读取/etc/resolv.conf。仅从命令行或dnsmasq配置文件获取上游服务器。
-1,–enable-dbus [= <服务名称>]
允许通过DBus方法调用更新dnsmasq配置。可以更改的配置是上游DNS服务器(和相应的域)和缓存清除。需要使用DBus支持构建dnsmasq。如果给出服务名称,则dnsmasq以该名称提供服务,而不是默认的服务名称为 uk.org.thekelleys.dnsmasq
-o, – 严格顺序
默认情况下,dnsmasq会将查询发送到任何它知道的上游服务器,并尝试使用已知启动的服务器。设置此标志会强制dnsmasq严格按照它们在/etc/resolv.conf中出现的顺序尝试每个服务器的每个查询
– 全服务器
默认情况下,当dnsmasq有多个上游服务器可用时,它将只向一台服务器发送查询。设置此标志将强制dnsmasq将所有查询发送到所有可用的服务器。来自首先回答的服务器的回复将被返回给原始请求者。
–dns – 环 – 检测
启用代码来检测DNS转发循环; 即发送给上游服务器之一的查询最终作为新查询返回给dnsmasq实例的情况。该过程通过生成<hex> .test格式的TXT查询并将它们发送到每个上游服务器来工作。十六进制是一个UID,它编码发送查询的dnsmasq实例和发送它的上游服务器。如果查询返回到发送它的服务器,则发送它的上游服务器将被禁用,并记录此事件。每当上游服务器组发生更改时,测试将在所有这些服务器上重新运行,其中包括先前禁用的服务器。
–stop-DNS-重新绑定
拒绝(和记录)来自位于专用IP范围内的上游名称服务器的地址。这可以阻止使用防火墙后面的浏览器探测本地网络上的计算机的攻击。
–rebind-本地主机-OK
从重新绑定检查中免除127.0.0.0/8。此地址范围由实时黑洞服务器返回,因此阻止它可能会禁用这些服务。
–rebind域-OK = [<域>] | [[/ <域> / [<域> /]
不要在对这些域的查询中检测并阻止dns-rebind。参数可以是单个域,也可以是包含’/’的多个域,如–server语法,例如。 –rebind域-OK = /域1 /域2 / DOMAIN3 /
-n,–no-poll
不要轮询/etc/resolv.conf以进行更改。
– 清除上重装
无论何时重新读取/etc/resolv.conf或通过DBus设置上游服务器,请清除DNS缓存。当新的名称服务器可能具有与缓存中保存的数据不同的数据时,这很有用。
-D, – 域需要
告诉dnsmasq永远不会将没有点或域部分的普通名称的A或AAAA查询转发给上游名称服务器。如果从/ etc / hosts或DHCP中未知该名称,则返回“未找到”答案。
-S,–local,–server = [/ [<domain>] / [domain /]] [<ipaddr> [#<port>] [@ <source-ip> | <interface> ]]
直接指定上游服务器的IP地址。设置这个标志不会禁止读取/etc/resolv.conf,使用-R来做到这一点。如果给出一个或多个可选域,则该服务器仅用于这些域,并且仅使用指定的服务器查询它们。这是为私人域名服务器设计的:如果你的网络上有一个名称服务器,它处理的形式是xxx.internal.thekelleys.org.uk,名字是192.168.1.1,然后给出标志 -S /internal.thekelleys.org.uk/ 192.168.1.1 将把内部机器的所有查询发送到该名称服务器,其他所有内容将发送到/etc/resolv.conf中的服务器。对于这些专用名称服务器,将关闭DNSSEC验证,除非 为有问题的域指定了 –trust-anchor一个空的域名规范, // 具有“非限定名称”的特殊含义,即名称中没有任何点。可以使用#字符将非标准端口指定为IP地址的一部分。允许多个-S标志,并根据需要重复使用域名或ipaddr部分。

更具体的域优先于不太具体的域,因此:– server = / google.com / 1.2.3.4 –server = / www.google.com /2.3.4.5 将* .google.com的查询发送到1.2。 3.4,除了* www.google.com,这将去2.3.4.5

特殊服务器地址’#’表示“使用标准服务器”,因此 –server = / google.com / 1.2.3.4 –server = / www.google.com /# 将发送对* .google.com的查询到1.2.3.4,除了* www.google.com将像往常一样转发。

同样允许的是一个给出一个域但没有IP地址的-S标志; 这告诉dnsmasq一个域是本地的,它可以回答来自/ etc / hosts或DHCP的查询,但不应该将该域上的查询转发给任何上游服务器。 本地 是服务器 在这种情况下使配置文件更清晰的同义词 

IPv6地址可能包含%interface scope-id,例如fe80 :: 202:a412:4512:7bbf%eth0。

@字符后面的可选字符串告诉dnsmasq如何将查询源设置到此名称服务器。它可以是IP地址,接口名称或两者。IP地址应该属于运行dnsmasq的机器,否则该服务器行将被记录并被忽略。如果给出接口名称,则通过该接口强制向服务器进行查询; 如果给出了一个IP地址,则查询的源地址将被设置为该地址; 如果两者都给出,则将使用ip地址和接口名称的组合来引导请求到服务器。对于指定了源地址但可直接将端口指定为源地址的一部分的任何服务器,查询端口标志将被忽略。在dnsmasq支持的所有平台上不实施对接口的查询。

–rev服务器= <IP地址> / <前缀-LEN>,<IPADDR> [#<端口>] [@ <源-IP> | <接口> [#<端口>]]
这在功能上与–server相同  但提供了一些语法糖来指定地址到名称查询更容易。例如 –rev-server = 1.2.3.0 / 24,192.168.0.1 完全等同于 –server = / 3.2.1.in-addr.arpa / 192.168.0.1
-A,–address = / <域> [/ <域> …] / [<ipaddr>]
指定给定域中的任何主机返回的IP地址。域中的查询永远不会转发,并且始终使用指定的IP地址(可能是IPv4或IPv6)进行回复。要为域提供IPv4和IPv6地址,请使用重复的-A标志。要为单个查询包含多个IP地址,请改用 –addn-hosts = <path>请注意,/ etc / hosts和DHCP租约会覆盖个别名称。这样做的一个常见用途是将整个doubleclick.net域重定向到一些友好的本地Web服务器,以避免横幅广告。域规范的工作原理与–server相同,其中的附加功能可以与/#/匹配任何域。因此 –address = /#/ 1.2.3.4将一直返回1.2.3.4对于任何未从/ etc / hosts或DHCP获得回答的查询,并且不通过更具体的–server指令发送到上游名称服务器至于 –server,没有地址的一个或多个域返回一个没有这样的域的答案,所以–address = / example.com /相当于 –server = / example.com /并返回NXDOMAIN。 com及其所有子域名。
–ipset = / <域> [/ <域> …] / <IPSET> [,<IPSET> …]
将解析的一个或多个域的查询IP地址放在指定的Netfilter IP集中。如果给出多个setname,则根据IP组的限制(IPv4地址不能存储在IPv6 IP组中,反之亦然),将地址放在其中的每一个中。域和子域的匹配方式与 – 地址相同 这些IP集合必须已经存在。有关更多详细信息,请参阅 ipset(8)。
-m,–mx-host = <mx名称> [[,<主机名>],<首选项>]
返回一个名为<mx name>的MX记录,指向给定的主机名(如果给出)或者在–mx-target开关中指定的主机,或者如果没有给出该开关,则返回运行dnsmasq的主机。默认值对于将邮件从LAN上的系统导向中央服务器很有用。首选项值是可选的,如果没有给出,则默认值为1。主机可能会有多个MX记录。
-t,–mx-target = <主机名>
指定由dnsmasq返回的MX记录的默认目标。请参阅–mx-host。如果给定了-mx-target,而不是-mx-host,则dnsmasq将返回一个MX记录,该记录包含运行dnsmasq的机器的主机名上的MX查询的MX目标。
-e,–selfmx
为每台本地机器返回指向自己的MX记录。本地机器是在/ etc / hosts或DHCP租约中的机器。
-L,–localmx
为每台本地机器返回指向由mx-target(或运行dnsmasq的机器)给出的主机的MX记录。本地机器是在/ etc / hosts或DHCP租约中的机器。
-w,–srv-host = <_ service>。<_ prot>。[<domain>],[<target> [,<port> [,<priority> [,<weight>]]]]
返回SRV DNS记录。有关详细信息,请参阅RFC2782。如果未提供,则该域默认为–domain所给出的域  目标域的默认值为空,端口的默认值为1,重量和优先级的默认值为零。如果转换来自BIND区域文件的数据,请小心:端口,重量和优先级号码的顺序不同。给定服务/域的多个SRV记录是允许的,所有匹配的都会返回。
–host记录= <名称> [,<名称> ….],[<IPv4的地址>],[<IPv6的地址>] [,<TTL>]
将A,AAAA和PTR记录添加到DNS。这会将一个或多个名称添加到具有关联IPv4(A)和IPv6(AAAA)记录的DNS。名称可能会出现在多个 主机记录中 ,因此会被分配多个地址。只有第一个地址创建一个将地址链接到名称的PTR记录。这与读取主机文件时使用的规则相同。 主机记录 选项被认为是在主机文件之前被读取的,因此如果在主机文件中出现名称,那么出现的名称会抑制PTR记录的创建。与主机文件不同,即使扩展主机 有效,名称也不会扩展 短名和长名可能出现在同一 主机记录中, 例如。 –host记录=笔记本电脑,laptop.thekelleys.org,192.168.0.1,1234 :: 100

如果给出生存时间,它将覆盖缺省值,该缺省值为零或–local-ttl的值。该值是一个正整数,并以秒为单位给出生存时间。

-Y,–txt-record = <name> [[,<text>],<text>]
返回TXT DNS记录。TXT记录的值是一组字符串,因此可以包含任何数字,用逗号分隔; 使用引号将逗号放入字符串中。请注意,单个字符串的最大长度是255个字符,更长的字符串被分成255个字符块。
–ptr记录= <名称> [,<目标>]
返回PTR DNS记录。
–naptr记录= <名称>,<顺序>,<偏好>,<标记>,<服务>,<正则表达式> [,<更换>]
按RFC3403中的规定返回NAPTR DNS记录。
–cname = <CNAME>,[<CNAME>,<目标> [,<TTL>]
返回一个指示<cname>确实是<target>的CNAME记录。目标有很大的局限性; 它必须是来自/ etc / hosts(或其他主机文件)的dnsmasq,来自DHCP的来自–interface-name或另一个–cname的DNS名称  如果目标不符合此标准,则整个cname将被忽略。cname必须是唯一的,但允许多个cname指向同一个目标。实际上,可以在一行中向目标声明多个cname,如下所示:– cname = cname1,cname2,target

如果给出生存时间,它将覆盖缺省值,该缺省值为零或-local-ttl的值。该值是一个正整数,并以秒为单位给出生存时间。

–dns-rr = <名称>,<RR-number>,[<十六进制数据>]
返回任意的DNS资源记录。数字是记录的类型(始终在C_IN类中)。记录的值由十六进制数据给出,十六进制数据的形式可以是01:23:45或01 23 45或012345或这些的任意组合。
–interface名= <名称>,<接口> [/ 4 | / 6]
返回将名称与给定接口的地址相关联的DNS记录。此标志以与/ etc / hosts行相同的方式为给定名称指定A或AAAA记录,但地址不是常量,而是从给定接口获取。该接口后面可以跟着“/ 4”或“/ 6”来指定只应使用该接口的IPv4或IPv6地址。如果接口关闭,未配置或不存在,则返回空记录。匹配的PTR记录也被创建,将接口地址映射到名称。通过重复该标志,多个名称可以与接口地址相关联; 在这种情况下,第一个实例用于反向地址到名称映射。请注意,在–interface-name中使用的名称可能不会出现在/ etc / hosts中。
–synth-domain = <域>,<地址范围> [,<前缀> [*]]
为地址范围创建人工A / AAAA和PTR记录。记录可以是序列号或地址,以破折号代替句号(或用于IPv6的冒号)。

一个例子应该更清楚。第一个连续数字。 –synth-domain = thekelleys.org.uk,192.168.0.50,192.168.0.70,internal- * 的名称为internal-0.thekelleys.org.uk。返回192.168.0.50,internal-1.thekelleys.org.uk返回192.168.0.51等等。(注意*)同样的原则适用于IPv6地址(数字可能非常大)。从地址到名称的反向查找按预期行事。

其次,– synth-domain = thekelleys.org.uk,192.168.0.0 / 24,internal-(no *) 将导致对internal-192-168-0-56.thekelleys.org.uk的查询返回192.168。 0.56,反向查询反之亦然。这同样适用于IPv6,但IPv6地址可能以’::’开头,但DNS标签不能以’ – ‘开头,所以在这种情况下,如果没有配置前缀,则会在标签前添加零。:: 1变为0–1。

V4映射的IPv6地址,其具有类似于:: ffff:1.2.3.4的表示被专门处理,并且变得像0 – ffff-1-2-3-4

在这两种选项中,地址范围可以是<ip address>,<ip address>或<ip address> / <netmask>形式。

–add-MAC [= BASE64 |文本]
将请求者的MAC地址添加到上游转发的DNS查询中。这可以用于上游服务器的DNS过滤。只有当请求者与dnsmasq服务器位于同一子网中时,才能添加MAC地址。请注意,用于实现此目的的机制(EDNS0选项)尚未标准化,因此应视为实验性的。另请注意,以这种方式公开MAC地址可能会对安全和隐私产生影响。–add-subnet给出的缓存警告也适用于–add-mac。通过添加“base64”参数,MAC的替代编码为base64,通过添加“text”参数启用了十六进制和冒号的人类可读编码。
–add-CPE-ID = <字符串>
向上游转发的o个DNS查询添加一个任意标识字符串。
–add-subnet [[= [<IPv4地址> /] <IPv4前缀长度>] [,[<IPv6地址> /] <IPv6前缀长度>]]
向上游转发的DNS查询添加一个子网地址。如果在标志中指定了一个地址,它将被使用,否则将使用请求者的地址。转发地址的数量取决于前缀长度参数:32(128代表IPv6)转发整个地址,零转发任何一个,但仍然标记请求,以便上游名称服务器也不会添加客户端地址信息。IPv4和IPv6的默认值均为零。请注意,可以将上游名称服务器配置为根据此信息返回不同的结果,但dnsmasq缓存不包括在内。如果配置了dnsmasq实例以便可能遇到不同的结果,则应禁用缓存。

例如,– add-subnet = 24,96 将分别为IPv4和IPv6请求者添加请求者的/ 24和/ 96子网。 –add-subnet = 1.2.3.4 / 24 会为IPv4请求者添加1.2.3.0/24,为IPv6请求者添加:: / 0。 –add-subnet = 1.2.3.4 / 24,1.2.3.4 / 24 将为IPv4和IPv6请求者添加1.2.3.0/24。

-c,–cache-size = <cachesize>
设置dnsmasq缓存的大小。默认值是150个名称。将缓存大小设置为零将禁用缓存。
-N, – 无negcache
禁用否定缓存。负面缓存允许dnsmasq记住上游域名服务器的“没有这样的域”答案,并回答相同的查询而不再转发它们。
-0,–dns-forward-max = <查询>
设置最大并发DNS查询数。默认值是150,对大多数设置来说应该没问题。唯一需要增加的已知情况是使用web-server日志文件解析程序,它可以生成大量的并发查询。
–dnssec
验证DNS回复并缓存DNSSEC数据。在转发DNS查询时,dnsmasq会请求验证回复所需的DNSSEC记录。回复被验证,结果作为DNS数据包中的验证数据位返回。此外,DNSSEC记录存储在缓存中,使客户端的验证效率更高。请注意,客户端验证是最安全的DNSSEC模式,但对于无法进行验证的客户端,只要dnsmasq服务器和客户端之间的网络可信,使用由dnsmasq设置的AD位就很有用。必须在启用HAVE_DNSSEC的情况下编译Dnsmasq,并提供DNSSEC信任锚,请参阅 –trust-anchor。 由于DNSSEC验证过程使用缓存,因此在启用DNSSEC时,不允许将缓存大小降低到默认值以下。dnsmasq上游的名称服务器必须具有DNSSEC功能,即能够将DNSSEC记录与数据一起返回。如果它们不是,那么dnsmasq将无法确定答案的可信状态。在默认模式下,这意味着所有回复将被标记为不可信。如果设置了 –dnssec-check-unsigned 并且上游服务器不支持DNSSEC,则DNS服务将完全中断。
–trust锚= [<类>],<域>,<键标签>,<算法>,<消化型>,<消化>
提供DS记录以作为DNSSEC验证的信任锚。通常,这些将是根区域的密钥签名密钥(KSK)的DS记录,但也可以使用受限域的信任锚。当前根区域信任锚点可以从https://data.iana.org/root-anchors/root-anchors.xml下载
–dnssec检查,无符号
默认情况下,dnsmasq不检查未签名的DNS答复是否合法:它们被认为是有效的并且传递(当然,没有设置“真实数据”位)。这并不能防止攻击者伪造签名DNS区域的未签名回复,但速度很快。如果设置了此标志,dnsmasq将检查未签名回复的区域,以确保在这些区域中允许未签名的回复。这样做的代价是更多上游查询和更慢的性能。另请参阅–dnssec部分中关于上游服务器的警告
–dnssec-NO-timecheck
DNSSEC签名仅对指定的时间窗口有效,并应在这些窗口之外被拒绝。这对没有硬件实时时钟的机器产生了一个有趣的鸡与蛋问题。为了确定这些机器的正确时间,通常需要使用NTP并因此使用DNS,但是验证DNS需要知道正确的时间。设置此标志将删除时间窗口检查(但不包括其他DNSSEC验证),直到dnsmasq进程收到SIGINT。意图是,当平台确定当前不可用时,dnsmasq应该以此标志开始。只要建立可靠的时间,就应该将SIGINT发送到dnsmasq,它可以进行时间检查,并清除尚未彻底检查的DNS记录的缓存。

早期版本的dnsmasq重载SIGHUP(重新读取多个配置)以启用时间验证。

如果dnsmasq以调试模式运行(-d标志),则SIGINT保留其终止dnsmasq进程的通常含义。

–dnssec时间戳= <路径>
启用另一种检查DNSSEC系统时间有效性的方法(请参阅–dnssec-no-timecheck)。在这种情况下,一旦系统时间晚于指定文件上的时间戳,系统时间就被认为是有效的。该文件被创建并且它的时间戳由dnsmasq自动设置。该文件必须存储在永久文件系统中,以便它和它的mtime通过系统重新启动。时间戳文件是在dnsmasq删除根后创建的,因此它必须位于dnsmasq运行时的非特权用户可写的位置。
–proxy-DNSSEC
将来自上游服务器的DNSSEC认证数据位复制到下游客户端并进行缓存。这是使dnsmasq验证DNSSEC的替代方法,但它取决于dnsmasq和上游服务器之间的网络安全性以及上游服务器的可信性。
–dnssec调试
为DNSSEC验证设置调试模式,在上游查询中设置Checking Disabled位,并且不要将不验证的答复转换为SERVFAIL返回码的响应。请注意,设置此操作可能会影响DNS行为,但这不是一个额外的日志记录标志,不应在生产中进行设置。
–auth-zone = <domain> [,<subnet> [/ <prefix length>] [,<subnet> [/ <prefix length>] …..] [,exclude:<subnet> [/ <prefix长度>]] …..]
定义dnsmasq充当权威服务器的DNS区域。域中的本地定义的DNS记录将被提供。如果给出子网,则A和AAAA记录必须位于指定的子网之一中。

作为直接指定子网的替代方法,可以给出接口的名称,在这种情况下,使用该接口的配置地址和子网掩码/前缀长度暗示的子网; 这在使用构造的DHCP范围时很有用,因为实际地址是动态的,并且在配置dnsmasq时不知道。接口地址可能仅限于使用<interface> / 6的IPv6地址或仅限于使用<interface> / 4的IPv4。当接口动态确定应该出现在区域中的全局IPv6地址时,这很有用,但是RFC1918 IPv4地址不应该。接口名称和地址字面子网规范可以在相同的 – 真实区域声明中自由使用。

可以从响应中排除某些IP地址。可以使用它来确保答案仅包含全局可路由IP地址(通过排除回送,RFC1918和ULA地址)。

子网也用于定义用于反向DNS查询的in-addr.arpa和ip6.arpa域。如果未指定,则IPv4的前缀长度默认为24,IPv6的默认值为64。对于IPv4子网,前缀长度应该为8,16或24,除非您熟悉RFC 2317并相应地安排了in-addr.arpa委派。请注意,如果未指定任何子网,则不会回答任何反向查询。

–auth-SOA = <串行> [,<hostmaster> [,<刷新> [,<重试> [,<期满>]]]]
指定与权威区域相关联的SOA记录中的字段。请注意,这是可选的,所有的值都设置为理智的默认值。
–auth仲服务器= <域> [,<域> [,<域> …]]
为dnsmasq具有权威性的区域指定任何辅助服务器。这些服务器必须配置为通过区域传输从dnsmasq获取区域数据,并回答与dnsmasq相同的权威区域的查询。
–auth等= <IP地址> [,<IP地址> [,<IP地址> …]]
指定允许对dnsmasq具有权威性的区域发起区域传输(AXFR)请求的辅助服务器的地址。如果没有给出这个选项,那么AXFR请求将被任何二级接受。
–conntrack
阅读与传入的DNS查询关联的Linux连接跟踪标记,并在用于回答这些查询的上游流量上设置相同的标记值。这允许由dnsmasq生成的流量与导致该流量的查询相关联,这对带宽记帐和防火墙很有用。Dnsmasq必须具有编译的conntrack支持,并且内核必须包含和配置conntrack支持。该选项不能与–query-port结合使用。
-f,–dhcp-range = [tag:<tag> [,tag:<tag>],] [set:<tag>,] <start-addr> [,<end-addr> | <mode>] [,<网络掩码> [,<广播>]] [,<租用时间>]
-f,–dhcp-range = [tag:<tag> [,tag:<tag>],] [set:<tag>,] <start-IPv6addr> [,<end-IPv6addr> |构造函数:<interface >] [,<mode>] [,<prefix-len>] [,<租赁时间>]

启用DHCP服务器。地址将从<start-addr>到<end-addr>范围以及dhcp-host 选项中给出的静态定义地址发出 如果给定租约时间,那么租约将在这段时间内给出。租约时间以秒或分钟(例如45米)或小时(例如1小时)或“无限”为单位。如果没有给出,则默认租约时间为一小时。最短租赁时间为两分钟。对于IPv6范围,租用时间可能“不赞成”; 这会将在DHCP租约或路由器通告中发送的首选生命周期设置为零,这会导致客户端将新连接的其他地址(如果可用)用作重新编号的前奏。

该选项可以重复使用不同的地址,以启用到多个网络的DHCP服务。对于直接连接的网络(即运行dnsmasq的机器具有接口的网络),网络掩码是可选的:dnsmasq将从接口配置中确定它。对于通过中继代理接收DHCP服务的网络,dnsmasq无法确定网络掩码本身,因此应该指定它,否则dnsmasq将根据网络地址的类(A,B或C)进行猜测。广播地址始终是可选的。总是允许在一个子网中拥有多个dhcp范围。

对于IPv6,参数略有不同:不是网络掩码和广播地址,而是有一个可选的前缀长度,它必须等于或大于本地接口上的前缀长度。如果未给定,则默认为64.与IPv4不同,前缀长度不会自动从接口配置派生。前缀长度的最小大小是64。

IPv6(仅)支持另一种类型的范围。在这里,起始地址和可选结束地址只包含网络部分(即:: 1),后面跟着 构造函数:<interface>。 这形成了一个模板,它根据分配给接口的地址来描述如何创建范围。例如

–dhcp范围= :: 1,:: 400,构造函数中:eth0

将在eth0上查找地址,然后创建从<network> :: 1到<network> :: 400的范围。如果接口分配了多个网络,则相应的范围将自动创建,然后不推荐使用,并最终再次移除,因为该地址已被弃用,然后被删除。接口名称可能有最终的“*”通配符。请注意,eth0上的任何地址都不会这样做:它不能是自动配置或隐私地址,或者不推荐使用。

如果dhcp范围仅用于无状态DHCP和/或SLAAC,则地址可以简单地为::

–dhcp范围= ::,构造函数中:eth0

可选 集:<tag> 设置标记此网络的字母数字标签,以便可以基于每个网络指定dhcp选项。当它以“tag:”作为前缀时,其含义就会从设置标签变为匹配。只能设置一个标签,但可以匹配多个标签。

可选的<mode>关键字可能是 静态的 ,它告诉dnsmasq为指定的网络启用DHCP,但不能动态分配IP地址:只有通过dhcp-host 或/ etc / ethers 提供静态地址 的主机才会被提供服务。一个地址全零的纯静态子网可以用作“全部捕获”地址,以便对提供了无状态DHCPv6的子网(即–dhcp-range = ::,static)上的所有信息请求数据包进行 应答

对于IPv4,<mode>可以是 代理, 在这种情况下,dnsmasq将在指定的子网上提供代理DHCP。(有关 详细信息,请参见 pxe-prompt 和 pxe-service。)

对于IPv6,模式可能是 ra-only,slaac,ra-name,ra-stateless,ra-advrouter,off-link的组合。

ra-only会 告诉dnsmasq仅在此子网上提供路由器公告,而不是DHCP。

slaac 告诉dnsmasq在该子网上提供路由器公告,并在路由器通告中设置A位,以便客户端使用SLAAC地址。当与DHCP范围或静态DHCP地址一起使用时,这会导致客户端同时拥有DHCP分配地址和SLAAC地址。

ra-stateless 通过设置O和A位发送路由器通告,并提供无状态的DHCP服务。客户端将使用SLAAC地址,并将DHCP用于其他配置信息。

ra-names 启用了一种模式,它将DNS名称提供给为IPv6执行SLAAC的双堆栈主机。Dnsmasq使用主机的IPv4租约来派生名称,网段和MAC地址,并假定主机也将在同一网段上使用SLAAC算法计算IPv6地址。该地址被ping,如果收到回复,则为该IPv6地址添加一条AAAA记录到DNS。请注意,这只会发生在直接连接的网络中,(而不是通过中继进行DHCP),并且如果主机使用隐私扩展,它将不起作用。 ra名称 可以与ra-stateless 和 slaac结合使用 

ra-advrouter 启用了一种模式,其中路由器地址而不是前缀(es)被包括在广告中。这在RFC-3775第7.2节中描述,并用于移动IPv6。在这种模式下,还包括间隔选项,如RFC-3775第7.3节所述。

off-link 指示dnsmasq在没有设置在链接(又名L)位的情况下通告前缀。

-G,–dhcp-host = [<hwaddr>] [,id:<client_id> | *] [,set:<tag>] [,<ipaddr>] [,<hostname>] [,<lease_time>] [,忽视]
指定DHCP服务器的每个主机参数。这允许具有特定硬件地址的机器始终分配相同的主机名,IP地址和租用时间。这样指定的主机名将覆盖机器上的DHCP客户端提供的任何主机名。也可以省略硬件地址并包含主机名,在这种情况下,IP地址和租约时间将适用于声明该名称的任何计算机。例如 –dhcp-host = 00:20:e0:3b:13:af,wap,infinite 告诉dnsmasq为机器提供硬件地址00:20:e0:3b:13:af名称为wap, DHCP租约。 –dhcp-host = lap,192.168.0.199 告诉dnsmasq总是分配机器圈IP地址192.168.0.199。

如此分配的地址不受限于-dhcp-range选项给出的范围,但它们必须与某个有效的dhcp范围处于同一个子网中。对于不需要动态分配地址池的子网,请在dhcp-range声明中使用“static”关键字。

允许使用客户端标识符(在IPv6-land中称为客户端DUID)而不是硬件地址通过以’id:’作为前缀标识主机。因此:– dhcp-host = id:01:02:03:04,…..表示 客户端标识符为01:02:03:04的主机。它也被允许指定客户端ID为文本,如下所示:– dhcp-host = id:clientidastext,…..

单个 dhcp-host 可以包含IPv4地址或IPv6地址,或者两者兼有。IPv6地址必须由方括号从而进行包围曝光: –dhcp主机=笔记本电脑,[1234:56] IPv6地址可以仅含有主机标识符部分: –dhcp主机=笔记本电脑,[:56] 其中在构建的dhcp范围内,它们充当通配符,插入适当的网络部分。请注意,在IPv6 DHCP中,硬件地址可能不可用,尽管它通常用于直接连接的客户端,或者使用支持RFC 6939的DHCP中继的客户端。

对于DHCPv4,特殊选项id:*表示“忽略任何客户端ID并仅使用MAC地址”。当客户端有时显示客户端ID而不是其他客户端时,这非常有用。

如果名称出现在/ etc / hosts中,则相关地址可以分配给DHCP租用,但前提是 指定名称的 –dhcp-host选项也存在。dhcp-host 选项中只能给出一个主机名 ,但通过使用CNAME可以使用别名。(请参阅 –cname )。

特殊关键字“ignore”告诉dnsmasq永远不会向机器提供DHCP租约。该机器可以通过硬件地址,客户端ID或主机名来指定,例如 –dhcp-host = 00:20:e0:3b:13:af,ignore 当网络上有另一台DHCP服务器时,一些机器使用。

set:<tag>结构设置标签,只要这个dhcp-host指令被使用。这可以用来为这个主机有选择地发送DHCP选项。可以在dhcp-host伪指令中设置多个标记(但不允许在其中允许使用“set:<tag>”的其他位置)。当主机匹配任何dhcp-host指令(或由/ etc / ethers暗示的指令)时,将设置特殊标记“已知”。这允许将dnsmasq配置为使用–dhcp-ignore = tag:!忽略来自未知机器的请求 。已知 如果主机仅匹配由于指定不同子网上的地址而无法使用的dhcp-host指令,则标记“已知-othernet“被设置。以太网地址(但不是客户端ID)可能有通配符字节,例如 –dhcp-host = 00:20:e0:3b:13:*,忽略会导致dnsmasq忽略一系列硬件地址。请注意,需要在命令行上转义或引用“*”,但不在配置文件中。

硬件地址通常与任何网络(ARP)类型匹配,但可以通过在ARP类型(以十六进制表示)和“ – ”之前将其限制为单个ARP类型。所以 –dhcp-host = 06-00:20:e0:3b:13:af ,因为令牌环的ARP地址类型是6,所以1.2.3.4将仅匹配令牌环硬件地址。

作为一种特殊情况,在DHCPv4中,可能包含多个硬件地址。例如:– dhcp-host = 11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.2 这允许一个IP地址与多个硬件地址关联,并给出dnsmasq权限当另一个人要求租约时,放弃DHCP租约到其中一个硬件地址。请注意,这是一件危险的事情,它只会在任何时候只有一个硬件地址处于活动状态并且dnsmasq无法执行此操作时才可靠运行。例如,为具有有线和无线接口的笔记本电脑分配稳定的IP地址非常有用。

–dhcp-hosts文件= <路径>
从指定文件读取DHCP主机信息。如果给出了一个目录,那么读取该目录中包含的所有文件。该文件包含每行一台主机的信息。一行的格式与–dhcp-host中的’=’右侧的文本相同。将DHCP主机信息存储在此文件中的优点是可以在不重新启动dnsmasq的情况下更改它:当dnsmasq收到SIGHUP时,将重新读取文件。
–dhcp-optsfile = <路径>
从指定文件读取DHCP选项信息。如果给出了一个目录,那么读取该目录中包含的所有文件。使用此选项的优点与–dhcp-hostsfile相同:当dnsmasq收到SIGHUP时,将重新读取dhcp-optsfile。请注意,可以 使用选项名称bootfile-name,server-ip-address和tftp-server 将信息编码为 –dhcp-boot标志作为DHCP选项。这允许这些被包含在dhcp-opts文件中。
–dhcp-hostsdir = <路径>
这相当于dhcp-hostsfile,除了以下内容。该路径必须是一个目录,而不是一个单独的文件。目录中的更改或新文件会自动读取,而不需要发送SIGHUP。如果一个文件在被dnsmasq读取后被删除或更改,那么它所包含的主机记录将一直保留到dnsmasq收到SIGHUP或重新启动; 即主机记录只能动态添加。
–dhcp-optsdir = <路径>
这相当于dhcp-optsfile,其差别在于–dhcp-hostsdir。
-Z, – 读取醚
有关DHCP服务器主机的信息,请阅读/ etc / ethers。/ etc / ethers的格式是一个硬件地址,后跟一个主机名或虚线四个IP地址。当通过dnsmasq读取时,这些行与 包含相同信息的–dhcp-host选项具有完全相同的效果 当dnsmasq收到SIGHUP时,会重新读取/ etc / ethers。IPv6地址不从/ etc / ethers读取。
-O,–dhcp-option = [tag:<tag>,[tag:<tag>,]] [encap:<opt>,] [vi-encap:<enterprise>,] [vendor:[<vendor-类>],] [<停用> |选项:<停用名> |选项6:<选择> |选项6:<停用名称>],[<值> [,<值>]]
为DHCP客户端指定不同或额外的选项。默认情况下,dnsmasq向DHCP客户端发送一些标准选项,网络掩码和广播地址设置为与运行dnsmasq的主机相同,DNS服务器和默认路由设置为运行dnsmasq的机器的地址。(等效规则适用于IPv6。)如果设置了域名选项,则发送该选项。此配置允许覆盖这些默认值或指定其他选项。要发送的选项可以以十进制数字或“选项:<选项名称>”的形式给出。选项编号在RFC2132和后续RFC中指定。通过运行“dnsmasq –help dhcp”可以发现dnsmasq已知的一组选项名称。例如,要将默认路由选项设置为192.168.4.4,请执行 –dhcp-option = 3,192.168.4。–dhcp-option = option:router,192.168.4.4 并将时间服务器地址设置为192.168.0.4,执行 –dhcp-option = 42,192.168.0.4 或 –dhcp-option = option:ntp-server,192.168 .0.4 特殊地址0.0.0.0表示“运行dnsmasq的机器的地址”。

允许的数据类型为逗号分隔的点分形式IPv4地址,[]包装的IPv6地址,十进制数字,冒号分隔的十六进制数字和文本字符串。如果给出了可选标签,那么只有当所有标签匹配时才会发送此选项。

对选项119的文本参数进行特殊处理,以符合RFC 3397.作为选项120的参数的文本或点四元IP地址按照RFC 3361进行处理。虚线四元IP地址,后跟斜杠,然后网络掩码大小按照RFC 3442中的描述进行编码。

IPv6选项使用option6: 关键字指定 ,后跟选项编号或选项名称。IPv6选项名称空间与IPv4选项名称空间不相交。选项中的IPv6地址必须用方括号括起来,例如。 –dhcp-option = option6:ntp-server,[1234 :: 56] 对于IPv6,[::]表示“运行dnsmasq的机器的全局地址”,而[fd00 ::]替换为ULA,if它存在,并且[fe80 ::]和链路本地地址。

注意:没有检查发送选项号码的正确类型的数据,很可能说服dnsmasq在不恰当地使用此标志的情况下生成非法的DHCP数据包。当该值是十进制数时,dnsmasq必须确定数据项的大小。它通过检查选项号和/或值来完成此操作,但可以通过附加单个字母标志来覆盖,如下所示:b =一个字节,s =两个字节,i =四个字节。这对封装的供应商类选项非常有用(见下文),其中dnsmasq无法从选项编号中确定数据大小。仅由时段和数字组成的选项数据将由dnsmasq解释为IP地址,并插入到选项中。要强制使用文字字符串,请使用引号。 –dhcp选项= 66, “1.2.3.4”

也可以使用–dhcp-option指定封装的供应商类选项(仅限IPv4):例如 –dhcp-option = vendor:PXEClient,1.0.0.0.0 发送封装的供应商类特定选项“mftp-address = 0.0.0.0“与供应商级别与”PXEClient“匹配的任何客户端。供应商级匹配是基于子字符串的(有关详细信息,请参阅–dhcp-vendorclass)。如果dnsmasq发送供应商级选项(编号60),则用于选择优先于客户端发送的封装选项。可以完全省略供应商类别; –dhcp-option = vendor:,1,0.0.0.0, 在这种情况下总是发送封装选项。

选项可以被封装(仅限IPv4)在其他选项中:例如 –dhcp-option = encap:175,190,iscsi-client0 将发送选项175,其中是选项190.如果给出多个选项被封装相同的选项编号,那么它们将被正确地组合成一个封装选项。encap:和vendor:都不能在同一个dhcp选项中设置。

封装选项的最后一种变体是RFC3925规定的“供应商 – 识别供应商选项”。这些标记如下所示:– dhcp-option = vi-encap: 2,10,text vi-encap:部分中的数字是用于标识此选项的IANA企业编号。IPv6中支持这种形式的封装。 
  地址0.0.0.0未在封装选项中专门处理。

–dhcp选项力= [标记:<标签>,[标签:<标签>,]] [ENCAP:<选择>,] [VI-ENCAP:<企业>,] [供应商:[<供应商的类>],] <选择>,[<值> [,<值>]]
这与–dhcp-option的工作方式完全相同, 只是该选项将始终发送,即使客户端没有在参数请求列表中要求它。有时需要这样做,例如,在向PXELinux发送选项时。
–dhcp-无覆盖
(仅限IPv4)禁用DHCP服务器名称和文件名字段作为额外选项空间的重用。如果可以的话,dnsmasq将引导服务器和文件名信息(从dhcp-boot)移出它们专用的字段到DHCP选项中。这为DHCP选项提供了额外的空间用于选项,但很少会混淆旧的或损坏的客户端。这个标志强制“简单和安全”的行为,以避免在这种情况下的问题。
–dhcp-relay = <本地地址>,<服务器地址> [,<接口]
配置dnsmasq做DHCP中继。本地地址是分配给运行dnsmasq的主机上的接口的地址。所有到达该接口的DHCP请求都将通过服务器地址中继到远程DHCP服务器。通过使用多个具有相同本地地址和不同服务器地址的dhcp-relay配置,可以从单个本地地址中继到多个远程服务器。服务器地址必须是IP文字地址,而不是域名。对于DHCPv6,服务器地址可能是ALL_SERVERS多播地址ff05 :: 1:3。在这种情况下,必须给出接口,而不是通配符,并且用于将多播引导到正确的接口以到达DHCP服务器。

对DHCP客户端的访问控制具有与DHCP服务器相同的规则,请参阅–interface,–except-interface等。在dhcp-relay配置中的可选接口名称具有不同的功能:它控制哪个接口DHCP答复从服务器将被接受。这适用于具有三个接口的配置:一个接口被中继,第二个接口连接DHCP服务器,第三个不可信网络(通常是更广泛的互联网)。它避免了通过第三个接口到达的恶意回复的可能性。

允许dnsmasq在一组接口上充当DHCP服务器,并从不相交的一组接口中继。请注意,尽管可以在同一接口上编写似乎充当服务器和中继的配置,但不支持:中继功能将优先。

支持DHCPv4和DHCPv6中继。无法将DHCPv4中继到DHCPv6服务器,反之亦然。

-U,–dhcp-vendorclass = set:<tag>,[enterprise:<IANA-enterprise number>,] <vendor-class>
从供应商级字符串映射到标签。大多数DHCP客户端提供“供应商类别”,这在某种意义上代表了主机类型。此选项将供应商类别映射到标签,以便DHCP选项可以选择性地交付给不同类别的主机。例如,dhcp-vendorclass = set:printers,Hewlett-Packard JetDirect 将允许仅为HP打印机设置选项,如下所示:– dhcp-option = tag:printers,3,192.168.4.4 vendor-class字符串与子字符串匹配由客户提供的供应商级,以允许模糊匹配。set:前缀是可选的,但允许一致性。

请注意,仅在IPv6中,供应商类名称间隔为IANA分配的企业编号。这与enterprise:keyword一起给出,并且指定只应搜索与指定编号匹配的供应商类。

-j,–dhcp-userclass = set:<tag>,<user-class>
从用户级字符串映射到标记(使用子字符串匹配,如供应商类)。大多数DHCP客户端提供可配置的“用户类”。此选项将用户类映射到标记,以便DHCP选项可以选择性地传递到不同类的主机。例如,可以使用它为类“accounts”中的主机设置不同的打印机服务器,而不是“engineering”类中的主机。
-4,–dhcp-mac = set:<tag>,<MAC地址>
从MAC地址映射到标记。MAC地址可能包含通配符。例如 –dhcp-mac = set:3com,01:34:23:*:*:* 将为其MAC地址与模式匹配的任何主机设置标记“3com”。
–dhcp-circuitid = set:<tag>,<circuit-id>,–dhcp-remoteid = set:<tag>,<remote-id>
从RFC3046中继代理选项映射到标记。这些数据可能由DHCP中继代理提供。circuit-id或remote-id通常以冒号分隔的十六进制给出,但也可以是简单的字符串。如果在电路或代理ID与中继代理提供的ID完全匹配,则设置标签。

dhcp-remoteid (但不是dhcp-circuitid)在IPv6中受支持。

–dhcp-subscrid =组:<标签>,<订户-ID>
(IPv4和IPv6)将RFC3993用户标识中继代理选项映射到标记。
–dhcp-proxy [= <ip addr>] ……
(仅限IPv4)正常的DHCP中继代理仅用于将DHCP交互的初始部分转发给DHCP服务器。一旦客户端被配置,它就直接与服务器通信。如果中继剂添加额外的信息到DHCP报文,诸如由用于这是不希望DHCP-circuitid 和 DHCP-remoteid。 完整的中继实现可以使用RFC 5107的serverid-override选项来强制DHCP服务器使用中继作为完整代理,所有数据包都通过它。此标志为不支持RFC 5107的中继提供了另一种做同样事情的方法。单独给出,它将通过中继操纵所有交互的服务器标识。如果给出了IP地址列表,则只有通过这些地址上的中继进行的交互才会受到影响。
–dhcp-match = set:<tag>,<option number> | option:<option name> | vi-encap:<enterprise> [,<value>]
如果没有值,请在客户端发送给定号码或名称的DHCP选项时设置标签。给定值时,只有在发送选项并匹配该值时才设置标签。值的形式可以是“01:ff:*:02”,在这种情况下,值必须匹配(除了通配符外),但发送的选项可能在值的末尾有不匹配的数据。该值也可以与dhcp-option 中的形式相同, 在这种情况下,发送的选项被视为数组,并且一个元素必须匹配,所以

–dhcp匹配=组:EFI-IA32,选项:客户拱,6

如果数字6出现在客户端在选项93中发送的体系结构列表中,将设置标签“efi-ia32”(详情请参阅RFC 4578)。如果值是字符串,则使用子字符串匹配。

vi-encap的特殊形式:<企业编号>与指定企业的供应商识别供应商类别匹配。请参阅RFC 3925了解这些罕见和有趣的野兽的更多细节。

–tag-IF =组:<标签> [,设置:<标签> [,标记:<标签> [,标记:<标签>]]]
对标签执行布尔运算。如果设置了所有以<tag>标签出现的标签,(或者使用tag:<<tag>时取消设置),则设置显示为<tag>的任何标签:如果没有标签:<tag>出现设置:<标签>标签无条件设置。任何数量的集合:和标签:表单可以以任何顺序出现。Tag-if行是按顺序执行的,所以如果tag <tag>中的tag是另一个tag设置的tag,if设置 tag 的行必须在测试它的行之前。
-J,–dhcp-ignore = tag:<tag> [,tag:<tag>]
当所有给定标签出现在标签集中时,忽略主机并且不为其分配DHCP租约。
–dhcp-忽略-名称[=标记:<标签> [,标记:<标签>]]
当所有给定的标签出现在标签集中时,忽略主机提供的任何主机名。请注意,与dhcp-ignore不同,允许不提供标记,在这种情况下,始终忽略DHCP客户端提供的主机名,并且仅使用dnsmasq中的dhcp-host配置将DNS主机添加到DNS中,并且/ etc的内容/ hosts和/ etc / ethers。
–dhcp-生成-名称=标记:<标签> [,标记:<标签>]
(仅适用于IPv4)使用以十六进制表示的MAC地址,用破折号分隔,为没有其他DHCP客户端的DHCP客户端生成一个名称。请注意,如果主机提供名称,则将优先使用该名称,除非设置了 –dhcp-ignore-names 。
–dhcp广播[=标记:<标签> [,标记:<标签>]]
(仅限IPv4)当标签集中出现所有给定标签时,请始终使用广播与未配置主机进行通信。允许不提供标签,在这种情况下,这是无条件的。大多数需要广播回复的DHCP客户端在其请求中设置了一个标志,以便自动发生,一些旧的BOOTP客户端不会。
-M,–dhcp-boot = [tag:<tag>,] <filename>,[<servername> [,<服务器地址> | <tftp_servername>]]
(仅限IPv4)设置DHCP服务器返回的BOOTP选项。服务器名称和地址是可选的:如果未提供,名称保留为空,地址设置为运行dnsmasq的机器的地址。如果dnsmasq提供TFTP服务(请参阅 –enable-tftp),那么只需要文件名即可启用网络引导。如果给出了可选标签,则它们必须匹配才能发送此配置。TFTP服务器地址可以作为在/ etc / hosts中查找的域名给出,而不是IP地址。该名称可以在/ etc / hosts中与多个IP地址相关联,这些IP地址是循环使用的。该工具可用于在一组服务器之间平衡tftp负载。
–dhcp顺序-IP
Dnsmasq旨在使用客户端MAC地址的散列来为DHCP客户端选择IP地址。这通常允许客户端的地址长期保持稳定,即使客户端有时允许其DHCP租约过期。在这种默认模式下,IP地址在整个可用地址范围内被伪随机分配。在某些情况下(通常是服务器部署),从最低可用地址开始顺序分配IP地址更为方便,并且设置此标志将启用此模式。请注意,在顺序模式下,允许租约到期的客户端更有可能移动IP地址; 出于这个原因,它不应该被普遍使用。
–pxe-service = [tag:<tag>,] <CSA>,<menu text> [,<basename> | <bootservicetype>] [,<server address> | <server_name>]
大多数PXE引导ROM的使用只是允许PXE系统获取IP地址,然后下载由dhcp-boot指定的文件 并执行它。但是,如果受适当的DHCP服务器支持,PXE系统可以实现更复杂的功能。

这指定了一个可能出现在PXE启动菜单中的启动选项。<CSA>是客户端系统类型,只有正确类型的服务才会出现在菜单中。已知的类型是x86PC,PC98,IA64_EFI,Alpha,Arc_x86,Intel_Lean_Client,IA32_EFI,X86-64_EFI,Xscale_EFI,BC_EFI,ARM32_EFI和ARM64_EFI; 一个整数可以用于其他类型。菜单文本后面的参数可能是文件名,在这种情况下,dnsmasq充当引导服务器,并指示PXE客户端通过TFTP从本身下载文件( enable-tftp 必须为此设置)或其他TFTP服务器(如果给出了最终的服务器地址/名称)。请注意,“层”后缀(通常为“.0”)由PXE提供,不需要添加到基本名称。或者,基本名称可以是文件名,并带有后缀,在这种情况下,不会添加层后缀。如果给出了整数引导服务类型而非基本名称,则PXE客户端将在网络上搜索适合该类型的引导服务。该搜索可以通过广播完成,或者如果其IP地址/名称被提供,则直接到服务器。如果未提供引导服务类型或文件名(或指定了引导服务类型0),则菜单条目将中止网络引导过程并继续从本地媒体引导。服务器地址可以作为在/ etc / hosts中查找的域名给出。

–pxe提示符= [标记:<标签>,<提示> [,<超时>]
设置此提供一个提示,以便在PXE引导后显示。如果超时时间已过,那么在没有键盘输入的情况下超时已过,第一个可用的菜单选项将自动执行。如果超时为零,则第一个可用菜单项将立即执行。如果 pxe-prompt 被忽略,如果菜单中有多个项目,系统将等待用户输入,但如果只有一个,则立即启动。有关 菜单项的详细信息,请参阅 pxe-service

Dnsmasq支持PXE“proxy-DHCP”,在这种情况下,网络上的另一台DHCP服务器负责分配IP地址,而dnsmasq只是提供pxe-prompt 和 pxe-service中给出的信息 以允许网络启动。此模式 在dhcp-range中使用代理关键字 启用 

-X,–dhcp-lease-max = <number>
将dnsmasq限制为指定的最大DHCP租约数。默认值为1000.此限制旨在防止创建数千个租约并在dnsmasq进程中使用大量内存的主机发生DoS攻击。
-K,–dhcp权威
当dnsmasq绝对是网络上唯一的DHCP服务器时应该设置。对于DHCPv4,它会改变严格的RFC合规性行为,以便不会忽略来自未知主机的未知租赁的DHCP请求。这使得新主机在任何情况下都可以获得租约而不会出现繁琐的超时。它还允许dnsmasq在没有每个客户端需要重新获得租约的情况下重建其租赁数据库,如果数据库丢失的话。对于DHCPv6,它将响应中的优先级设置为255(最大值)而不是0(最小值)。
–dhcp-alternate-port [= <服务器端口> [,<客户端端口>]]
(仅限IPv4)从默认值更改用于DHCP的端口。如果单独给出此选项而没有参数,则将用于DHCP的端口从67和68更改为1067和1068.如果给出单个参数,则将该端口号用于服务器,端口号加上用于客户。最后,两个端口号允许任意指定DHCP的服务器和客户端端口。
-3,–bootp-dynamic [= <network-id> [,<network-id>]]
(仅限IPv4)为BOOTP客户端启用IP地址的动态分配。请谨慎使用,因为分配给BOOTP客户端的每个地址都永久租用,因此永久不可供其他主机重新使用。如果没有标签给出,则无条件启用动态分配。带标签,只有标签全部设置。它可以用不同的标签集重复。
-5, – 不 – 平
(仅限IPv4)默认情况下,DHCP服务器会在将其分配给主机之前尝试确保地址未被使用。它通过向有问题的地址发送一个ICMP回应请求(又名“ping”)来完成此操作。如果它得到答复,那么地址必须已经被使用,并且另一个被尝试。此标志禁用此检查。谨慎使用。
–log-DHCP
DHCP的额外日志记录:记录发送给DHCP客户端的所有选项以及用于确定它们的标签。
–quiet-dhcp,–quiet-dhcp6,–quiet-ra
禁止记录这些协议的日常操作。错误和问题仍将被记录。–quiet-dhcp和quiet-dhcp6被–log-dhcp覆盖。
-l,–dhcp-leasefile = <路径>
使用指定的文件来存储DHCP租赁信息。
–dhcp-DUID = <企业-ID>,<UID>
(仅限IPv6)指定DHCPv6服务器将使用的服务器持久性UID。这个选项通常不需要,因为当第一次需要时,dnsmasq会自动创建一个DUID。当给定时,这个选项为dnsmasq提供创建DUID-EN类型DUID所需的数据。请注意,一旦设置,DUID将存储在租赁数据库中,因此要在DUID-EN和自动创建的DUID之间进行更改(反之亦然),必须重新初始化租赁数据库。企业ID由IANA分配,uid是特定设备特有的十六进制字节串。
-6 –dhcp-script = <路径>
无论何时创建新的DHCP租约或销毁旧的租约或完成TFTP文件传输,都会运行此选项指定的可执行文件。<path>必须是绝对路径名,不会发生PATH搜索。过程的参数是“add”,“old”或“del”,主机的MAC地址(或IPv6的DUID),IP地址和主机名(如果已知)。“add”意味着已经创建了一个租约,“del”意味着它已经被销毁,“old”是在dnsmasq启动时的现有租赁通知或者现有租赁的MAC地址或主机名的变更(同样,租约长度或expiry和client-id,如果设置了leasefile-ro)。如果MAC地址来自以太网以外的其他网络类型,则它将具有前缀的网络类型,例如令牌环的“06-01:23:45:67:89:ab”。

环境从dnsmasq的调用者继承,并添加了一些或所有以下变量

对于IPv4和IPv6:

DNSMASQ_DOMAIN如果主机的完全限定域名已知,则将其设置为域部分。(请注意,作为参数传递给脚本的主机名永远不会被完全限定。)

如果客户端提供主机名称,则为DNSMASQ_SUPPLIED_HOSTNAME

如果客户端提供用户类,则DNSMASQ_USER_CLASS0..DNSMASQ_USER_CLASSn

如果使用HAVE_BROKEN_RTC编译dnsmasq,则租约的长度(以秒为单位)存储在DNSMASQ_LEASE_LENGTH中,否则租约到期时间将存储在DNSMASQ_LEASE_EXPIRES中。直到租约到期的秒数始终存储在DNSMASQ_TIME_REMAINING中。

如果一个租约曾经有一个主机名被删除,那么会产生一个“旧”事件,这个新的状态是租约的新状态,也就是没有名称,而前一个名称是在环境变量DNSMASQ_OLD_HOSTNAME中提供的。

DNSMASQ_INTERFACE存储请求到达的接口的名称; 当dnsmasq重新启动时,这不是针对“旧”操作设置的。

如果客户端使用DHCP中继与dnsmasq联系并且中继的IP地址已知,则设置DNSMASQ_RELAY_ADDRESS。

DNSMASQ_TAGS包含在DHCP事务期间设置的所有标记,用空格分隔。

如果–log-dhcp有效,则设置DNSMASQ_LOG_DHCP 

仅适用于IPv4:

DNSMASQ_CLIENT_ID(如果主机提供了客户端ID)。

DNSMASQ_CIRCUIT_ID,DNSMASQ_SUBSCRIBER_ID,DNSMASQ_REMOTE_ID(如果DHCP中继代理添加了这些选项中的任何一个)。 
  如果客户端提供供应商类别DNSMASQ_VENDOR_CLASS。

DNSMASQ_REQUESTED_OPTIONS一个字符串,其中包含参数请求列表选项中的十进制值,逗号分隔,如果参数请求列表选项由客户端提供。

仅限IPv6:

如果客户端提供包含该类的IANA企业ID的供应商类别DNSMASQ_VENDOR_CLASS_ID,并为数据提供DNSMASQ_VENDOR_CLASS0..DNSMASQ_VENDOR_CLASSn。

包含服务器DUID的DNSMASQ_SERVER_DUID:每次调用脚本时都是一样的。

包含租约的IAID的DNSMASQ_IAID。如果租约是临时分配,则以“T”为前缀。

包含客户端MAC地址的DNSMASQ_MAC(如果知道)。

请注意,当主机恢复现有租约时,所提供的主机名,供应商类和用户类数据仅用于“添加”操作或“旧”操作,因为这些数据不保存在dnsmasq的租赁数据库中。

除stdin(打开/ dev / null)和stdout和stderr之外,所有文件描述符都是关闭的,stdin和stderr捕获由dnsmasq记录的输出。(在调试模式下,stdio,stdout和stderr文件保留为从dnsmasq的调用者继承的文件)。

该脚本不会被同时调用:至多有一个脚本实例正在运行(dnsmasq会在运行下一个脚本之前等待脚本实例退出)。对租赁数据库所做的更改需要调用脚本,以便排队等待正在运行的实例的退出。如果此排队允许在脚本可以运行之前对单个租约发生多个状态更改,则会丢弃较早的状态,并在脚本最终运行时反映该租约的当前状态。

在dnsmasq启动时,将从租赁文件中读取所有现有租赁时调用该脚本。过期租约将被称为“del”,其他与“old”被称为。当dnsmasq接收到一个HUP信号时,脚本将被调用用于具有“旧”事件的现有租约。

还有四个进一步的动作可能会作为脚本的第一个参数,“init”,“arp-add”,“arp-del”和“tftp”出现。将来可能会增加更多,因此应该编写脚本以忽略未知操作。“init”在以下文件中进行了描述 –leasefile-ro 当TFTP文件传输完成时,将调用“tftp”操作:参数是文件大小(以字节为单位),文件发送到的地址以及文件的完整路径名文件。 
  只有使用–script-arp启用时,才会调用“arp-add”和“arp-del”操作。 它们以MAC地址和IP地址作为参数提供。“arp-add”表示ARP或邻居表中新条目的到达,“arp-del”

–dhcp-luascript = <路径>
指定一个用Lua编写的脚本,当租约被创建,销毁或更改时运行。要使用此选项,必须使用正确的支持编译dnsmasq。当dnsmasq启动时,Lua解释器被初始化一次,以便全局变量在租赁事件之间持续存在。Lua代码必须定义一个 租约 函数,并且可以 在dnsmasq启动和终止时提供 被调用的init 和 shutdown函数,而不带参数。它也可能提供一个 tftp 功能。

该 租赁 功能接收的详细信息 –dhcp脚本。 它有两个参数,首先是动作,它是一个包含“add”,“old”或“del”的字符串,其次是一个标签值对表。标签大部分对应于上面详细介绍的环境变量,例如标签“domain”与环境变量DNSMASQ_DOMAIN保持相同的数据。有一些额外的标签可以将数据作为参数提供给 –dhcp-script。 这些是 IPv4的mac_address,ip_address 和 hostname,以及 IPv6的client_duid,ip_address 和 hostname

该 TFTP 函数被调用以同样的方式为租赁功能,并表所拥有的标签 的destination_address, FILE_NAME 和 FILE_SIZE。

该 ARP 和 ARP岁 的时候启用功能仅称为 –script-ARP 和具有保持标签的表 MAC_ADDRESS 和 CLIENT_ADDRESS。

–dhcp-scriptuser
指定要运行租赁更改脚本或Lua脚本的用户。默认为root,但可以使用此标志更改为其他用户。
–script-ARP
启用dhcp-script和dhcp-luascript中的“arp”和“arp-old”功能。
-9,–leasefile-ro
完全禁止使用租赁数据库文件。该文件不会被创建,读取或写入。更改租赁变更脚本(如果提供了租用变更脚本)的调用方式,以便租赁数据库可以由脚本在外部存储中维护。除了在–dhcp-script中给出的调用之外 ,在dnsmasq启动时仅调用一次租约更改脚本,并使用单个参数“init”。当像这样调用时,脚本应该使用dnsmasq leasefile格式将租约数据库的已保存状态写入标准输出并以零退出代码退出。设置此选项还会强制更改客户端ID和租约长度和到期时间,以调用leasechange脚本。
–bridge接口= <接口>,<别名> [,<别名>]
将DHCP(v4和v6)请求和IPv6路由器请求数据包视为抵达任何<alias>接口,就好像它们已到达<interface>一样。该选项允许dnsmasq通过无地址和无桥接的以太网接口(例如在OpenStack计算主机上提供DHCP和RA服务,其中每个这样的接口是到VM的TAP接口),或者在BSD平台上的“旧式桥接”。每个<别名>中都可以使用尾随的“*”通配符。

由于–bridge-interface = int1,alias1,alias2完全等同于–bridge-interface = int1,alias1 –bridge-interface = 1,所以允许使用多个桥接接口选项添加多个别名。 INT1,别名2

-s,–domain = <域> [,<地址范围> [,本地]]
指定DHCP服务器的DNS域。可以无条件地(无IP范围)或有限的IP范围给予域名。这有两个影响; 首先它使DHCP服务器将域返回给请求它的任何主机,其次它设置DHCP合法主机要求声明的合法域。其目的是限制主机名,以便局域网上的不可信主机不能通过dhcp通告其名称,例如“microsoft.com”,并捕获不适合它的流量。如果未指定域名后缀,则任何具有域名部分(即有句点)的DHCP主机名将被禁止并记录。如果指定了后缀,则允许使用域部分的主机名,前提是域部分与后缀匹配。此外,当设置了后缀时,没有域部分的主机名将作为可选域部分添加后缀。例如在我的网络上,我可以设置 –domain = thekelleys.org.uk 并拥有一台DHCP主机名为“laptop”的机器。该机器的IP地址可以从 dnsmasq 以“laptop”和“laptop.thekelleys.org.uk”获得。如果域以“#”形式给出,那么该域将从/etc/resolv.conf(或等同的)中的第一个“搜索”指令读取。

地址范围可以是<IP地址>,<IP地址>或<IP地址> / <网络掩码>或只是一个<IP地址>的格式。请参阅 –dhcp-fqdn ,它可以用域来改变dnsmasq的行为。

如果地址范围以ip-address / network-size给出,则可以提供附加标志“本地”,其具有为正向和反向DNS查询添加本地声明的效果。例如。 –domain = thekelleys.org.uk,192.168.0.0 / 24,本地 等同于 –domain = thekelleys.org.uk,192.168.0.0 / 24 –local = / thekelleys.org.uk / –local = /0.168.192.in-addr.arpa/网络大小必须是8,16或24,因为这是合法的。

–dhcp-FQDN
在默认模式下,dnsmasq将DHCP客户端的非限定名称插入到DNS中。因此,名称必须是唯一的,即使两个具有相同名称的客户端位于不同的域中。如果出现与已有客户端名称相同的第二个DHCP客户端,则名称将被传输到新客户端。如果 设置了–dhcp-fqdn,则此行为会发生变化:不合格名称不再放入DNS中,而只放入限定名称。使用相同的名称既可以保留一个名为DHCP客户端,前提是该域部分是不同的(即完全合格的名称不同)。为了确保所有的名字有一个域的一部分,必须有至少 –domain 没有地址在 设置–dhcp-fqdn时指定 
–dhcp客户端更新
通常情况下,在给出DHCP租约时,dnsmasq会在FQDN选项中设置标志,以通知客户端不要尝试使用其名称和IP地址进行DDNS更新。这是因为name-IP对会自动添加到dnsmasq的DNS视图中。此标志可以抑制该行为,例如,这对于允许Windows客户端更新Active Directory服务器很有用。详情请参阅RFC 4702。
–enable-RA
启用dnsmasq的IPv6路由器广告功能。与DHCPv4相同,DHCPv6不处理完整的网络配置。路由器发现和自动地址创建的(可能的)前缀发现由不同的协议处理。当使用DHCP时,只需要其中的一部分,而且dnsmasq可以使用现有的DHCP配置来提供大部分数据。启用RA后,dnsmasq将为每个dhcp范围公布一个前缀,默认路由器将作为运行dnsmasq的计算机上的相关链路本地地址。默认情况下,“管理地址”位置1,“使用SLAAC”位复位。对于使用–dhcp-range中描述的模式关键字的单个子网可以更改 此项。 RFC6106 DNS参数包含在广告中。默认情况下,运行dnsmasq的机器的相关链接本地地址作为递归DNS服务器发送。如果提供,DHCPv6选项dns-server和域搜索用于DNS服务器(RDNSS)和域搜索列表(DNSSL)。
–ra-param = <interface>,[mtu:<integer> | <interface> | off,] [high,| low,] <ra-interval> [,<router lifetime>]
为通过接口发送的路由器通告设置非默认值。路由器的优先级字段可能会从默认介质中更改,例如 –rararam = eth0,high。 路由器公告之间的时间间隔可以用–ra-param = eth0,60来设置(以秒为单位)  路由的生命周期可能会改变或设置为零,这允许路由器通过前缀进行通告,但不通过自己通过路由。 –ra-parm = eth0,0,0 (间隔为零的值表示默认值。)所有四个参数可以一次设置。 –ra-PARAM = eth0的,MTU:1280,低,60,1200

界面字段可以包括通配符。

mtu:参数可以是任意的接口名称,在这种情况下使用该接口的MTU值。这对于(例如)在路由器的其他接口上广告WAN接口的MTU很有用。

–dhcp应答延迟= [标记:<标签>,<整数>
延迟发送DHCPOFFER和proxydhcp至少应答指定的秒数。这可以用作PXE启动固件中的错误的解决方法,它在接收即时应答时无法正常工作。该选项考虑已经花费在等待中的时间(例如,执行ping检查)(如果有的话)。
–enable-TFTP [= <接口> [,<接口>]]
启用TFTP服务器功能。这是故意限于网络引导客户端所需的。只允许阅读; 支持tsize和blksize扩展(仅在八位字节模式下支持tsize)。没有参数,TFTP服务就提供给与DHCP服务相同的一组接口。如果提供接口列表,它定义哪些接口接收TFTP服务。
–tftp根= <目录> [,<接口>]
查找要使用相对于给定目录的TFTP进行传输的文件。设置此项时,包含“..”的TFTP路径将被拒绝,以阻止客户端超出指定的根目录。绝对路径(以/开头)是允许的,但它们必须位于tftp-root中。如果给出可选的接口参数,则该目录仅用于通过该接口的TFTP请求。
–tftp-没有失败
如果指定的tftp根目录不可访问,则不要中止启动。
–tftp唯一根[= IP | MAC]
将TFTP客户端的IP地址或硬件地址添加为TFTP根的末尾的路径组件。只有在设置了tftp-root并且该目录存在的情况下才有效。默认为添加IP地址(采用标准的点划格式)。例如,如果tftp-root是“/ tftp”,并且客户端1.2.3.4请求文件“myfile”,那么如果/tftp/1.2.3.4存在,或者/ tftp / tftp文件存在,则有效路径将为“/tftp/1.2.3.4/myfile” myfile,否则。当指定“= mac”时,它将附加MAC地址,使用用破折号分隔的小写零填充数字,例如:01-02-03-04-aa-bb请注意,解析MAC地址仅在客户端处于本地网络或从我们获得的DHCP租约。
–tftp安全
启用TFTP安全模式:如果没有此项,则可以通过TFTP使用正常unix访问控制规则下的dnsmasq进程可读的任何文件。如果给出–tftp-secure标志,则只有运行dnsmasq进程的用户拥有的文件才可访问。如果dnsmasq以root身份运行,则适用不同的规则:–tftp-secure不起作用,但只有具有世界可读位集的文件才可访问。不建议在启用了TFTP的情况下以根用户身份运行dnsmasq,并且当然不是没有指定–tftp-root。这样做可以将服务器上的任何世界可读文件公开给网络上的任何主机。
–tftp小写
将TFTP请求中的文件名转换为全部小写。这对于来自Windows机器的请求非常有用,它们具有不区分大小写的文件系统,并且倾向于在文件名中快速播放。请注意,dnsmasq的tftp服务器始终将文件名中的“\”转换为“/”。
–tftp-MAX = <连接>
设置允许的最大并发TFTP连接数。默认值为50.当服务大量的TFTP连接时,可能会遇到每进程文件描述符限制。Dnsmasq每个并发TFTP连接需要一个文件描述符,每个唯一文件需要一个文件描述符(以及其他一些文件描述符)。因此,向n个客户端同时提供相同的文件将使用对n + 10个文件描述符的要求,同时向n个客户端提供不同的文件需要大约(2 * n)+10个描述符。如果 给出–tftp-port-range ,可能会影响并发连接的数量。
–tftp-mtu = <mtu size>
在协商TFTP块大小时,使用大小作为介入网络支持的MTU的上限,覆盖本地接口的MTU设置(如果较大)。
–tftp-NO-块大小
停止TFTP服务器与客户端协商“块大小”选项。一些有问题的客户请求这个选项,但是当它被授予时会表现得很差。
–tftp端口范围= <启动>,<END>
TFTP服务器侦听已知端口(69)上的连接启动,但它也为每个连接使用动态分配的端口。通常这些由操作系统分配,但是此选项指定TFTP传输使用的一系列端口。当TFTP必须穿越防火墙时,这可能很有用。除非dnsmasq以root身份运行,否则范围的开始不能低于1025。并发TFTP连接的数量受端口范围大小的限制。
-C,–conf-file = <file>
指定一个不同的配置文件。配置文件中也允许配置文件选项,以包含多个配置文件。文件名“ – ”会导致dnsmasq从标准输入读取配置。
-7,–conf-dir = <目录> [,<file-extension> ……],
读取给定目录中的所有文件作为配置文件。如果给出扩展名,则跳过以这些扩展名结尾的任何文件。任何名字以〜结尾的文件。或者以#开头和结尾总是被跳过。如果扩展名以*开头,则仅加载具有该扩展名的文件。因此,– conf-dir = / path / to / dir,*。conf 将加载后缀为.conf的所有文件放在/ path / to / dir中。该标志可以在命令行或配置文件中给出。如果在命令行上给它,一定要转义*字符。
–servers文件= <文件>
–conf文件的 特殊情况 在两个方面有所不同。首先,在配置文件中只允许使用–server和–rev-server。其次,当dnsmasq收到SIGHUP时,文件被重新读取并且其中的配置被更新。

 

配置文件

在启动时, 如果它存在,dnsmasq会读取 /etc/dnsmasq.conf(在FreeBSD上,该文件是 /usr/local/etc/dnsmasq.conf )(但请参阅 -C 和 -7 选项。)此文件的格式由每行一个选项组成,与在选项部分,但没有领先的“ – ”。以#开头的行是注释并被忽略。对于只能指定一次的选项,配置文件将覆盖命令行。在配置文件中允许引用:在引号之间,:,。和#的特殊含义被删除,并允许使用以下转义符:\\ \“\ t \ e \ b \ r和\ n。后者对应于tab,escape,backspace,return和newline。  

笔记

当它收到SIGHUP时, dnsmasq 清除它的缓存,然后重新加载 / etc / hosts 和 / etc / ethers 以及由–dhcp-hostsfile,–dhcp-hostsdir,–dhcp-optsfile,–dhcp -optsdir,–addn-hosts或–hostsdir。为所有现有DHCP租约调用dhcp租约更改脚本。如果 设置了–no-poll,SIGHUP也会重新读取 /etc/resolv.conf。 SIGHUP不会重新读取配置文件。

当它收到SIGUSR1时, dnsmasq 将统计信息写入系统日志。它写入缓存大小,必须在缓存过期之前从缓存中删除的名称数量,以便为新名称腾出空间以及已插入缓存中的名称总数。还给出了缓存命中和未命中的数量以及回答的权威查询的数量。对于每个上游服务器,它会给出发送的查询数量以及导致错误的数量。在 –no-daemon 模式或启用完整日志记录(-q)时,将创建缓存内容的完整转储。

高速缓存统计信息在DNS中也可用作对域绑定类CHAOS查询和TXT类型查询的答案。域名是cachesize.bind,insertions.bind,evictions.bind,misses.bind,hits.bind,auth.bind和servers.bind。使用dig 实用程序查询这个命令的示例命令 

挖+短混乱txt cachesize.bind

当它收到SIGUSR2并直接登录到文件(请参阅 –log-facility ) dnsmasq 将关闭并重新打开日志文件。请注意,在此操作期间,dnsmasq将不会以root身份运行。当它首次创建日志文件时,dnsmasq会将该文件的所有权更改为非root用户,它将作为。在发送SIGUSR2之前,应将Logrotate配置为创建一个新的日志文件,其所有权与现有日志文件匹配。如果正在进行TCP DNS查询,旧的日志文件将在处理TCP查询的子进程中保持打开状态,并且可能会继续写入。有150秒的限制,在此之后,所有现有的TCP进程都将过期:因此,为刚刚旋转的日志文件配置日志文件压缩并不明智。使用logrotate,所需的选项是 create 和delaycompress。


 

Dnsmasq是一个DNS查询转发器:它不能递归地回应从根服务器开始的任意查询,但将这样的查询转发到通常由ISP提供的完全递归上游DNS服务器。默认情况下,dnsmasq读取 /etc/resolv.conf 来发现它应该使用的上游名称服务器的IP地址,因为信息通常存储在那里。除非使用–no-poll , 否则 dnsmasq将 检查/etc/resolv.conf (或等效如果使用 –resolv-file )的修改时间, 并在其更改时重新读取它。这允许DNS服务器由PPP或DHCP动态设置,因为这两个协议都提供了这些信息。缺少 /etc/resolv.conf 不是一个错误,因为它可能没有在PPP连接存在之前创建。Dnsmasq只需在 /etc/resolv.conf文件 中随时创建。Dnsmasq可以被告知解析多个resolv.conf文件。这对于可以使用PPP和DHCP的笔记本电脑很有用:dnsmasq可以设置为轮询 /etc/ppp/resolv.conf 和 /etc/dhcpc/resolv.conf ,并使用最后更改的内容,给DNS服务器之间自动切换。

上游服务器也可以在命令行或配置文件中指定。这些服务器规范可以选择一个域名,告诉dnsmasq只使用该服务器在该特定域中查找名称。

为了将dnsmasq配置为运行它的主机的缓存,请在/etc/resolv.conf中加上“nameserver 127.0.0.1” 以强制本地进程向dnsmasq发送查询。然后,使用–server 选项将上游服务器直接指定为dnsmasq, 或者将其地址保存在另一个文件中,例如 /etc/resolv.dnsmasq, 并使用-r /etc/resolv.dnsmasq 选项运行dnsmasq 第二种技术允许通过PPP或DHCP动态更新服务器地址。

/ etc / hosts中的地址会在上游DNS中为相同名称“映射”不同地址,因此/ etc / hosts中的“mycompany.com 1.2.3.4”将确保对“mycompany.com”的查询始终返回1.2.3.4即使上游DNS中的查询会返回不同的地址。有一个例外:如果上游DNS包含一个指向阴影名称的CNAME,则通过dnsmasq查找CNAME将导致与CNAME的目标相关联的未被遮蔽的地址。要解决这个问题,请将CNAME添加到/ etc / hosts,以便CNAME也被映射。

标记系统的工作原理如下:对于每个DHCP请求,dnsmasq从活动配置行中收集一组有效标记,其中包括set <tag>,其中一个来自 用于分配地址的 dhcp-range,一个来自任何匹配的 dhcp-主机 (如果dhcp-host匹配,则为“known”或“known-othernet”)为BOOTP请求设置标签“bootp”,同时设置名称为请求到达的接口名称的标签。

任何包含一个或多个tag:<tag>结构的配置行只有在所有标签在上面派生的集合中匹配时才有效。通常这是dhcp选项。 具有标签的dhcp-option将优先于未标记的 dhcp选项使用, 前提是_all_标签匹配上述收集的集合中的某处。前缀’!’ 在标签上意味着’不’这样–dhcp-option = tag:!purple,3,1.2.3.4当标签purple不在有效标签集合中时发送选项。(如果在命令行而不是配置文件中使用它,请确保escape!,这是一个shell元字符)

在选择dhcp-options时,dhcp-range中的标记是相对于其他标记的第二个类,以便轻松覆盖各个主机的选项,因此 dhcp-range = set:interface1,…… dhcp-host = set:myhost,….. dhcp-option = tag:interface1,选项:nis-domain,domain1 dhcp-option = tag:myhost,选项:nis-domain,domain2 将NIS域设置为域1该范围,但将其覆盖到特定主机的domain2。

请注意,对于 dhcp范围 ,标记:<tag>和set:<tag>都是允许的,以便根据(例如)dhcp-host选择正在使用的范围,并根据所选范围来影响发送的选项。

这个系统是从一个较早的,更有限的系统发展而来的,并且为了向后兼容,可以使用“net:”代替“tag:”,并且“set:”可以省略。(除了在 dhcp-host中, 可以使用“net:”而不是“set:”。)出于同样的原因,可以使用’#’而不是’!’ 表示NOT。

dnsmasq中的DHCP服务器也将充当BOOTP服务器,前提是为客户端指定了MAC地址和IP地址(使用 dhcp-host 配置或在 / etc / ethers中) ,并且存在 dhcp范围 配置选项以激活特定网络上的DHCP服务器。(设置–bootp-dynamic不需要静态地址映射。)BOOTP请求中的filename参数与标签“bootp”一样用作标记,允许对返回到不同类主机的选项进行一些控制。

 

授权配置

配置dnsmasq充当授权DNS服务器很复杂,因为它涉及配置外部DNS服务器以提供委派。我们将通过增加复杂性的三种情况。所有这些场景的先决条件都是全球可访问的IP地址,指向该地址的A或AAAA记录,以及能够对相关区域进行委派的外部DNS服务器。对于本解释的第一部分,我们将调用全局可访问地址server.example.com的A(或AAAA)记录以及dnsmasq为其授权的区域our.zone.com。

最简单的配置由两行dnsmasq配置组成; 就像是

auth-server = server.example.com,eth0  auth-zone = our.zone.com,1.2.3.0 / 24 

和外部DNS中的两条记录

server.example.com A 192.0.43.10 our.zone.com NS server.example.com 

eth0是dnsmasq正在侦听的外部网络接口,并具有(全局可访问)地址192.0.43.10。

请注意,外部IP地址可能是动态的(即通过DHCP或PPP从ISP分配)如果是这样,则A记录必须通过常用的动态DNS系统之一链接到该动态分配。

一个更复杂但实用的配置具有全局可访问IP地址的地址记录,该IP地址位于dnsmasq服务的权威域中,通常位于根域。现在我们有了

auth-server = our.zone.com,eth0  auth-zone = our.zone.com,1.2.3.0 / 24 
our.zone.com A 1.2.3.4 our.zone.com NS our.zone.com 

我们的.zone.com的A记录现在已经成为胶水记录,它解决了当A记录位于该区域时查找our.zone.com域名服务器IP地址的鸡与鸡问题。请注意,这是该记录的唯一作用:由于dnsmasq现在是来自我们的.zone.com的权威,它也必须提供此记录。如果外部地址是静态的,则可以使用 / etc / hosts 条目或 –host-record来完成。

auth-server = our.zone.com,eth0  host-record = our.zone.com,1.2.3.4  auth-zone = our.zone.com,1.2.3.0 / 24 

如果外部地址是动态的,则与our.zone.com关联的地址必须来自相关接口的地址。这是通过使用接口名称来完成的 

auth-server = our.zone.com,eth0  interface-name = our.zone.com,eth0  auth-zone = our.zone.com,1.2.3.0 / 24,eth0 

(auth-zone中的“eth0”参数将包含eth0动态地址的子网添加到区域,以便接口名称返回外部查询中的地址。)

我们的最终配置建立在上述的基础上,但也添加了辅助DNS服务器。这是另一个DNS服务器,它通过进行区域传输来了解该区域的DNS数据,并在主服务器变得不可访问时充当备份。辅助程序的配置超出了此手册页的范围,但dnsmasq的额外配置很简单:

AUTH-仲丁基服务器= secondary.myisp.com 

our.zone.com NS secondary.myisp.com 

添加auth-sec-servers可以在dnsmasq中传输区域,以允许辅助服务器收集DNS数据。如果你想限制这些数据到特定的主机那么

auth-peer = <secondary的IP地址> 

将这样做。

Dnsmasq充当授权服务器,用于与auth-zone声明中给出的子网关联的in-addr.arpa和ip6.arpa域,因此可以简单地使用合适的NS记录配置反向(地址到名称)查找,例如在此例如,我们允许1.2.3.0/24地址。

 3.2.1.in-addr.arpa NS our.zone.com 

请注意,目前,反向(in-addr.arpa和ip6.arpa)区域在区域传输中不可用,因此没有必要安排辅助服务器进行反向查找。

当将dnsmasq配置为充当授权服务器时,将使用以下数据填充授权区域。

–mx-host,–srv-host,–dns-rr, – txt-record,–naptr-record ,只要记录名称位于授权域中即可。

–cname 只要记录名称在授权域中。如果CNAME的目标不合格,则使用权威区域名称进行限定。以这种方式使用的CNAME(仅)可能是通配符,如

CNAME = *。example.com,default.example.com 

如果地址属于–auth-zone中指定的一个子网, 则从/ etc / hosts(和–addn-hosts )和 –host-record 和 –interface-name中获取 IPv4和IPv6地址 

DHCP租约的地址,前提是该地址属于–auth-zone中指定的一个子网  (如果使用构造的DHCP范围,取决于动态分配给接口 的地址,则应使用通过接口的动态地址定义子网–auth-zone形式 来确保满足此条件。)

在缺省模式下,如果DHCP租用具有非限定名称,并且可能使用–domain构建了限定 名称,则授权区域中的名称将从非限定名称和区域的域构建。这可能会或可能不等于–domain指定的值  如果 设置了–dhcp-fqdn,则将使用与DHCP租约关联的全限定名称,并且必须与区域的域匹配。 
 

 

退出代码

0 – Dnsmasq成功分叉到背景中,或者如果未启用背景,则正常终止。

1 – 检测到配置问题。

2 – 发生网络访问问题(正在使用地址,未经许可尝试使用特权端口)。

3 – 文件系统操作发生问题(缺少文件/目录,权限)。

4 – 内存分配失败。

5 – 其他杂项问题。

11或更高 – 从租赁脚本进程“init”调用收到非零返回码。dnsmasq的退出代码是添加了10的脚本退出代码。

 

极限

dnsmasq中资源限制的默认值通常较为保守,适用于处理器速度较慢且内存有限的嵌入式路由器类型设备。在功能更强大的硬件上,可以增加限制并处理更多的客户端。以下内容适用于dnsmasq-2.37:早期版本也没有扩展。 

 

Dnsmasq能够为至少一千个客户处理DNS和DHCP。DHCP租用时间不应该很短(不到一小时)。 可以增加–dns-forward-max的值 :从等于客户端的数量开始,如果DNS看起来很慢,则增加。请注意,DNS性能也取决于上游名称服务器的性能。DNS缓存的大小可能会增加:硬限制为10000个名称,默认值(150)非常低。将SIGUSR1发送到dnsmasq使其记录有助于调整高速缓存大小的信息。详情请参阅 NOTES 部分。

内置的TFTP服务器可以同时进行多个文件传输:绝对限制与进程允许的文件句柄数量以及select()系统调用处理大量文件句柄的能力有关。如果使用–tftp-max 将限制设置得过高 ,它将被缩小并在启动时记录实际限制。请注意,发送相同文件时可能发生的传输次数比每次传输发送不同文件时的传输次数都多。

可以使用dnsmasq通过在/ etc / hosts 或其他主机文件中使用所有解析为127.0.0.1或0.0.0.0的已知横幅广告服务器列表来阻止Web广告 该列表可能很长,dnsmasq已经成功通过一百万个名称的测试。这个尺寸的文件需要1GHz的处理器和大约60Mb的RAM。

 

国际化

Dnsmasq可以被编译来支持国际化。为此,应使用make all targets和all-i18n来代替标准目标all和install。编译国际化时,dnsmasq将以本地语言生成日志消息并支持国际化域名(IDN)。包含非ASCII字符的/ etc / hosts,/ etc / ethers和/etc/dnsmasq.conf中的域名将被转换为DNS内部punycode表示。请注意,dnsmasq既可以确定消息的语言,也可以确定来自LANG环境变量的配置文件的假定字符集。这应该由负责启动dnsmasq的脚本设置为系统默认值。编辑配置文件时, 

   

FILES

/etc/dnsmasq.conf

/usr/local/etc/dnsmasq.conf

/etc/resolv.conf /var/run/dnsmasq/resolv.conf /etc/ppp/resolv.conf /etc/dhcpc/resolv.conf

/ etc / hosts文件

在/ etc /醚

/var/lib/misc/dnsmasq.leases

/var/db/dnsmasq.leases

/var/run/dnsmasq.pid  

也可以看看