linux學習35-DNS服務和BIND
DNS服務和BIND
1. DNS服務
DNS(Domain Name Service) 應用層協議,基於C/S,伺服器埠號為(53/udp向伺服器查詢時候用到, 主從複製時候用到53/tcp和53/udp)
1.1 DNS概述
-
DNS軟體
- BIND:Bekerley Internat Name Domain 官方地址:ISC (www.isc.org),目前最新版本為9.11,centos7.5使用的為9.9版本,市場佔有率高
- unbound:遞迴快取DNS解析伺服器,宣傳為更加安全的DNS伺服器,紅帽各版本有整合,目前使用率沒有BIND高 官方地址:http://unbound.net/
-
名字解析服務的實現方法
- DNS服務:分散式服務,只負責解析,不負責連通
- 本地名稱解析配置檔案:/etc/hosts,優先順序高於DNS,用於特定環境,例如叢集。也叫分散式的名字解析服務
例如:在檔案中定義 www.magedu.com對應ip為8.8.8.8
修改名字解析服務優先順序,不建議修改 /etc/nsswitch.conf[[email protected] ~]$vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 8.8.8.8 www.magedu.com <=
[[email protected] ~]$vim /etc/nsswitch.conf #hosts: db files nisplus nis dns
- NIS服務(Network Information Service),一個集中的管理思想,此服務維護了一個數據庫,存放著IP地址與名字的對應關係,使用者訪問NIS服務,NIS查詢資料庫返回相應結果
-
DNS伺服器的型別
- 主DNS伺服器 管理和維護所負責解析的域內解析庫的伺服器
- 從DNS伺服器
只負責同步資料,不提供修改功能,為備用伺服器
同步方法有兩類
- 拉同步:從伺服器主動向主伺服器拉取資料,拉取的觸發條件為同步時間
- 推同步:主伺服器將資料推送給從伺服器,觸發條件為解析庫發生變化
- 快取DNS伺服器(轉發器)
1.2 域名級別及定址原理
-
以我們常見的網站格式為例,先來解釋一下各部分名稱
-
而域名等級劃分時,全稱域名的寫法為www.magedu.com.<==多了個點,倒過來排序
-
最右邊的點[.]:表示根域
-
com:表示頂級域或者一級域(TLD)
- 國家頂級域名(nTLDs):中國cn、美國是us、日本是jp等
- 國際頂級域名(iTDs):括com net gov org edu mil int tech 等
-
magedu:表示二級域(SLD)
-
www:表示主機名
-
1.3 DNS解析
Client -->hosts檔案 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 頂級域名DNS–>二級域名DNS…
-
DNS定址原理
- 在根域上有一個DNS伺服器,它的資料庫存放了下級域DNS服務的IP地址和DNS伺服器的名稱
- 而每個一級域名也有自己的DNS伺服器,存放的是其下級域的IP地址和DNS伺服器的對應關係
- 二級域也維護了各自的DNS伺服器,只維護了自己的二級域名,例如magedu.com,只維護以此結尾的名稱與IP地址
- 每個DNS伺服器在安裝時已經內建了根伺服器的地址 5.客戶訪問網站時,首先通過hosts檔案解析
- 如果hosts檔案沒有解析,則查本機DNS快取,linux中預設沒有快取。在windows中可在命令欄輸入ipconfig/displaydns查詢,清快取ipconfig/flushdns,
- 本機快取沒有,則將請求傳送給本地DNS伺服器,本地DNS伺服器查詢快取中是否有目標地址,如果沒有就找到根,請求目標網站的ip
- 根伺服器返回一級域名地址,也就是.com域伺服器
- 本地伺服器再去找一級域名伺服器,一級域伺服器返回二級域也就是163.com的地址
- 本地伺服器找到二級域伺服器,得到IP地址,將地址寫入快取,並回傳給客戶,客戶再通過http協議(底層為tcp協議),經過握手後訪問網站
-
DNS查詢型別:
- 遞迴查詢 DNS域名伺服器代替提出請求的客戶機進行域名查詢,返回最終的結果交給了客戶
- 迭代查詢 其他伺服器返回一個最佳的查詢點提示或主機地址,若此最佳的查詢點中包含需要查詢的主機地址,則返回主機地址資訊;若此時伺服器不能夠直接查詢到主機地址,則是按照提示的指引依次查詢,直到伺服器給出的提示中包含所需要查詢的主機地址為止,例如根伺服器返回給本地服務一級伺服器地址,九尾迭代查詢
-
解析型別: 正反向解析是兩個不同的名稱空間,是兩棵不同的解析樹
- 正向解析FQDN --> IP :將名字解析為IP
- 反向解析 IP --> FQDN: 將IP解析為名字
- 反向解析用到根域下一個特殊的名為ARPA域,叫反向解析域
- 反向解析域下面有一個in-addr,再往下為IP地址
- 以172.20.0.100為例,查詢路線為訪問根–>arpa域–>in-addr–>172–>20–>0–>100
-
解析答案:
- 肯定答案
- 權威答案:標記為aa
- 非權威答案
- 否定答案:請求的條目不存在等原因導致無法返回結果
- 肯定答案
1.4 資源記錄
-
區域解析庫: 如下例中建立的資料庫magedu.com.zone,負責解析magedu.com這個區域,所以稱為區域解析庫,裡面有很多的記錄組合而成,每條記錄叫做資源記錄(RR)
-
資源記錄:Resource Record, RR 區域解析庫裡面由很多記錄組合而成,每條記錄叫做資源記錄
-
資源記錄型別
- SOA(Start Of Authority) 起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於整個解析庫的第一條記錄,記錄了這個域的相關資訊
- A (internet Address)
將名字域IP地址做一個對應關係,FQDN --> IP IPv4地址
示例
www.magedu.com 86400 IN A 101.200.188.230 生成1-254範圍內的HOST記錄,也就是HOST1.moli.com A 1.2.3.1 ... HOST100.moli.com A 1.2.3.100 $GENERATE 1-254 HOST$ A 1.2.3.$ 即使使用者輸入不加www.,也可以解析的寫法 @ 86400 IN A 192.168.169.128 moli.com. IN A 192.168.169.128 效果與上相同 避免使用者寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址 *.moli.com. IN A 192.168.169.128
- AAAA
同A,對應的為IPv6地址
www.magedu.com 86400 IN AAAA IPv6
- PTR (PoinTeR) 將IP地址反向解析為名字,IP --> FQDN
- NS (Name Server) 專用於標明當前區域的DNS伺服器,當前域有多少DNS伺服器,名字是什麼,例如備用DNS服務地址
- MX(Mail eXchanger) 郵件交換器,設定區域中擔任郵件伺服器的主機,所有要送往那部機器的mail 都要經過mail exchanger 轉送。 而數字則是該主機郵件傳遞時的優先次序,此值越低表示有越高的郵件處理優先權。
- TXT:
對域名進行標識和說明的一種方式,一般做驗證記錄時會使用此項,如:SPF(反垃圾郵件)記錄,https驗證等
將來搭建加密http服務時,就要像DNS服務商申請一個DNS的TXT記錄,服務商給你一個很長的字串,貼到DNS伺服器的配置中就可以了
示例:
_dnsauth IN TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x
-
資源記錄定義的格式 不論哪種記錄都包含五項元素
- 語法:name [TTL] IN rr_type value
- 特點:
- @代表當前區域的域名,可以用來引用當前域名,例如
@ IN SOA
- 同一個名字可以通過多條記錄定義多個不同的值;此時DNS伺服器會以輪詢方式響應
- 同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;此僅表示通過多個不同的名字可以找到同一個主機
- @代表當前區域的域名,可以用來引用當前域名,例如
- 釋義:
元素 含義 name 指示擁有資源記錄的 DNS 域名,該名稱與資源記錄所在的控制檯樹節點的名稱相同 TTL 快取的時間,生命期,以秒為單位,可定義為類似變數 $TTL 86400
,那麼以下各條相同時間的資源記錄就可以省略IN 代表Internet,保留下來不動就可以 rr_type 資源記錄型別,例如SOA,表示起始授權記錄 value 記錄特定資料,描述資源的資訊
1.4.1 SOA記錄內容
- 元素說明
- name: 當前區域的名字,例如“magedu.com.” com後的點必須寫,不然系統會自動將域名再補一次,變成"magedu.com.magedu.com."
- value:
有多部分組成,從第3條到第7條使用小括號括起來
- 主DNS的名稱
名稱可以自定義,例如
ns.magedu.com
- DNS伺服器的管理員郵箱
因為@在資源記錄中有特殊含義,這裡用點來代替,例如
nsadmin.magedu.com
- 序列號:
2015042201
主伺服器負責修改查詢,從伺服器只負責同步資料,主從伺服器同步是基於解析庫的版本號,比對版本號得知主從伺服器解析庫版本是否相同,版本號為整數,此記錄在主伺服器上是由管理員手工指定的,主伺服器解析庫變化時,其序列遞增,主伺服器解析庫發生變化時,會主動通知從伺服器 - 重新整理時間
從伺服器從主伺服器請求同步解析的時間間隔,預設以秒為單位,支援1h、1d表示,例如:
2H
- 重試時間
從伺服器請求同步失敗時,再次嘗試時間間隔,應該比同步間隔小 ,例如
10m
- 過期時間
從伺服器聯絡不到主伺服器時,多久後停止服務,例如
1W
- 否定答案的TTL值 不存在的記錄快取時長, 將不正確的域名快取起來,直接返回結果給使用者,不需要查詢
- 主DNS的名稱
名稱可以自定義,例如
- 示例
$TTL 86400 <==定義整個記錄的TTL時間為86400 |magedu.com. | IN | SOA | ns.magedu.com. | nsadmin.magedu.com.| ( | name | IN |TYPE| value 1 | value 2 | 2015042201 ;serial <==value 3 2H ;refresh <==value 4 10M ;retry <==value 5 1W ;expire <==value 6 1D ) ;minimum <==value 7
1.4.2 NS記錄
- 元素說明
- name: 當前區域的名字
- 注意
- 一個區域可以有多個NS記錄
- 相鄰的兩個資源記錄的name相同時,後續的可省略
- 對NS記錄而言,任何一個ns記錄後面的伺服器名字,都應該在後續有一個A記錄
- 示例,本區域的兩臺主備DNS伺服器
由於涉及到字串,就必須要有對應的A記錄去解析為IP,所以在A記錄裡要有對應NS地址的記錄| name | TTL | IN | TYPE | value | |magedu.com.|86400| IN | NS | ns1.magedu.com.| magedu.com. 86400 IN NS ns2.magedu.com.
ns1.magedu.com. 86400 IN A 192.168.169.5 ns2.magedu.com. 86400 IN A 192.168.169.6
1.4.3 MX記錄
一個區域內MX記錄可有多個
- 各元素說明
- name: 當前區域的名字
- value: 當前區域的某郵件伺服器(smtp伺服器)的主機名,由2部分組成
- 伺服器的優先順序,由數字(0-99)表示,表示此;數字越小優先順序越高
- 伺服器名
- 例如
涉及到名字,需要在A記錄中增加對應解析項magedu.com. 86400 IN MX 10 mail.magedu.com. 86400 IN MX 20 mail2.magedu.com. <==name相同,下面的記錄可以忽略此元素
mail 86400 IN A 3.3.3.3 <==mail為簡寫,其後沒有加[ . ],會自動補上域名
1.4.4 PTR記錄
- 元素說明
- name: IP,有特定格式,把IP地址反過來寫(例如1.2.3.4,要寫作4.3.2.1); 然後加特定字尾:in-addr.arpa. 所以完整寫法為:4.3.2.1.in-addr.arpa.
- value: FQDN
- 示例
注意:網路地址及字尾可省略;主機地址依然需要反著寫4.3.2.1.in-addr.arpa. 86400 IN PTR www.magedu.com. 如1.2.3為網路地址,可簡寫成: 4 86400 IN PTR www.magedu.com.
1.4.5 CNAME(別名記錄)
- 元素說明
- name: 別名的FQDN
- value: 真正名字的FQDN
- 例如:web-nginx01.magedu.com的別名記錄,
涉及到名字,也需要在A記錄中增加對應的解析記錄www.magedu.com 86400 IN CNAME web-nginx01.magedu.com
web-nginx01.magedu.com 86400 IN A 101.200.188.230
2. DNS管理工具BIND
-
DNS伺服器配置檔案注意項
- 一臺物理伺服器可同時為多個區域提供解析
- 應該有兩個(如果包括ipv6的,應該更多)實現localhost和本地迴環地址的解析庫
-
BIND安裝:centos映象檔案中資源
[[email protected] ~]$ yum install bind
-
包檔案介紹
- 服務名稱 /usr/lib/systemd/system/named.service
- 主配置檔案,/etc/named.conf
任何服務程式如果期望其能夠通過網路被其它主機訪問,至少應該監聽在一個能與外部主機通訊的IP地址上
`全域性配置`:定義一些功能,比如指定監聽埠,從伺服器,轉發服務型別等 options { // listen-on port 53 { 127.0.0.1; }; `日誌子系統配置` logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; `區域定義`:本機能夠為哪些zone進行解析,就要定義哪些zone zone "." IN { <==" . "代表根域 type hint; file "named.ca"; <==負責維護域的資料庫,也就是/var/named/named.ca };
- 主程式 /usr/sbin/named
- DNS子配置檔案,存放解析資訊,例如負責解析的域 /etc/named.rfc1912.zones
- 區域解析資料庫,也就是IP地址與域名的對應關係 /var/named
- 配置檔案類似於key驗證,自編譯軟體時候,啟用rndc命令需要用到 /etc/rndc.key
-
rndc命令(remote name domain controller) 預設與bind安裝在同一主機,且只能通過127.0.0.1連線named程序 提供輔助性的管理功能,埠為953/tcp
- 格式 rndc COMMAND
- 選項:
選項 作用 reload 過載主配置檔案和區域解析庫檔案 reload zonename 過載區域解析庫檔案 retransfer zonename 手動啟動區域傳送,而不管序列號是否增加 notify zonename 重新對區域傳送發通知 reconfig 過載主配置檔案 querylog 開啟或關閉查詢日誌檔案/var/log/message trace 遞增debug一個級別 trace LEVEL 指定使用的級別 notrace 將除錯級別設定為 0 flush 清空DNS伺服器的所有快取記錄 -
修改DNS服務埠設定,允許其對外服務
- 啟動dns服務後,繫結的為本地網絡卡,如果要對外服務,修改配置檔案
修改內容為udp UNCONN 0 0 127.0.0.1:53 *:* tcp LISTEN 0 10 127.0.0.1:53 *:* tcp LISTEN 0 5 192.168.122.1:53 *:*
listen-on port 53
[[email protected] ~]$vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; }; <==修改這裡,如果要綁在其他ip上,可以寫在後面 listen-on port 53 { 127.0.0.1;172.20.50.203;192.168.169.131; }; 修改後效果,末尾的;必須寫
- 重新載入服務,檢視效果
[[email protected] ~]$systemctl reload named [[email protected] ~]$ss -ntul tcp LISTEN 0 10 192.168.169.131:53 *:* tcp LISTEN 0 10 172.20.50.203:53 *:* tcp LISTEN 0 10 127.0.0.1:53 *:*
- 繫結固定的IP地址,一旦Ip地址變更,可能會發生故障,所以建議寫靈活,利用DNS自帶的關鍵字localhost,在DNS中意思為本地所有的IP
[[email protected] ~]$vim /etc/named.conf listen-on port 53 { localhost; }; 修改後效果,末尾的;必須寫
- 啟動dns服務後,繫結的為本地網絡卡,如果要對外服務,修改配置檔案
3. 搭建一個域的主DNS
-
在配置檔案中定義區域的格式
zone "ZONE_NAME" IN { <==定義DNS伺服器的管理域 type {master|slave|hint|forward}; <==此DNS伺服器的型別master(主)、slave(從)、hint(root緩衝區域)、forward(代理查詢) file "ZONE_NAME.zone"; <==此DNS伺服器的域資料庫檔案,名字自定義 };
-
主配置檔案語法檢查: named-checkconf
-
解析庫檔案語法檢查:
|named-checkzone| "magedu.com" | /var/named/magedu.com.zone| | 命令 | 作用域 | 域資料庫檔案 |
-
將修改後的配置生效
- rndc status|reload
- service named reload(centos6)
- systemctl reload named(centos7)
-
搭建步驟
-
修改子配置檔案定義維護的域 在DNS伺服器搭建要維護的域,例如要管理moli.com域,可以放在/etc/named.conf 中,但為了管理清晰,推薦放在
/etc/named.rfc1912.zones
中[[email protected] /data]$vim /etc/named.rfc1912.zones zone "moli.com" IN { <==IN為語法格式,可寫可不寫,zone表示區域," "中寫要管理的域名 type master; <==管理的第一個伺服器,要寫為master,表示主 file "moli.com.zone"; <==存放以moli.com結尾的域名記錄和IP的對應關係,人為指定,不寫路徑,預設放在/var/named下,需要在其下手動建立 }; include "/etc/named.rfc1912.zones"; <==推薦將維護域資訊存放路徑 include "/etc/named.root.key";
-
建立區域資料庫檔案,有模板可以參考named.localhost,拷貝一份,改名為配置檔案中定義的資料庫名
[[email protected] ~]$ls /var/named/ named.localhost <==模板檔案,目錄下還有其他檔案,這裡為顯示效果遮蔽了 拷貝一份改名為自定義檔案 [[email protected] /var/named]$cp named.localhost moli.com.zone
-
拷貝檔案要注意屬組變更的問題,需要變更
[[email protected] /var/named]$ll -rw-r-----. 1 root root 152 Sep 29 13:20 moli.com.zone -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost <==原檔案組為named
系統執行是以系統賬號named執行的,拷貝過來的檔案,屬組變為root,named沒有許可權訪問配置檔案,會報錯
[[email protected] /var/named]$ps aux|grep named named 119598 0.0 10.6 460552 161068 ? Ssl 08:26 0:00 /usr/sbin/named `修改許可權`或者`修改所屬組`或者`拷貝時候-a保留原屬性` [[email protected] /var/named]$ chgrp named moli.com.zone
-
修改區域資料庫moli.com.zone,配置自己的DNS服務
$TTL 1D <==定義整個記錄TTL時長 @ IN SOA dns1.moli.com. admin.moli.com. ( <==SOA記錄,定義了 TTL,可忽略 |@代表本域|IN|型別| 主DNS伺服器 | 管理員郵箱 | 20181001 ; serial <==最長10位,超過會報錯 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns1 <==NS記錄,name,IN,TTL與上面記錄相同,都可以忽略不寫 dns1 A 192.168.169.131 <==dns1後面不加點,會自動補上域名,NS記錄的域名解析A記錄 @ MX 10 mailsrv <==MX郵件伺服器記錄,假設郵件伺服器地址為mailsrv mailsrv A 192.168.169.130 <==MX記錄的域名解析A記錄 websrv A 192.168.169.128 <==web伺服器A記錄,假設地址為websrv www CNAME websrv <==websrv的別名記錄
-
檢查配置檔案及區域資料庫格式,有專用命令
檢查配置檔案錯誤 [[email protected] ~]$named-checkconf 檢查區域資料庫檔案錯誤 [[email protected] ~]$named-checkzone moli.com /var/named/moli.com.zone
-
重啟服務生效配置檔案,兩個命令都可以
[[email protected] ~]$rndc reload [[email protected] ~]$systemctl reload named.service
-
直接用ping命令測,會連線網際網路,而不是我們配置的DNS伺服器
[[email protected] /var/named]$ping www.moli.com PING www.moli.com (117.18.65.182) 56(84) bytes of data.
這是因為,ping命令會將請求傳送給的是本機指向的DNS伺服器
[[email protected] /var/named]$cat /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 114.114.114.114 <==DNS為外網 nameserver 223.6.6.6
將其修改為指向本機,因為我們要做的是DNS解析伺服器
[[email protected] /var/named]$cat /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 127.0.0.1
再次使用Ping命令,解析出來的就是我們配置的伺服器地址
[[email protected] /etc/sysconfig]$ping www.moli.com PING websrv.moli.com (192.168.169.128) 56(84) bytes of data. 64 bytes from 192.168.169.128 (192.168.169.128): icmp_seq=1 ttl=64 time=0.284 ms
-
成功解析出192.168.169.128,就可以在web伺服器上搭建網站,這裡以http服務來搭建 www.moli.com
'給頁面寫個歡迎語' [[email protected] ~]$echo welcome to molihua > /var/www/html/index.html '重啟服務' [[email protected] ~]$service httpd restart
-
在web伺服器上,利用測試工具dig或者host,檢視DNS伺服器連線狀態
'1. 直接查詢,會經過本地dns伺服器解析' [[email protected] ~]$host www.moli.com www.moli.com has address 101.200.188.230 <==本地dns伺服器地址 '2. 只是為了判斷查詢,沒有必要修改配置檔案,以下例格式來手動指向dns伺服器' [[email protected] ~]$dig www.moli.com @192.168.169.132 ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 53125 <==拒絕訪問 '3. 用host測試,格式略微不同,不需要在DNS伺服器地址前寫@' [[email protected] ~]$host wwwmoli.com 192.168.169.132 Host www.moli.com.localdomain not found: 5(REFUSED) <==查詢結果相同,拒絕訪問
-
拒絕訪問,說明dns伺服器配置的許可權有問題,修改主配置檔案allow-query行
[[email protected] ~]$vim /etc/named.conf allow-query { localhost; }; <==未修改時,只允許本地訪問 allow-query { 192.168.169.0/24; }; <==表示192.168.169.0/24網段,可以訪問 allow-query { any; }; <==表示所有人可以訪問 // allow-query { localhost; }; <==註釋掉,也表示所有人可以訪問
-
再次使用測試工具檢視,windows中的測試工具,可以使用ping和nslookup
[[email protected] ~]$host www.moli.com 192.168.169.132 Using domain server: Name: 192.168.169.132 Address: 192.168.169.132#53 Aliases: www.moli.com is an alias for websrv.moli.com. websrv.moli.com has address 192.168.169.128 <==解析成功
-
在windows中將DNS指向我們搭建的DNS伺服器 192.168.169.131,訪問www.moli.com,會看到我們編輯的歡迎語
-
在linux系統當做客戶端,要訪問我們搭建的web網站,同樣要修改DNS伺服器指向,修改網絡卡配置檔案新增
DNS1=192.168.169.131
,重啟服務,會在檔案/etc/resolv.conf生成新的DNS地址[[email protected] ~]$curl www.moli.com <==字元介面瀏覽器 [[email protected] ~]$links www.moli.com <==字元介面瀏覽器
-
4 測試命令
-
專業測試命令dig dig只用於測試dns系統,不會查詢hosts檔案進行解析
- 格式
dig [-t type] name [@SERVER] [query options]
- 常用查詢選項:
+[no]trace:跟蹤解析過程 ,例如
dig +trace magedu.com
+[no]recurse:預設遞迴查詢,禁用遞迴+norecurse
-t type:表示查詢型別,例如dig -t soa www.baidu.com
-x :表示逆向解析,例如dig -x 192.168.169.128 @192.168.169.132
- 示例
如果知道對方主機的全稱域名,可以直接查詢
還可以根據型別查詢,比如想知道某個域裡誰是郵件伺服器[[email protected] ~]$dig www.magedu.com ;; QUESTION SECTION: <==我們提出的請求 ;www.magedu.com. IN A ;; ANSWER SECTION: <==返回的結果 www.magedu.com. 86400 IN CNAME websrv.magedu.com. <==別名 websrv.magedu.com. 86400 IN A 192.168.169.128 <==解析的IP地址
測試反向解析方法一,選項-x ip @指定DNS伺服器[[email protected] ~]$dig -t mx magedu.com ;; ANSWER SECTION: magedu.com. 86400 IN MX 10 mailsrv.magedu.com. <==查詢結果
測試反向解析方法二,dig -t ptr reverseip.in-addr.arpa,ip地址要反著寫[[email protected] ~]$dig -x 192.168.169.128 @192.168.169.132
[[email protected] ~]$dig -t ptr 128.169.168.192.in-addr.arpa. @192.168.169.132
- 格式
-
專業測試命令host
- 格式 host [-t type] name [SERVER]
- 常用選項 -a:顯示詳細的DNS資訊 -r:禁用遞迴處理 -t type:選項查詢型別,同dig
- 示例
與dig不同的地方為,指定DNS伺服器時不需要加@
[[email protected] ~]$dig www.moli.com @192.168.50.107 [[email protected] ~]$host www.moli.com 192.168.50.107
-
專業測試命令nslookup
- 格式
nslookup [-option] [name | -] [server]
- 互動式模式:
nslookup>
server IP: 指明使用哪個DNS server進行查詢
set type=RR_TYPE: 指明查詢的資源記錄型別[[email protected] ~]$nslookup > server 114.114.114.114 <==指明DNS server Default server: 114.114.114.114 Address: 114.114.114.114#53
NAME: 要查詢的名稱[[email protected] ~]$nslookup > set type=mx <==指定型別 > magedu.com <==作用域
- 格式
5. 主從伺服器實現
- 搭建從伺服器要求
- 應該為一臺獨立的名稱伺服器
- 主伺服器的區域解析庫檔案中必須有一條NS記錄指向從伺服器
- 從伺服器只需要定義區域,而無須提供解析庫檔案;解析庫檔案應該放置於/var/named/slaves/目錄中
- 主伺服器得允許從伺服器作區域傳送
- 主從伺服器時間應該同步,可通過ntp進行
- bind程式的版本應該保持一致;否則,應該從高,主低
- 定義從區域的方法:
zone "ZONE_NAME" IN { type slave; <==型別要寫成slave masters { MASTER_IP; }; <==既然是從伺服器,這裡就要指定主伺服器地址 file "slaves/ZONE_NAME.zone"; <==同步主伺服器資料庫檔案,同步資料存放路徑
- 示例,搭接從伺服器
- 在從伺服器上安裝DNS服務bind
[[email protected] ~]$yum install bind
- 修改配置檔案,允許其對外服務
[[email protected] ~]$vim /etc/named.conf options { // listen-on port 53 { 127.0.0.1; }; <==註釋掉 // allow-query { localhost; }; <==註釋掉
- 更改區域資料庫的配置
named服務執行者為系統賬號named,它是沒有許可權在/var/named下建立檔案的,也就是說,將來同步檔案時不能放在此目錄下,需要放在有寫許可權的目錄
/var/named/slaves
[[email protected] ~]$vim /etc/named.rfc1912.zones zone "moli.com" { type slave; <==從伺服器型別要寫'slave' masters { 192.168.169.132; } <==指定主伺服器 file "slaves/moli.com.zone.cc"; <==同步主伺服器資料庫時,資料存放路徑
- 在主伺服器中新增從伺服器NS記錄,重讀資料庫檔案,然後啟動從伺服器named服務
[[email protected] /var/named]$vim moli.com.zone $TTL 1D @ IN SOA dns1.moli.com. admin.moli.com. ( 20181001 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns1 NS dns2 <==從伺服器NS記錄 dns1 A 192.168.169.132 dns2 A 192.168.169.129 <==從伺服器解析記錄 websrv A 192.168.169.128 www CNAME websrv '重讀如資料庫檔案' [[email protected] ~]$rndc reload '啟動從伺服器named服務 ' [[email protected] ~]$systemctl start named
- 檢視/var/named/slaves目錄,是否成功拉取主伺服器的資料庫檔案
[[email protected] /etc]$ls /var/named/slaves/ moli.com.zone.cc <==centos7中此檔案,被處理過,非文字檔案,在centos6中,為文字檔案
- 測試備用伺服器是否可以在主伺服器故障時提供服務
將主伺服器網絡卡暫時關掉,再從客戶端訪問[[email protected] ~]$dig www.moli.com ;; Query time: 2 msec ;; SERVER: `192.168.169.132#53`(192.168.169.132) <==正常情況下,在主服務上取得的結果
[[email protected] ~]$dig www.moli.com ;; SERVER: `192.168.169.129#53`(192.168.169.129) <==備用伺服器生效,備用伺服器只能查詢,不能修改
- 實驗主伺服器資料發生改變,從伺服器是否可以同步,編輯主伺服器資料庫檔案,增加一條記錄
[[email protected] /var/named]$vim moli.com.zone $TTL 1D @ IN SOA dns1.moli.com. admin.moli.com. ( 20181002 ; serial <==將序列號修改,稍微增大一些 bbs A 8.8.8.8 <==新加項,其它與前相同,這裡省略 [[email protected] ~]$rndc reload <==重讀如資料庫檔案
- 在客戶機指定從DNS伺服器查詢bbs,確認是否同步
[[email protected] ~]$dig bbs.moli.com @192.168.169.129 ;; ANSWER SECTION: bbs.moli.com. 86400 IN A 8.8.8.8 <==有這條記錄 ;; SERVER: 192.168.169.129#53(192.168.169.129) <==在從伺服器得到的資料
- 這樣配置有很大的安全隱患,因為即使不在主服務增加NX記錄(只是不能推送資料庫),不影響從伺服器拉取
是可以不通過主伺服器同意,搭建從伺服器的,從而拉取資料,更簡單的方法是使用dig命令直接獲取主伺服器資訊
[[email protected] ~]$dig -t axfr moli.com @192.168.169.132
- 所以一定要加強安全策略,在主、從伺服器編輯主配置檔案,在options專案中新增
allow-transfer { any|ip|none; }
,any表示
- 在從伺服器上安裝DNS服務bind