根DNS域名解析的實現

一、實現從根,com,rj.com 模擬互聯網的DNS架構

DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。

接下來就一起開始搭建吧

首先,我們需要計劃好實驗環境,包括實驗的步驟思路

1)實驗環境(最好是畫圖展示,能使思路清晰)

a) ip地址

b) 系統版本(我這里使用Centos7)

c) 軟件版本(使用Centos7光盤內的版本,默認應該是bind-9.9.4)

2)實驗步驟思路

a) 搭建根服務器,將根服務器的信息拷貝到其他所有服務器上

b) 搭建com服務器,rj.com服務器,www.rj.com主機

c) 搭建運營商服務器

d) 配置客戶機DNS指向運營商服務器

e) 客戶機解析www.rj.com主機

客戶機-(dns指向)->運營商-(/var/named/named.ca)->根服務器-(/var/named/named.ca)->com服務器-(com.zone)->rj.com服務器-(rj.com.zone)->www.rj.com主機

二、實驗環境:

根服務器:

Name:rootdns

IP:192.168.99.60

com服務器:

Name:comdns

IP:192.168.99.61

rj.com服務器:

Name:rjcom

IP:192.168.99.62

www.rj.com主機:

Name:wwwrjcom

IP:192.168.99.63

運營商DNS服務器:

Name:dxdns

IP:192.168.99.64

客戶機:

IP:192.168.99.65

DNS:192.168.99.64

三、設計拓撲圖

根DNS域名解析的實現

四、服務器配置:

A、根服務器的配置

1、修改主機名(由于需要機器較多,便于自己識別)

[root@dns ~]# hostnamectl set-hostname rootdns
[root@rootdns ~]# 

2、配置網絡接口

[root@rootdns ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 
DEVICE=eno16777736
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.99.60
PREFIX=16

3、清除防火墻

[root@rootdns ~]# iptables -F

4、安裝bind

[root@rootdns ~]# yum install -y bind

5、編輯DNS主配文件

[root@rootdns ~]#  vim /etc/named.conf 
 //      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

不修改則默認只監聽在本機127.0.0.1并且只能從本機查詢,建議注釋掉上述兩行

dnssec-enable no;
dnssec-validation no;

上述兩項的yes改為no,這兩項yes是使用加密及簽名來保證DNS服務器通信安全的,由于我們沒有使用,所以必須改為no,否則下級DNS是無法與上級DNS進行通信的

zone "." IN {
type master;
file "named.ca";
};
修改根的類型:hint-->master

6、重寫根的解析文件/var/named/named.ca

[root@rootdns ~]# cd /var/named/
[root@rootdns named]# echo >named.ca ## 清空原來的數據
[root@rootdns named]# vim named.ca ## 手動輸入,也可以根據/var/named/下的模板修改
$TTL 1D
. IN SOA dns.root. admin.root. ( 1 1D 1H 1W 1D )
. IN NS dns.root.
dns.root. IN A 192.168.99.60
com IN NS dns.com.
dns.com. IN A 192.168.99.61
[root@rootdns named]# 

7、檢查配置文件語法有無錯誤

[root@rootdns named]# named-checkconf 
[root@rootdns named]# named-checkzone . named.ca ## 檢查根DNS配置文件
zone ./IN: loaded serial 1
OK
[root@rootdns named]# 

8、啟動根服務器

[root@rootdns named]# systemctl start named
[root@rootdns named]# ss -tnlp ## 查看端口是否啟動,默認53號端口

9、.服務器本機使用dig檢測解析效果

[root@rootdns named]# dig dns.root.
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> dns.root.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26131
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns.root. IN A
;; ANSWER SECTION:
dns.root. 86400 IN A 192.168.99.60
;; AUTHORITY SECTION:
. 86400 IN NS dns.root.
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) ## 表示通過哪臺DNS服務器查詢,127表示本機
;; WHEN: Thu Apr  6 23:56:27 2017
;; MSG SIZE  rcvd: 66

能得出如上解析信息,說明dns.root服務器可以正常提供解析服務了

B、com服務器的配置

1、前面4步同上,只是主機名與IP地址改為對應信息就可以了

5、編輯DNS主配文件

[root@comdns ~]# vim /etc/named.conf 
 //      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

注釋掉上述兩行

dnssec-enable no;
dnssec-validation no;

上述兩項的yes改為no

zone "." IN {
type hint;
file "named.ca";
};
zone "com" IN {
type master;
file "com.zone";
};

根區域無需修改;新增com區域信息

6、復制.服務器上的named.ca文件到com服務器上

[root@rootdns named]# scp named.ca 192.168.99.61:/var/named/named.ca
## 在根服務器上操作,如果不在/var/named/目錄下要補上路徑

刪除named.ca的最后兩行

[root@comdns ~]# cd /var/named/
[root@comdns named]# cat named.ca ## 只保留根區域的信息即可
$TTL 1D
. IN SOA dns.root. admin.root. ( 1 1D 1H 1W 1D )
. IN NS dns.root.
dns.root. IN A 192.168.99.60
[root@comdns named]#

7、新建com域的解析數據庫,修改相應權限

[root@comdns named]# vim com.zone ## 新建區域文件,要和配置文件里面寫的名稱一致
$TTL 1D ## 格式可以參照/var/named/目錄下的文件
com. IN SOA dns.com. admin.com. ( 1 1D 1H 1W 1D )
com. IN NS dns.com.
dns.com. IN A 192.168.99.61
rj.com. IN NS dns.rj.com.
dns.rj.com. IN A 192.168.99.62
[root@comdns named]# chgrp named com.zone ## 修改文件所屬組為named組
[root@comdns named]# chmod o-r com.zone ## 修改其他人對此文件沒有任何權限

8、檢查配置文件語法有無錯誤

[root@comdns named]# named-checkconf 
[root@comdns named]# named-checkzone com com.zone 
zone com/IN: getaddrinfo(dns.rj.com) failed: Temporary failure in name resolution
zone com/IN: loaded serial 1
OK
[root@comdns named]#

這里報出了一個獲取dns.rj.com域信息失敗的錯誤,不用擔心,正是因為我們的下級域rj.com還沒有搭建出來

9、啟動dns.com服務器

[root@comdns named]# systemctl start named
[root@comdns named]# ss -tnlp  ## 查看端口是否啟動,默認53號端口

10、在dns.com服務器上測試解析效果

[root@comdns named]# dig dns.com. 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> dns.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 974
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns.com. IN A
;; ANSWER SECTION:
dns.com. 86400 IN A 192.168.99.61
;; AUTHORITY SECTION:
com. 86400 IN NS dns.com.
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) ## 表示通過哪臺DNS服務器查詢,127表示本機
;; WHEN: Tue Apr 18 10:59:20 2017
;; MSG SIZE  rcvd: 66 

有結果和上述信息類似時說明dns.com服務器解析沒問題

[root@comdns named]# dig dns.root.
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> dns.root.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33005
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns.root. IN A
;; ANSWER SECTION:
dns.root. 86400 IN A 192.168.99.60
;; AUTHORITY SECTION:
. 86389 IN NS dns.root.
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) ## 表示通過哪臺DNS服務器查詢,127表示本機
;; WHEN: 二 4月 18 17:47:04 CST 2017
;; MSG SIZE  rcvd: 66

有上述結果時說明com服務器是可以查詢到根的

C、rj.com服務器的配置

1、前4步和.服務器的配置操作相同,只是主機名與IP地址改為對應信息就可以了

5、編輯DNS主配文件

[root@rjcom ~]# vim /etc/named.conf 
 //      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

注釋掉上述兩行

dnssec-enable no;
dnssec-validation no;

上述兩項的yes改為no

zone "." IN {
        type hint;
        file "named.ca";
};
zone "rj.com" IN {
        type master;
        file "rj.com.zone";
};

根區域無需修改;新增rj.com區域

6、復制dns.com服務器上的named.ca文件到dns.rj.com服務器上

[root@rootdns named]# scp named.ca 192.168.99.62:/var/named/named.ca 
  ## 在根服務器上操作,如果不在/var/named/目錄下要補上路徑

刪除named.ca的最后兩行

[root@rjcom ~]# cd /var/named
[root@rjcom named]# cat named.ca ## 只保留根區域的信息即可
$TTL 1D
. IN SOA dns.root. admin.root. ( 1 1D 1H 1W 1D )
. IN NS dns.root.
dns.root. IN A 192.168.99.60
[root@rjcom named]# 

7、新建rj.com域的解析數據庫,修改相應權限

[root@rjcom named]# vim rj.com.zone
## 新建區域文件,要和配置文件里面寫的名稱一致
$TTL 1D ## 格式可以參照/var/named/目錄下的文件
@ IN SOA dns.rj.com. admin.rj.com. ( 1 1D 1H 1W 1D )
@ IN NS dns.rj.com.
dns.rj.com. IN A 192.168.99.62
www IN A 192.168.99.63
[root@rjcom named]# chgrp named rj.com.zone 
## 修改文件所屬組為named組
[root@rjcom named]# chmod o-r rj.com.zone
## 修改其他人對此文件沒有任何權限

8、檢查配置文件語法有無錯誤

[root@rjcom named]# named-checkconf
[root@rjcom named]# named-checkzone rj.com rj.com.zone
zone rj.com/IN: loaded serial 1
OK
[root@rjcom named]# 

9、啟動dns.rj.com服務器

[root@rjcom named]# systemctl start named
[root@rjcom named]# ss -tnlp ## 查看端口是否啟動,默認53號端口

10、在dns.rj.com服務器上測試解析效果

[root@rjcom named]# dig dns.rj.com
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> dns.rj.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23110
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns.rj.com. IN A
;; ANSWER SECTION:
dns.rj.com. 86400 IN A 192.168.99.62
;; AUTHORITY SECTION:
rj.com. 86400 IN NS dns.rj.com.
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) ## 表示通過哪臺DNS服務器查詢,127表示本機
;; WHEN: 二 4月 18 17:40:04 CST 2017
;; MSG SIZE  rcvd: 72

有上述結果時說明dns.rj.com服務器解析沒問題

[root@rjcom named]# dig dns.root.
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> dns.root.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8606
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns.root. IN A
;; ANSWER SECTION:
dns.root. 86400 IN A 192.168.99.60
;; AUTHORITY SECTION:
. 86366 IN NS dns.root.
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) ## 表示通過哪臺DNS服務器查詢,127表示本機
;; WHEN: Tue Apr 18 10:59:20 2017
;; MSG SIZE  rcvd: 66

有上述結果時說明dns.rj.com是可以查詢到根的

運營商DNS服務器的配置

1、前4步和.服務器的配置操作相同,只是主機名與IP地址改為對應信息就可以了
5、編輯DNS主配文件

[root@dxdns ~]# vim /etc/named.conf 
 //      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

注釋掉上述兩行

dnssec-enable no;
dnssec-validation no;

上述兩項的yes改為no,zone區域無需修改

6、復制dns.com服務器上的named.ca文件到dns.dx服務器上

[root@rootdns ~]# scp named.ca 192.168.99.64:/var/named/named.ca
 ## 在根服務器上操作,如果不在/var/named/目錄下要補上路徑

刪除named.ca的最后兩行

[root@dxdns ~]# cd /var/named
[root@dxdns named]# cat named.ca ## 只保留根區域的信息即可
$TTL 1D
. IN SOA dns.root. admin.root. ( 1 1D 1H 1W 1D )
. IN NS dns.root.
dns.root. IN A 192.168.99.60
[root@dns named]#

7、檢查配置文件語法有無錯誤,由于沒有新增任何區域解析數據庫文件,所以無需檢查區域解析數據庫存文件

[root@dns named]# named-checkconf 

8、啟動dns.dx服務器

[root@dxdns named]# systemctl start named
[root@dxdns named]# ss -tnlp ## 查看端口是否啟動,默認53號端口

9、在dns.dx服務器上測試解析效果

[root@dns named]# dig dns.root. 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> dns.root.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32756
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns.root. IN A
;; ANSWER SECTION:
dns.root. 86400 IN A 192.168.99.60
;; AUTHORITY SECTION:
. 86136 IN NS dns.root.
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) ## 表示通過哪臺DNS服務器查詢,127表示本機
;; WHEN: Tue Apr 18 10:59:40 2017
;; MSG SIZE  rcvd: 66
[root@dns named]# 

能夠得到上述結果時,說明運營商的DNS服務器是可以尋找到根DNS的

[root@dns named]# dig www.rj.com
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> dig www.rj.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 26532
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dig. IN A
;; AUTHORITY SECTION:
. 10800 IN SOA dns.root. admin.root. 1 86400 3600 604800 86400
;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Apr 18 10:59:20 2017
;; MSG SIZE  rcvd: 81
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39968
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.rj.com. IN A
;; ANSWER SECTION:
www.rj. 85427 IN A 192.168.99.63
;; AUTHORITY SECTION:
rj.com. 85419 IN NS dns.rj.com.
;; ADDITIONAL SECTION:
dns.rj.com. 85419 IN A 192.168.99.62
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) ## 表示通過哪臺DNS服務器查詢,127表示本機
;; WHEN: Tue Apr 18 10:57:49 2017
;; MSG SIZE  rcvd: 92
[root@dns named]# 

能夠得到上述結果時,說明整個運營商的DNS服務器的轉發解析是完全沒問題的。可以開始為客戶機提供DNS服務了

客戶機配置運營商DNS服務器IP地址做全網解析測試

[root@chen ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 
DEVICE=eno16777736
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.99.65
PREFIX=16
DNS1=192.168.99.64

客戶機的DNS地址指向運營商的DNS服務器IP

[root@chen ~]# dig dns.root.
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> dns.root.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31081
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns.root. IN A
;; ANSWER SECTION:
dns.root. 84609 IN A 192.168.99.60
;; AUTHORITY SECTION:
. 84609 IN NS dns.root.
;; Query time: 1 msec
;; SERVER: 192.168.99.64#53(192.168.99.64) ## 通過設置的dxdns服務器進行查詢
;; WHEN: Tue Apr 18 10:57:20 2017
;; MSG SIZE  rcvd: 66
[root@chen ~]# 

能夠得到上述結果時,說明客戶機是可以通過運營商的DNS服務器尋找到根DNS的

[root@chen ~]# dig www.rj.com
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> www.rj.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5575
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.rj.com. IN A
;; ANSWER SECTION:
www.rj.com. 84500 IN A 192.168.99.63
;; AUTHORITY SECTION:
rj.com. 84492 IN NS dns.rj.com.
;; ADDITIONAL SECTION:
dns.rj.com. 84492 IN A 192.168.99.62
;; Query time: 3 msec
;; SERVER: 192.168.99.64#53(192.168.99.64) ## 通過設置的dxdns服務器進行查詢
;; WHEN: Tue Apr 18 10:58:20 2017
;; MSG SIZE  rcvd: 92

到此為止,一個完整的模擬互聯網的DNS架構就完成了。

原創文章,作者:renjin,如若轉載,請注明出處:http://www.www58058.com/78663

(0)
renjinrenjin
上一篇 2015-02-09
下一篇 2015-02-10

相關推薦

  • bash之腳本入門及課后作業

    概述: shell是一個工具程序,在用戶登錄后后系統啟動,它解釋并運行由命令或腳本文件輸入的命令,從而實現用戶與內核之間的交互。bash是Linux操作系統上默認的shell,在交互和編程兩方面,bash提供了許多Bourne shell沒有的功能,并且還結合了C shell和Kron shell最有用的功能。 bash的語法和結構   …

    Linux干貨 2016-08-15
  • N25期–第八周作業

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態; 在線的主機使用綠色顯示; 不在線的主使用紅色顯示; #!/bin/bash declare -i i=1 hostping(){     if ping -W&n…

    Linux干貨 2017-02-27
  • 利用varnish構建httpd緩存服務器

    varnish如何存儲緩存對象:     file: 單個文件;不支持持久機制;     malloc: 緩存在內存中;     persistent:基于文件的持久存儲;(此方式不建議使用) vcl:配置緩存系統的緩存機制;【線程中緩存功…

    Linux干貨 2016-06-20
  • python基礎_1

    變量/常量 常量:一旦賦值,就不能對它從新復制。python不存在常量 字面常量:一個單獨出現的量,未賦值給任何變量或者常量 變量:就是一個名字,在固執符號的左邊,這個名字可以指復制符號右邊的內容。 變量列子: i = 3 print(i)  注:python 是強類型語言,是動態類型語言。(強類型指類型之間不能相互計算/動態類型是指變量是可以賦值…

    Linux干貨 2017-10-10
  • rsync+inotify實現數據實時備份

    rsync+inotify實現數據實時備份 §·rsync簡單介紹 1 §·什么是rsync 1 §·rsync的功能特性 1 §·rsync的優點和不足 2 §·初識inotify 2 §·rsync命令工作模式 2 §·rsync常用命令選項 3 §·配置rsync以守護進程的方式運行 3 ※·安裝并啟動 xinetd 3 ※·為rsync服務器提供配置…

    Linux干貨 2016-10-30
  • 馬哥教育網絡班26期+第一周學習宣言

    30歲前,目標年薪50w!gogogo

    Linux干貨 2016-12-27
欧美性久久久久