DNS and Bind
DNS服務器所提供的服務是完成將主機名和轉換為IP地址的工作。為什么需要將主
機名轉換為IP地址的工作呢?這是因為,當網絡上的一臺客戶機訪問某一服務器上的資源時,用戶在瀏覽器地址欄中輸入的是人類便于識記的主機名和域名。而網
絡上的計算機之間實現連接卻是通過每臺計算機在網絡中擁有的惟一的IP地址來完成的,這樣就需要在用戶容易記憶的地址和計算機能夠識別的地址之間有一個解
析,DNS服務器便充當了地址解析的重要角色。
域名嚴格意義上的稱呼為FQDN(Full Qualified Domain Name)。域名按分類形式大概分為組織域,國家域名,頂級域,二級域等,如下:
組織域:.com, .net, .org, .gov, .edu, .mil
國家域:.iq, .tw, .hk, .jp, .cn
舉個例子:163.com就是一個頂級域名,而www.163.com卻不是頂級域名,他是在163.com 這個域里的一叫做www的主機。
一級域之后還有二級域,三級域,只要我買了一個頂級域,并且我搭建了自己BIND服務器(或者其他軟件搭建的)注冊到互聯網中,那么我就可以隨意在前面多加幾個域了(當然長度是有限制的。
####IP與域名轉換的機制:
IP—->域名;依靠調用`getipbyhostname`庫來實現;
IP—->域名;依靠調用`gethostnamebyip`庫來實現;
注意:二者的名稱空間,非為同一個空間,即非為同一棵樹;因此,也不是同一個解析庫;
#####DNS解析的大概流程#####
域:magedu.com.
www.magedu.com. 1.1.1.1
ftp.magedu.com. 2.2.2.2
bbs.magedu.com. 3.3.3.3
cloud.magedu.com. 4.4.4.4
DNS服務器類型:
負責解析至少一個域:
主名稱服務器;
輔助名稱服務器;
不負責解析:
緩存名稱服務器;
一次完整的查詢請求經過的流程:
Client –> hosts文件 –> DNS Local Cache –> DNS Server (recursion) –>
自己負責解析的域:直接查詢數據庫并返回答案;
不是自己負責解析域:Server Cache –> iteration(迭代)
解析答案:
肯定答案:
否定答案:不存在查詢的鍵,因此,不存在與其查詢鍵對應的值;
權威答案:由直接負責的DNS服務器返回的答案;
非權威答案:
主-輔DNS服務器:
主DNS服務器:維護所負責解析的域數據庫的那臺服務器;讀寫操作均可進行;
從DNS服務器:從主DNS服務器那里或其它的從DNS服務器那里“復制”一份解析庫;但只能進行讀操作;
“復制”操作的實施方式:
序列號:serial, 也即是數據庫的版本號;主服務器數據庫內容發生變化時,其版本號遞增;
刷新時間間隔:refresh, 從服務器每多久到主服務器檢查序列號更新狀況;
重試時間間隔:retry, 從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔;
過期時長:expire,從服務器始終聯系不到主服務器時,多久之后放棄從主服務器同步數據;停止提供服務;
否定答案的緩存時長:
主服務器”通知“從服務器隨時更新數據;
區域傳送:
全量傳送:axfr, 傳送整個數據庫;
增量傳送:ixfr, 僅傳送變量的數據;
區域(zone)和域(domain):
magedu.com域:
FQDN –> IP
正向解析庫;區域
IP –> FQDN
反向解析庫;區域
區域數據庫文件:
資源記錄:Resource Record, 簡稱rr;
記錄有類型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授權記錄; 一個區域解析庫有且只能有一個SOA記錄,而且必須放在第一條;
NS:Name Service,域名服務記錄;一個區域解析庫可以有多個NS記錄;其中一個為主的;
A: Address, 地址記錄,FQDN –> IPv4;
AAAA:地址記錄, FQDN –> IPv6;
CNAME:Canonical Name,別名記錄;
PTR:Pointer,IP –> FQDN
MX:Mail eXchanger,郵件交換器;
優先級:0-99,數字越小優先級越高;
資源記錄的定義格式:
語法: 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 ; serial
2H ; refresh
10M ; retry
1W ; expire
1D ; negative answer ttl
)
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:FQND
例如:
4.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記錄;
DNS協議 –> BIND, PowerDNS
http://www.isc.org
程序環境:
主程序:/usr/sbin/named
Unit File:/usr/lib/systemd/system/named.service
配置文件:/etc/named.conf
區域解析庫文件:/var/named
關閉dnssec功能:
/etc/named.conf
dnssec-enable no;
dnssec-validation no;
解析一個區域:
定義:/etc/named.rfc1912.conf
zone “ilinux.io” IN {
type master;
file “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
回顧:
DNS:Domain Name Server, 53/tcp, 53/udp
Domain: zone
數據文件:區域解析庫文件
資源記錄:
name TTL IN RR_TYPE VALUE
RR_TYPE:
SOA:
name: DN, value:
NS:
name: DN, value: DN Server hostname
MX:
name: DN, value: MX Server Hostname
A,AAAA:
name: FQDN, value: IPv4 OR IPv6
PTR:
name: IPv4, value: FQDN
CNAME:
name: FQDN, value: FQDN
DNS and Bind(2)
BIND的安裝配置:
BIND: Berkeley Internet Name Domain, ISC.org
dns: 協議
bind: dns協議的一種實現
named:bind程序的運行的進程名
程序包:
bind-libs:被bind和bind-utils包中的程序共同用到的庫文件;
bind-utils:bind客戶端程序集,例如dig, host, nslookup等;
bind:提供的dns server程序、以及幾個常用的測試程序;
bind-chroot:選裝,讓named運行于jail模式下;
bind:
主配置文件:/etc/named.conf
或包含進來其它文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
解析庫文件:
/var/named/目錄下;
一般名字為:ZONE_NAME.zone
注意:(1) 一臺DNS服務器可同時為多個區域提供解析;
(2) 必須要有根區域解析庫文件: named.ca;
(3) 還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫;
正向:named.localhost
反向:named.loopback
yum clean all 清除緩存
rndc:remote name domain contoller
953/tcp,但默認監聽于127.0.0.1地址,因此僅允許本地使用;
bind程序安裝完成之后,默認即可做緩存名稱服務器使用;如果沒有專門負責解析的區域,直接即可啟動服務;
CentOS 6: service named start
CentOS 7: systemctl start named.service
主配置文件格式:/etc/named.conf
全局配置段:
options { …; };
日志配置段:
logging { …; };
區域定義段:
zone { …; };
那些由本機負責解析的區域,或轉發的區域;
注意:每個配置語句必須以分號結尾;花括號里必須有空格;
緩存名稱服務器的配置:
監聽能與外部主機通信的地址;
listen-on port 53;
listen-on port 53 { 172.16.100.67; };
學習時,建議關閉dnssec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
關閉僅允許本地查詢:
//allow-query { localhost; };
檢查配置文件語法錯誤:
named-checkconf [/etc/named.conf]
測試工具:
dig, host, nslookup等
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
配置解析一個正向區域:
以magedu.com域為例:
(1) 定義區域
在主配置文件中(/etc/named.conf)或主配置文件輔助配置文件(/etc/named.rfc1912.conf)中實現;
zone “ZONE_NAME” IN {
type {master|slave|hint|forward};
file “ZONE_NAME.zone”;
};
注意:區域名字即為域名;
(2) 建立區域數據文件(主要記錄為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
(3) 讓服務器重載配置文件和區域數據文件
rndc reload 或
systemctl reload named.service
配置解析一個反向區域
(1) 定義區域
在主配置文件中或主配置文件輔助配置文件中實現;
zone “ZONE_NAME” IN {
type {master|slave|hint|forward};
file “ZONE_NAME.zone”;
};
注意:反向區域的名字
反寫的網段地址.in-addr.arpa
100.16.172.in-addr.arpa
(2) 定義區域解析庫文件(主要記錄為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
(3) 讓服務器重載配置文件和區域數據文件
rndc reload 或
systemctl reload named.service
主從服務器:
注意:從服務器是區域級別的概念;
配置一個從區域:
On Slave
(1) 定義區域
定義一個從區域;
zone “ZONE_NAME” IN {
type slave;
file “slaves/ZONE_NAME.zone”;
masters { MASTER_IP; };
};
配置文件語法檢查:named-checkconf
(2) 重載配置
rndc reload
systemctl reload named.service
On Master
(1) 確保區域數據文件中為每個從服務配置NS記錄,并且在正向區域文件需要每個從服務器的NS記錄的主機名配置一個A記錄,且此A后面的地址為真正的從服務器的IP地址;
注意:時間要同步;
ntpdate命令;
子域授權:
正向解析區域授權子域的方法:
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
定義轉發:
注意:被轉發的服務器必須允許為當前服務做遞歸;
(1) 區域轉發:僅轉發對某特定區域的解析請求;
zone “ZONE_NAME” IN {
type forward;
forward {first|only};
forwarders { SERVER_IP; };
};
first:首先轉發;轉發器不響應時,自行去迭代查詢;
only:只轉發;
(2) 全局轉發:針對凡本地沒有通過zone定義的區域查詢請求,通通轉給某轉發器;
options {
… …
forward {only|first};
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所屬的網絡;
訪問控制指令:
allow-query {}; 允許查詢的主機;白名單;
allow-transfer {}; 允許向哪些主機做區域傳送;默認為向所有主機;應該配置僅允許從服務器;
allow-recursion {}; 允許哪此主機向當前DNS服務器發起遞歸查詢請求;
allow-update {}; DDNS,允許動態更新區域數據庫文件中內容;
原創文章,作者:MFX,如若轉載,請注明出處:http://www.www58058.com/77358
主要介紹了bind配置文件的配置指令,用正向區域,與反向區域進行了說明,內容總結的很詳細,排版上可以把代碼或指令放入到”插入程序代碼”中去,如果有標題和縮進就更好了!