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劫持」。

相關文章
相關標籤/搜索