dnsmasq大致有三类选项:调试选项,DNS配置选项,DHCP配置选项。选项分为命令行选项和配置文件选项,命令行选项和配置文件选项的唯一区别是命令行选项需要在选项前加上“--”。
下面为一些重要的选项做详细的介绍。
--test:
读取并且检查配置文件的格式是否正确,并不启动dnsmasq。格式检查OK,dnsmasq返回0,否则返回非0,shell下通过输入echo $?获取dnsmasq返回结果。
-w,--help:
显示dnsmasq所有的命令行选项。--help dhcp显示已知DHCPv4 option选项,--help dhcp6则显示DHCPv6 option选项,DHCP option分一篇单独介绍。
-k,--keep-in-foreground:
在前台运行,但是dnsmasq的标准输入,标准输出,标准错误都链接到了/dev/null,也就是dnsmasq虽然在前台跑,但是终端不会输出任何信息。当某些进程,例如daemontools,需要监控dnsmasq进程是否存在时,可以使用该选项。这时daemontools fork出dnsmasq -k进程,因为dnsmasq并没有脱离父进程daemontools ,所以daemontools 可以通过wait可以监控dnsmasq是否退出,并在dnsmasq退出后,决定是否重新启动。
-d,--no-daemon:
只用于调试模式,标准输入,标准输出都链接到了当前终端。终端打印较多,只适合用于调试,当dnsmasq收到SIGUSR1时,会立即输出dnsmasq缓存的DNS请求的记录。
-q,--log-queries:
输出由dnsmasq处理的DNS请求的缓存的记录的日志。当dnsmasq收到SIGUSR1时,会立即输出dnsmasq缓存的DNS请求的记录。当dnsmasq指定--log-queries=extra时,会有更详细的日志输出:包括请求client的IP地址等等。
--log-dhcp:
输出额外的DHCP日志:记录所有发送到client的选项和标签(option数字对应的名称),
-p,--port=
dnsmasq监听
-Q,--query-port=
指定dnsmasq向外发送请求的和监听服务器回复的UDP端口,而不是使用随机端口。使用此选项会有被DNS欺骗攻击的隐患,但是这可能会更快并且占用更少的资源。
-i,--interface=
只监听指定接口的DNS请求。当使用--interface指定某接口时,回环接口也会被dnsmasq加入到监听的接口列表中。
-r,--resolv-file=
从
-h,--no-hosts:
不读取/etc/hosts的主机名。当读取/etc/hosts文件时,假如/etc/hosts中有一项"192.168.100.1 www.hello.com",dnsmasq下游客户端请求www.hello.com时,dnsmasq会直接把192.168.100.1的结果返回到客户端,而不是向上游域名服务器请求。--no-hosts能避免这个问题。
-R,--no-resolv:
dnsmasq不读取/etc/resolv.conf文件,包括通过--resolv-file指定的文件。只从dnsmasq命令行选项或dnsmasq配置文件中(选项为--server或--address)获取上流域名服务器地址。
-n,--no-poll:
dnsmasq不轮询/etc/resolv.conf内容,默认情况下dnsmasq会自动读取/etc/resolv.conf或--resolv-file指定的文件内容。
-S,--local, --server=[/[
用于直接指定上游服务器的情况。但是dnsmasq仍然会读取/etc/resolv.conf文件。当dnsmasq收到domain的查询请求时,dnsmasq会把请求转发到ipaddr,ipaddr通常是一个内部的DNS服务器或是一个网关地址。其他domain请求则通过向/etc/resolv.conf或--resolv-file指定的文件请求。
-A,--address=/
当client向dnsmasq请求查询domain时,dnsmasq把ipaddr作为查询结果回复到client,dnsmasq不会把client的请求转发到ipaddr。这是--address和--server的区别。
举例:--server和--address对比
--server=/www.mynode.com/192.168.1.1
dnsmasq将client对www.mynode.com的查询请求转发到192.168.1.1,dnsmasq将从192.168.1.1接收到的查询结果,回复给client。
--address=/www.mynode.com/192.168.1.1
dnsmasq收到client的www.mynode.com的查询请求时,直接把192.168.1.1回复给client。也就是client访问www.mynode.com,也就是访问192.168.1.1。
-max-ttl:
设置一个发送到client的最大TTL值(DNS回复包中会有TTL字段,表示DNS缓存过期时长)。如果time的值比上游服务器回复给dnsmasq的TTL值更小,则dnsmasq回复给client的TTL值为time值。否则采用上游服务器回复的值,发送到client。
--max-cache-ttl=
为dnsmasq缓存中的条目设置最大的TTL值。
--min-port=
dnsmasq向上游发送的DNS查询请求包使用的源端口号不小于--min-port指定的port。不指定的话,默认最小端口是1024。这个选项对于DNS服务器在防火墙后面,只放开小范围端口的情况有用。
--max-port=
dnsmasq向上游发送的DNS查询请求包使用的源端口号不大于--max-port指定的port。这个选项对于DNS服务器在防火墙后面,只放开小范围端口的情况有用。
--ipset=/
把指定domain解析到的IP地址放到ipset中。
使用举例:
step1:使用ipset命令创建一个名为test的IP set
ipset create test hash:ip
step2:在dnsmasq配置文件中添加一条(将www.baidu.com和www.sina.com解析到的地址放到test的ipset中)
# in /etc/resolv.conf or file specified by --resolv-file
ipset=/www.baidu.com/www.sina.com/test
step3:查看结果,
~ # ipset list test -o save
create test hash:ip family inet hashsize 1024 maxelem 65536
add test 183.232.231.174
add test 183.232.231.172
add test 183.232.4.19
add test 183.232.23.210
add test 120.232.104.138
四. DHCP配置选项
−F, --dhcp-range=[tag:
开启dnsmasq的DHCP功能。分配到client的IP地址在start-addr到end-addr之间。lease time默认是以秒为单位,也可以是分钟(eg:45m),也可以是小时(eg:2h)。不指定lease time则为1小时,最小的lease time可以指定为2分钟。
使用举例:
dhcp-range=tag:br0,set:br0,192.168.100.100,192.168.100.254,255.255.255.0,192.168.100.255,7200
为br0网络接口下端的DHCP client分配IP地址为192.168.100.100到192.168.100.254,子网掩码是255.255.255.0,广播地址为192.168.100.255,租期为7200s。
下图为使用--log-dhcp后,DHCP client请求IP地址时,dnsmasq的日志输出,留意tags字段内容。就是--dhcp-range指定的tag。
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 available DHCP range: 192.168.100.100 -- 192.168.100.254
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 vendor class: MSFT 5.0
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 client provides name: WIN7-1912152027
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 DHCPREQUEST(br0) 192.168.100.231 28:d2:44:88:6d:ef
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 tags: br0
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 DHCPACK(br0) 192.168.100.231 28:d2:44:88:6d:ef WIN7-1912152027
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 requested options: 1:netmask, 15:domain-name, 3:router, 6:dns-server,
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 requested options: 44:netbios-ns, 46:netbios-nodetype, 47:netbios-scope,
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 requested options: 31:router-discovery, 33:static-route, 121:classless-static-route,
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 requested options: 249, 43:vendor-encap
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 next server: 192.168.100.1
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 broadcast response
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 1 option: 53 message-type 5
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 4 option: 54 server-identifier 192.168.100.1
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 4 option: 51 lease-time 2h
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 4 option: 58 T1 1h
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 4 option: 59 T2 1h45m
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 4 option: 1 netmask 255.255.255.0
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 4 option: 28 broadcast 192.168.100.255
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 4 option: 3 router 192.168.100.1
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 4 option: 6 dns-server 192.168.100.1
Jan 1 10:10:11 Router daemon.info dnsmasq-dhcp[2044]: 835900391 sent size: 18 option: 81 FQDN 03:ff:ff:57:49:4e:37:2d:31:39:31:32:31:35...
−G, --dhcp-host=[
主要用于为指定的主机分配固定的IP地址,租约时间甚至主机名。指定的IP地址不限制在--dhcp-range指定的IP地址范围内,但是需要在相同的子网内。
使用举例:
dhcp-host=WIN7-1912152027,192.168.100.150
为主机名为WIN7-1912152027的主机固定分配192.168.100.150。
−O, --dhcp-option=[tag:
指定一些额外的DHCP option发送到client。默认情况下,dnsmasq会发送标准的DHCP option到client,但是某些情况client需要从DHCP server通过option回去额外的信息。dnsmasq可以通过十进制数或者"option:
#通过十进制数来指定
--dhcp-option=42,192.168.0.4
#通过option name指定
--dhcp-option=option:ntp-server,192.168.0.4
dnsmasq的DHCP option的十进制数和option name的对应关系可以通过dnsmasq -help dhcp
来查询。
~ # dnsmasq --help dhcp
Known DHCP options:
1 netmask
2 time-offset
3 router
6 dns-server
7 log-server
9 lpr-server
13 boot-file-size
15 domain-name
16 swap-server
17 root-path
18 extension-path
19 ip-forward-enable
20 non-local-source-routing
21 policy-filter
22 max-datagram-reassembly
23 default-ttl
26 mtu
27 all-subnets-local
31 router-discovery
32 router-solicitation
33 static-route
34 trailer-encapsulation
35 arp-timeout
36 ethernet-encap
37 tcp-ttl
38 tcp-keepalive
40 nis-domain
41 nis-server
42 ntp-server
44 netbios-ns
45 netbios-dd
46 netbios-nodetype
47 netbios-scope
48 x-windows-fs
49 x-windows-dm
58 T1
59 T2
60 vendor-class
64 nis+-domain
65 nis+-server
66 tftp-server
67 bootfile-name
68 mobile-ip-home
69 smtp-server
70 pop3-server
71 nntp-server
74 irc-server
77 user-class
93 client-arch
94 client-interface-id
97 client-machine-id
119 domain-search
120 sip-server
121 classless-static-route
125 vendor-id-encap
255 server-ip-address
dnsmasq除了还支持DNSSEC,DHCPv6,RA,TFTP server,后面学习到了再继续补充。