DNS and Bindweb
BIND:Berkeley Internet Name Domain,伯克利互聯網名稱域; 數據庫
名稱域——名字空間:緩存
倒置的樹安全
根域(.)服務器
頂級域(Top Level Domain,TLD)網絡
組織域:com, org, edu, gov, mil, net, ...dom
info, cc, 中國, ...tcp
地理域:cn, tw, hk, jp, iq, ...ide
反向域:in-addr.arpa工具
DNS的名稱解析方式:
正向解析:名稱 --> IP地址
反向解析:IP地址 --> 名稱
注意:正向解析和反向解析所使用的名稱非同一空間,非同一棵樹;也就是非同一數據庫;
DNS查詢類型:
遞歸查詢
迭代查詢
DNS服務器的分類:
至少負責一個域的數據庫:
主DNS服務器
輔助DNS服務器(從DNS服務器)
不負責任何域的數據庫:
緩存DNS服務器(存根DNS服務器)
一次完整的DNS查詢請求流程:
Client --> hosts --> Local Cache --> first DNS(recursive) -->
--> 服務器本地緩存或本地數據庫中有結果,直接響應客戶端;
--> ROOT(iteration) --> TLD_DNS_SERVER --> 二級域DNS_SERVER --> ... --> ns.xxx. --> 解析結果;
查詢獲得的解析答案:
權威答案:由直接負責管理對應信息的DNS服務器返回的答案;
非權威答案:由指定的服務器從緩存中或者利用迭代的方式查詢到的答案;
還有兩種可能:
確定答案:可以按照客戶端請求完成正確的名稱解析的答案;
否認答案:沒法安裝客戶端的請求完成正確的名稱解析所返回的答案;即客戶端所請求的解析內容,不存在或沒法找到映射資源;
回顧:
OpenSSH
dropbear
DNS:
主從DNS服務器:
主DNS服務器:維護所負責解析的區域數據庫文件的主體服務器,即:能夠在區域數據庫中進行增,刪,改等管理操做;讀寫操做都可進行;
從DNS服務器:也稱爲輔助DNS服務器,從主DNS服務器或其餘的從DNS服務器以區域傳送的方式複製對方的區域數據庫;從DNS服務器沒法完成管理類操做,只能進行讀操做;
爲了保證主DNS服務器中的數據庫和從DNS服務器中的數據庫一致:
序列號:Serial,即數據庫的版本號;主DNS服務器的數據庫內容若是發生變化,序列號應該自增;若是從服務器接收到的新的數據庫,若是其序列號沒有變化,則忽略;若是發現其比當前自身的數據庫序列號更大,則更新;
刷新時間間隔:refresh,從DNS服務器每隔多長時間到主DNS服務器上檢查序列號的變化更新狀況;
重試時間間隔:retry,從DNS服務器向主DNS服務器要求同步數據庫失敗以後,再次發起嘗試請求的時間間隔;
過時時間:expire,從DNS服務器始終聯繫不上主DNS服務器時,從DNS服務器多長時間以後中止服務;
否認答案的緩存時長:minimal TTL
題外話:
服務器時間同步的方法:
1.到互聯網同步時間;
2.自架時間服務器;
CentOS 6-:ntpd服務器
CentOS 7:ntpd服務器,chrony服務器
ntpd的配置:/etc/ntp.conf
restrict 172.16.0.0 mask 255.255.0.0 nomodify
CentOS6-:service ntpd start
CentOS7:systemctl start ntpd.service
區域數據傳送:
主DNS服務器能夠主動通知從DNS服務器更新數據;
從DNS服務器能夠主動的向主DNS服務器發出更新請求;
兩種類型:
全量傳送:AXFR,All Transfer,傳送整個數據庫;
增量傳送:IXFR,Increment Transfer,僅傳送自上次變化以後的數據內容
對於BIND,默認是容許全部客戶端請求區域傳送;須要進行訪問控制;
域是DNS服務器用於進行正常的權威解析活動的必要的基礎;
稱存放於區域數據庫文件中的那些用於解析工做的數據,爲資源記錄,簡稱RR;
資源記錄:
記錄的類型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start of Authority,起始受權記錄;
在任何一個數據庫中有且只能有一條SOA記錄,必須是數據庫的第一條記錄
A:Address,主機記錄;
標識從徹底合格域名到IP地址的映射關係,FQDN --> IPv4;
AAAA: Address,FQDN --> IPv6;
PTR:PoinTeR,指針記錄;
標識從IP地址到徹底合格域名的映射關係,IP --> FQDN
NS:Name Server,名稱服務器記錄;
用戶標明當前域中全部的DNS服務器;
CNAME:Conanical Name,別名記錄;
標識從徹底合格域名到徹底合格域名的映射關係,FQDN --> FQDN
MX:Mail eXchanger,郵件交換器記錄;
標識域中郵件服務器的主機名,從域名映射到徹底合格域名,Domain name --> FQDN
優先級:0-65536,數字越小優先級越高;
區域數據庫中資源記錄的定義格式:
語法:name|FQDN [TTL] IN RR_TYPE VALUE
注意:
1.名稱部分能夠寫FQDN,也能夠除去域名部分的主機名,其域名會從配置文件中繼承,也可使用宏$Origin來定義;
2.TTL是以每秒爲單位的時間概念,若是省略,則從全局定義的宏$TTL繼承
3."@"符號能夠用於引用當前區域的域名;
4.同一個name能夠經過多條記錄定義多個不一樣的VALUE;DNS在查詢此類記錄的時候,會以輪詢的方式一次調取每一個記錄的內容;
5.多個name經過多條記錄對應一個VALUE,一般用於多個名稱對應同一IP地址,可使用CNAME記錄來進行標識;
七種資源記錄在區域數據庫中的具體格式:
SOA資源記錄:
name:當前域的域名,如:qhdlink.com.;或者可使用"@"代替域名;
value:
1.當前區域的主DNS服務器的FQDN;
2.當前區域數據庫的管理員的郵件地址;可是使用"."來代替"@";
mailmaster.qhdlink.com.
3.主從服務器進行區域傳送的相關時間定義及否認答案的統一TTL;
(Serial 1H 15M 1W 1D)
(
Serial;
1H;refresh
15M;retry
1W;expire
1D;minimal ttl)
例如:
$TTL 86400
qhdlink.com. 86400 IN SOA ns1.qhdlink.com. master.qhdlink.com.(
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D;ttl)
NS記錄:
name:當前域的域名
value:當前區域內某DNS服務器的徹底合格域名,如:ns.qhdlink.com.
注意:
1.一個域中能夠有多個NS資源記錄;
2.每一個NS資源記錄都必需要有一個A記錄與之對應;
例如:
1.正常寫法
qhdlink.com. 86400 IN NS ns1.qhdlink.com.
qhdlink.com. 86400 IN NS ns2.qhdlink.com.
2.使用宏繼承的寫法:
$Origin qhdlink.com.
$TTL 86400
IN NS ns1
IN NS ns2
MX記錄:
name:當前域的域名;
value:當前域中某有效的郵件服務器的主機名;
注意:
1.一個域中,能夠有多條MX資源記錄;
2.每一個MX資源記錄都必需要有一條A記錄與之對應;
例如:
qhdlink.com. 86400 IN MX 10 mail1.qhdlink.com.
@ IN MX 20 mail2
A記錄:
name:域中某主機的FQDN或主機名稱;
value:與主機名對應的IPv4地址;
例如:
www.qhdlink.com. 86400 IN A 192.168.1.1
www.qhdlink.com. 86400 IN A 192.168.1.2
www.qhdlink.com. 86400 IN A 192.168.1.3
www.qhdlink.com. 86400 IN A 192.168.1.4
www IN A 192.168.1.1
泛域名:*.qhdlink.com. IN A 1.2.3.4
直接域名:qhdlink.com. IN A 2.3.4.5
泛域名和直接域名都是防止用戶寫錯名稱而致使沒法給出正確的解析結果;
CNAME記錄:
name:別名的FQDN或簡單的名稱;
value:真正的名稱的FQDN或其簡單名稱;
例如:
web.qhdlink.com. 86400 IN CNAME www.qhdlink.com.
web IN CNAME www
AAAA記錄:規則與A記錄一致;
ftp.qhdlink.com. 86400 IN AAAA ::1
PTR記錄:
name:將IP地址反過來寫,並在其後綴加反向域的標準後綴;因此其完整寫法應該是:1.72.16.172.in-addr.arpa.
value:FQDN
例如:
1.72.16.172.in-addr.arpa. 86400 IN PTR www.qhdlink.com.
若是有全局宏定義的話:
1.72 IN PTR www www.qhdlink.com.
注意:
1.網絡部分的地址和標準後綴能夠省略;
2.PTR記錄的value部分,必須寫FQDN;
3.若是剩餘的IP地址中的主機部分仍然是多段,主機部分依然須要反着寫;
BIND軟件:
BIND——Berkeley Internet Name Domain,ISC(isc.org)
bind-libs:爲bind的其餘應用程序提供共享庫文件;
bind-utils:通用工具包,如:dig, host, nslookup等;
bind:主程序包,包括:DNS服務器程序(named),解析庫,檢測工具;
bind-chroot:設置僞根,啓用監牢的模式;安全體現;
實現DNS協議的程序是BIND,BIND的服務器的主程序named;
named:DNS Server
53/udp:完成主機名查詢;
53/tcp:完成區域傳送;
bind:
主配置文件:/etc/named.conf
能夠在此配置文件中使用include命令包含其餘的配置文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
聲明區域;
/etc/named.root.key
主配置文件的格式:
1.註釋方式:
//:單行註釋;
/* ... */:任意內容註釋;
2.分段配置的特色:
a.訪問控制列表定義段:
acl ACL_NAME {...};
b.全局選項段:
options {...};
c.日誌配置段:
logging {...};
d.區域配置段:
zone "ZONE_NAME" IN {...};
e.視圖配置段:
view VIEW_NAME {...};
f.include包含段:
include /PATH/TO/SOME_CONFIG_FILE
全局配置段:
options {
listen-on port 53 { 127.0.0.1; 172.16.72.1; };
在啓動DNS服務以後,named進程監聽的IP地址;
directory "/var/named";
規定的解析庫(區域數據庫)的根目錄;
allow-query { localhost; };
訪問控制語句,容許哪些主機將查詢請求發送至本服務器;默認爲localhost,即只爲服務器自身提供查詢請求處理;
recursion yes;
全局開啓遞歸查詢;默認爲全部客戶端開啓遞歸查詢;
初學時,建議關閉dnssec功能;
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
};
測試工具:
dig,host,nslookup
dig命令:
dig - DNS lookup utility
dig [@Server] [-t RR_TYPE] [query_options]
@Server:表示爲這次的查詢請求使用指定的DNS服務器完成;若是不給,那麼就讀取/etc/resolv.conf中的nameserver配置項的值;
-t RR_TYPE:指定這次查詢請求的資源記錄類型;
查詢選項:
+[no]trace:跟蹤整個解析過程;
+[no]recurse:要求目標DNS服務器必須[不]進行遞歸查詢;
反向解析查詢:
dig -x IPADDR
模擬區域傳送:
dig -t axfr DOMAIN_NAME [@Server]
host命令:
host [-t RR_TYPE] DOMAIN_NAME SERVER 【domain域名】 【RR_TYPE資源記錄類型】
nslookup命令:
命令行工具+交互式命令:
命令行工具:nslookup DOMAIN_NAME
交互式命令:nslookup
> server IP_ADDR
指定這次查詢使用的DNS服務器IP地址;
> set q=RR_TYPE
要查詢的資源記錄的類型;
> QUERY_NAME
壓迫查詢解析的主機名;
> set type=RR_TYPE
同set q=RR_TYPE
rndc命令:
DNS服務器端的控制命令;
remote name domain controller,遠程名稱域控制器;
953/tcp
rndc status:查看服務器端的運行狀態;
rndc reload:通知服務器端程序重載配置爲文件和區域文件;
DNS服務的配置:
1.基本的正向和反向區域的配置和解析;
2.主從服務器的設置;
3.子域和子域的委派;
4.轉發器;
5.訪問控制列表和視圖;
基本的正向和反向區域的配置和解析
1.配置一個正向的區域:
1) 定義區域:/etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
type {master|slave|forward|hint}; 主|從|轉發|提示
file "ZONE_NAME.zone";
};
zone "qhdlink.com" IN {
type master;
file "qhdlink.com.zone";
};
2) 建立區域數據文件
/var/named/qhdlink.com.zone
注意修改權限:
# chown :named qhdlink.com.zone
# chmod o-r qhdlink.com.zone
$ORIGIN qhdlink.com.
$TTL 86400
@ IN SOA ns1.qhdlink.com. admin.qhdlink.com. (
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D);TTL
IN NS ns1.qhdlink.com.
MX 10 mx1.qhdlink.com.
ns1.qhdlink.com. IN A 172.16.72.1
www IN A 172.16.100.1
www IN A 172.16.100.2
www IN A 172.16.100.3
web IN CNAME www
mx1 IN A 172.16.100.4
3) 重載配置文件和區域文件,使配置生效;
a.檢測語法是否正確:
named-checkconf FILE_PATH
檢測named.conf及其輔助配置文件的語法正確與否;
named-checkzone "ZONE_NAME" FILE_NAME
檢測域名和區域數據庫文件是否對應和是否存在語法錯誤;
b.重載配置文件:
# rndc reload
# systemctl reload named.service
# service named reload(CentOS 6-)
2.配置一個反向的區域:
1) 定義區域:/etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
type {master|slave|forward|hint};
file "ZONE_NAME.zone";
};
zone "16.172.in-addr.arpa" IN {
type master;
file "172.16.zone";
};
2) 建立區域數據文件
/var/named/172.16.zone
注意修改權限:
# chown :named 172.16.zone
# chmod o-r 172.16.zone
$ORIGIN 16.172.in-addr.arpa.
$TTL 86400
@ IN SOA ns1.qhdlink.com. admin.qhdlink.com. (
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D);TTL
IN NS ns1.qhdlink.com.
1.72 IN PTR ns1.qhdlink.com.
1.100 IN PTR www.qhdlink.com.
2.100 IN PTR www.qhdlink.com.
3.100 IN PTR www.qhdlink.com.
4.100 IN PTR mx1.qhdlink.com.
3) 重載配置文件和區域文件,使配置生效;
a.檢測語法是否正確:
named-checkconf
檢測named.conf及其輔助配置文件的語法正確與否;
named-checkzone "ZONE_NAME" FILE_NAME
檢測域名和區域數據庫文件是否對應和是否存在語法錯誤;
b.重載配置文件:
# rndc reload
# systemctl reload named.service
# service named reload(CentOS 6-)
2.主從服務器:
注意:主從服務器都是區域級別的概念;
配置一個從區域:
ON slave:
1) 定義區域
zone "ZONE_NAME(域名)" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
示例:
zone "qhdlink.com" IN {
type slave;
file "slaves/qhdlink.com.zone";
masters { 172.16.72.1; };
};
2) 檢測並重載配置文件;
named-checkconf
rndc reload
On Master:
1.確保區域數據文件中爲每一個名稱服務器都提供NS記錄;
2.在正向區域文件中,須要爲每一個NS記錄提供A記錄;
3.爲NS記錄提供的A記錄所指向的IP地址必須是從服務器的真實IP地址;
4.注意主從服務器的時間同步;
回顧:
BIND組成:
bind
bind-libs
bind-utils
bind-chroot
主配置文件:/etc/named.conf include包含輔助配置文件:
/etc/named.rfc1912.zones
主配置文件的格式:
acl acl_name {};
options {};
logging {};
zone
view
include file
named-checkconf [file_path]
dig
dig -t RR_TYPE @Server [Query options]
host
nslookup
正向和反向區域的配置:
$ORIGIN
$TTL
SOA
NS
A|PTR
CNAME
MX PRIORITY
主從服務器:
區域級別的概念
On slave:
zone "qhdlink.com" IN {
type slave;
file "slaves/qhdlink.com.zone";
masters { 172.16.72.1; };
};
On master:
1.提供足夠的NS記錄;
2.爲每一個NS記錄提供一個A記錄;
3.明確容許從服務器能夠進行區域傳送;
轉發器:
1.區域轉發:
專門針對於某個特定的區域,實現的轉發器轉發;
定義在/etc/named.rfc1912.zones文件中的zone聲明中;
zone "baidu.com" IN {
type forward;
forward {first|only};
forwarders { 172.16.72.1; };
};
first:首先轉發,當指定的轉發器無響應時,再自行迭代;
only:只使用轉發器進行轉發,不執行自行迭代;
2.全局轉發:
針對那些沒有經過zone在本地定義的區域的查詢請求,所有轉發給轉發器,請求轉發器予以遞歸查詢;
/etc/named.conf
options {
...
forward {first|only};
forwarders { SERVER_IP; };
...
};
子域委派受權:
在父域的區域文件中直接受權便可;
qhdlink.com區域的文件/var/named/qhdlink.com.zone
tech.qhdlink.com. IN NS ns.tech.qhdlink.com.
ns.tech.qhdlink.com. IN A 172.16.69.1
在子域的NS服務器上,直接建立子域的區域文件,管理資源記錄便可;
/etc/named.rfc1912.zones
zone "tech.qhdlink.com" IN {
type master;
file "tech.qhdlink.com.zone";
};
touch /var/named/tech.qhdlink.com.zone
chown :named /var/named/tech.qhdlink.com.zone
chmod 640 /var/named/tech.qhdlink.com.zone
若是想要從子域的NS服務器解析父域的資源記錄,則須要轉發器的定義;
定義區域轉發:
在子域的NS服務器上的/etc/named.rfc1912.zones中定義父域轉發器;
zone "qhdlink.com" IN {
type forward;
forward first;
forwarders { 172.16.72.1; };
};
定義全局轉發:
在子域的NS服務器的主配置文件/etc/named.conf文件中定義:
options {
...
forward first;
forwarders { 172.16.72.1; };
...
};
總結:
1.能夠經過委派受權,使父域能夠直接找到子域的NS服務器,從而解析子域中的資源記錄;
2.能夠經過區域轉發或全局轉發,是子域可以經過父域的NS服務器,查找父域中的資源記錄;
bind中的基礎安全相關的配置:
acl:訪問控制列表,將一個或多個IP地址,歸併爲一個命名的集合,隨後能夠經過定義好的acl的名稱對該集合內的全部的IP地址進行統一的調用或設置;
bind有四個內置的acl:
none:不包括任何一個IP地址;
any:包括全部的IP地址;
local:本機的IP地址;
localnet:包括本機IP地址所在的網段內的全部IP地址;
172.16.72.1/16 172.16.0.0/16
定義acl的語法:
acl acl_name {
[!] ip;
[!] network/prefix;
};
acl mynet {
172.16.0.0/16;
127.0.0.1;
! 172.16.100.100;
};
注意:
1.在調用acl以前,確保其已經被定義;
2.一般在主配置文件/etc/named.conf中定義,而且放在options以前;
常常與acl配合使用的訪問控制指令:
allow-query { acl|IP|Network; };
容許向本服務器發起查詢請求的主機,即:白名單;
allow-transfer { acl|IP|Network; };
容許哪些從服務器能夠從本機進行區域傳送;默認是全部主機均可以;建議應該只容許從服務器完成此項工做,白名單;
allow-recursion { acl|IP|Network; };
容許哪些主機向當前DNS服務器發起遞歸查詢請求;
allow-update { acl|IP|Network; };
DDNS,Dynamic DNS;
容許哪些主機動態更新區域數據庫中的資源記錄;由於其不安全,因此應該禁用;
視圖:view
定義視圖:
view VIEW_NAME {
match_clients { acl; };
zone
zone
zone
...
};
注意:一旦在bind中啓用的視圖,則全部的zone都必須定義在視圖中;