1.DNS簡介 DNS(功能變數名稱系統)即domain name server, 將主機名與IP簡歷關聯,使用戶可以通過主機名(功能變數名稱)訪問網路中的主機.對於伺服器主機,即使伺服器的IP地址改變了,只要將新的IP地址與功能變數名稱關聯,而不是通知用戶新的功能變數名稱. DNS 通常採用一個或多個為某些域認證的集中伺服器部署 ...
1.DNS簡介
DNS(功能變數名稱系統)即domain name server, 將主機名與IP簡歷關聯,使用戶可以通過主機名(功能變數名稱)訪問網路中的主機.對於伺服器主機,即使伺服器的IP地址改變了,只要將新的IP地址與功能變數名稱關聯,而不是通知用戶新的功能變數名稱.
DNS 通常採用一個或多個為某些域認證的集中伺服器部署。客戶端主機請求來自名稱伺服器的信息時,通常會連接到埠 53。然後名稱伺服器會解析請求的名稱。如果將名稱伺服器配置為遞歸名稱伺服器,並沒有授權回答,或者沒有為之前的查詢緩存的回答,它會查詢其他名稱伺服器(即 root 名稱伺服器),決定哪個是這個 要查詢名稱的授權名稱伺服器,然後查詢以獲取請求的名稱。僅作為授權配置的名稱伺服器若禁用遞歸功能,則不會代表客戶端進行查詢。
2.DNS伺服器的區域和類型
DNS伺服器中,所有信息都保存在基本數據元素中(資源記錄,RR).RFC1034定義了資源記錄.DNS服務採用樹狀結構管理功能變數名稱,每層都使用(.)分隔.例如:在root域中, . 表示DNS的root,即層0.功能變數名稱com指的是頂級域(TLD),即root域的下一層,層級結構的第一層.功能變數名稱example.com是層級結構的第二層.
資源記錄示例:
example.com. 86400 IN A 192.0.3.1
功能變數名稱example.com是RR的所有者.值86400是生存時間(TTL).字母IN的含義是“互聯網系統”,代表RR的分類.字母A代表RR的類型(主機地址).主機地址192.0.3.1,即RR記錄功能變數名稱example.com的IP指向.區域是通過文件在授權DNS伺服器中定義,該文件包含每個區域中資源記錄的定義.Zone文件保存了主名稱伺服器及輔名稱伺服器.
DNS伺服器提供的服務有兩種:1.授權服務 授權DNS伺服器響應屬於本區域的資源記錄.包括主(master)和從屬(slave)DNS.2.遞歸 遞歸DNS提供解析服務,但不為任何區域授權.在固定的時間段內響應客戶端記憶體中緩存的解析,該時間段查詢的資源記錄指定.雖然DNS伺服器可以既授權又遞歸,但是一般不合併兩種配置.遞歸伺服器查詢RR,比授權響應要耗費更長的時間,因此遞歸伺服器僅適用於有限的客戶端.
3.BIND
BIND(berkeley Internet Name Domain)是RHEL中自帶的DNS伺服器.它包含一組與DNS相關的程式,named的名稱伺服器、管理程式rndc、debug工具dig.BIND中配置了大量的“空白區域”,防止遞歸查詢伺服器向未被授權的區域發送不必要的請求,引起服務阻塞.這些空白區域保證返回即時且授權的NXDOMAIN響應.named.conf中的配置選項empty-zones-enable 控制是否生成空白區域,還可以同時使用disable-empty-zone 選項在其使用的預設首碼列表中禁用一個或多個空白區域.BIND中已增加為RFC1918首碼生成的空白 區域數.在BIND9.9中,即使未指定empty-zones-enable(預設為yes),用戶也可以看到RFC1918的空白區域.
4.BIND與bind-chroot
在安裝bind-chroot軟體包後,BIND會在chroot環境中運行.此時,初始化腳本將使用mount --bind命令掛載named的配置文件named.conf,以便在chroot環境外管理該配置.不需要向/var/named/chroot/目錄複製任何內容,chroot會自動掛載該目錄.
如果/var/named/chroot/中的對應掛載點為空,則以下目錄會自動掛載到/var/named/chroot/目錄:
/etc/named
/etc/pki/dnssec-kyes
/run/named
/var/named
/usr/lib64/bind或/usr/lib/bind
如果在/var/named/chroot/中不存在以下文件,也會將其掛載到目標文件中:
/
/etc/rndc.conf
/etc/rndc.key
/etc/named.rfc1912.zones
/etc/named.dnssec.keys
/etc/named.iscdlv.key
/etc/named.root.key
最好為每個掛載到chroot中的文件做備份.
5.BIND的配置named.conf
(1)ACL
ACL (訪問控制列表)語句可以使管理員定義主機組,這樣可以允許或者拒絕對該名稱伺服器的訪問.格式如下:
acl acl-name { match-element; ... };
acl-name是訪問控制列表名稱, match-element選項通常是獨立的IP地址.
關鍵字 | 描述 |
any | 與所有IP地址匹配 |
localhost | 與本地系統使用的IP地址匹配 |
localnets | 與所有本地系統連接的網路中的IP地址匹配 |
none | 不匹配任何IP地址 |
acl 與option聯合使用:
acl blacklist {
192.168.0.0/24;
172.16.12.0/24;
124.204.46.73;
};
acl whitelist {
172.25.0.0/24;
};
options {
blackhole {blacklist;};
allow-query {whitelist;};
allow-query-cache {whitelist;};
};
(2)include include選項可以使/etc/named.conf 載入額外的配置文件,可以使重要數據保存在有嚴格許可權的獨立文件中.
例如:
include "/etc/named.rfc1912.zone";
(3)options options定義DNS伺服器的全局配置.
options 常用配置選項如下:
選項 | 描述 |
diretory | 指定named服務的工作目錄.預設為/var/named/ |
disable-empty-zone | 在使用預設首碼列表中禁用一個或多個空白區域.在options或view中指定,可多次使用. |
dnssec-enable |
指定是否返回與dnssec關聯的資源記錄.預設為yes. |
dnssec-validation | 指定是否提供使用dnssec認證的資源記錄.預設為yes. |
empty-zones-enable | 控制是否生成空白區域.只能在options中使用. |
forwarders | 為DNS伺服器指定有效的IP地址列表,所有申請都會轉發到此地址進行解析. |
forward |
指定forwarders的工作方式. first BIND將向forwarders列表中指定的DNS查詢,如果查詢失敗,則嘗試使用本地zone配置查詢; only BIND只向forwarders中的DNS伺服器做轉發查詢,不會自己解析. |
listen-on | 指定偵聽IPv4網路介面中的DNS請求. |
listen-on-v6 | 偵聽來自IPv6介面的DNS請求. |
max-cache-size | 指定DNS伺服器可使用的最大記憶體,預設為32M. |
notify |
定義主DNS更新zone後,是否通知從屬DNS. yes 主DNS會通知所有的從屬DNS; no 主DNS不會通知從屬DNS; master-only 該DNS只通知本區域的其它主DNS; explicit 該DNS伺服器只通知在zone語句的also-notify列表中指定的從屬DNS. |
pid-file | 指定named服務生成的進程ID文件位置. |
recursion | 是否作為遞歸DNS,預設為yes. |
statistics-file | 指定統計文件備選位置,預設使用/var/named/named.stats. |
options配置示例:
options {
allow-query { localhost; };
listen-on port 53 {127.0.0.1;};
listen-on-v6 port 53 {::1;};
max-cache-size 256M;
directory "/var/named";
statistics-file "/var/named/data/named_stats.txt";
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
(4)zone zone定義DNS解析區域.zone中的配置可以覆蓋options中的配置.
zone配置示例:
zone "example.com" IN {
type master;
file "example.com.zone";
};
zone常用選項:
選項 | 描述 |
allow-query | 指定哪些客戶端可以請求查詢這個區域的信息.該選項會覆蓋options中的全局allow-query配置.預設允許所有查詢請求. |
allow-transfer | 指定哪些從屬DNS可以請求傳遞區域信息,預設允許所有. |
allow-update | 指定哪些主機可在其區域中動態更新信息.預設拒絕所有. |
file | 指定named的工作目錄.包含區域配置文件(zone的配置文件). |
masters | 指定可以請求授權zone信息的IP地址.只有在區域被定義為"type slave“時,該選項才會被named正確識別,否則報錯,named無法啟動. |
notify |
定義主DNS更新zone後,是否通知從屬DNS.zone中的notify會覆蓋options中的notify配置. yes 主DNS會通知所有的從屬DNS; no 主DNS不會通知從屬DNS; master-only 該DNS只通知本區域的其它主DNS; explicit 該DNS伺服器只通知在zone語句的also-notify列表中指定的從屬DNS. |
type |
定義區域類型. delegation-only 加強基礎區域授權狀態,比如COM、NET、ORG.任何沒有附加信息的授權響應都被認為是NXDOMAIN.該選項只可用於遞歸或緩存DNS中的部署的TLD(頂級域,top-level domain)或者root區域文件. forward 將所有本區域的DNS請求轉發到其它DNS伺服器. hint 指向rootDNS的特殊區域類型.hint指向的rootDNS是用來解析其它次級DNS無法解析的zone. master zone授權的本地專用DNS,通常是主DNS. slave zone授權的本地從屬DNS,需要在masters選項中指定主DNS. |
主從DNS的Zone配置示例:
master的Zone配置:
zone "example.com" IN {
type master;
file "example.com.zone";
allow-transfer {192.168.0.4;};
};
slave的Zone配置:
zone "example" {
type slave;
file "slave/example.com.zone";
masters {192.168.0.1;};
};
(5)named.conf中的其它語句配置:
語句 | 描述 |
controls | 定義rndc管理named服務的安全選項 |
key |
dnssec或rndc中使用的密鑰.key有兩個選項: algorithm 指定密鑰使用的演算法,例如 hmac0md5. secret “key-value" 加密密鑰. |
logging | 自定義named的日誌,包括文件名、大小、版本號等.預設情況下,named向rsyslog守護進程發送標準信息,並保存在/var/log/messages文件中. |
server | 指定named響應遠程DNS的方式.使用transfer-format控制每條信息附帶的資源記錄數.根據具體環境,可以是one-answer,也可以是many-answers. |
trusted-keys | 指定安全dnssec的分類公鑰. |
view | 使DNS伺服器根據所在網路生成特殊視圖.控制不同區域中的DNS請求.view中的配置會覆蓋options中配置. |
6.rndc管理named
rndc是BIND提供的管理named的組件工具,其配置文件為/etc/rndc.conf. rndc的密鑰文件是/etc/rndc.key.
通常為安全考慮,應該修改named的預設偵聽埠(預設為953),以及限制rndc.key的訪問許可權.
~]#chmod o-rwx /etc/rndc.key
rndc常用命令:
命令 | 描述 |
rndc status | 檢查named當前狀態. |
rndc reload | 重新載入配置文件及zone. |
rndc sign localhost | 更新dnssec密鑰並註冊該區域. |
rndc validation on/off | 啟用/禁用dnssec驗證. |
rndc querylog | 啟用或禁用查詢日誌. |
7.dig
dig常用命令:
命令 | 描述 |
dig example.com NS | 查詢名稱伺服器.(查詢DNS伺服器) |
dig example.com A | 查詢IP地址. |
dig -x 192.100.101.102 | 查詢主機名(功能變數名稱). |
BIND還有一些其它高級功能,例如:多視圖匹配、增量區域傳送(IXFR)、事務處理簽名(TSIG)、DNS安全擴展(DNSSEC),有時間可以仔細研究.