DNS
DNS解析
-
DNS名稱解析方式:
名稱 –> IP:正向解析
IP –> 名稱:反向解析
注意:二者的名稱空間,非為同一個空間,即非為同一棵樹;因此,也不是同一個解析庫; -
DNS查詢類型:
遞歸查詢:一般是客戶機和服務器之間的查詢;即只發送一個請求,其他的工作交由上層服務器去解決;
迭代查詢:一般是服務器和服務器之間的凡是,即最起初的DNS服務器,由上而下依次從根發送請求,直到查找到目標主機;-
一次完整的查詢請求經過的流程:
Client –> hosts文件 –> DNS Local Cache –> DNS Server (recursion) –>
自己負責解析的域:直接查詢數據庫并返回答案;
不是自己負責解析域:Server Cache –> iteration(迭代) -
解析答案:
-
肯定答案:當請求時正好有結果,然后回應,正向應答;
否定答案:不存在查詢的主機,因此,不存在與其查詢主機對應的值;
權威答案:由直接負責的DNS服務器返回的答案;
非權威答案:DNS服務器中的信息時之前緩存下來的;
-
肯定答案:當請求時正好有結果,然后回應,正向應答;
-
一次完整的查詢請求經過的流程:
DNS服務器
-
負責解析至少一個域:
-
主名稱服務器;
輔助名稱服務器;
-
主名稱服務器;
-
不負責解析:
- 緩存名稱服務器;
-
主-輔DNS服務器:
-
主DNS服務器:維護所負責解析的域數據庫的那臺服務器;讀寫操作均可進行;
-
從DNS服務器:從主DNS服務器那里或其它的從DNS服務器那里“復制”一份解析庫;但只能進行讀操作;
-
“復制”操作的實施方式:
- 序列號:serial, 也即是數據庫的版本號;主服務器數據庫內容發生變化時,其版本號遞增;
- 刷新時間間隔:refresh, 從服務器每多久到主服務器檢查序列號更新狀況;
-
重試時間間隔:retry, 從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔;
重試時間間隔不能小于刷新時間間隔; -
過期時長:expire,從服務器始終聯系不到主服務器時,多久之后放棄從主服務器同步數據;停止提供服務;
過期時長一般設定比較長,方便管理員進行維修后使得從服務器找到主服務器,而不至于關閉DNS服務 - 否定答案的緩存時長:
-
主服務器”通知“從服務器隨時更新數據;
-
區域傳送:
-
全量傳送:axfr, 傳送整個數據庫;
增量傳送:ixfr, 僅傳送變量的數據;
-
全量傳送:axfr, 傳送整個數據庫;
-
-
資源記錄
-
DNS數據庫:解析過程中的域名的解析記錄;
-
FQDN –> IP
正向解析庫;正向區域 -
IP –> FQDN
反向解析庫;反向區域
-
FQDN –> IP
-
區域(zone)和域(domain)
區域是物理概念;域是邏輯概念;- 每個域名所對應的解析記錄稱為zone(區域)
- FQDN:完整主機名,由主機名和域名構成;
-
資源記錄:Resource Record, 簡稱RR;
記錄有類型:A, AAAA, PTR, SOA, NS, CNAME, MX
語法: name [TTL] IN RR_TYPE value-
SOA:
- name: 當前區域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
-
value:有多部分組成
(1) 當前區域的區域名稱(也可以使用主DNS服務器名稱);
(2) 當前區域管理員的郵箱地址;但地址中不能使用@符號,一般使用點號來替代;
(3) (主從服務協調屬性的定義以及否定答案的TTL)magedu.com. 86400 IN SOA magedu.com. admin.magedu.com. ( 2017010801 ;序列號 2H ;刷新時間 10M ; 重試時間 1W ; 過期時間 1D ) ; 否定答案的TTL值, 除第一個序列號外,其他四個的單位默認為秒,也可指定單位:D(天)、M(分鐘)、H(小時)、W(周)。
-
NS:
name: 當前區域的區域名稱
value:當前區域的某DNS服務器的名字,例如ns.magedu.com.;
注意:一個區域可以有多個ns記錄;magedu.com. 86400 IN NS ns1.magedu.com. magedu.com. 86400 IN NS ns2.magedu.com.
-
MX:
name: 當前區域的區域名稱
value:當前區域某郵件交換器的主機名;
注意:MX記錄可以有多個;但每個記錄的value之前應該有一個數字表示其優先級;magedu.com. IN MX 10 mx1.magedu.com. magedu.com. IN MX 20 mx2.magedu.com.
-
A:
name:某FQDN,例如www.magedu.com.
value:某IPv4地址;www.magedu.com. IN A 1.1.1.1 www.magedu.com. IN A 1.1.1.2 bbs.magedu.com. IN A 1.1.1.1
-
AAAA:
name:FQDN
value: IPv6 -
PTR:
name:IP地址,有特定格式,IP反過來寫,而且加特定后綴;例如1.2.3.4的記錄應該寫為4.3.2.1.in-addr.arpa.;
value:FQND4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
-
CNAME:
name:FQDN格式的別名;
value:FQDN格式的正式名字;web.magedu.com. IN CNAME www.magedu.com.
注意:
(1) TTL可以從全局繼承;
(2) @表示當前區域的名稱;
(3) 相鄰的兩條記錄其name相同時,后面的可省略;
(4) 對于正向區域來說,各MX,NS等類型的記錄的value為FQDN,此FQDN應該有一個A記錄; -
SOA:
DNS協議的實現:
DNS協議 –> BIND, PowerDNS(輕量級)
-
bind程序環境:
主程序:/usr/sbin/named
Unit File:/usr/lib/systemd/system/named.service
配置文件:/etc/named.conf
區域解析庫文件:/var/named -
關閉dnssec功能:
/etc/named.confdnssec-enable no; dnssec-validation no;
-
解析一個區域:
-
定義:/etc/named.rfc1912.conf
zone “ilinux.io" IN { type master; file "ZONE_FILE"; }
-
定義解析庫文件:/var/named/ZONE_FILE
$TTL 600 ilinux.io. IN SOA ilinux.io. nsadmin.ilinux.io. ( 2017052301 1H 5M 1W 6H ) IN NS dns1.ilinux.io. IN NS dns2.ilinux.io. dns1.ilinux.io. IN A 172.16.0.67 dns2.ilinux.io. IN A 172.16.0.68 www.ilinux.io. IN A 172.16.0.1 web IN CNAME www
-
定義:/etc/named.rfc1912.conf
Bind
BIND: Berkeley Internet Name Domain
-
dns: 一個協議
bind: dns協議的一種實現
named:bind程序的運行的進程名
程序包:
-
bind-libs:被bind和bind-utils包中的程序共同用到的庫文件;
bind-utils:bind客戶端程序集,例如dig, host, nslookup等;
bind:提供的dns server程序、以及幾個常用的測試程序;
bind-chroot:選裝,讓named運行于jail模式下; -
bind程序安裝完成之后,默認即可做緩存名稱服務器使用;如果沒有專門負責解析的區域,直接即可啟動服務;
-
CentOS 6: service named start
CentOS 7: systemctl start named.service
-
CentOS 6: service named start
bind:
-
主配置文件:/etc/named.conf
包含在內的其它文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key默認指向的DNS服務器:/etc/resolv.conf
-
解析庫文件:
每一個域文件都放在/var/named/目錄下;
一般名字為:ZONE_NAME.zone -
注意:
- 一臺DNS服務器可同時為多個區域提供解析;
- 必須要有根區域解析庫文件: named.ca;
-
還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫;
-
正向:named.localhost
反向:named.loopback
-
正向:named.localhost
-
rndc:remote name domain contoller
953/tcp,但默認監聽于127.0.0.1地址,因此僅允許本地使用;
-
主配置文件格式:/etc/named.conf
-
全局配置段:
options { … }-
監聽能與外部主機通信的地址;
listen-on port 53 { 172.16.100.67; }; //listen-on-v6 port 53 { ::1; };
-
學習時,建議關閉dnssec
dnssec-enable no; dnssec-validation no; dnssec-lookaside no;
-
關閉僅允許本地查詢:
allow-query { any; }; 或 //allow-query { localhost; };
注意:每個配置語句必須以分號結尾;
-
監聽能與外部主機通信的地址;
-
日志配置段:
logging { … } -
區域定義段:
zone { … }zone "ZONE_NAME" IN { type master|slave|hint|forward; file "ZONE_NAME.zone"; allow-update { none; }; }; type:該zone的類型,主要類型有:針對根的hint;主DNS的master;從DNS的slave和專門用于轉發的域類型forward;除了根以外默認為master; file:該zone的文件名稱; ZONE_NAME:表示要解析的域名;正解時就為域名的本身;反解時有固定的格式:IP 網段倒著寫.ip-addr.arpa;
- 那些由本機負責解析的區域,或轉發的區域;
-
檢查配置文件語法錯誤:
~]# named-checkconf [檢查:/etc/named.conf]
-
測試工具
dig, host, nslookup,rndc
安裝dig、nslookup,yum install bind-utils –
-
dig命令:
dig [-t RR_TYPE] name [@SERVER] [query options]-
用于測試dns系統,因此其不會查詢hosts文件;
-
查詢選項:
+[no]trace:跟蹤解析過程;
+[no]recurse:進行遞歸解析; -
反向解析測試
dig -x IP -
模擬完全區域傳送:
dig -t axfr DOMAIN [@server]
-
-
host命令:
host [-t RR_TYPE] name SERVER_IP -
nslookup命令:
nslookup [-options] [name] [server]-
交互式模式:
nslookup> server IP:以指定的IP為DNS服務器進行查詢; set q=RR_TYPE:要查詢的資源記錄類型; name:要查詢的名稱;
-
交互式模式:
-
rndc命令:named服務控制命令
-
rndc status
rndc flush
rndc reload:讓服務器重載配置文件和區域數據文件 -
問題示例:
出現報錯: ~]# rndc reload rndc: neither /etc/rndc.conf nor /etc/rndc.key was found 分析:可能是配置文件和軟件的版本不匹配 解決:刪除舊的配置文件,重新安裝bind rm -rf /etc/named* rm -rf /var/naemd/*
-
配置解析一個正向區域:
以magedu.com域為例:
-
設置主配置文件(/etc/named.conf)中的全局定義;
-
定義區域
在主配置文件中(/etc/named.conf)或主配置文件輔助配置文件(/etc/named.rfc1912.conf)中實現;zone "ZONE_NAME" IN { type master|slave|hint|forward; file "ZONE_NAME.zone"; };
注意:區域名字即為域名;
-
建立區域數據文件(主要記錄為A或AAAA記錄)
在/var/named目錄下建立區域數據文件;-
文件為:/var/named/magedu.com.zone
$TTL 3600 $ORIGIN magedu.com. @ IN SOA ns1.magedu.com. dnsadmin.magedu.com. ( 2017010801 1H 10M 3D 1D ) IN NS ns1 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 172.16.100.67 mx1 IN A 172.16.100.68 mx2 IN A 172.16.100.69 www IN A 172.16.100.67 web IN CNAME www bbs IN A 172.16.100.70 bbs IN A 172.16.100.71
-
權限及屬組修改:
~]# chgrp named /var/named/magedu.com.zone ~]# chmod o= /var/named/magedu.com.zone
-
檢查語法錯誤:
~]# named-checkzone ZONE_NAME ZONE_FILE ~]# named-checkconf
-
-
讓服務器重載配置文件和區域數據文件
~]# rndc reload 或 ~]# systemctl reload named.service
配置解析一個反向區域
-
定義區域
在主配置文件(/etc/named.conf)或主配置文件輔助配置文件中(/etc/named.rfc1912.zones)實現;zone "ZONE_NAME" IN { type master|slave|hint|forward; file "ZONE_NAME.zone"; };
注意:反向區域的名字
反寫的網段地址.in-addr.arpa ;如:100.16.172.in-addr.arpa 定義區域解析庫文件(主要記錄為PTR)
-
示例,區域名稱為100.16.172.in-addr.arpa;
$TTL 3600 $ORIGIN 100.16.172.in-addr.arpa. @ IN SOA ns1.magedu.com. nsadmin.magedu.com. ( 2017010801 1H 10M 3D 12H ) IN NS ns1.magedu.com. 67 IN PTR ns1.magedu.com. 68 IN PTR mx1.magedu.com. 69 IN PTR mx2.magedu.com. 70 IN PTR bbs.magedu.com. 71 IN PTR bbs.magedu.com. 67 IN PTR www.magedu.com.
-
權限及屬組修改:
~]# chgrp named /var/named/172.16.100.zone ~]# chmod o= /var/named/172.16.100.zone
-
檢查語法錯誤:
~]# named-checkzone ZONE_NAME ZONE_FILE ~]# named-checkconf
-
示例,區域名稱為100.16.172.in-addr.arpa;
-
讓服務器重載配置文件和區域數據文件
~]# rndc reload 或 ~]# systemctl reload named.service
主從服務器:注意:從服務器是區域級別的概念;
配置一個從區域:
-
On Slave
-
定義區域
定義一個從區域; zone "ZONE_NAME" IN { type slave; file "slaves/ZONE_NAME.zone"; masters { MASTER_IP; }; };
-
配置文件語法檢查:named-checkconf
-
重載配置
rndc reload systemctl reload named.service
-
-
On Master
-
確保區域數據文件(/var/named/ZONE_NAME.zone)中為每個從服務配置NS記錄,并且在正向區域文件需要每個從服務器的NS記錄的主機名配置一個A記錄,且此A后面的地址為真正的從服務器的IP地址;
注意:時間要同步;ntpdate命令;... IN NS ns1.linux.io. IN NS ns2.linux.io. ns1 IN A 192.168.209.134 master ns2 IN A 192.168.209.135 slave ...
-
確保區域數據文件(/var/named/ZONE_NAME.zone)中為每個從服務配置NS記錄,并且在正向區域文件需要每個從服務器的NS記錄的主機名配置一個A記錄,且此A后面的地址為真正的從服務器的IP地址;
-
測試
- 注意:使用從服務器進行解析;
- 當主服務器發生改變時,改變序列號比之前的大–> rndc reload –> tail /var/log/messages,消息顯示從服務器到主服務器中更新數據;
子域授權
-
在父域服務器中的操作:
-
在父域服務器/var/named/ZONE_NAME.zone添加配置:
示例:在父域/var/named/iounix.com.zone 2017052702 ;修改為:2017052703 序列號增大 ops IN NS ns1.ops.iounix.com. ns1.ops IN A 192.168.209.138 正向解析區域授權子域的方法:xxx.ZONE_NAME IN NS ... ops.magedu.com. IN NS ns1.ops.magedu.com. ops.magedu.com. IN NS ns2.ops.magedu.com. ns1.ops.magedu.com. IN A IP.AD.DR.ESS ns2.ops.magedu.com. IN A IP.AD.DR.ESS ...
-
轉發
-
定義轉發:
注意:被轉發的服務器必須允許為當前服務器做遞歸;-
區域轉發:僅為需要轉發的服務器,轉發對某特定區域的解析請求;
需要轉發的服務器中;如果是子域,可實現對父域中的zone解析; zone "ZONE_NAME" IN { type forward; forward first|only; forwarders { SERVER_IP; }; };
first:首先轉發;轉發器不響應時,自行去迭代查詢;
only:只轉發; -
全局轉發:針對凡本地沒有通過zone定義的區域查詢請求,通通轉給某轉發器;
在需要轉發的服務器中設置 options { ... ... forward first|only; forwarders { SERVER_IP; }; .. ... };
-
bind中的安全相關的配置:
-
acl:訪問控制列表;把一個或多個地址歸并一個命名的集合,隨后通過此名稱即可對此集全內的所有主機實現統一調用;實現僅對定義的網絡進行控制;
acl acl_name { ip; net/prelen; }; 示例: acl mynet { 172.16.0.0/16; 127.0.0.0/8; };
-
bind有四個內置的acl
-
none:沒有一個主機;
any:任意主機;
local:本機;
localnet:本機的IP所屬的網絡;
-
none:沒有一個主機;
-
bind有四個內置的acl
-
訪問控制指令:
-
allow-query { }; 允許查詢的主機;白名單;
allow-transfer { }; 允許向哪些主機做區域傳送;默認為向所有主機;應該配置僅允許從服務器;
allow-recursion { }; 允許哪此主機向當前DNS服務器發起遞歸查詢請求;
allow-update { }; DDNS,允許動態更新區域數據庫文件中內容;
-
allow-query { }; 允許查詢的主機;白名單;
bind view:
-
視圖:
view VIEW_NAME { zone zone zone };
view internal { match-clients { 172.16.0.0/8; }; zone "magedu.com" IN { type master; file "magedu.com/internal"; }; };
view external { match-clients { any; }; zone "magecdu.com" IN { type master; file magedu.com/external"; }; };
原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/77273