DNS域名解析服务配置会不会?
目錄
微信公眾號【廈門微思網絡】
一、DNS
1.1 DNS 服務介紹
DNS(Domain Name System,域名系統),因特網上作為域名和 IP 地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。
-
DNS 協議運行在UDP和TCP之上,使用53號端口
-
其中在DNS解析查詢時用到UDP協議,而在主從傳遞區域數據庫文件時,用到TCP協議
1.2 互聯網域名結構
一般結構
-
主機名.二級域名.頂級域名.根
-
www.wsescape.com.
管理方式
-
Internet?的頂級域名由 Internet 網絡協會域名注冊查詢負責網絡地址分配的委員會進行登記和管理
-
它還為 Internet 的每一臺主機分配唯一的?IP?地址
1.3 DNS 的功能
每個 IP 地址都可以有一個主機名,主機名由一個或多個字符串組成,字符串之間用小數點隔開。有了主機名,就不要死記硬背每臺 IP 設備的 IP 地址,只要記住相對直觀有意義的主機名就行了。
主機名到 IP 地址映射的兩種方式
-
靜態映射
/etc/hosts文件
在每臺設備上都有主機到IP的映射關系,只供此設備使用
-
動態映射
/etc/resolv.conf文件
指通過DNS服務器配置主機到IP的映射關系
#?cat?/etc/hosts
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
#?cat?/etc/resolv.conf
nameserver?172.16.242.2
解析方式 - FQDN(Full Qualified Domain Name)
-
正向 ==> FQDN --> IP
-
反向 ==> IP --> FQDN
-
權威
-
非權威
解析順序
-
在解析域名時,首先采用靜態域名解析的方法,如果靜態域名解析不成功,再采用動態域名解析的方法
一次完整的查詢請求經過的流程
1.4 技術實現
DNS通過允許一個名稱服務器把他的一部分名稱服務,眾所周知的zone,委托給子服務器而實現了一種層次結構的名稱空間,成為子域授權機制。
-
DNS還提供了一些額外的信息,例如系統別名、聯系信息以及哪一個主機正在充當系統組或域的郵件樞紐
-
任何一個使用IP的計算機網絡可以使用DNS來實現他自己的私有名稱系統。
實現 DNS 的軟件
-
BIND
-
DJBDNS
-
MaraDNS
-
Name Server Daemon
-
PowerDNS
-
Dnsmasq
DNS 查詢類型
-
迭代查詢
-
遞歸查詢
1.5 DNS 的類型
-
(1)Primary DNS Server(Master)
一個域的主服務器保存著該域的zone配置文件,該域所有的配置、更改都是在該服務器上進行,本篇隨筆要講解的也是如何配置一個域的主DNS服務器。
-
(2)Secondary DNS Server(Slave)
域從服務器一般都是作為冗余負載使用,一個域的從服務器是從該域的主服務器上抓取zone配置文件,從服務器不會進行任何信息的更改,zone配置文件的修改只能在主DNS服務器上進行,所有的修改都有主服務器同步。
-
(3)Caching only Server(Cache)
DNS緩存服務器不存在任何的zone配置文件,僅僅依靠緩存來為客戶端提供服務,通常用于負載均衡及加速訪問操作。
-
(4)轉發服務器
只負責轉發功能
注解說明:
主 DNS 服務器
-
維護所負責解析的區域內解析庫服務器
-
解析庫由管理維護,可以是手工也可以是自動的
-
通知機制
-
一旦主 DNS 服務器解析庫發生改變會立即通知從服務器
從 DNS 服務器
-
從主DNS服務器或其他的從DNS服務器那里復制(區域傳送)一份解析庫
-
序列號
來表示解析庫的版本號
前提是,主服務器解析庫內容發生改變,其序列遞增
-
刷新時間
從服務器從主服務器請求同步解析庫的時間間隔
-
重試時間
從服務器從服務器請求同步解析庫失敗的時候,再次嘗試的時間間隔
-
過期時長
從服務器始終聯系不到主服務器時,多久后放棄從服務器角度,停止提供服務
區域傳送
全量傳送
-
傳送整個解析庫
增量傳送
-
傳送解析庫變化的那部分內容
1.6 資源記錄類型
DNS 系統中,常見的資源記錄類型:
-
主機記錄(A記錄)
FQDN --> IP
A記錄是用于名稱解析的重要記錄,它將特定的主機名映射到對應主機的IP地址上
-
指針記錄(PTR記錄)
IP --> FQDN
引導至一個規范名稱(Canonical Name),最常用來運行反向DNS查找
-
權威記錄的起始(SOA記錄)
一個區域解析庫有且僅能有一個SOA記錄,而必須為解析庫的第一條記錄
-
名稱服務器記錄(NS記錄)
專用于標明當前區域的DNS服務器
-
別名記錄(CNAME記錄)
CNAME記錄用于將某個別名指向到某個A記錄上,這樣就不需要再為某個新名字另外創建一條新的A記錄
-
MX 記錄(MX記錄)
引導域名到該域名的郵件傳輸代理(Message Transfer Agents)列表
-
IPv6 主機記錄(AAAA記錄)
FQDN --> IP
與 A 記錄對應,用于將特定的主機名映射到一個主機的IPv6地址。
-
服務位置記錄(SRV記錄)
用于定義提供特定服務的服務器的位置,如主機hostname,端口port
-
NAPTR 記錄
它提供了正則表達式方式去映射一個域名。NAPTR記錄非常著名的一個應用是用于ENUM查詢。
1.7 資源記錄格式
語法
name?[TTL]?IN?rr_type?value
-
(1) TTL如果從全局繼承可以省略,為緩存時長
-
(2)IN表示Internet
-
(3)rr_type表示資源記錄類型
-
(4) @可用于引用當前區域的名字
-
(5) 同一個名字可以通過多條記錄定義多個不同的值,此時DNS服務器會以輪詢方式響應
-
(6) 同一個值也可能有多個不同的定義名字,通過多個不同的名字指向同一個值進行定義,此僅表示通過多個不同的名字可以找到同一個主機而已
SOA
-
name: 當前區域的名字,例如wsescape.com.
-
value: 有多部分組成:
(1) 當前區域的主DNS服務器的FQDN,也可以使用當前區域的名字
(2) 當前區域管理員的郵箱地址,但地址中不能使用@符號,一般用.替換,例如linuxmail.wsescape.com
(3) 主從服務協調屬性的定義以及否定的答案的統一的TTL
#?86400為TTL值,單位為秒鐘
#?主DNS服務器地址為ns.wsescape.com.
#?郵箱地址為nsadmin.wsescape.com.
#?第一版為2016052201,標識版本號
wsescape.com.86400INSOAns.nsadmin.wsescape.com.(
2016052201??;序列號
2H??????????;刷新時間,2小時
10M;重試時間,10分鐘
1W;過期時間,一周
1D;否定答案的TTL值,一天
)
NS
-
name: 當前區域的名字
-
value: 當前區域的某DNS服務器的名字,例如ns.wsescape.com.
-
注意:
(1) 相鄰的兩個資源記錄的name相同時,后續的可省略
(2) 對NS記錄而言,任何一個NS記錄后面的服務器名字,都應該在后續有一個A記錄
#?一個區域可以有多個NS記錄
#?ns1.wsescape.com.和ns2.wsescape.com.都應該在后續有一個A記錄
wsescape.com.INNS??ns1.wsescape.com.
wsescape.com.INNS??ns2.wsescape.com.
MX
-
name: 當前區域的名字
-
value: 當前區域的某郵件服務器(smtp服務器)的主機名
(1)一個區域內,MX記錄可以有多個
(2)但每個記錄的value之前應該有一個數字(0-99),表示此服務器的優先級
(3)數字越小優先級越高
-
注意
(1) 相鄰的兩個資源記錄的name相同時,后續的可省略
(2) 對MX記錄而言,任何一個MX記錄后面的服務器名字,都應該在后續有一個A記錄
#?mx1.wsescape.com.和mx2.wsescape.com.都應該在后續有一個A記錄
wsescape.com.IN??MX??10??mx1.wsescape.com.
INMX??20??mx2.wsescape.com.
A
-
name: 某主機的FQDN,例如www.wsescape.com.
-
value: 主機名對應主機的 IP 地址;
-
注意
避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
#?輪詢
www.wsescape.com.IN??A1.1.1.1
www.wsescape.com.IN??A??1.1.1.2
#?一個主機有多個名稱而已
mx1.wsescape.com.IN????A???1.1.1.3
mx2.wsescape.com.??IN??A???1.1.1.3
#?避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
*.wsescape.com.IN??A??1.1.1.4
wsescape.com.IN??A???1.1.1.4
AAAA
與 `A` 記錄類似,這是只是表示IPv6地址而已
#?輪詢
www.wsescape.com.IN??AAAA1.1.1.1
www.wsescape.com.IN??AAAA??1.1.1.2
#?一個主機有多個名稱而已
mx1.wsescape.com.IN????AAAA???1.1.1.3
mx2.wsescape.com.??IN??AAAA???1.1.1.3
#?避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
*.wsescape.com.IN??AAAA??1.1.1.4
wsescape.com.IN??AAAA???1.1.1.4
PTR
-
name: 這里的name表示的是IP地址
-
IP地址有特定格式,把IP地址反過來寫,如果是1.2.3.4需要寫作4.3.2.1
-
還有特定后綴in-addr.arpa.,完整寫法為4.3.2.1.in-addra.arpa.
-
value: 這里的value值為FQDN
-
注意
網絡地址及后綴可省略,主機地址依然需要反著寫
#?實例
4.3.2.1.in-addr.arpa.INPTRwww.wsescape.com.
#?如果3.2.1是網絡地址簡寫成為
4???IN??PTRwww.wsescape.com.
#?如果2.1是網絡地址簡寫成為
4.3??IN??PTRwww.wsescape.com.
CNAME
-
name: 別名的FQDN
-
value: 正工名字的FQDN
web.escapelife.com.IN??CNAME??www.escapelife.com.
1.8 個人使用
子域授權就是每個域的名稱服務器,都是通過其上級名稱服務器在解析庫進行授權
類似根域授權tld
.com.INNS?????ns1.com.
.com.???IN????NSns2.com.
ns1.com.INA???2.2.2.1
ns2.com.??????INA2.2.2.2
這里以wsescape.com為例
#?wsescape.com.?在.com的名稱服務器上,解析庫中添加資源記錄
wsescape.com.INNSns1.wsescape.com.
wsescape.com.INNSns2.wsescape.com.
wsescape.com.INNSns3.wsescape.com.
ns1.wsescape.com.INA??3.3.3.1
ns2.wsescape.com.INA??3.3.3.2
ns3.wsescape.com.INA??3.3.3.3
域名注冊
-
代理商
-
萬網
-
新網
-
godaddy
綁定服務器
-
注冊完成以后,想自己用專用服務來解析?
-
管理后臺,把 NS 記錄指向的服務器名稱和 A 記錄指向的服務器地址
二、常用命令
2.1 dig命令
dig用于測試dns系統,因此不會查詢hosts文件進行解析
-
用于詢問 DNS 域名服務器的靈活的工具
-
除非被告知請求特定域名服務器,dig將嘗試 /etc/resolv.conf中列舉的任何服務器
-
當未指定任何命令行參數或選項時,dig將對.(根)執行NS查詢
格式
dig?[-t?type]?name?[@SERVER]?[query?options]
語法
-
類型查詢
dig?-t?NS?wsescape.com?@172.16.242.178
dig?-t?MX?wsescape.com?@172.16.242.178
dig?-t?A?www.baidu.com
-
查詢選項
+[no]trace:跟蹤解析過程
+[no]recurse:進行遞歸解析
測試反向解析:
dig?-x?IP?@SERVER
dig?-x?172.16.100.11?@172.16.242.178
-
模擬區域傳送:
dig?-t?axfr?ZONE_NAME?@SERVER
dig?-t?axfr?wsescape.com?@172.16.242.178
2.2 host命令
host命令用于查詢DNS的工具
-
它通過常轉換指定主機名稱的主機名稱為 IP 地址
-
當不指定參數時,它顯示host命令的幫助信息
格式
host?[-t?type]?name?[SERVER]
語法
-
-a
等同于-v -t
-
-C
在需要認證的域名服務器上查找 SOA 記錄
-
-l
列出一個域內所有的主機
-
-i
反向查找
-
-r
不使用遞歸處理
-
-v
運行時顯示詳細的處理信息
-
-4
用于 IPv4 的查詢
-
-6
用于 IPv6 的查詢
-
-t <類型>
指定類型,包括a、all、mx、ns等
實例展示
[root@localhost?~]#?host?-t?A?www.wsescape.com?172.16.242.178
Using?domain?server:
Name:?172.16.242.178
Address:?172.16.242.178#53
Aliases:
www.wsescape.com?has?address?172.16.100.11
www.wsescape.com?has?address?172.16.100.12
[root@localhost?~]#?host?-t?A?www.wsescape.com?172.16.242.178
Using?domain?server:
Name:?172.16.242.178
Address:?172.16.242.178#53
Aliases:
www.wsescape.com?has?address?172.16.100.12
www.wsescape.com?has?address?172.16.100.11
[root@localhost?~]#?host?--help
host:?illegal?option?--?-
Usage:?host?[-aCdlriTwv]?[-c?class]?[-N?ndots]?[-t?type]?[-W?time]
????????????[-R?number]?[-m?flag]?hostname?[server]
???????-a?is?equivalent?to?-v?-t?ANY
???????-c?specifies?query?class?for?non-IN?data
???????-C?compares?SOA?records?on?authoritative?nameservers
???????-d?is?equivalent?to?-v
???????-l?lists?all?hosts?in?a?domain,?using?AXFR
???????-i?IP6.INT?reverse?lookups
???????-N?changes?the?number?of?dots?allowed?before?root?lookup?is?done
???????-r?disables?recursive?processing
???????-R?specifies?number?of?retries?for?UDP?packets
???????-s?a?SERVFAIL?response?should?stop?query
???????-t?specifies?the?query?type
???????-T?enables?TCP/IP?mode
???????-v?enables?verbose?output
???????-w?specifies?to?wait?forever?for?a?reply
???????-W?specifies?how?long?to?wait?for?a?reply
???????-4?use?IPv4?query?transport?only
???????-6?use?IPv6?query?transport?only
???????-m?set?memory?debugging?flag?(trace|record|usage)
2.3 nslookup命令
nslookup 命令用于查找域名服務器的程序,有兩種模式為互交和非互交
格式
nslookup?[-option]?[name?|?-]?[server]
語法
-
非交互模式
-
直接查詢即可
-
交互式模式
nslookup>
server IP:?指明使用哪個DNS server進行查詢;
set?q=RR_TYPE:?指明查詢的資源記錄類型;
NAME:?要查詢的名稱;
實例展示
[root@localhost?~]#?nslookup
>?server?172.16.242.178
Default?server:?172.16.242.178
Address:?172.16.242.178#53
>?set?q=A
>?www.wsescape.com
Server:172.16.242.178
Address:172.16.242.178#53
Name:www.wsescape.com
Address:?172.16.100.11
Name:www.wsescape.com
Address:?172.16.100.12
>?set?q=NS
>?wsescape.com
Server:172.16.242.178
Address:172.16.242.178#53
wsescape.comnameserver?=?ns2.wsescape.com.
wsescape.comnameserver?=?ns1.wsescape.com.
#?非交互模式查詢
[root@rudder?~]#?nslookup?baidu.com
Server:?????????8.8.8.8
Address:????????8.8.8.8#53
Non-authoritative?answer:
Name:???baidu.com
Address:?123.125.114.144
Name:???baidu.com
Address:?220.181.111.85
Name:???baidu.com
Address:?220.181.111.86
#?非交互模式查詢
[root@rudder?~]#?nslookup
>?www.baidu.com
Server:172.17.0.254
Address:172.17.0.254#53
Non-authoritative?answer:?????#非權威答案,表明是在緩存中讀取的
www.baidu.comcanonical?name?=?www.a.shifen.com.
Name:www.a.shifen.com
Address:?61.135.169.105???????#返回第一個IP地址
Name:www.a.shifen.com
Address:?61.135.169.125???????#返回第二個IP地址
>?server?8.8.8.8??????????????#設置域名服務器為?8.8.8.8
Default?server:?8.8.8.8
Address:?8.8.8.8#53
>?www.baidu.com???????????????#再次請求百度的IP地址
Server:8.8.8.8
Address:8.8.8.8#53
Non-authoritative?answer:
www.baidu.comcanonical?name?=?www.a.shifen.com.
Name:www.a.shifen.com
Address:?220.181.111.147??????#不同的DNS獲取的IP地址是不同的。
2.4 rndc命令
rndc客戶端是通過建立套接字連接服務端,監聽在TCP的953端口,來對服務端的named進行修改操作,但由于安全考慮,所以rndc的客戶端和服務端安裝在同一臺主機之上。
語法 1
-
-b
source-address 使用 source-address 作為連接服務器的源地址允許多個實例設置 IPv4 和 IPv6 源地址
-
-c config-file
使用config-file 作為缺省的配置文件/etc/rndc.conf 的替代
-
-k key-file
使用 key-file 作為缺省的密鑰文件/etc/rndc.key 的替代 如果config-file 不存在,/etc/rndc.key 中的密鑰將用于認證發向服務器的命令
-
-s server server
是與rndc的配置文件中server語句匹配的服務器的名字或地址 如果命令行沒有提供服務器,會使用rndc配置文件中options語句中的default-server子句所命名的主機
-
-p port
發送命令到TCP端口port,以取代BIND 9的缺省控制通道端口 953
-
-V
打開冗余日志
-
-y key_id
使用配置文件中的密鑰key_id
語法 2
-
reload
重載主配置文件和區域解析庫文件
-
reload zone
重載區域解析庫文件
-
refresh zone
安排區域的立即維護
-
retransfer zone
手動啟動區域傳送過程,而不管序列號是否增加
-
notify zone
重新對區域傳送發通知
-
reconfig
重載主配置文件
-
status
將服務器統計信息寫入統計文件中
-
querylog
開啟或關閉查詢日志
建議調試的時候開啟,否則日志消耗太多性能
-
dumpdb
將高速緩存轉儲到轉儲文件 (named_dump.db)
-
stop
將暫掛更新保存到主文件并停止服務器
-
halt
停止服務器,但不保存暫掛更新
-
trace
將調試級別增加一級
建議調試的時候開啟,否則日志消耗太多性能
-
trace level
更改調試級別
-
notrace
將調試級別設置為0
-
flush
刷新服務器的所有高速緩存
-
status
顯示服務器的狀態
-
restart
重新啟動服務器
實例展示
#?rndc工具能夠幫助我們輸出系統信息
[root@localhost?~]#?rndc?status
version:?9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6
CPUs?found:?1
worker?threads:?1
number?of?zones:?20
debug?level:?0
xfers?running:?0
xfers?deferred:?0
soa?queries?in?progress:?0
query?logging?is?OFF
recursive?clients:?0/0/1000
tcp?clients:?0/100
server?is?up?and?running
#?rndc不重啟加載區域文件
[root@localhost?~]#?rndc?reload
三、BIND的安裝配置
DNS服務,程序包名bind,程序名named。
3.1 程序包
只需要安裝bind、bind-libs和bind-utils即可
-
bind
主包
-
bind-libs
依賴的庫文件,包括 32 位和 64 位
-
bind-utils
提供客戶端工具,例如dig、host、nslookup和nsupdate
-
bind-chroot
建立不要安裝,很容易被入侵
bind-chroot 包的作用是提高安全性,將 DNS 服務的配置文件/etc/named.conf 等,創建一個硬鏈接轉到/var/named/chroot/etc/ 文件夾下面,而且使用服務帳號登錄,不使用root用戶登錄
注意,修改配置文件要修改/etc/下面的,這樣會自動同步到chroot下面的鏈接文件中
bind-sdb
bind-dyndb-ldap
以上這兩種方式,是將解析庫文件放在不同的數據庫中進行存儲
3.2 BIND配置文件
配置文件
-
服務啟動腳本
在CentOS6下
/etc/rc.d/init.d/named
-
主配置文件
/etc/named.conf
/etc/rndc.key
為rndc的秘鑰共享文件,提供認證用的
-
rndc是什么?
遠程名稱控制器
默認與bind安裝在同一主機,且只能通過本地回環地址127.0.0.1來連接named進程
提供輔助性的管理功能,如查看解析狀態等
默認工作在 953/tcp 端口上
/etc/named.rfc1912.zones
請求注解文檔
-
解析庫文件
/var/named/ZONE_NAME.ZONE
在/var/named/目錄下存在多個解析庫文件
/var/named/named.ca
指向根DNS該文件不需要管理員更改,而是系統自帶
/var/named/named.local
本地子域解析,將localhost反向解析為127.0.0.1
-
注意
(1) 一臺物理服務器可同時為多個區域提供解析
(2) 必須要有根區域文件,在named.ca中包含13根節點地址,由dig命令生成而來的
(3) 應該有兩個(如果包括ipv6的,應該更多)實現localhost和本地回環地址的解析庫
#??在CentOS6下
[root@localhost?~]#?rpm?-ql?bind?|?less
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/portreserve/named
/etc/rc.d/init.d/named
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/usr/lib64/bind
/usr/sbin/arpaname
......
#?@表示當前區域的區域名稱,在主配置文件/etc/named.conf中定義的
#?TTL的值沒寫,因為定義了宏$TTL?1D,直接繼承
#?rname.invalid.表示管理員的郵箱地址
#?后面的如NS、A等缺省,因為繼承前者的
[root@localhost?named]#?cat?/var/named/named.localhost
$TTL?1D
@IN?SOA@?rname.invalid.?(
0;?serial
1D;?refresh
1H;?retry
1W;?expire
3H?);?minimum
NS@
A127.0.0.1
AAAA::1
[root@localhost?named]#?cat?/var/named/named.loopback
$TTL?1D
@IN?SOA@?rname.invalid.?(
0;?serial
1D;?refresh
1H;?retry
1W;?expire
3H?);?minimum
NS@
A127.0.0.1
AAAA::1
PTRlocalhost.
主配置文件
-
全局配置
options {}
-
日志子系統配置
logging {}
-
區域定義
本機能夠為哪些zone進行解析,就要定義哪些zone
如zone "ZONE_NAME" IN {}
-
注意
任何服務程序如果期望其能夠通過網絡被其它主機訪問,至少應該監聽在一個能與外部主機通信的IP地址上
[root@localhost?~]#?cat?/etc/named.conf
options?{
listen-on?port?53?{?127.0.0.1;?};
listen-on-v6?port?53?{?::1;?};
directory"/var/named";
dump-file"/var/named/data/cache_dump.db";
????????statistics-file?"/var/named/data/named_stats.txt";
????????memstatistics-file?"/var/named/data/named_mem_stats.txt";
allow-query?????{?localhost;?};
recursion?yes;
dnssec-enable?yes;
dnssec-validation?yes;
dnssec-lookaside?auto;
/*?Path?to?ISC?DLV?key?*/
bindkeys-file?"/etc/named.iscdlv.key";
managed-keys-directory?"/var/named/dynamic";
};
logging?{
????????channel?default_debug?{
????????????????file?"data/named.run";
????????????????severity?dynamic;
????????};
};
zone?"."?IN?{
type?hint;
file?"named.ca";
};
include?"/etc/named.rfc1912.zones";
include?"/etc/named.root.key";
#?localhost.localdomain就是區域名稱,也就是@
[root@localhost?~]#?cat?/etc/named.rfc1912.zones
zone?"localhost.localdomain"?IN?{
type?master;
file?"named.localhost";
allow-update?{?none;?};
};
zone?"localhost"?IN?{
type?master;
file?"named.localhost";
allow-update?{?none;?};
};
zone?"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"?IN?{
type?master;
file?"named.loopback";
allow-update?{?none;?};
};
zone?"1.0.0.127.in-addr.arpa"?IN?{
type?master;
file?"named.loopback";
allow-update?{?none;?};
};
zone?"0.in-addr.arpa"?IN?{
type?master;
file?"named.empty";
allow-update?{?none;?};
};
3.3 緩存名稱服務器配置
安裝上bind之后,其實就算的上是一個緩存名稱服務器,只需要進行少許的配置即可完成
-
修改listen-on port 53
-
修改allow-query
-
修改recursion
(1)安裝
[root@localhost?~]#yum?install?bind
(2)啟動
[root@localhost?~]#?service?named?start
Generating?/etc/rndc.key:??????????????????????????????????[??OK??]
Starting?named:????????????????????????????????????????????[??OK??]
(3)查看
#?為了安全,安裝上bind之后,默認只會監聽本地,不對外提供服務
#?任何服務程序如果期望其能夠通過網絡被其它主機訪問,至少應該監聽在一個能與外部主機通信的`IP`地址上
#?編輯主配置文件即可
[root@localhost?~]#?ss?-tunlp?|?grep?:53
udp????UNCONN?????0??????0??????????????127.0.0.1:53????????????????????*:*??????users:(("named",39822,512))
udp????UNCONN?????0??????0????????????????????::1:53???????????????????:::*??????users:(("named",39822,513))
tcp????LISTEN?????0??????3????????????????????::1:53???????????????????:::*??????users:(("named",39822,21))
tcp????LISTEN?????0??????3??????????????127.0.0.1:53????????????????????*:*??????users:(("named",39822,20))
(4)修改
#?修改之前先備份一下
#?逗號之前沒有內容,默認為前一個的名稱,后面為復制的內容
[root@localhost?~]#?cp?/etc/named.conf{,.bak}
[root@localhost?~]#?ll?/etc/named*
-rw-r-----.?1?root?named??984?11月?20?2015?/etc/named.conf
-rw-r-----.?1?root?root???984?6月??20?21:53?/etc/named.conf.bak
#?//表示單行注釋,注釋ipv6
#?/**/表示多行注釋
#?修改的時候必須以;結尾且{}的兩端必須有空格,否則為語法錯誤
#?directory用來定義區域解析庫文件存放位置
#?建議關閉dnssec功能
#?將dnssec-enable和dnssec-validation改為no,并注釋key文件即可
#?把能夠以外網進行通信的地址寫在listen-on?port?53之后,如果有多個可以多個添加,不能省略
#?如果將listen-on?port?53進行注釋或者刪除,默認是監聽在所有
#?將allow-query注釋或改為allow-query?{?any;?};
#?是否允許遞歸recursion,必須為yes
[root@localhost?~]#?vim?/etc/named.conf
options?{
????????listen-on?port?53?{?172.16.242.178;?127.0.0.1;?};
????????listen-on-v6?port?53?{?::1;?};
????????directory???????"/var/named";
????????dump-file???????"/var/named/data/cache_dump.db";
????????statistics-file?"/var/named/data/named_stats.txt";
????????memstatistics-file?"/var/named/data/named_mem_stats.txt";
//??????allow-query?????{?localhost;?};
????????recursion?yes;
????????dnssec-enable?no;
????????dnssec-validation?no;
????????/*?Path?to?ISC?DLV?key?*/
//??????bindkeys-file?"/etc/named.iscdlv.key";
//??????managed-keys-directory?"/var/named/dynamic";
};
(5)重啟生效
#?重啟之后才能生效配置
[root@localhost?~]#?service?named?restart
Stopping?named:?.??????????????????????????????????????????[??OK??]
Starting?named:????????????????????????????????????????????[??OK??]
[root@localhost?~]#?ss?-tunlp?|?grep?:53
udp????UNCONN?????0??????0?????????172.16.242.178:53????????????????????*:*??????users:(("named",40086,513))
udp????UNCONN?????0??????0??????????????127.0.0.1:53????????????????????*:*??????users:(("named",40086,512))
udp????UNCONN?????0??????0????????????????????::1:53???????????????????:::*??????users:(("named",40086,514))
tcp????LISTEN?????0??????3????????????????????::1:53???????????????????:::*??????users:(("named",40086,22))
tcp????LISTEN?????0??????3?????????172.16.242.178:53????????????????????*:*??????users:(("named",40086,21))
tcp????LISTEN?????0??????3??????????????127.0.0.1:53????????????????????*:*??????users:(("named",40086,20))
3.4 主 DNS 名稱服務器配置
主 DNS 名稱服務器配置就是在緩存DNS服務器的基礎之上增加zone配置文件就可以了
-
在/etc/named.rfc1912.zones添加zone記錄
-
在/var/named/增加zone文件
(1) 在主配置文件中定義區域
格式
#?master表示主DNS
#?slave表示從DNS
#?hint表示根
#?forward做轉發
#?file使用的是主配置文件directory定義的路徑
zone?"ZONE_NAME"?IN?{
type?{master|slave|hint|forward};
file?"ZONE_NAME.zone";
};
修改配置
#?在/etc/named.rfc1912.zones文件內定義域名
#?named-checkconf用來檢查語法錯誤
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
zone?"wsescape.com"?IN?{
????????type?master;
????????file?"wsescape.com.zone";
};
[root@localhost?~]#?named-checkconf
(2) 定義區域解析庫文件
格式
出現的內容:
宏定義;
資源記錄;
修改配置
#?這里$TTL用于定義TTL的值,86400為秒,可以使用1D來代替
#?$ORIGIN用于指定域名詞尾,如ns以及mx都為缺省了
#?named-checkzone
#?兩個www,在訪問的時候會進行輪詢操作的
#?泛域名解析這里的*,表示無論用戶輸入什么都不報錯
#?或者寫成*??IN??A??172.16.100.11,因為CNAME不能輸入ip地址
[root@localhost?~]#?cd?/var/named/
[root@localhost?named]#?vim?wsescape.com.zone
$TTL?86400
$ORIGIN?wsescape.com.
@????IN????SOA????ns1.wsescape.com.????admin.wsescape.com?(
2016042201
1H
5M
7D
1D?)
?IN????NS????????ns1
?IN????NS????????ns2
?IN????MX?10?????mx1
?IN????MX?20?????mx2
ns1??IN????A172.16.100.11
ns2?IN????A172.16.100.12
mx1?IN????A172.16.100.13
mx2?IN????A172.16.100.14
www?IN????A172.16.100.11
www?IN????A172.16.100.12
ftp?INCNAMEwww
*????IN?CNAME???www
[root@localhost?named]#?named-checkzone?"wsescape.com"?/var/named/wsescape.com.zone
zone?wsescape.com/IN:?loaded?serial?2016042201
OK
更改權限
#?可以查出進程是以named運行的
#?其中/etc/named.conf文件的屬主為root,屬組為named
#?為了安全起見,對自己創建的文件進行權限修改
[root@localhost?named]#?ps?-aux?|?grep?named
named?????40086??0.0??1.1?160072?11736??????????Ssl??22:07???0:00?/usr/sbin/named?-u?named
root??????40785??0.0??0.0?103324???864?pts/0????S+???23:19???0:00?grep?named
[root@localhost?named]#?ll?/etc/named.conf
-rw-r-----.?1?root?named?1004?6月??20?22:23?/etc/named.conf
[root@localhost?named]#?id?named
uid=25(named)?gid=25(named)?組=25(named)
[root@localhost?named]#?ll
總用量?32
drwxrwx---.?2?named?named?4096?6月??20?21:45?data
drwxrwx---.?2?named?named?4096?6月??20?21:45?dynamic
-rw-r-----.?1?root??named?3171?1月??11?22:12?named.ca
-rw-r-----.?1?root??named??152?12月?15?2009?named.empty
-rw-r-----.?1?root??named??152?6月??21?2007?named.localhost
-rw-r-----.?1?root??named??168?12月?15?2009?named.loopback
drwxrwx---.?2?named?named?4096?5月??11?07:07?slaves
-rw-r--r--.?1?root??root???408?6月??20?22:53?wsescape.com.zone
[root@localhost?named]#?chmod?640?wsescape.com.zone
[root@localhost?named]#?chown?:named?wsescape.com.zone
[root@localhost?named]#?ll
總用量?32
drwxrwx---.?2?named?named?4096?6月??20?21:45?data
drwxrwx---.?2?named?named?4096?6月??20?21:45?dynamic
-rw-r-----.?1?root??named?3171?1月??11?22:12?named.ca
-rw-r-----.?1?root??named??152?12月?15?2009?named.empty
-rw-r-----.?1?root??named??152?6月??21?2007?named.localhost
-rw-r-----.?1?root??named??168?12月?15?2009?named.loopback
drwxrwx---.?2?named?named?4096?5月??11?07:07?slaves
-rw-r-----.?1?root??named??408?6月??20?22:53?wsescape.com.zone
重啟生效
[root@localhost?~]#?service?named?restart
Stopping?named:?.??????????????????????????????????????????[??OK??]
Starting?named:????????????????????????????????????????????[??OK??]
#?使用dig命令來幫助我們驗證信息
#?因為之前的配置,這里會進行輪詢操作
[root@localhost?~]#?dig?-t?A?wsescape.com?@172.16.242.178
3.5 反向區域
反向解析和正向解析各為獨立的系統,所以可以部署在不同的或者是相同的機器之上,都是可以
-
一個區域只能有一個主服務器,無論是正向還是反向
-
一個主服務器可以有多個從服務器
根據配置文件中定義的主機地址,來確定網絡地址
-
如果都為172.16.100內的主機,那么網絡地址就是172.16.100.
-
存在多種地址,如172.16.100.12、172.16.200.121等,那么網絡地址就是172.16.
-
以此類推
什么是反向區域
不變的部分用來當做區域名稱,變化的部分用來當做實現解析時候的name
格式
-
區域名稱:網絡地址反寫.in-addr.arpa.
-
如172.16.100. ==> 100.16.172.in-addr.arpa.
如何定義反向區域
(1) 定義區域
#?file同樣是一個相對路徑,/var/named/
#?如果有多個正向域對應同一個網絡的話,多個區域就重名了,所以這里的網絡地址其實自己可以隨意定義,如"網絡地址1.zone"、"網絡地址2.zone"等
#?如果只有一個反向區域的話,就只需要書寫一個反向解析庫,就可以"網絡地址.zone"這樣命名了
zone?"ZONE_NAME"?IN?{
type?{master|slave|forward};
file?"網絡地址.zone";
};
#?因為172.16.242.178和我們的其他服務器(172.16.100.12/172.16.100.11),所以只能寫成"16.172.in-addr.arpa"和"172.16.zone"
#?最后添加如下內容
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
zone?"16.172.in-addr.arpa"?IN?{
type?master;
file?"172.16.zone";
};
(2) 區域解析庫文件
-
以PTR記錄為主
-
不需要MX和A以及AAAA記錄
#?$TTL表示宏定義的TTL值
#?$ORIGIN這里表示反向區域的名稱
#?反向的主機名稱不能省略
#?這里的11和12會自動補充上16.172.in-addr.arpa.
#?別名記錄不用反解,所以ftp沒有書寫反向解析
#?這里可以使用vim?-o?wsescape.com.zone?16.172.zone來同時編輯兩個文件的
[root@localhost?~]#?cd?/var/named/
[root@localhost?named]#?vim?100.16.zone
$TTL?86400
$ORIGIN?16.172.in-addr.arpa.
@IN??SOAns1.wsescape.com.?admin.wsescape.com.?(
??2016042201
??1H
??5M
??7D
??1D?)
IN??NSns1.wsescape.com.
IN????NSns2.wsescape.com.
11.100IN??PTRns1.wsescape.com.
11.100IN??PTRwww.wsescape.com.
12.100IN??PTRmx1.wsescape.com.
12.100IN??PTRwww.wsescape.com.
13.100IN??PTRmx2.wsescape.com.
#?反向解析如果沒有$ORIGIN的情況下,也可以這樣寫
[root@localhost?named]#?vim?100.16.zone
$TTL?86400
@IN??SOAns1.wsescape.com.?admin.wsescape.com.?(
??2016042201
??1H
??5M
??7D
??1D?)
16.172.in-addr.arpa.IN??NSns1.wsescape.com.
IN????NSns2.wsescape.com.
11.100IN??PTRns1.wsescape.com.
11.100IN??PTRwww.wsescape.com.
12.100IN??PTRmx1.wsescape.com.
12.100IN??PTRwww.wsescape.com.
13.100IN??PTRmx2.wsescape.com.
(3) 修改權限并重啟
[root@localhost?named]#?chmod?640?16.172.zone
[root@localhost?named]#?chmod?:named?16.172.zone
#?語法
[root@localhost?named]#?named-checkconf
[root@localhost?named]#?named-checkzone?"16.172.inaddr-addr"?16.172.zone
ok
[root@localhost?named]#?service?named?reload
#?檢測
[root@localhost?named]#?host?-t?PRT?172.16.100.12?172.16.242.178
[root@localhost?named]#?dig?-x?172.16.100.12?@172.16.242.178
3.6 從 DNS 名稱服務器配置
定義從 DNS 服務器就是在緩存服務器的基礎上,進行修改配置
-
在/etc/named.rfc1912.zones添加zone記錄
主從復制
(1)應該為一臺獨立的名稱服務器
(2)主服務器的區域解析庫文件中必須有一條 NS 記錄是指向從服務器
(3)從服務器只需要定義區域,而無須提供解析庫文件;解析庫文件應該放置于/var/named/slaves/目錄中
(4)主服務器得允許從服務器作區域傳送
(5)主從服務器時間應該同步,可通過ntp進行
(6)bind程序的版本應該保持一致;否則,應該從高逐低
定義從區域的方法
-
正向從服務器格式
#?從服務器同步主服務器的解析文件會放在/var/named/slaves/中
zone?"ZONE_NAME"?IN?{
type?slave;
masters?{?MASTER_IP;?};
file?"slaves/ZONE_NAME.zone";
};
-
反向從服務器格式
#?從服務器同步主服務器的解析文件會放在/var/named/slaves/中
zone?"Reverse_Net_Addr.in-addr.arpa"?IN?{
type?master;
file?"SOMEFILE.zone";
};
-
(1)正向從服務器的實例
#?注意這里的從DNS服務器,需要在主DNS服務器中定義上NS記錄
#?這樣才能在主DNS的解析庫發生改變的時候通知從DNS服務器進行同步,否則不會同步的
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
zone?"wsescape.com"?IN?{
type?slave;
masters?{?172.16.242.178;?};
file?"slaves/wsescape.com.zone";
};
#?重起服務即可成效
[root@localhost?~]#?rndc?reload
#?可以通過log進行查看
[root@localhost?~]#?tail?/var/log/messages
-
(2)反向從服務器的實例
#?注意這里的從DNS服務器,需要在主DNS服務器中定義上NS記錄
#?這樣才能在主DNS的解析庫發生改變的時候通知從DNS服務器進行同步,否則不會同步的
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
zone?"16.172.in-addr.arpa"?IN?{
type?slave;
masters?{?172.16.242.178;?};
file?"slaves/172.16.zone";
};
#?重起服務即可成效
[root@localhost?~]#?rndc?reload
#?可以通過log進行查看
[root@localhost?~]#?tail?/var/log/messages
四、高級功能之子域授權
4.1 子域授權的特點
子域授權其實就是在你有域名的情況下,進行細分的狀況。比如說,你注冊了wsescap.com這個域名,由于業務關系等,你需要分開為ops部門和fin部門,分別使用自己的DNS服務器,這個時候你就需要進行子域授權了。
特點
-
分布式數據庫
-
正向解析區域的子域授權比較常見,而反向的相對來說比較難做
4.2 子域授權的方法
正向解析區域子域方法
#?定義一個子區域
#?在/var/named/下的指定文件中進行配置,如這里的/var/named/wsescape.com.zone
#?在我們授權了wsescape.com的前提下,定義兩個子域,分別為ops和fin兩個
ops.wsescape.com.INNSns1.ops.wsescape.com.
ops.wsescape.com.INNSns2.ops.wsescape.com.
ns1.ops.wsescape.com.INA1.1.1.1
ns2.ops.wsescape.com.INA1.1.1.2
fin.wsescape.com.INNSns1.fin.wsescape.com.
fin.wsescape.com.INNSns2.fin.wsescape.com.
ns1.fin.wsescape.com.INA3.1.1.1
ns2.fin.wsescape.com.INA3.1.1.2
4.3 解析方式
前提:如果在wsescape.com下,定義了一個子域為ops,并在ops下創建了一個www的服務。
外部解析
(1)當www.test.org中的一臺主機需要訪問ops下的www主機時,就需要進過以下幾個階段:
-
先找根(.),根說你去找com
-
再找com,com說你去找wsescape
-
再找wsescape,wsescape說你去找ops
-
最后ops返回需要的信息
內部解析
(1)當wsescape.com下的一臺主機需要訪問ops下的www主機時,雖然wsescape.com的DNS主機不給于解析,但是它知道子域的位置,所以會立即指向ops的DNS服務器。
(2)當ops下的一臺主機需要訪問wsescape.com下的www主機時,就需要進過以下幾個階段:
-
先找ops,ops說你找根
-
再找根(.),根說你去找com
-
再找com,com說你去找wsescape
-
最后wsescape返回需要的信息
我們會發現這個饒了一大圈,為了避免這樣的問題,就需要定義轉發服務器。
4.4 定義轉發服務器
注意
(1)關閉dnssec功能
dnssec-enable no
dnssec-validation no
(2)被轉發的服務器需要能夠為請求者做遞歸,否則轉發請求不予進行
(3)即定義了全局轉發又定義了區域轉發,優先級為能夠精確匹配到的先通過區域轉發,不能再通過全局轉發
轉發模式
(1) 全局轉發
凡是對非本機所有負責解析的區域的請求,統統轉發給指定的服務器
#?forward定義轉發模式
#?first表示先轉發給指定解析服務器,如無響應的話再找根服務器,即先遞歸在迭代
# only表示轉發給指定解析服務器,僅僅遞歸
#?fowwarders定義轉發給誰
Options?{
forward?{?first|only?};
forwarders;
}
(2) 區域轉發
僅轉發對特定的區域的請求至某服務器
需要自己定義區域和區域類型等信息
#?forward定義轉發模式
#?first表示先轉發給指定解析服務器,如無響應的話再找根服務器,即先遞歸在迭代
# only表示轉發給指定解析服務器,僅僅遞歸
#?fowwarders定義轉發給誰
zone?"ZONE_NAME"?IN?{
type?forward;
forward?{?first|only?};
forwarders;
}
4.5 子域父域配置
前提:
-
父域IP地址 ==> 172.16.100.11
-
子域IP地址 ==> 172.16.100.12
-
能訪問互聯網的IP地址 ==> 172.16.0.1
(1)父域服務器配置
#?一臺獨立的主機,這里配置父域就是在主服務器配置的基礎上,添加子域而已
#?注釋的話,默認監聽所有
#?如果發現測試無法成功,查看/etc/named.conf中的dnssec改為no而非注釋掉,否則導致本地客戶端不接受
[root@localhost?~]#?yum?installl?-y?bind
[root@localhost?~]#?vim?/etc/named.conf
options?{
//??????listen-on?port?53?{?172.16.242.178;?127.0.0.1;?};
//??????listen-on-v6?port?53?{?::1;?};
????????directory???????"/var/named";
????????dump-file???????"/var/named/data/cache_dump.db";
????????statistics-file?"/var/named/data/named_stats.txt";
????????memstatistics-file?"/var/named/data/named_mem_stats.txt";
//??????allow-query?????{?localhost;?};
????????recursion?yes;
????????dnssec-enable?no;
????????dnssec-validation?no;
????????/*?Path?to?ISC?DLV?key?*/
//??????bindkeys-file?"/etc/named.iscdlv.key";
//??????managed-keys-directory?"/var/named/dynamic";
};
[root@localhost?~]#?service?named?start
[root@localhost?~]#?ss?-tunl?|?grep?:53
udp????UNCONN?????0??????0??????????????127.0.0.1:53????????????????????*:*
udp????UNCONN?????0??????0????????????????????::1:53???????????????????:::*
tcp????LISTEN?????0??????3????????????????????::1:53???????????????????:::*
tcp????LISTEN?????0??????3??????????????127.0.0.1:53????????????????????*:*
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
zone?"wsescape.com"?IN?{
type?master;
file?"wsescape.com.zone";
};
#?ops、ns2.ops和ns1.ops都會自動補全wsescape.com.
#?這里沒有定義ns2.ops的A記錄,是因為ns2.ops我們沒有配置主機
#?如果父域需要查找子域的時候,可能會跑到我們這個沒有配置的機器上,導致服務解析,所以這就是沒有定義的原因
[root@localhost?~]#?vim?/var/named/wsescape.com.zone
$TTL?1D
$ORIGIN?wsescape.com.
@????IN????SOA????ns1.wsescape.com.????admin.wsescape.com?(
??2016042201
??1H
??5M
??7D
??1D?)
???IN????NS???ns1
???IN????NS???ns2
ns1????IN????A????172.16.100.11
ns2????IN????A????172.16.100.18
www????IN?A????172.16.100.11
*??????IN????A????172.16.100.11
ops????IN????NS???ns1.ops
ops????IN????NS???ns2.ops
ns1.ops????IN????A????172.16.100.12
[root@localhost?~]#?cd?/var/named/
[root@localhost?named]#?chown?:named?wsescape.com.zone
[root@localhost?named]#?chmod?640?wsescape.com.zone
[root@localhost?~]#?rndc?reload
server?reload?successful
[root@localhost?~]#?tail?/var/log/messages
(2)子域服務器配置
#?配置子域服務器,即一臺獨立的主機,和父域配置沒什么大的差別
#?注釋的話,默認監聽所有
#?如果發現測試無法成功,查看/etc/named.conf中的dnssec改為no而非注釋掉,否則導致本地客戶端不接受
[root@localhost?~]#?yum?installl?-y?bind
[root@localhost?~]#?vim?/etc/named.conf
options?{
//??????listen-on?port?53?{?172.16.242.178;?127.0.0.1;?};
//??????listen-on-v6?port?53?{?::1;?};
????????directory???????"/var/named";
????????dump-file???????"/var/named/data/cache_dump.db";
????????statistics-file?"/var/named/data/named_stats.txt";
????????memstatistics-file?"/var/named/data/named_mem_stats.txt";
//??????allow-query?????{?localhost;?};
????????recursion?yes;
????????dnssec-enable?no;
????????dnssec-validation?no;
????????/*?Path?to?ISC?DLV?key?*/
//??????bindkeys-file?"/etc/named.iscdlv.key";
//??????managed-keys-directory?"/var/named/dynamic";
};
[root@localhost?~]#?service?named?start
[root@localhost?~]#?ss?-tunl?|?grep?:53
udp????UNCONN?????0??????0??????????????127.0.0.1:53????????????????????*:*
udp????UNCONN?????0??????0????????????????????::1:53???????????????????:::*
tcp????LISTEN?????0??????3????????????????????::1:53???????????????????:::*
tcp????LISTEN?????0??????3??????????????127.0.0.1:53????????????????????*:*
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
zone?"ops.wsescape.com"??IN?{
type?master;
file?"ops.wsescape.com.zone";
};
#?ns1和ns2都會自動補全ops.wsescape.com.
#?這里也省略了ns2的定義,因為沒有這里機器,如果父域需要查找子域的時候
#?可能會跑到我們這個沒有配置的機器上,導致服務解析,所以這就是沒有定義的原因
[root@localhost?~]#?vim?/var/named/ops.wsescape.com.zone
$TTL?1D
$ORIGIN?ops.wsescape.com.
@????IN????SOA????ns1.ops.wsescape.com.????admin.ops.wsescape.com?(
??2016042201
??1H
??5M
??7D
??1D?)
???IN????NS???ns1
???IN????NS???ns2
ns1????IN????A????172.16.100.12
www????IN?A????172.16.100.20
*??????IN????A????172.16.100.20
[root@localhost?~]#?cd?/var/named/
[root@localhost?named]#?chown?:named?wsescape.com.zone
[root@localhost?named]#?chmod?640?wsescape.com.zone
[root@localhost?~]#?rndc?reload
server?reload?successful
[root@localhost?~]#?tail?/var/log/messages
(3)測試配置
#?當這里,我們會發現如下問題
#?在子域服務器中,執行命令后可以查看ops的信息
#?172.16.100.12為子域服務器
[root@localhost?~]#?dig?-t?A?www.ops.wsescape.com?@172.16.100.12
#?在子域服務器中,執行命令后在無網絡的情況下不能查看父域的信息,在有網的情況下會根據根返回的信息來定位父域信息
[root@localhost?~]#?dig?-t?A?www.wsescape.com?@172.16.100.12
#?在父域服務器中,執行命令后可以查看子域ops的信息
#?這里dig命令默認執行一個遞歸操作,所以這里需要加上+norecurse非遞歸即可
#?172.16.100.11為父域服務器
[root@localhost?~]#?dig?-t?A?ops.wsescape.com?@172.16.100.11?+norecurse
[root@localhost?~]#?dig?-t?A?www.ops.wsescape.com?@172.16.100.11?+norecurse
4.6 定義轉發域
注意
-
如果發現測試無法成功,查看/etc/named.conf中的dnssec改為no而非注釋掉,否則導致本地客戶端不接受
-
如果測試應該為不能解析但是還是解析了,可能需要清空緩存rndc flush
服務配置
(1)全局轉發
#?在父域中配置
#?全局轉發,就是通通轉發給172.16.0.1來查詢
#?在父域服務器上編輯/etc/named.conf,在options添加如下信息
#?由于上述的機器沒有連接互聯網,所以可以通過172.16.0.1進行解析
[root@localhost?~]#?vim?/etc/named.conf
Options?{
forward?first;
forwarders { 172.16.0.1;?};
}
[root@localhost?~]#?rndc?reload
server?reload?successful
[root@localhost?~]#?tail?/val/log/messages
#?父域中測試可以
[root@localhost?~]#?dig?-t?A?www.baidu.com?@172.16.100.11
(2)區域轉發
#?在子域中配置
#?區域轉發,就是將wsescape.com這個域內的查詢轉發給172.16.100.11來查詢
#?在子域服務器上編輯/etc/named.rfc1912.zones最后添加一個zone
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
zone?"wsescape.com"??IN??{
type?forword;
forward?only;
forwarders?{?172.16.100.11;?};
};
[root@localhost?~]#?rndc?reload
server?reload?successful
[root@localhost?~]#?tail?/val/log/messages
#?子域中測試可以,成功
[root@localhost?~]#?dig?-t?A?www.wsescape.com?@172.16.100.12
(3)測試配置
#?父域中測試,成功
[root@localhost?~]#?dig?-t?A?www.ops.wsescape.com?@172.16.100.11
[root@localhost?~]#?dig?-t?A?www.baidu.com?@172.16.100.11
#?子域中測試,子域知道父域在哪里,成功
#?在子域中還是無法解析,因為指定要了定義區域wsescape.com可以解析
#?如果在子域中,即定義了全局轉發有定義了區域轉發,優先級為能夠精確匹配到的先通過區域轉發,不能再通過全局轉發
[root@localhost?~]#?dig?-t?A?www.wsescape.com?@172.16.100.12
#?子域解析失敗
[root@localhost?~]#?dig?-t?A?www.baidu.com?@172.16.100.12
五、高級功能之view視圖
5.1 BIND中基礎的安全相關的配置
(1)acl機制
-
把一個或多個地址歸并為一個集合,并通過一個統一的名稱調用
-
只能先定義后使用,其一般定義在配置文件中options的前面
(2)acl格式
#?acl表示關鍵字,acl_name表示自定義名稱
#?ip表示單個的IP地址,net表示網絡,意思就是單個IP和網絡都可以定義
acl?acl_name?{
ip;
ip;
net/prelen;
};
(3)四個內置的acl
因為這四個是內置的acl,所以在我們自己定義的時候不能使用這幾個名稱,否則會導致誤用發生。
-
none ==> 沒有一個主機
-
any ==> 任意主機
-
local ==> 本機
-
localnet ==> 本機的IP同掩碼運算后得到的網絡地址
(4)訪問控制的指令
以下的這幾個指令,可以用在/etc/named.conf中表示全局生效,也可以用在/etc/named.rfc1912.zones中,定義在單獨的zone中表示局部生效。同時,{}內可以包含定義的acl或者主機IP地址,包括內置的和我們自己定義的。
-
allow-query {} ==> 允許查詢的主機,即白名單
-
allow-transfer {} ==> 允許區域傳送的主機,即白名單
-
allow-recursion {} ==> 允許遞歸的主機
-
allow-update {} ==> 允許更新區域數據庫中的內容,建議設置為none
(5)演示示例
#?這里我們定義的acl,可以在主配置文件/etc/named.conf中的option中使用,可以在`/etc/named.rfc1912.zones`中使用
#?定義自己的acl
acl?mynet?{
172.16.1.100;
172.16.0.0/16;
}
#?在/etc/named.conf中的option中使用
[root@localhost?~]#?vim?/etc/named.conf
acl?mynet?{
172.16.1.100;
172.16.0.0/16;
}
options?{
//??????listen-on?port?53?{?172.16.242.178;?127.0.0.1;?};
????????directory???????"/var/named";
????????dump-file???????"/var/named/data/cache_dump.db";
????????statistics-file?"/var/named/data/named_stats.txt";
????????memstatistics-file?"/var/named/data/named_mem_stats.txt";
????????allow-query?????{?mynet;?};
????????recursion?yes;
????????dnssec-enable?no;
????????dnssec-validation?no;
};
...
#?在`/etc/named.rfc1912.zones`中使用
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
zone?"wsescape.com"??IN?{
type?master;
file?"wsescape.com.zone";
allow-query?{?mynet;?};
};
...
5.2 BIND view
用途:
主要適用于對于用戶的分類,提高網站訪問效率。
-
如按照內、外網指定不同訪問方式來訪問網站
-
如按照運營商類型制定不同用戶訪問指定的服務器來訪問網站
-
其實?BIND view就是實現分布式緩存,類似于CDN的一致方式
解析過程
-
當一個用戶請求接收之后,首先判斷用戶的來源,然后自上而下逐個與各個view自己的用戶節系列表進行匹配,最終來確定view系統解析功能,返回指定的區域解析庫文件
-
一般用view1匹配第一個網絡, 用view2匹配第二個網絡, 用view3匹配其余網絡,保證不會有缺漏
(1)視圖
-
一個bind服務器可定義多個view,每個view中可定義一個或多個zone區域
-
每個view用來匹配一組請求的客戶端
-
多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件
(2)格式
-
view是自上而下,逐一匹配
-
大多數用在option中的指令,都可以用在view中
view?VIEW_NAME?{
match-clients?{??};
}
(3)注意
(1)一旦啟用了view,所有的zone都只能定義在view中,一個都不允許例外
(2) 僅有必要在匹配到允許遞歸請求的客戶所在view中定義根區域
(3)客戶端請求到達時是自上而下檢查每個view所服務的客戶端列表
(4)實驗演示
-
將來自172.16網絡并訪問www.wsescape.com的用戶,使用172.16.100.11這個DNS服務器來指定www服務器的地址
-
將非來自172.16網絡并訪問www.wsescape.com的用戶,使用公網2.2.2.1這個DNS服務器來指定www服務器的地址
#?在172.16.100.11的主機中
#?定義acl并將/etc/named.conf中定義的根zone刪除
[root@localhost?~]#?vim?/etc/named.conf
#?刪除如下根zone
zone??"."??IN??{
type?hint;
file?"named.ca";
};
#?添加acl
acl?mynet??{
172.16.0.0/16;
127.0.0.0/8;
};
#?在172.16.100.11的主機中
#?將根移到/etc/named.rfc1912.zones中,并將所有的zone包含在view中
#?并添加內部訪問配置internal
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
#?添加view,限制mynet用戶可以訪問并允許遞歸
view??internal??{
match-chlients?{?mynet;?};
allow-recursion?{?mynet;?};
#?添加根
zone??"."??IN??{
type?hint;
file?"named.ca";
};
#?由于之前的設置,這里是有wsescape.com,并配置了wsescape.com.zone文件
zone??"wsescape.com"??IN??{
type?master;
file?"wsescape.com.zone";
}
...
};
#?在172.16.100.11的主機中
#?如果我們在/etc/named.conf中增加192.168.0.0/24網絡,就可以在192.168.0.13中可以解析,這里沒有添加進去
[root@localhost?~]#?named-checkconf
[root@localhost?~]#?service?named?restart
#?在172.16.100.11主機上,成功
[root@localhost?~]#?dig?-t?A?www.wsescape.com?@172.16.100.11
#?如果配置了,在192.168.0.13主機上,成功
[root@localhost?~]#?dig?-t?A?www.wsescape.com?@172.16.100.11
#?在172.16.100.11的主機中
#?在/etc/named.rfc1912.zones中,添加外部訪問配置
#?這里對沒有匹配到的主機,不進行遞歸,所以在external就沒有添加根域
[root@localhost?~]#?vim?/etc/named.rfc1912.zones
view?external?{
match-clents?{?any;?};
zone?"wsescape.com"??IN??{
type?master;
file?"wsescape.com.external";
allow-update?{?none;?};
};
};
[root@localhost?~]#?cd?/var/named/
#?歸檔復制
[root@localhost?named]#?cp?-a?wsescape.com.zone?wsescape.com.external
#?這里的2.2.2.1表示的是wsescape.com網站的公網DNS服務器
[root@localhost?named]#?vim?wsescape.com.external
$TTL?1D
$ORIGIN?wsescape.com.
@????IN????SOA????ns1.wsescape.com.????admin.wsescape.com?(
??2016042201
??1H
??5M
??7D
??1D?)
???IN????NS???ns1
???IN????NS???ns2
ns1????IN????A????172.16.100.11
ns2????IN????A????172.16.100.18
www????IN?A????2.2.2.1
*??????IN????A????2.2.2.1
[root@localhost?~]#?service?named?restart
#?在172.16.100.11主機上,成功來自172.16.100.11
[root@localhost?~]#?dig?-t?A?www.wsescape.com?@172.16.100.11
#?在192.168.0.13主機上,成功來自2.2.2.1
[root@localhost?~]#?dig?-t?A?www.wsescape.com?@172.16.100.1
六、高級功能之編譯安裝BIND
#?最小化安裝機器
[root@localhost?~]#?yum??groupinstall?"Development?Tools"?"Server?Platform?Development"
#?去官網isc.org下載安裝包,bind-9.10.1-P1.tar.gz
#?bind9和bind10的區別很大,而且bind10還在測試階段
#?創建named用戶和組
#?安裝在同一目錄下/usr/local/bind9,系統文件放在/etc/named/
#?禁用IPv6功能,禁用chroot功能,啟動線程多核工作
#?自己手動編譯安裝bind可能會出現的問題
#?(1)在/etc/named/沒有配置文件或者為空,需要自己創建
#?(2)沒有任何區域解析庫文件,即/var/named,所以也沒有13個根節點,需要自己創建
#?(3)沒有rndc的配置文件,需要自己創建
#?(4)沒有啟動腳本,沒有/etc/init.d/named文件
#?這里由于自定義安裝到了/usr/local/bind9中,所以像dig、host等工具不能直接調用,需要完整路徑
[root@localhost?~]#?tar?xf?bind-9.10.1-P1.tar.gz
[root@localhost?~]#?cd?bind-9.10.1-P1
[root@localhost?~]#?groupadd?-r?-g?53?named
[root@localhost?~]#?useradd?-r?-u?53?-g?53?named
[root@localhost?~]#?./configure?--prefix=/usr/local/bind9?--sysconfdir=/etc/named/?--disable-ipv6?--disable-chroot?--enable-threads
[root@localhost?~]#?make
[root@localhost?~]#?make?install
#?添加環境變量,就可以調用相關命令
[root@localhost?~]#?vim?/etc/profile.d/named.sh
export?PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH
[root@localhost?~]#?.?/etc/profile.d/named.sh
#?導出庫文件
[root@localhost?~]#?vim?/etc/ld.so.conf.d/named.conf
/usr/loacl/bind9/lib
#?重新載入庫文件
[root@localhost?~]#?ldconfig?-v
#?如果有頭文件,導出頭文件
[root@localhost?~]#?ln?-sv?/usr/local/bind9/include?/usr/include/named
#?之后就可以使用/usr/include/named來訪問/usr/local/bind9/中的頭文件了
[root@localhost?~]#?ls?/usr/include/named
#?在/usr/local/bind9/下有share的幫助文件,添加MANPATH將其放入man中
[root@localhost?~]#?vim?/etc/man.conf
MANPATH?/usr/local/bind9/share/man
#?添加主配置文件,這里只添加directory就可以了
[root@localhost?~]#?vim?/etc/named/named.conf
option??{
directory?"/var/named"
};
zone??"."??IN??{
type?hint;
file?"named.ca";
};
zone??"localhost"??IN??{
type?master;
file?"localhost.zone";
allow-update?{?none;?};
};
zone??"0.0.127.in-addr.arpa"??IN??{
type?master;
file?"named.local";
allow-update?{?none;?};
};
[root@localhost?~]#?mkdir?/var/named/{named.ca,?localhost.zone,?named.local}
#?使用dig命令來生成13個根節點,172.16.0.1為網關地址,可以幫助我們連接外網的地址,獲取13個根節點
[root@localhost?~]#?dig?-t?NS?.?@172.16.0.1?>?/var/named/named.ca
[root@localhost?~]#?vim?/var/named/localhost.zone
$TTL?1D
@????IN????SOA????localhost.????admin.localhost.?(
??2016042201
??1H
??5M
??7D
??1D?)
???IN????NS???localhost.
localhost.????IN????A????172.0.0.1
[root@localhost?~]#?vim?/var/named/named.local
$TTL?1D
@????IN????SOA????localhost.????admin.localhost.?(
??2016042201
??1H
??5M
??7D
??1D?)
???IN????NS???localhost.
1????IN????PRT????localhost.
[root@localhost?~]#?cd?/var/named/
[root@localhost?named]#?chmod?640?./*
[root@localhost?named]#?chown?:named?*
[root@localhost?named]#?chmod?640?/etc/named/named.conf
#?查看幫助文檔
[root@localhost?~]#?man?named
#?啟動named服務,調試
[root@localhost?~]#?named?-u?named?-f?-g?-d?3
#?啟動named服務,不調試
[root@localhost?~]#?named?-u?named
#?查看是否啟動
[root@localhost?~]#?ss?-tunl?named?|?grep?:53
#?關閉named服務
[root@localhost?~]#?killall?named
#?添加解析區域
[root@localhost?~]#?vim?/etc/named/named.conf
zone??"wsescape.com"??IN??{
type?master;
file?"wsescape.com.zone";
allow-update?{?none;?};
};
[root@localhost?~]#?vim?/var/named/wsescape.com.zone
$TTL?1D
$ORIGIN?wsescape.com.
@????IN????SOA????ns.wsescape.com.????admin.wsescape.com.?(
??2016042201
??1H
??5M
??7D
??1D?)
???IN????NS???ns
ns?????IN????A????172.16.100.11
www????IN????A????172.16.100.11
[root@localhost?named]#?chmod?640?wsescape.com.zone
[root@localhost?named]#?chown?:named?wsescape.com.zone
#?啟動
[root@localhost?named]#?named?-u?named
#?解析正常
[root@localhost?named]#?dig?-t?A?www.wsescape.com?@172.16.100.11
#?當我們使用rndc?reload等的時候,會提示我們沒有配置文件
#?想讓rndc可用,使用rndc-confgen來生成配置文件
#?如果使用rndc-confgen發生堵塞,可以使用rndc-confgen -r /dev/urandom來生成隨機數
#?用rndc-confgen生成的文件,將#Start和#End之間的配置文件放到/etc/named/rndc.conf中,之后根據提示將后續的內容放到/etc/named/named.conf中
[root@localhost?~]#?rndc-confgen
#?Start?of?rndc.conf
key?"rndc-key"?{
algorithm?hmac-md5;
secret?"ZeE7NXZTprjARrGN/KRANQ==";
};
options?{
default-key?"rndc-key";
default-server?127.0.0.1;
default-port?953;
};
#?End?of?rndc.conf
#?Use?with?the?following?in?named.conf,?adjusting?the?allow?list?as?needed:
#?key?"rndc-key"?{
#algorithm?hmac-md5;
#secret?"ZeE7NXZTprjARrGN/KRANQ==";
#?};
#
#?controls?{
#inet?127.0.0.1?port?953
#allow?{?127.0.0.1;?}?keys?{?"rndc-key";?};
#?};
#?End?of?named.conf
#?現在rndc?reload可以使用了
[root@localhost?~]#?rndc?reload
#?之后就只需要給提供一個腳本來像service一樣,啟動和關閉服務,不難的
#?編譯安裝,在bind-9.10.1-P1源碼目錄下,有一個contrib目錄
#?其中包含的是第三方貢獻的補充增強bind的功能
#?其中有一個目錄為scripts包含一些腳本,我們可以參考
#?還有一個目錄為queryperf來評估查詢性能的,做壓測的,需要編譯安裝才能使用
#?編譯安裝queryperf,只需要在其目錄下執行./configure和make即可完成
#?就會生成一個queryperf的可執行文件,執行下列操作就可以直接使用了
[root@localhost?queryperf]#?cp?queryperf?/usr/local/bind9/bin/
#?在測試的時候,需要指定一個測試的文件,如test
[root@localhost?~]#?vim?test
www.wsescape.com?A
wsescape.com?NS
[root@localhost?~]#?queryperf?-d?test?-s?172.16.100.11
總結
以上是生活随笔為你收集整理的DNS域名解析服务配置会不会?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux命令速查表
- 下一篇: 运维基础(13)日志切割工具 Logro