一、實現從根,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
三、設計拓撲圖
四、服務器配置:
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架構就完成了。