Domain Name Server
監聽tcp53和udp53端口。把一種名稱解析爲另一種名稱,字串型名稱與數據型名稱。解析時把用戶提供的名稱,查詢解析庫,得到另外一名稱。查詢,把解析後的名稱返還用戶。
查詢分爲兩種
存儲名稱與地址對應表格式。
文本文件,對大量數據處理難以應付。但在bind中速度是最快的,因爲bind會把文本文件加載爲數據庫放在內存中。
關係型數據庫,由於有索引,對大量請求比文本存儲性能好。
LDAP:lightweight directory access protocol,工作於tcp389端口。比關係型數據庫快速更快。
組織域:.com .rog .net .mil .edu .gov .info .cc
國家域:.cn .us .tw .hk .jp
反向域: .in-addr.arpa
區域解析庫:
資源記錄類型
SOA: start of authority ,起始授權記錄,一個區域文件只能有一個。當前區域主DNS的fqdn.
NS:name server , 可以有多個,每個負載一個領域
MX:mail exchange 郵件交換器,指定本域的郵件服務器。可以有多個,每個服務器有優先級,(0-99),數據越小優先級越高
A:fqdn與ip對應 , 專用於正向解析庫
AAAA:fqdn與ipv6對應,專用正向解析庫。
CNAME:canonical name,正式名稱。
PTR: ip與fqdn對應,專用反向解析庫
ttl值: 指定本次解析返還給請求者後,請求者最多可以緩存時間。如果不寫,則使用默認。
查詢過程
hosts --> local dns cache --> dns --> dnscache --> dns迭代查詢
DNS服務器類型
主dns服務器,是本域的權威服務器。
從dns服務器,間斷性的向其它dns服務器同步區域數據(一般是主服務器),同步的過程叫區域傳送。
zone tracser, 解析庫文件同步過程,區域傳送,使用tcp協議53端口傳送,以保證傳輸的區域文件可靠性。 兩種機制:從服務器會週期性檢查更新,和主服務器端更新後通知從服務器。
完全區域傳送:axfr 一般從服務器第一次向主服務器同步,會同步全部區域數據。
增量區域傳送:ixfr 有了全部區域文件後,只同步區域文件更新過的數據。
緩存dns服務器
轉發dns服務器
服務腳本:/etc/rc.d/init.d/named
主配置文件:/etc/named.com
bain的主程序: /usr/sbin/named
/usr/sbin/named -u named :使用named用戶啓動named進程,只有管理員纔可以啓動。只有管理員纔可以使用小於1024端口。
檢測主配置文件是否有語法錯誤命令: /usr/sbin/named-checkconf
檢測區域配置文件是否有語法錯誤命令: /usr/sbin/named-checkzone
區域文件索引:/etc/named.rfc1912.zones
區域解析庫文件:/var/named/zone結尾的文件。
解析localhost爲127.0.0.1區域配置文件:/var/named/named.localhost
解析127.0.0.1爲localhost區域配置文件:/var/named/named.loopback
從服務器同步的區域文件在:/var/named/slaves
==================================================================
安全特性
==================================================================
服務進程以系統用戶身份運行,用戶名:named
可以運行於chroo模型下,即工作於jail環境。運行在假根下。/var/named/chroot/
區域傳送安全限制
bind內置acl
allow-transfer { none;|any;|等 }
none:不讓任何人同步
any:任何人都可以同步
local:本機
localnet:本機所在的網絡
自定義acl
acl "名字" { 算定義acl,此爲資源統一管理,以方便在下面配置中調用。
ip;
ip; ip格式 192.168.1.1;
network; 網絡格式 172.16.0.0/16;
};
allow-query { ip;|!ip; }; 定義只有花括號中的ip可以請求此dns服務器。ip前面加!表示取反,除了此ip其它ip都可以請求查詢。
allow-recursion { ip; }; 遞歸白名單,只有在花括號中的ip纔給遞歸查詢。花括號中必須包括當前主機。可以寫自定義白明單。
===================================================================
相關命令
===================================================================
安裝程序包與查看DNS運行狀態
-----------------------------------------------------------------------------------------------------------------
使用service服務控制腳本查看
[root@wukui ~]# service named status 查看dns服務運行狀態
version: 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 版本信息,在redhat系統上編譯
CPUs found: 4 CPU個數
worker threads: 4 工作線和有多少個
number of zones: 19 有多少個區域
debug level: 0 測試級別有沒有打開,比日誌記錄更詳細,測試時使用
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF 查詢日誌是沒有打開,打開後客戶端每次查詢請求都會記錄於/var/log/messages。一般不開,急劇影響性能。
recursive clients: 0/0/1000 遞歸客戶沒數量
tcp clients: 0/100 有沒有從服務器複製區域
server is up and running 服務運行狀態
named (pid 2826) is running... 服務進程的pid
使用rndc命令查看,顯示與上條命令一樣。
# rndc status
-----------------------------------------------------------------------------------------------------------------
測試命令
-----------------------------------------------------------------------------------------------------------------
host
-t:指定資源記錄類型與名稱
# host -t A www.wukui.net 172.16.2.10 指定解析A記錄,www.wukui.net,使用172.16.2.10這臺DNS
[root@wukui named]# host -t NS wukui.net 172.16.2.10 通過172.16.2.10查看wukui.net這個域的NS是誰
# [root@wukui named]# host -t NS wukui.net 172.16.2.10 查看wukui.net域的郵件服務器
nslookup
server ip : 指定dns服務器ip
set type={A|SOA|NS|MX}
dig
# dig -t MX -trace wukui.net @172.16.2.10 此命令可以跟蹤指定dns迭代查詢過程
# dig -t AXER baidu.com @8.8.8.8 此命令可以拿到baidu.com域的完整dns數據庫,前提對方允許。
dig -t TYPE name @server
rndc 控制dns服務,可以遠程控制,端口爲tcp953。出於安全性考慮,一般不允許遠程控制。rndc控制dns服務通過交換密鑰驗證。
reload :重新裝載主配置文件和各區域解析庫,可以裝載單個區域解析庫。
reconfig:重讀主配置文件。
status:查看dns服務工作狀態。
flush:清空所有已緩存的查詢信息。
retransfer :重新同步區域解析文件。從服務器執行。
notify :重新給從服務器發送通知。主服務器執行。
stop:停止dns服務。
querylog:啓用或禁用查詢日誌。啓用後,任何查詢請求都會被記錄下來,日誌文件在/var/log/messages。此功能只能在調試時使用,否則會極大降低服務器性能。
===========================================================
主配置文件解釋 /etc/named.conf
===========================================================
acl "名字" { 算定義acl,此爲資源統一管理,以方便在下面配置中調用。
ip;
ip; ip格式 192.168.1.1;
network; 網絡格式 172.16.0.0/16;
};
options { 全局配置段,在此配置對全局生效。有些特性可以寫到區域選項中,可以準確定義區域工作特性。
listen-on port 53 { 127.0.0.1; }; 監聽的端口和ipv4地址,如果127.0.0.1只能爲自己服務。
listen-on-v6 port 53 { ::1; }; 監聽的端口與ipv6地址
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; 是否允許遞歸查詢,給所有人遞歸。
forward {only;|first;}; 開啓轉發模式,only如果遞歸到指定服務器沒有查到,自己不再查詢。first,如果遞歸到指定服務器沒有查到,自己開始迭代查詢。
forwarders { ip; }; 開啓轉發模式後,請求轉發到那個服務器上。
allow-recursion { ip或自定義acl }; 定義那些主機可以請求查詢。
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"; 設定主本配置文件還包括的配置文件
=================================================================
主配置文件之區域定義文件解釋 /etc/named.rfc1912.zones
================================================================
zone "localhost.localdomain" IN { 正向區域寫法:定義區域名
type {master|slave|forward|hint}; 設置區域類型,(hint用來定義根)
file "named.localhost"; 區域解析庫文件名
allow-update { none; }; ddns安全特性,只有{}中的ip的dhcp服務器纔可以通知dns更新區域解析庫。這裏還可以寫密鑰,密鑰方式更安全。
allow-transfer { 172.16.2.12; }; 只允許172.16.2.12這個ip可以同步區域數據。本機都不可以。如沒有此項所有人都可以同步。
};
zone "16.172.in-addr.arpa." IN { 反向區域寫法
type master; 設置區域類型
file "172.16.2.zone"; 區域解析庫文件名
};
zone "wukui.net" IN { 轉發服務器寫法。這裏定義wukui.ne域內的主機轉發
type forward; 標記爲轉發類型
forward only;|first; 轉發類型
forwarders { ip; }; 轉發到那個ip
};
====================================================================
區域數據庫正向解析文件格式和反向文件解釋
====================================================================
名稱解析ip
-----------------------------------------------------------------------------------------------------------------
$TTL 1D 定義客戶端緩存時長 ,單位,時,天,周
$ORIGIN wukui.net. 此變量定義了,如果下面的fqdn名稱使用了簡寫,簡寫後的名稱會自動跟上wukui.net.
@ IN SOA @ ns.wukui.net. wukui.gmail.com ( (當前區域名稱,@爲簡寫)(IN固定格式)(標記此區域爲起始授權)(當前區域主DNS) (管理員郵箱,@用點代替)
0 ; serial 當前區域數據庫序例號,最多十位數字
1D ; refresh 向主DNS同步數據庫的時間
1H ; retry 連接主DNS不成功後每隔多少時間再聯繫
1W ; expire 最多重試時間。
3H ) ; minimum 未查詢到的條目緩存時間,在此期間不會再次查詢此主機名。
IN NS ns.wukui.net. 指定本域的dns服務器,可以有多個。(ns.wukui.net.爲全部名稱,也可以寫成ns。)
IN MX 10 mail .wukui.net. 指定本域的郵件服務器,並指優先級,直小越優先。
fly.wukui.net. IN NS ns.fly.wukui.net. 子域授權,指定fly.wukui.net.子域NS記錄。可以簡寫。
ns IN A 172.16.2.10 指定ns服務器地址,一定要指定。
ns.fly IN A 192.168.1.20 指定子域的ns服務器ip地址。
www IN A 8.8.8.8 設定www主機對就的A記錄。
mail IN A 10.0.0.1 一個名稱對應多個ip爲了使用dns做負載均衡
ftp IN A 172.16.0.1
pop IN CNAME mail.wukui.net. 設定pop是mail的正式名稱,mail.wukui.net。可以簡寫爲mail
------------------------------
ip解析名稱
------------------------------
$TTL 1D
$ORIGIN 2.16.172.in-addr.arpa. 如果下面的ip有簡寫,自動補上此串
@ IN SOA @ ns.wukui.net. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.wukui.net.
10.2 IN PTR wukui.wukui.net. ip與fqdn(必須寫完整)的對應。這裏寫成10.2是因爲主配置文件中zone "16.172.in-addr-arpa"已經定義了此ip的前綴。
15.2.16.172.in-addr.arpa. IN PTR WWW.WUKUI.NET (15.2.16.172.in-addr.arpa. 爲ip的全寫)
====================================================================
DNS主從同步
====================================================================
主從同步的前題
---------------------------------------------
1,時間同步,主從兩臺服務器的時間必須要統一,可以使用ntp協議完成。
# ntpdate 172.16.0.1 向ntp服務器同步時間
# crontab -e 爲了保證以後時間統一,做定時任務,每隔3分鐘就同步一次時間。
*/3 * * * * /sbin/ntpdate 172.16.0.1 &> /dev/null
2,bind的使用版本,從服務器版本要與主服務器一樣或者比主服務器的版本高。二者相同最好。
3,需要在域名註冊商再添加一個NS記錄,以便互聯網上的主機通過父域可以找到它。
4,在主dns服務器的區域配置文件中加入從服務器的NS記錄,並定義從服務器的ip。
------------------------------------------------
區域文件定義
zone "區域名" IN { 指定區域名稱 type slave; 指定本工作模式 file "slaves/區域文件名"; 指定同下來的數據文件名,rpm包安裝後一般爲/var/named/slaves。專存放同步過來的數據文件。 masters { 172.16.0.1; 172.16.100.1; }; 指定同步的服務器,一般是主服務器,(可以爲從服務器)。如果指定多個,第一個聯繫爲上會找第二個同步。 };
--------------------------------------------
====================================================================
bind view , 視圖,根據客戶端的來源不同,將同一個名稱解析至不同的ip。智能DNS。判斷順序自上而下匹配,需要本機解析的區域定義都需要放在視圖中(包括點區域定義),
-----對查詢請求的地址歸類-------
acl "名稱" { 把訪問客戶端分類,比如這裏電信一類 172.16.0.0/16; }; acl "unicom" { 第二類客戶端, 192.168.0.0/24; }; -------定義視圖---------------------- view "名稱" { 匹配第一個視圖 match-clients { acl;或ip; }; zone "wukui.net" IN { type master; file "區域庫文件路徑"; }; 區域二................ }; view "名稱二" { 匹配第二個視圖 match-clients { acl;或ip; }; zone "wukui.net" IN { type master; file "區域庫文件路徑"; }; 區域二................ }; view "名稱二" { 如果上兩個視圖匹配不到,默認匹配此視圖 zone "wukui.net" IN { type master; file "區域庫文件路徑"; }; 區域二................ };
==================================================================
配置正向反向解析DNS,並配置從服務器。兩臺服務器時間必須一樣。
1,配置主配置文件,加入正向解析與反向解析,並且設定只允許本機與從服務器可以請求
2,配置解析庫文件。位於/var/named/。並在此文件中指明第二個服務器的NS記錄與A記錄。
3,配置從dns服務器,把test.com區域同步到本機
4,使用客戶端測試
在主dns/etc/named.rfc1912.zones文件中定義正反向區域
zone "test.com." IN { type master; file "test.com.zone"; allow-update { none; }; allow-transfer { 192.168.0.20; }; }; zone "16.172.in-addr.arpa" IN { type master; file "16.172.zone"; allow-transfer { 192.168.0.20; }; };
區域解析庫文件/var/named/test.com.zone
$TTL 1D @ IN SOA ns.test.com. admin.test.com. ( 2014080601 1H 5M 1W 1D ) IN NS ns IN NS ns2 ns IN A 172.16.2.10 ns2 IN A 192.168.0.20 www IN A 172.16.0.1
區域解析庫文件/var/named/16.172.zone
$TTL 1D @ IN SOA @ ns.test.com. ( 2014080601 1H 5M 1W 1D ) IN NS ns.test.com. IN NS ns2.test.com. 10.2 IN PTR ns.test.com.
從服務器配置文件中寫入(/etc/named.rfc1912.zones)
zone "test.com" IN { type slave; file "slaves/test.com.zone"; masters { 172.16.2.10; }; }; zone "16.172.in-addr.arpa" IN { type slave; file "slaves/16.172.zone"; masters { 172.16.2.10; }; };
兩臺服務器重啓服務,配置完成,
============================================================
子域授權,test.com授權給192.168.0.20爲hello.test.com的ns服務器
1,父域服務器授權給子域,
2,子域服務器配置子域解析文件和解析庫。
1,配置父域服務器解析庫,添加子域服務器的NS記錄,並且指定子域的dns服務器爲192.168.0.20。在/var/named/test.com.zone文件中加入。
hello IN NS ns3.hello.test.com. ns3.hello.test.com. IN A 192.168.0.20
2,子域dns服務器在/etc/named.rfc1912.zones文件中加入
zone "hello.test.com" IN { type master; file "hello.test.com.zone"; };
配置子域解析庫文件/var/named/hello.test.com.zone
$TTL 1D @ IN SOA ns.hello.test.com. admin.test.com. ( 2014080601 1H 5M 1W 1D ) IN NS ns IN MX 10 www ns IN A 192.168.0.22 www IN A 192.168.2.22
配置完成。
===================================================================
bind視圖配置,根據客戶端的ip不一樣,返還給客戶端的ip不同。a區的客戶機請求www.test.com解析爲192.168.0.1。b區的客戶機請求www.test.com解析的ip爲172.16.0.1。
配置大體過程:
1,配置/etc/named.conf定義alc,關閉安全傳輸功能。
2,配置/etc/named.rfc1912.zones ,定義三個view,第一個解析a區域,第二個解析b區域,第三個解析其它。在view中定義match-clients和爲此網絡解析的區域。
3,配置區域解析數據文件/var/named/test.com.zone.a和/var/named/test.com.zone.b。
4,客戶端配置dns爲172.16.2.10,設置ip爲192.168.0.100測試,設置ip爲172.16.2.100測試,是否把www.test.com解析到定義好的ip。
主配置文件如下。/etc/named.conf------------------------------------------------
acl "b" { 自定義acl,b區 172.16.0.0/16; }; acl "a" { 自定義acl,a區 192.168.0.0/24; }; options { 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"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; include "/etc/named.rfc1912.zones";
主配置區域文件/etc/named.rfc1912.zones------------------------------
view "192.168.0.0" { 第一個視圖區,給acl定義a網絡的主機解析 match-clients { a; }; acl列表a中的主機匹配此視頻 zone "test.com" { type master; file "test.com.zone.a"; }; zone "." IN { type hint; file "named.ca"; }; 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; }; }; zone "wukui.net" IN { type master; file "wukui.net.zone"; allow-transfer { 172.16.2.12; }; }; zone "16.172.in-addr.arpa." IN { type master; file "172.16.2.zone"; }; };
//-------------------------------------------------------------------------------
view "172.16.0.0" { 第二個視圖區,給acl定義的b網絡主機解析 match-clients { b; }; 定義匹配b網絡 zone "test.com" { type master; file "test.com.zone.b"; }; zone "." IN { type hint; file "named.ca"; }; 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; }; }; zone "wukui.net" IN { type master; file "wukui.net.zone"; allow-transfer { 172.16.2.12; }; }; zone "16.172.in-addr.arpa." IN { type master; file "172.16.2.zone"; }; };
//-------------------------------------------------------------------------------
view "other" { 爲除了a和b的網絡解析,這些請求是內網主機,所以只給內網主機服務。
zone "." IN { type hint; file "named.ca"; }; 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; }; }; zone "wukui.net" IN { type master; file "wukui.net.zone"; allow-transfer { 172.16.2.12; }; }; zone "16.172.in-addr.arpa." IN { type master; file "172.16.2.zone"; }; };
區域庫文件配置----------------------------
[root@wukui ~]# cat /var/named/test.com.zone.a
$TTL1D @ IN SOA ns.test.com. admin.test.com. ( 2014080601 1H 5M 1W 1D ) IN NS ns IN MX 1 mail ns IN A 172.16.2.10 mail IN A 172.16.2.10 wwwI N A 192.168.0.1
[root@wukui ~]# cat /var/named/test.com.zone.b $TTL 1D @ IN SOA ns.test.com. admin.test.com. ( 2014080601 1H 5M 7W 1D ) IN NS ns IN MX 1mail ns IN A 172.16.2.10 mail IN A 172.16.2.20 www IN A 172.16.0.1
===================================================================
完成!!