dnsmasq详解及配置

dnsmasq详解及配置

一、dnsmasq的简介

Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。做为域名解析服务器(DNS)dnsmasq能够经过缓存 DNS 请求来提升对访问过的网址的链接速度。做为DHCP 服务器,dnsmasq 能够用于为局域网电脑分配内网ip地址和提供路由。DNSDHCP两个功能能够同时或分别单独实现。dnsmasq轻量且易配置,适用于我的用户或少于50台主机的网络。此外它还自带了一个 PXE 服务器。php

 

二、Dnsmasq的主要做用

1)将Dnsmasq做为本地DNS服务器使用,直接修改电脑的本地DNSIP地址便可。html

 

2)应对ISPDNS劫持(反DNS劫持),输入一个不存在的域名,正常的状况下浏览器是显示没法链接,DNS劫持会跳转到一个广告页面。先随便nslookup 一个不存在的域名,看看ISP商劫持的IP地址。前端

 

3)智能DNS加快解析速度,打开/etc/dnsmasq.conf文件,server=后面能够添加指定的DNS,例如国内外不一样的网站使用不一样的DNSlinux

国内指定DNSubuntu

server=/cn/114.114.114.114小程序

server=/taobao.com/114.114.114.114vim

server=/taobaocdn.com/114.114.114.114windows

国外指定DNS浏览器

server=/google.com/223.5.5.5缓存

 

4)屏蔽网页广告,将指广告的URL指定127这个IP,就能够将网页上讨厌的广告给去掉了。

address=/ad.youku.com/127.0.0.1

address=/ad.iqiyi.com/127.0.0.1

 

5)指定域名解析到特定的IP上。这个功能可让你控制一些网站的访问,非法的DNS就常常把一些正规的网站解析到不正确IP上。

address=/freehao123.com/123.123.123.123

 

6管理控制内网DNS,首先将局域网中的全部的设备的本地DNS设置为已经安装Dnsmasq的服务器IP地址。而后修改已经安装Dnsmasq的服务器Hosts文件:/etc/hosts,指定域名到特定的IP中。

例如想让局域网中的全部用户访问www.freehao123.com时跳转到192.168.0.2,添加:192.168.0.2 www.freehao123.comHosts文件中既可,整个过程也能够说是“DNS劫持”。

 

三、dnsmasq的解析流程

dnsmasq先去解析hosts文件, 再去解析/etc/dnsmasq.d/下的*.conf文件,而且这些文件的优先级要高于dnsmasq.conf,咱们自定义的resolv.dnsmasq.conf中的DNS也被称为上游DNS,这是最后去查询解析的;

若是不想用hosts文件作解析,咱们能够在/etc/dnsmasq.conf中加入no-hosts这条语句,这样的话就直接查询上游DNS了,若是咱们不想作上游查询,就是不想作正常的解析,咱们能够加入no-reslov这条语句。

 

四、dnsmasq的参数及经常使用设置说明

编辑 dnsmasq 的配置文件 /etc/dnsmasq.conf 。这个文件包含大量的选项注释。

(1)dnsmasq常常修改的比较重要参数说明

    

具体参数

参数说明

resolv-file

定义dnsmasq从哪里获取上游DNS服务器的地址, 默认从/etc/resolv.conf获取。

strict-order

表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。

listen-address 

定义dnsmasq监听的地址,默认是监控本机的全部网卡上。

address

 启用泛域名解析,即自定义解析a记录,例如:address=/long.com/192.168.115.10 访问long.com时的全部域名都会被解析成192.168.115.10

bogus-nxdomain 

对于任何被解析到此 IP 的域名,将响应 NXDOMAIN 使其解析失效,能够屡次指定

一般用于对于访问不存在的域名,禁止其跳转到运营商的广告站点

server

指定使用哪一个DNS服务器进行解析,对于不一样的网站可使用不一样的域名对应解析。

例如:server=/google.com/8.8.8.8    #表示对于google的服务,使用谷歌的DNS解析。

 

2)查看配置文件语法是否正确,可执行下列命令

[root@localhost ~]# dnsmasq --test

dnsmasq: syntax check OK.

 

(3)DNS 缓存设置

要在单台电脑上以守护进程方式启动dnsmasqDNS缓存服务器,编辑/etc/dnsmasq.conf,添加监听地址:

listen-address=127.0.0.1

 

若是用此主机为局域网提供默认 DNS,请用为该主机绑定固定 IP 地址,设置:

listen-address=192.168.x.x

这种状况建议配置静态IP

 

多个ip地址设置:

listen-address=127.0.0.1,192.168.x.x

 

(4)三个以上域名服务器

Linux 处理 DNS 请求时有个限制,在 resolv.conf 中最多只能配置三个域名服务器(nameserver)。做为一种变通方法,能够在 resolv.conf 文件中只保留 localhost 做为域名服务器,而后为外部域名服务器另外建立 resolv-file 文件。首先,为 dnsmasq 新建一个域名解析文件:

[root@localhost ~]# vim /etc/resolv.dnsmasq.conf

# Google's nameservers, for example

nameserver 8.8.8.8

nameserver 8.8.4.4

而后编辑 /etc/dnsmasq.conf dnsmasq 使用新建立的域名解析文件:

[root@localhost ~]# vim  /etc/dnsmasq.conf

...

resolv-file=/etc/resolv.dnsmasq.conf

 

(5)使用dhcpcd

dhcpcd 能够是经过建立(或编辑)/etc/resolv.conf.head文件或 /etc/resolv.conf.tail文件来指定dns服务器,使/etc/resolv.conf不会被每次都被dhcpcd重写

echo "nameserver 127.0.0.1" > /etc/resolv.conf.head   设置dns服务器为127.0.0.1

 

(6)使用dhclient

要使用 dhclient, 取消 /etc/dhclient.conf 文件中以下行的注释:

prepend domain-name-servers 127.0.0.1;

 

(7)使用NetworkManager

NetworkManager 能够靠自身配置文件的设置项启动 dnsmasq 。在 NetworkManager.conf 文件的 [main] 节段添加 dns=dnsmasq 配置语句,而后禁用由 systemd 启动的 dnsmasq.service:

[root@localhost ~]# vim /etc/NetworkManager/NetworkManager.conf

[main]

plugins=keyfile

dns=dnsmasq

能够在 /etc/NetworkManager/dnsmasq.d/ 目录下为 dnsmasq 建立自定义配置文件。例如,调整 DNS 缓存大小(保存在内存中):

[root@localhost ~]# vim /etc/NetworkManager/dnsmasq.d/cache

cache-size=1000

dnsmasq  NetworkManager 启动后,此目录下配置文件中的配置将取代默认配置。

 

IPv6

启用 dnsmasq NetworkManager 可能会中断仅持IPv6DNS查询 (例如 dig -6 [hostname]) 不然将工做。 为了解决这个问题,建立如下文件将配置 dnsmasq 老是监听IPv6loopback

[root@localhost ~]# vim /etc/NetworkManager/dnsmasq.d/ipv6_listen.conf

listen-address=::1

此外, dnsmasq不优先考虑上游IPv6DNS。不幸的是NetworkManager已不这样作 (Ubuntu Bug)。 一种解决方法是将禁用IPv4 DNSNetworkManager的配置,假设存在。

其余方式

另外一种选择是在NetworkManagers“设置(一般经过右键单击小程序)和手动输入设置。设置将取决于前端中使用的类型;这个过程一般涉及右击小程序,编辑(或建立)一个配置文件,而后选择DHCP类型为“自动(指定地址)。”DNS地址将须要输入,一般以这种形式:127.0.0.1, DNS-server-one, ....

 

(8)DHCP 服务器设置

dnsmasq默认关闭DHCP功能,若是该主机须要为局域网中的其余设备提供IP和路由,应该对dnsmasq 配置文件(/etc/dnsmasq.conf)必要的配置以下:

[root@localhost ~]# vim  /etc/dnsmasq.conf

# Only listen to routers' LAN NIC.  Doing so opens up tcp/udp port 53 to

# localhost and udp port 67 to world:

interface=<LAN-NIC>

 

# dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with

# dynamic interfaces (assigning dynamic ips). Dnsmasq will discard world

# requests to them, but the paranoid might like to close them and let the

# kernel handle them:

bind-interfaces

 

# Dynamic range of IPs to make available to LAN pc

dhcp-range=192.168.111.50,192.168.111.100,12h

 

# If youd like to have dnsmasq assign static IPs, bind the LAN computer's

# NIC MAC address:

dhcp-host=aa:bb:cc:dd:ee:ff,192.168.111.50

查看租约

[root@localhost ~]# cat /var/lib/misc/dnsmasq.leases

 

(9)添加自定义域

它能够将一个自定义域添加到主机中的(本地)网络:

local=/home.lan/

domain=home.lan

 

(10)启动守护进程

设置为开机启动:

[root@localhost ~]# systemctl enable dnsmasq

当即启动 dnsmashq

[root@localhost ~]# systemctl start dnsnsmasq

须要重启网络服务以使 DHCP 客户端重建一个新的 /etc/resolv.conf

查看dnsmasq是否启动正常,查看系统日志:

[root@localhost ~]# journalctl -u d

五、dnsmasq 的配置文件 /etc/dnsmasq.conf详解

不加载本地的 /etc/hosts 文件

#no-hosts

添加读取额外的 hosts 文件路径,能够屡次指定。若是指定为目录,则读取目录中的全部文件。

#addn-hosts=/etc/dnsmasq.hosts.d

读取目录中的全部文件,文件更新将自动读取

#hostsdir=/etc/dnsmasq.hosts.d

例如,/etc/hosts中的os01将扩展成os01.example.com

#expand-hosts

 

##############################################################################

缓存时间设置,通常不须要设置

本地 hosts 文件的缓存时间,一般不要求缓存本地,这样更改hosts文件后就即时生效。

#local-ttl=3600

 local-ttl 仅影响 DHCP 租约

#dhcp-ttl=<time>

对于上游返回的值没有ttl时,dnsmasq给一个默认的ttl,通常不须要设置,

#neg-ttl=<time>

指定返回给客户端的ttl时间,通常不须要设置

#max-ttl=<time>

设置在缓存中的条目的最大 TTL

#max-cache-ttl=<time>

不须要设置,除非你知道你在作什么。

#min-cache-ttl=<time>

通常不须要设置

#auth-ttl=<time>

 

##############################################################################

记录dns查询日志,若是指定 log-queries=extra 那么在每行开始处都有额外的日志信息。

#log-queries

设置日志记录器,'-'  stderr,也能够是文件路径。默认为:DAEMON,调试时使用 LOCAL0

#log-facility=<facility>

#log-facility=/var/log/dnsmasq/dnsmasq.log

异步log,缓解阻塞,提升性能。默认为5,最大100

#log-async[=<lines>]

#log-async=50

 

##############################################################################

指定用户和组

#user=nobody

#group=nobody

 

##############################################################################

指定DNS的端口,默认53,设置 port=0 将彻底禁用 DNS 功能,仅使用 DHCP/TFTP

#port=53

指定 EDNS.0 UDP 包的最大尺寸,默认为 RFC5625 推荐的 edns-packet-max=4096

#edns-packet-max=<size>

指定向上游查询的 UDP 端口,默认是随机端口,指定后下降安全性、加快速度、减小资源消耗。

设置为 '0' 由操做系统分配。

#query-port=53535

指定向上游查询的 UDP 端口范围,方便防火墙设置。

#min-port=<port>

#max-port=<port>

指定接口,指定后同时附加 lo 接口,可使用'*'通配符。

不能使用接口别名(例如:"eth1:0"),请用 listen-address 选项替代。

#interface=wlp2s0

指定排除的接口,排除优先级高,可使用'*'通配符

#except-interface=

仅接受同一子网的 DNS 请求。

仅在未指定 interfaceexcept-interfacelisten-address 或者 auth-server 时有效。

#local-service

指定不提供 DHCP  TFTP 服务的接口,仅提供 DNS 服务。

#no-dhcp-interface=enp3s0

指定IP地址,能够屡次指定。

# interface 选项和 listen-address 选项能够同时使用。

下面两行与指定 interface 选项的做用相似。

listen-address=192.168.10.17

#listen-address=127.0.0.1

一般状况下即便设置了 interface 选项(例如:interface=wlp2s0 

将仍然绑定到通配符地址(例如:*:53 )。

开启此项将仅监听指定的接口。

适用于在同一主机的不一样接口或 IP 地址上运行多个 dns 服务器。

bind-interfaces

对于新添加的接口不进行绑定。仅 Linux 系统支持,其余系统等同于 bind-interfaces 选项。

#bind-dynamic

 

##############################################################################

若是 hosts 中的主机有多个 IP 地址,仅返回对应子网的 IP 地址。

localise-queries

若是反向查找的是私有地址例如192.168.X.X,仅从 hosts 文件查找,再也不转发到上游服务器

#bogus-priv

对于任何被解析到此 IP 的域名,将响应 NXDOMAIN 使其解析失效,能够屡次指定

一般用于对于访问不存在的域名,禁止其跳转到运营商的广告站点。

#bogus-nxdomain=64.94.110.11

忽略包含指定地址的 A 记录查询的回复。

例如上游有台 dns 服务器伪造 www.baidu.com  IP  1.1.1.1 而且响应速度很是快。

指定 ignore-address=1.1.1.1 能够忽略它的响应信息,

从而等待 www.baidu.com 正确的查询结果。

#ignore-address=<ipaddr>

filterwin2k

 

##############################################################################

指定 resolv-file 文件路径,默认/etc/resolv.conf

#resolv-file=/etc/resolv.conf

不读取 resolv-file 来肯定上游服务器

#no-resolv

在编译时须要启用 DBus 支持。

#enable-dbus[=<service-name>]

严格按照resolv.conf中的顺序进行查找

#strict-order

向全部上游服务器发送查询,而不是一个。

all-servers

启用转发循环检测

#dns-loop-detect

 

##############################################################################

这项安全设置是拒绝解析包含私有 IP 地址的域名,

这些IP地址包括以下私有地址范围:10.0.0.0/8172.16.0.0/12192.168.0.0/16

其初衷是要防止相似上游DNS服务器故意将某些域名解析成特定私有内网IP而劫持用户这样的安全***。

直接在配置文件中注销 stop-dns-rebind 配置项从而禁用该功能。

这个方法确实能够一劳永逸的解决解析内网 IP 地址的问题,

可是咱们也失去了这项安全保护的特性,因此在这里我不推荐这个办法。

使用 rebind-domain-ok 进行特定配置,顾名思义该配置项能够有选择的忽略域名的 rebind 行为

stop-dns-rebind

rebind-localhost-ok

#rebind-domain-ok=[<domain>]|[[/<domain>/[<domain>/]

rebind-domain-ok=/.test.com/

 

##############################################################################

也不要检测 /etc/resolv.conf 的变化

#no-poll

重启后清空缓存

clear-on-reload

完整的域名才向上游服务器查找,若是仅仅是主机名仅查找hosts文件

domain-needed

 

##############################################################################

# IP地址转换

#alias=[<old-ip>]|[<start-ip>-<end-ip>],<new-ip>[,<mask>]

##############################################################################

#local=[/[<domain>]/[domain/]][<ipaddr>[#<port>][@<source-ip>|<interface>[#<port>]]

#server=[/[<domain>]/[domain/]][<ipaddr>[#<port>][@<source-ip>|<interface>[#<port>]]

server=/test.com/192.168.10.117

server=/10.168.192.in-addr.arpa/192.168.10.117

#rev-server=<ip-address>/<prefix-len>,<ipaddr>[#<port>][@<source-ip>|<interface>[#<port>]]

 

将任何属于 <domain> 域名解析成指定的 <ipaddr> 地址。

也就是将 <domain> 及其全部子域名解析成指定的 <ipaddr> IPv4 或者 IPv6 地址,一般用于屏蔽特定的域名。

一次只能指定一个 IPv4 或者 IPv6 地址,要同时返回 IPv4 IPv6 地址,请屡次指定 address= 选项。

注意: /etc/hosts 以及 DHCP 租约将覆盖此项设置。

#address=/<domain>/[domain/][<ipaddr>]

 

#ipset=/<domain>/[domain/]<ipset>[,<ipset>]

#mx-host=<mx name>[[,<hostname>],<preference>]

#mx-target=<hostname>

 

# SRV 记录

#srv-host=<_service>.<_prot>.[<domain>],[<target>[,<port>[,<priority>[,<weight>]]]]

 

# A, AAAA  PTR 记录 

#host-record=<name>[,<name>....],[<IPv4-address>],[<IPv6-address>][,<TTL>]

 

# TXT 记录

#txt-record=<name>[[,<text>],<text>]

 

# PTR 记录 

#ptr-record=<name>[,<target>]

 

#naptr-record=<name>,<order>,<preference>,<flags>,<service>,<regexp>[,<replacement>]

 

# CNAME 别名记录

#cname=<cname>,<target>[,<TTL>]

 

 

#dns-rr=<name>,<RR-number>,[<hex data>]

#interface-name=<name>,<interface>[/4|/6]

#synth-domain=<domain>,<address range>[,<prefix>]

#add-mac[=base64|text]

#add-cpe-id=<string>

#add-subnet[[=[<IPv4 address>/]<IPv4 prefix length>][,[<IPv6 address>/]<IPv6 prefix length>]]

##############################################################################

 

##############################################################################

缓存条数,默认为150条,cache-size=0 禁用缓存。

cache-size=1000

不缓存未知域名缓存,默认状况下dnsmasq缓存未知域名并直接返回为客户端。

no-negcache

指定DNS同属查询转发数量

dns-forward-max=1000

 

##############################################################################

#dnssec

#trust-anchor=[<class>],<domain>,<key-tag>,<algorithm>,<digest-type>,<digest>

#dnssec-check-unsigned

#dnssec-no-timecheck

#dnssec-timestamp=<path>

#proxy-dnssec

#dnssec-debug

 

##############################################################################

#auth-server=<domain>,<interface>|<ip-address>

#auth-zone=<domain>[,<subnet>[/<prefix length>][,<subnet>[/<prefix length>].....]]

#auth-zone=<domain>[,<interface name>[/6|/4][,<interface name>[/6|/4].....]]

#auth-soa=<serial>[,<hostmaster>[,<refresh>[,<retry>[,<expiry>]]]]

#auth-sec-servers=<domain>[,<domain>[,<domain>...]]

#auth-peer=<ip-address>[,<ip-address>[,<ip-address>...]]

 

启用链接跟踪,读取 Linux 入栈 DNS 查询请求的链接跟踪标记,

而且将上游返回的响应信息设置一样的标记。

用于带宽控制和防火墙部署。

此选项必须在编译时启用 conntrack 支持,而且内核正确配置并加载 conntrack

此选项不能与 query-port 同时使用。

#conntrack

 

 

##############################################################################

#

#        DHCP 选项

#

##############################################################################

设置 DHCP 地址池,同时启用 DHCP 功能。

# IPv4 <mode> 可指定为 static|proxy ,当 <mode> 指定为 static 时,

需用 dhcp-host 手动分配地址池中的 IP 地址。

 <mode> 指定为 proxy 时,为指定的地址池提供 DHCP 代理。

#dhcp-range=[tag:<tag>[,tag:<tag>],][set:<tag>,]<start-addr>[,<end-addr>][,<mode>][,<netmask>[,<broadcast>]][,<lease time>]

#dhcp-range=172.16.0.2,172.16.0.250,255.255.255.0,1h

#dhcp-range=192.168.10.150,192.168.10.180,static,255.255.255.0,1h

 

根据 MAC 地址或 id 固定分配客户端的 IP 地址、主机名、租期。

# IPv4 下指定 id:* 将忽略 DHCP 客户端的 ID ,仅根据 MAC 来进行 IP 地址分配。

在读取 /etc/hosts 的状况,也能够根据 /etc/hosts 中的主机名分配对应 IP 地址。

指定 ignore 将忽略指定客户端得 DHCP 请求。

#dhcp-host=[<hwaddr>][,id:<client_id>|*][,set:<tag>][,<ipaddr>][,<hostname>][,<lease_time>][,ignore]

#dhcp-hostsfile=<path>

#dhcp-hostsdir=<path>

读取 /etc/ethers 文件 与使用 dhcp-host 的做用相同。IPv6 无效。

#read-ethers

 

指定给 DHCP 客户端的选项信息,

默认状况下 dnsmasq 将发送:子网掩码、广播地址、DNS 服务器地址、网关地址、域等信息。

指定此选项也可覆盖这些默认值而且设置其余选项值。

重要:可使用 option:<option-name>或者 option 来指定。

# <option-name>  option号的对应关系可以使用命令:

# dnsmasq --help dhcp 以及 dnsmasq --help dhcp6 查看,这点很重要。

例如设置网关参数,既可使用 dhcp-option=3,192.168.4.4 也可使用 dhcp-option = option:router,192.168.4.4

# 0.0.0.0 意味着当前运行 dnsmasq 的主机地址。

若是指定了多个 tag:<tag> 必须同时匹配才行。

# [encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],] 有待继续研究。

#dhcp-option=[tag:<tag>,[tag:<tag>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],][<opt>|option:<opt-name>|option6:<opt>|option6:<opt-name>],[<value>[,<value>]]

#dhcp-option-force=[tag:<tag>,[tag:<tag>,]][encap:<opt>,][vi-encap:<enterprise>,][vendor:[<vendor-class>],]<opt>,[<value>[,<value>]]

#dhcp-optsfile=<path>

#dhcp-optsdir=<path>

#dhcp-option=3,1.2.3.4

#dhcp-option=option:router,1.2.3.4

#dhcp-option=option:router,192.168.10.254

#dhcp-option=option:dns-server,192.168.10.254,221.12.1.227,221.12.33.227

 

##############################################################################

# (IPv4 only) 禁用重用服务器名称和文件字段做为额外的 dhcp-option 选项。

通常状况下 dnsmasq  dhcp-boot 移出启动服务器和文件信息到 dhcp-option 选项中。

这使得在 dhcp-option 选项封包中有额外的选项空间可用,可是会使老的客户端混淆。

此选项将强制使用简单并安全的方式来避免此类状况。能够认为是一个兼容性选项。

#dhcp-no-override

 

##############################################################################

配置 DHCP 中继。

# <local address> 是运行 dnsmasq 的接口的 IP 地址。

全部在 <local address> 接口上接收到的 DHCP 请求将中继到 <server address> 指定的远程 DHCP 服务器。

能够屡次配置此选项,使用同一个 <local address> 转发到多个不一样的 <server address> 指定的远程 DHCP 服务器。

# <server address> 仅容许使用 IP 地址,不能使用域名等其余格式。

若是是 DHCPv6<server address> 能够是 ALL_SERVERS 的多播地址 ff05::1:3 

在这种状况下必须指定接口 <interface> ,不能使用通配符,用于直接多播到对应的 DHCP 服务器所在的接口。

# <interface> 指定了仅容许接收从 <interface> 接口的 DHCP 服务器相应信息。

#dhcp-relay=<local address>,<server address>[,<interface>]

 

##############################################################################

设置标签

#dhcp-vendorclass=set:<tag>,[enterprise:<IANA-enterprise number>,]<vendor-class>

#dhcp-userclass=set:<tag>,<user-class>

#dhcp-mac=set:<tag>,<MAC address>

#dhcp-circuitid=set:<tag>,<circuit-id>

#dhcp-remoteid=set:<tag>,<remote-id>

#dhcp-subscrid=set:<tag>,<subscriber-id>

#dhcp-match=set:<tag>,<option number>|option:<option name>|vi-encap:<enterprise>[,<value>]

#tag-if=set:<tag>[,set:<tag>[,tag:<tag>[,tag:<tag>]]]

 

#dhcp-proxy[=<ip addr>]......

 

##############################################################################

不分配匹配这些 tag:<tag>  DHCP 请求。

#dhcp-ignore=tag:<tag>[,tag:<tag>]

#dhcp-ignore-names[=tag:<tag>[,tag:<tag>]]

#dhcp-generate-names=tag:<tag>[,tag:<tag>]

# IPv4 only 使用广播与匹配 tag:<tag> 的客户端通讯。通常用于兼容老的 BOOT 客户端。

#dhcp-broadcast[=tag:<tag>[,tag:<tag>]] 

 

##############################################################################

# IPv4 only 设置 DHCP 服务器返回的 BOOTP 选项,

# <servername> <server address> 可选,

若是未设置服务器名称将设为空,服务器地址设为 dnsmasq  IP 地址。

若是指定了多个 tag:<tag> 必须同时匹配才行。

若是指定 <tftp_servername> 将按照 /etc/hosts 中对应的 IP 地址进行轮询负载均衡。  

#dhcp-boot=[tag:<tag>,]<filename>,[<servername>[,<server address>|<tftp_servername>]]

根据不一样的类型使用不一样的选项。

使用示例:

#        dhcp-match=set:EFI_x86-64,option:client-arch,9

#        dhcp-boot=tag:EFI_x86-64,uefi/grubx64.efi

#        #dhcp-match=set:EFI_Xscale,option:client-arch,8

#        #dhcp-boot=tag:EFI_Xscale,uefi/grubx64.efi

#        #dhcp-match=set:EFI_BC,option:client-arch,7

#        #dhcp-boot=tag:EFI_BC,uefi/grubx64.efi

#        #dhcp-match=set:EFI_IA32,option:client-arch,6

#        #dhcp-boot=tag:EFI_IA32,uefi/grubx64.efi

#        #dhcp-match=set:Intel_Lean_Client,option:client-arch,5

#        #dhcp-boot=tag:Intel_Lean_Client,uefi/grubx64.efi

#        #dhcp-match=set:Arc_x86,option:client-arch,4

#        #dhcp-boot=tag:Arc_x86,uefi/grubx64.efi

#        #dhcp-match=set:DEC_Alpha,option:client-arch,3

#        #dhcp-boot=tag:DEC_Alpha,uefi/grubx64.efi

#        #dhcp-match=set:EFI_Itanium,option:client-arch,2

#        #dhcp-boot=tag:EFI_Itanium,uefi/grubx64.efi

#        #dhcp-match=set:NEC/PC98,option:client-arch,1

#        #dhcp-boot=tag:NEC/PC98,uefi/grubx64.efi

#        dhcp-match=set:Intel_x86PC,option:client-arch,0

#        dhcp-boot=tag:Intel_x86PC,pxelinux.0

 

##############################################################################

# DHCP 使用客户端的 MAC 地址的哈希值为客户端分配 IP 地址,

一般状况下即便客户端使本身的租约到期,客户端的 IP 地址仍将长期保持稳定。

在默认模式下,IP 地址是随机分配的。

启用 dhcp-sequential-ip 选项将按顺序分配 IP 地址。

在顺序分配模式下,客户端使租约到期更像是仅仅移动一下 IP 地址。

在一般状况下不建议使用这种方式。

#dhcp-sequential-ip

 

##############################################################################

多数状况下咱们使用 PXE,只是简单的容许 PXE 客户端获取 IP 地址,

而后 PXE 客户端下载 dhcp-boot 选项指定的文件并执行,也就是 BOOTP 的方式。

然而在有适当配置的 DHCP 服务器支持的状况下,PXE 系统可以实现更复杂的功能。

# pxe-service 选项可指定 PXE 环境的启动菜单。

为不一样的类型系统设定不一样的启动菜单,而且覆盖 dhcp-boot 选项。

# <CSA> 为客户端系统类型:x86PC, PC98, IA64_EFI, Alpha, Arc_x86, Intel_Lean_Client, 

# IA32_EFI, X86-64_EFI, Xscale_EFI, BC_EFI, ARM32_EFI  ARM64_EFI,其余类型可能为一个整数。

# <basename> 引导 PXE 客户端使用 tftp  <server address> 或者 <server_name> 下载文件。

#     注意:"layer" 后缀 (一般是 ".0")  PXE 提供,也就是 PXE 客户端默认在文件名附加 .0 后缀。

#     示例:pxe-service=x86PC, "Install Linux", pxelinux         (读取 pxelinux.0 文件并执行)

#           pxe-service=x86PC, "Install Linux", pxelinux, 1.2.3.4(不适用于老的PXE

#     <bootservicetype> 整数,PXE 客户端将经过广播或者经过 <server address> 

#           或者 <server_name> 搜索对应类型的适合的启动服务。。

#     示例:pxe-service=x86PC, "Install windows from RIS server", 1

#           pxe-service=x86PC, "Install windows from RIS server", 1, 1.2.3.4

#     未指定 <basename><bootservicetype> 或者 <bootservicetype>  “0”,将从本地启动。

#     示例:pxe-service=x86PC, "Boot from local disk"

#           pxe-service=x86PC, "Boot from local disk", 0

若是指定 <server_name> 将按照 /etc/hosts 中对应的 IP 地址进行轮询负载均衡。  

#pxe-service=[tag:<tag>,]<CSA>,<menu text>[,<basename>|<bootservicetype>][,<server address>|<server_name>]

 PXE 启动后弹出提示,<prompt> 为提示内容,<timeout> 为超时时间,为 0 则当即执行。

若是未指定此选项,在有多个启动选项的状况下等待用户选择,不会超时。

#pxe-prompt=[tag:<tag>,]<prompt>[,<timeout>]

根据不一样的类型使用不一样的菜单,使用示例:

#        #pxe-prompt="What system shall I netboot?", 120

#        # or with timeout before first available action is taken:

#        pxe-prompt="Press F8 or Enter key for menu.", 60

#        pxe-service=x86PC, "Now in x86PC (BIOS mode), boot from local", 0

#        pxe-service=x86PC, "Now in x86PC (BIOS mode)", pxelinux

#        pxe-service=PC98, "Now in PC98 mode", PC98

#        pxe-service=IA64_EFI, "Now in IA64_EFI mode", IA64_EFI

#        pxe-service=Alpha, "Now in Alpha mode", Alpha

#        pxe-service=Arc_x86, "Now in Arc_x86 mode", Arc_x86

#        pxe-service=Intel_Lean_Client, "Now in Intel_Lean_Client mode", Intel_Lean_Client

#        pxe-service=IA32_EFI, "Now in IA32_EFI mode", IA32_EFI

#        pxe-service=X86-64_EFI, "Now in X86-64_EFI (UEFI mode), boot from local", 0

#        pxe-service=X86-64_EFI, "Now in X86-64_EFI (UEFI mode)", grub/grub-x86_64.efi

#        pxe-service=Xscale_EFI, "Now in Xscale_EFI mode", Xscale_EFI

#        pxe-service=BC_EFI, "Now in BC_EFI mode", BC_EFI

#        # CentOS7 系统不支持下列两个选项

#        #pxe-service=ARM32_EFI,"Now in ARM32_EFI mode",ARM32_EFI

#        #pxe-service=ARM64_EFI,"Now in ARM64_EFI mode",ARM64_EFI

 

##############################################################################

默认为150,即最多分配150ip地址出去,最大1000ip

#dhcp-lease-max=150

# (IPv4 only) 指定DHCP端口,默认为6768。若是不指定则为10671068,单指定一个,第二个加1

#dhcp-alternate-port[=<server port>[,<client port>]]

谨慎使用此选项,避免 IP 地址浪费。(IPv4 only) 容许动态分配 IP 地址给 BOOTP 客户端。

注意:BOOTP 客户端获取的 IP 地址是永久的,将没法再次分配给其余客户端。

#bootp-dynamic[=<network-id>[,<network-id>]]

谨慎使用此选项。

默认状况下 DHCP 服务器使用 ping 的方式进行确保 IP 未被使用的状况下将 IP 地址分配出去。

启用此选项将不使用 ping 进行确认。

#no-ping

 

##############################################################################

记录额外的 dhcp 日志,记录全部发送给 DHCP 客户端的选项(option)以及标签(tag)信息

#log-dhcp

禁止记录平常操做日志,错误日志仍然记录。启用 log-dhcp 将覆盖下列选项。

#quiet-dhcp

#quiet-dhcp6

#quiet-ra

 

修改 DHCP 默认租约文件路径,默认状况下无需修改

#dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases

# (IPv6 only)

#dhcp-duid=<enterprise-id>,<uid>

 

##############################################################################

#dhcp-script=<path>

#dhcp-luascript=<path>

#dhcp-scriptuser=root

#script-arp

#leasefile-ro

 

#bridge-interface=<interface>,<alias>[,<alias>]

 

##############################################################################

 DHCP 服务器指定 domain 域名信息,也能够给对应的 IP 地址池指定域名。

#     直接指定域名

#     示例:domain=thekelleys.org.uk

#     子网对应的域名

#     示例:domain=wireless.thekelleys.org.uk,192.168.2.0/24

#     ip范围对应的域名

#     示例:domain=reserved.thekelleys.org.uk,192.68.3.100,192.168.3.200

#domain=<domain>[,<address range>[,local]]

在默认状况下 dnsmasq 插入普通的客户端主机名到 DNS 中。

在这种状况下主机名必须惟一,即便两个客户端具备不一样的域名后缀。

若是第二个客户端使用了相同的主机名,DNS 查询将自动更新为第二个客户端的 IP 地址。

若是设置了 dhcp-fqdn 选项,普通的主机名将再也不插入到 DNS 中去,

仅容许合格的具备域名后缀的主机名插入到 DNS 服务器中。

指定此选项需同时指定不含 <address range> 地址范围的 domain 选项。

#dhcp-fqdn

一般状况下分配 DHCP 租约后,dnsmasq 设置 FQDN 选项告诉客户端不要尝试 DDNS 更新主机名与 IP 地址。

这是由于  name-IP 已自动添加到 dnsmasq  DNS 视图中的。

设置此选项将容许客户端 DDNS 更新,

 windows 下容许客户端更新 windows AD 服务器是很是有用的。

参看  RFC 4702 

#dhcp-client-update

 

#enable-ra

#ra-param=<interface>,[high|low],[[<ra-interval>],<router lifetime>]

 

 

##############################################################################

#

#        TFTP 选项

#

##############################################################################

对于绝大多数的配置,仅需指定 enable-tftp  tftp-root 选项便可。

是否启用内置的 tftp 服务器,能够指定多个逗号分隔的网络接口

#enable-tftp[=<interface>[,<interface>]]

#enable-tftp

#enable-tftp=enp3s0,lo

指定 tftp 的根目录,也就是寻找传输文件时使用的相对路径,能够附加接口,

#tftp-root=<directory>[,<interface>]

#tftp-root=/var/lib/tftpboot/

若是取消注释,那么即便指定的 tftp-root 没法访问,仍然启动 tftp 服务。

#tftp-no-fail

附加客户端的 IP 地址做为文件路径。此选项仅在正确设置了 tftp-root 的状况下可用,

示例:若是 tftp-root=/tftp,客户端为 192.168.1.15 请求 myfile.txt 文件时,

将优先请求 /tftp/192.168.1.15/myfile.txt 文件, 其次是 /tftp/myfile.txt 文件。

感受没什么用。

#tftp-unique-root

启用安全模式,启用此选项,仅容许 tftp 进程访问属主为本身的文件。

不启用此选项,容许访问全部 tftp 进程属主可读取的文件。

若是 dnsmasq 是以 root 用户运行,tftp-secure 选项将容许访问全局可读的文件。

通常状况下不推荐以 root 用户运行 dnsmasq

在指定了 tftp-root 的状况下并非很重要。

#tftp-secure

将全部文件请求转换为小写。对于 Windows 客户端来讲很是有用,建议开启此项。

注意:dnsmasq  TFTP 服务器老是将文件路径中的“\”转换为“/”

#tftp-lowercase

容许最大的链接数,默认为 50 

若是将链接数设置的很大,需注意每一个进程的最大文件描述符限制,详见文档手册。

#tftp-max=<connections>

#tftp-max=50

设置传输时的 MTU 值,建议不设置或按需设置。

若是设定的值大于网络接口的 MTU 值,将按照网络接口的 MTU 值自动分片传输(不推荐)。

#tftp-mtu=<mtu size>

中止 tftp 服务器与客户端协商 "blocksize" 选项。启用后,防止一些古怪的客户端出问题。

#tftp-no-blocksize

指定 tftp 的链接端口的范围,方便防火墙部署。

# tftp 侦听在 69/udp ,链接端口默认是由系统自动分配的,

 root 用户运行时指定的链接端口号需大于 1025 最大 65535

#tftp-port-range=<start>,<end>

###############################################################################

#conf-dir=<directory>[,<file-extension>......]

#conf-file=/etc/dnsmasq.more.conf

conf-dir=/etc/dnsmasq.d

#servers-file=<file>

六、利用Dnsmasq搭建自有的无广告DNS服务器

1使用Dnsmasq搭建自有DNS的做用

天天咱们的工做和娱乐休闲都离不开电脑,常常看到电脑右下角弹出图片广告大部分这个都是被劫持DNS商家推送过来的,看起来很讨厌。虽然不少门户网站,好比360、百度、阿里都有推出他们DNS服务,咱们将本地的DNS IP地址更换成他们的在必定程度上,能够解决咱们访问网速、广告拦截的问题。可是他们会推送本身的广告业务。因此咱们本身能够架设本地DNS服务器,这样用本身的DNS就不会有广告的问题

Dnsmasq也不是仅仅这个用途,咱们也能够做为局域网机器批量IP维护使用,以及局域网解决特定网址域名禁止访问。

 

2)dnsmasq的安装

[root@localhost ~]# yum install -y dnsmasq

这里使用的是CentOS 7.x环境,若是须要编译安装能够直接到官方网站(http://www.thekelleys.org.uk/dnsmasq/)选择版本编译。

 

安装完毕后,能够经过dnsmasq -v命令查看版本,有版本号出来就表明安装上了。

 

3)修改Dnsmasq配置文件dnsmasq.conf

修改配置文件前必定要先备份

[root@localhost ~]# echo 'resolv-file=/etc/dnsmasq.d/resolv.dnsmasq.conf'>> /etc/dnsmasq.conf

表示dnsmasq 会从这个指定的文件中寻找上游dns服务器。

[root@localhost ~]# echo 'addn-hosts=/etc/dnsmasq.d/dnsmasq.hosts' >> /etc/dnsmasq.conf

添加读取额外的 hosts 文件路径,能够屡次指定

 

[root@localhost ~]# vim /etc/dnsmasq.conf

strict-order      取消这一行的注释,表示严格按照resolv.conf中的顺序进行查找

listen-address=127.0.0.1    添加监听地址这个 dnsmasq 本机本身使用有效。

listen-address=192.168.115.120   用此主机为局域网提供默认 DNS,写本机的局域网IP

listen-address=127.0.0.1,192.168.115.120   多个ip地址设置

若是想容许全部的用户使用你的DNS解析服务器,把listen-address去掉便可。

 

4)修改/etc/resolv.conf文件,并建立resolv.dnsmasq.conf和dnsmasq.hosts文件

[root@localhost ~]# echo 'nameserver 127.0.0.1' > /etc/resolv.conf

[root@localhost ~]# cp /etc/resolv.conf  /etc/dnsmasq.d/resolv.dnsmasq.conf

[root@localhost ~]# echo 'nameserver 8.8.8.8' >>/etc/dnsmasq.d/resolv.dnsmasq.conf

[root@localhost ~]# echo 'nameserver 192.168.115.120' >>/etc/dnsmasq.d/resolv.dnsmasq.conf

[root@localhost ~]# cp /etc/hosts  /etc/dnsmasq.d/dnsmasq.hosts

resolv.dnsmasq.conf中设置的是真正的Nameserver能够填写各大商家提供的免费DNS地址。

 

5)启动Dnsmasq

[root@localhost ~]# systemctl restart dnsmasq    重启dnsmasq服务

[root@localhost ~]# systemctl enable dnsmasq    设置成开机自启动

[root@localhost ~]# netstat -antp|grep 53        查看端口是否启动成功

6测试是否配置成功。

[root@localhost ~]# dig www.taobao.com

.........................................................省略若干

;; Query time: 77 mse    第一次查询没有缓存,时间77

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: 116 13:09:32 CST 2018

;; MSG SIZE  rcvd: 120

 

[root@localhost ~]# dig www.taobao.com

.........................................................省略若干

;; Query time: 0 msec    第二次再次查询,时间为0

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: 116 13:11:39 CST 2018

;; MSG SIZE  rcvd: 123

七、Dnsmasq的使用及实现的功能

1)做为本地DNS使用

Dnsmasq做为本地DNS服务器使用,直接修改电脑的本地DNSIP地址便可

blob.png

2应对ISP的DNS劫持。

输入一个不存在的域名,正常的状况下浏览器是显示没法链接,DNS劫持会跳转到一个广告页面。先随便nslookup 一个不存在的域名,看看ISP商劫持的IP地址

接着编辑/etc/dnsmasq.conf文件,bogus-nxdomain='劫持IP' 加入进去,后面的IP是刚刚查询到的DNS劫持IP地址。

重启dnsmasq,再尝试打开不存在的域名,这时浏览器就会显示正常的没法链接页面了。

 

3)智能DNS加快解析速度。

打开/etc/dnsmasq.conf文件,server=添加指定的DNS,例如国内外不一样的网站使用不一样的DNS

[root@localhost ~]# vim /etc/dnsmasq.conf

国内指定DNS

server=/cn/114.114.114.114

server=/taobao.com/114.114.114.114

server=/taobaocdn.com/114.114.114.114

国外指定DNS

server=/google.com/223.5.5.5

 

4)屏蔽网页广告。

将广告的URL指定127.0.0.1这个IP,就能够将网页上讨厌的广告给去掉了。

[root@localhost ~]# vim /etc/dnsmasq.conf

address=/ad.youku.com/127.0.0.1

address=/ad.iqiyi.com/127.0.0.1

 

5)指定域名解析到特定的IP上

这个功能可让你控制一些网站的访问,非法的DNS就常常把一些正规的网站解析到不正确IP上。

[root@localhost ~]# vim /etc/dnsmasq.conf

address=/freehao123.com/123.123.123.123

6管理控制内网DNS

首先将局域网中的全部的设备的本地DNS设置为已经安装Dnsmasq的服务器IP地址。而后修改已经安装Dnsmasq的服务器Hosts文件:/etc/hosts,指定域名到特定的IP中。

       例如:想让局域网中的全部用户访问www.abc.com时跳转到192.168.115.100,添加'192.168.115.100 www.abc.com'Hosts文件中既可,整个过程也能够说是“DNS劫持”。

相关文章
相关标签/搜索