1. 程式人生 > >DNS服務中幾種常用服務的配置方法

DNS服務中幾種常用服務的配置方法

DNS域名解析服務

域名作為替代IP地址的訪問名稱,構成是由頂級域名—代表國家,機構或組織等,二級域名—企業名稱或品牌名稱等,主機名—www或主機所提供的服務名稱等自主命名組成,相較於IP地址,域名更容易被理解和記憶。

鑑於網際網路中的域名和 IP 地址對應關係資料庫太過龐大, DNS 域名解析服務採用了類似目錄樹的層次結構來記錄域名與 IP 地址之間的對應關係,從而形成了一個分散式的資料庫系統,如下圖所示:
在這裡插入圖片描述

DNS伺服器的型別

  • 主伺服器: 在特定區域內具有唯一性,負責維護該區域內的域名與 IP 地址之間的對應關係。
  • **從伺服器:**從主伺服器中獲得域名與 IP 地址的對應關係並進行維護,以防主伺服器宕機等情況。
  • 快取伺服器: 通過向其他域名解析伺服器查詢獲得域名與 IP 地址的對應關係,並將經常查詢的域名資訊儲存到伺服器本地,以此來提高重複查詢時的效率

簡單來說,主伺服器是用於管理域名和 IP 地址對應關係的真正伺服器,從伺服器幫助主伺服器“打下手”,分散部署在各個國家、省市或地區,以便讓使用者就近查詢域名,從而減輕主伺服器的負載壓力。快取伺服器不太常用,一般部署在企業內網的閘道器位置,用於加速使用者的域名查詢請求。

DNS伺服器解析分類

  • SOA:描述域管理NS,主從DNS伺服器同步引數
  • NS:域DNS伺服器FQDN
  • A:域名到IP的對映
  • MX:域郵件伺服器
  • CNAME:域名別名
  • PTR:IP到域名的對映

DNS伺服器的解析過程

DNS 域名解析服務採用分散式的資料結構來存放海量的“區域資料”資訊,在執行使用者發起的域名查詢請求時,具有遞迴查詢和迭代查詢兩種方式。所謂遞迴查詢,是指 DNS 伺服器在收到使用者發起的請求時,必須向用戶返回一個準確的查詢結果。如果 DNS 伺服器本地沒有儲存與之對應的資訊,則該伺服器需要詢問其他伺服器,並將返回的查詢結果提交給使用者。而迭代查詢則是指, DNS 伺服器在收到使用者發起的請求時,並不直接回複查詢結果,而是告訴另一臺 DNS 伺服器的地址,使用者再向這臺 DNS 伺服器提交請求,這樣依次反覆,直到返回查詢結果。

向 DNS 伺服器發起域名查詢請求的流程
在這裡插入圖片描述

Bind服務程式的主要配置檔案

  • 主配置檔案(/etc/named.conf): 只有 58 行,而且在去除註釋資訊和空行之後,實際有效的引數僅有 30 行左右,這些引數用來定義 bind 服務程式的執行。

  • 區域配置檔案(/etc/named.rfc1912.zones): 用來儲存域名和 IP 地址對應關係的所在位置。類似於圖書的目錄,對應著每個域和相應 IP 地址所在的具體位置,當需要檢視或修改時,可根據這個位置找到相關檔案。

  • 資料配置檔案目錄(/var/named): 該目錄用來儲存域名和 IP 地址真實對應關係的資料配置檔案

例子1:DNS正向解析

1.安裝bind服務程式

yum -y install bind*

2.配置主配置檔案

vim /etc/named.conf #修改主配置檔案中的如下兩行
listen-on port 53 { any; };  #監聽所有地址的53埠
allow-query { any; };  #允許所有人請求

檢查配置檔案引數是否有錯誤,執行如下命令:

named-checkconf -z /etc/named.conf

3.編輯區域配置檔案

vim /etc/named.rfc1912.zones  #向區域配置檔案最後面新增如下內容
zone "test.com" IN {
    type master;
    file "test.com.zone";
    allow-transfer {none;};
};

4.編輯資料配置檔案

cd /var/named/
cp -a named.localhost test.com.zone
vim test.com.zone
$TTL 1D
@        IN  SOA  test.com.  admin.test.com.  (200 1H 15M 1W 1D)
@        IN  NS   www.test.com. # 表示當前區域名稱郵件中用"."代替
www      IN  A    172.16.56.3  # 一個主機名配置三個IP,起到負載均衡的作用
www      IN  A    172.16.56.4
www      IN  A    172.16.56.5
  • 200更新序列號,10位以內的正整數
  • 1H重新整理時間,重新下載地址資料的時間
  • 15M重試延時,下載失敗後的重試間隔
  • 1W失效時間,超過改時間無法下載就放棄
  • 1D無效解析記錄生存週期

5.重啟服務,驗證正向解析

systemctl restart named
systemctl enable named
驗證:
[[email protected] named]# nslookup
> www.test.com
Server:		172.16.56.132
Address:	172.16.56.132#53

Name:	www.test.com
Address: 172.16.56.4
Name:	www.test.com
Address: 172.16.56.5
Name:	www.test.com
Address: 172.16.56.3

例子2:DNS反向解析

1.編輯區域配置檔案

vim /etc/named.rfc1912.zones  #向區域配置檔案最後面新增如下內容
zone "56.16.172.in-addr.arpa" IN {
    type master;
    file "172.16.56.arpa";
    allow-transfer {none;};
};

2.編輯資料配置檔案

cp -a named.loopback 172.16.56.arpa
vim 172.16.56.arpa
$TTL 1D
@        IN  SOA  test.com.  admin.test.com.  (200 1H 15M 1W 1D)
@        IN  NS   www.test.com.
3        IN  PTR  www.test.com.

3.重啟服務,驗證反向解析

systemctl restart named
驗證:
[[email protected] named]# nslookup
> 172.16.56.3
Server:		172.16.56.132
Address:	172.16.56.132#53

3.56.16.172.in-addr.arpa	name = www.test.com.

例子3:部署從伺服器

1.在主伺服器的區域配置檔案中允許該從伺服器的更新請求

vim /etc/named.rfc1912.zones
zone "test.com" IN {
         type master;
         file "test.com.zone";
         allow-transfer { 172.16.56.131; };
};

zone "56.16.172.in-addr.arpa" IN {
         type master;
         file "172.16.56.arpa";
         allow-transfer { 172.16.56.131; };
};

2.在從伺服器中安裝bind服務,並且在從伺服器中填寫主伺服器的 IP 地址與要抓取的區域資訊

yum -y install bind*
vim /etc/named.conf
listen-on port 53 { any; };  #監聽所有地址的53埠
allow-query { any; };  #允許所有人請求
vim /etc/named.rfc1912.zones
zone "test.com" IN {
        type slave;
        masters { 172.16.56.132; };
        file "slaves/test.com.zone";
};

zone "56.16.172.in-addr.arpa" IN {
        type slave;
        masters { 172.16.56.132; };
        file "slaves/172.16.56.arpa";
};

3.重啟,檢驗解析結果

cd /var/named/slaves
ls
172.16.56.arpa  test.com.zone
驗證:
[[email protected] slaves]# nslookup
> www.test.com
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	www.test.com
Address: 172.16.56.4
Name:	www.test.com
Address: 172.16.56.5
Name:	www.test.com
Address: 172.16.56.3
> 172.16.56.3
Server:		127.0.0.1
Address:	127.0.0.1#53

3.56.16.172.in-addr.arpa	name = www.test.com.

例子4:安全的加密傳輸

域名解析服務是網際網路基礎設施中重要的一環,幾乎所有的網路應用都依賴於 DNS 才能正常執行。如果 DNS 服務發生故障,那麼即便 Web 網站或電子郵件系統服務等都正常執行,使用者也無法找到並使用它們了。bind 服務程式為了提供安全的解析服務,已經對 TSIG(RFC 2845)加密機制提供了支援。TSIG 主要是利用了密碼編碼的方式來保護區域資訊的傳輸(Zone Transfer),即 TSIG 加密機 制保證了 DNS 伺服器之間傳輸域名區域資訊的安全性。

接下來的實驗依然使用了之前的兩臺已經搭好的主從伺服器。

1.在主伺服器中生成祕鑰

dnssec-keygen 命令用於生成安全的 DNS 服務金鑰,其格式為“ dnssec-keygen [引數]”,常用的引數以及作用如下表所示。

引數 作用
-a 指定加密演算法,包括 RSAMD5(RSA)、 RSASHA1、 DSA、 NSEC3RSASHA1、 NSEC3DSA等
-b 金鑰長度(HMAC-MD5 的金鑰長度在 1~512 位之間)
-n 金鑰的型別(HOST 表示與主機相關)
#使用下述命令生成一個主機名稱為 master-slave 的 128 位 HMAC-MD5 演算法的金鑰檔案
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
ls -al Kmaster-slave.+157+17661.*
-rw-------. 1 root root  56 12月 19 23:17 Kmaster-slave.+157+17661.key
-rw-------. 1 root root 165 12月 19 23:17 Kmaster-slave.+157+17661.private
#檢視私鑰檔案內容
cat Kmaster-slave.+157+17661.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: R9hs875WLZJAMTW/h2+hSw==   #cp下來,一會兒要將其寫入傳輸配置檔案中
Bits: AAA=
Created: 20181220040818
Publish: 20181220040818
Activate: 20181220040818

2.在主伺服器中建立金鑰驗證檔案

cd /var/named/chroot/etc/
vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "9hs875WLZJAMTW/h2+hSw==";
};

chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key

3.開啟並載入Bind服務的祕鑰驗證功能

vim /etc/named.conf
include "/etc/transfer.key"; #在主伺服器的主配置檔案中載入金鑰驗證檔案
options {
...
allow-transfer { key master-slave; }; #只允許帶有 master-slave 金鑰認證的 DNS 伺服器同步資料配置檔案
...
}
systemctl restart named #修改完後,重啟服務

4.清空DNS從伺服器同步目錄中所有的資料配置檔案,然後再次重啟Bind服務程式

rm -rf /var/named/slaves/*
systemctl restart named
ls /var/named/slaves/ #檢視發現沒有從主伺服器那更新到

5.配置從伺服器,使其支援祕鑰驗證

cd /var/named/chroot/etc
vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "9hs875WLZJAMTW/h2+hSw==";
};

chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key

6.開啟並載入伺服器的祕鑰驗證功能

vim /etc/named.conf
include "/etc/transfer.key";
options {
    ...
    server 172.16.56.132
    {
    keys { master-slave; };    
    };
    ...
};

systemctl restart named
ls /var/named/slaves/      #DNS 從伺服器同步域名區域資料
172.16.56.arpa  test.com.zone

例子5:部署快取伺服器

DNS 快取伺服器(Caching DNS Server)是一種不負責域名資料維護的 DNS 伺服器。簡單來說,快取伺服器就是把使用者經常使用到的域名與 IP 地址的解析記錄儲存在主機本地,從而提升下次解析的效率。 DNS 快取伺服器一般用於經常訪問某些固定站點而且對這些網站的訪問速度有較高要求的企業內網中,但實際的應用並不廣泛。而且,快取伺服器是否可以成功解析還與指定的上級 DNS 伺服器的允許策略有關,因此當前僅需瞭解即可。

域名伺服器本身自帶域名快取伺服器的配置,不用調整即可使用,使用迭代查詢方法返回IP。快取伺服器一般用於企業內網,旨在降低內網使用者查詢 DNS 的時間消耗。為了更加貼近真是環境,實現外網查詢功能,需要給伺服器裝兩網絡卡,分別模擬內網和外網。

1.配置系統的雙網絡卡引數

主機名稱 IP地址
快取伺服器 內網:172.16.56.132;外網:192.168.43.27
客戶端 172.16.56.131

2.在 bind 服務程式的主配置檔案中新增快取轉發引數

vim /etc/named.conf
allow-query { any; }; #大概在此位置下新增如下一條
forwarders { 210.73.64.1; }; #如果不想迭代查詢根,可以配置此選項,新增查詢的dns伺服器

3.重啟DNS服務,驗證結果

systemctl restart named
[[email protected] ~]# nslookup
> server 172.16.56.132
Default server: 172.16.56.132
Address: 172.16.56.132#53
> www.test.com
Server:		172.16.56.132
Address:	172.16.56.132#53

Name:	www.test.com
Address: 172.16.56.4
Name:	www.test.com
Address: 172.16.56.3
Name:	www.test.com
Address: 172.16.56.5
> www.linuxprobe.com
Server:		172.16.56.132
Address:	172.16.56.132#53

Non-authoritative answer:
www.linuxprobe.com	canonical name = www.linuxprobe.com.w.kunlunno.com.
Name:	www.linuxprobe.com.w.kunlunno.com
Address: 27.221.30.46
> 8.8.8.8
Server:		172.16.56.132
Address:	172.16.56.132#53

Non-authoritative answer:
8.8.8.8.in-addr.arpa	name = google-public-dns-a.google.com.

Authoritative answers can be found from:
8.in-addr.arpa	nameserver = r.arin.net.
8.in-addr.arpa	nameserver = x.arin.net.
8.in-addr.arpa	nameserver = y.arin.net.
8.in-addr.arpa	nameserver = u.arin.net.
8.in-addr.arpa	nameserver = z.arin.net.
8.in-addr.arpa	nameserver = arin.authdns.ripe.net.

例子6:分離解析技術

主機名稱 IP地址
DNS伺服器 LAN:192.168.43.27 WAN:172.16.56.132
客戶機 LAN:192.168.43.100 WAN:172.16.56.100

1.修改 bind 服務程式的主配置檔案

vim /etc/named.conf  #修改如下內容
listen-on port 53 { any; };  #監聽所有地址的53埠
allow-query { any; };  #允許所有人請求
#刪除如下內容:
zone "." IN {
type hint;
file "named.ca";
};

2.編輯區域配置檔案

vim /etc/named.rfc1912.zones
acl "WAN" { 192.168.43.0/24; };
acl "LAN" { 172.16.56.0/24; };
view "LAN"{
match-clients { "LAN"; };
zone "test.com" {
type master;
file "test.com.zone.lan";
};
};
view "WAN" {
match-clients { "WAN"; };
zone "test.com" {
type master;
file "test.com.zone.wan";
};
};

3.建立資料配置檔案

cd /var/named
cp -a named.localhost test.com.zone.lan
cp -a named.localhost test.com.zone.wan
vim test.com.zone.wan
$TTL 1D
@        IN  SOA  test.com.  admin.test.com.  (200 1H 15M 1W 1D)
@        IN  NS   www.test.com.
www      IN  A    192.168.43.3
www      IN  A    192.168.43.4
www      IN  A    192.168.43.5
vim test.com.zone.lan
$TTL 1D
@        IN  SOA  test.com.  admin.test.com.  (200 1H 15M 1W 1D)
@        IN  NS   www.test.com.
www      IN  A    172.16.56.3
www      IN  A    172.16.56.4
www      IN  A    172.16.56.5

4.重新啟動named服務程式,驗證結果

systemctl restart named
驗證結果:
LAN:
[[email protected] ~]# nslookup
> server 172.16.56.132
Default server: 172.16.56.132
Address: 172.16.56.132#53
> www.test.com
Server:		172.16.56.132
Address:	172.16.56.132#53

Name:	www.test.com
Address: 172.16.56.4
Name:	www.test.com
Address: 172.16.56.5
Name:	www.test.com
Address: 172.16.56.3

WAN:
[email protected]:~$ nslookup
> server 192.168.43.27
Default server: 192.168.43.27
Address: 192.168.43.27#53
> www.test.com
Server:		192.168.43.27
Address:	192.168.43.27#53

Name:	www.test.com
Address: 192.168.43.4
Name:	www.test.com
Address: 192.168.43.5
Name:	www.test.com
Address: 192.168.43.3