基于Linux系统的网络服务——高速缓存DNS及企业级域名解析服务

一、 DNS简介

1.DNS域名系统
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

2.缓存 DNS 服务器

  • BIND 是最广泛使用的开源名称服务器
  • 在 RHEL 中 , 通过 bind 软件包提供
  • 防火墙开启端口 53/TCP 和 53/UDP
  • BIND 的主配置文件是 /etc/named.conf
  • /var/named 目录包含名称服务器所使用的其他数据文件

3.DNS分类
权威名称服务器
存储并提供某区域 ( 整个 DNS 域或 DNS 域的一部分 ) 的实际数据。
权威名称服务器的类型包括:
Master : 包含原始区域数据。有时称作 “主要 ”名称服务器
Slave : 备份服务器 , 通过区域传送从 Master 服务器获得的区域数据
的副本。有时称作 “次要 ”名称服务器
非权威 / 递归名称服务器
客户端通过其查找来自权威名称服务器的数据。递归名称服务器的类型包括
仅缓存名称服务器 : 仅用于查找 , 对于非重要数据之外的任何内容都不具
有权威性DNS 查找

4.DNS 查找
户端上的 Stub 解析器 将查询发送至 /etc/resolv.conf 中的名称服务器
如果名称服务器对于请求的信息具有权威性 , 会将权威答案发
送至客户端否则 , 如果名称服务器在其缓存中有请求的信息 ,
则会将非权威答案发送至客户端
如果缓存只能该没有信息 , 名称服务器将搜索权威名称服务器
以查找信息 , 从根区域开始 , 按照 DNS 层次结构向下搜素 ,
直至对于信息具有权威性的名称服务器 , 以
此为客户端获得答案。在此情况中名 ch 称服务器将信息传递
至客户端并在自己的缓存中保留一个副本 , 以备以后查找

5.DNS 资源记录
DNS 区域采用资源记录的形式存储信息。每条资源记录均具有
一个类型 , 表明其保留的数据类型
A : 名称至 IPv4 地址
AAAA : 名称至 IPv6 地址
CNAME : 名称至 ”规范名称 “ ( 包含 A/AAAA 记录的另
一个名称 )
PTR : IPv4/IPv6 地址至名称
MX : 用于名称的邮件交换器 ( 向何处发送其电子邮件 )
NS : 域名的名称服务器
SOA :” 授权起始 “ , DNS 区域的信息 ( 管理信息 )

6.DNS 排错
它显示来自 DNS 查找的详细信息 , 其中包括为什么查询失败:
NOERROR : 查询成功
NXDOMAIN : DNS 服务器提示不存在这样的名称
SERVFAIL : DNS 服务器停机或 DNSSEC 响应验证失败
REFUSED : DNS 服务器拒绝回答 ( 也许是出于访问控制原因 )

7.dig 输出的部分内容
标题指出关于查询和答案的信息 , 其中包括响应状态和设置的
任何特殊标记 ( aa 表示权威答案 , 等等 )
QUESTION : 提出实际的 DNS 查询
ANSWER : 响应 ( 如果有 )
AUTHORITY : 负责域 / 区域的名称服务器
ADDITIONAL : 提供的其他信息 , 通常是关于名称服务器
底部的注释指出发送查询的递归名称服务器以及获得响应所花费
的时间

二、搭建高速缓存DNS服务器

缓存DNS服务器可以通过缓存减少DNS客户端访问外部DNS服务器的网络流量,降低DNS客户端解析域名的时间。

实验环境:虚拟机desktop和虚拟机server
服务端:desktop
1.安装并开启DNS服务功能软件bind

[root@dns-server ~]# hostnamectl set-hostname dns-server.example.com ##修改主机名
[root@dns-server ~]#yum install bind  -y  ##下载dns功能软件bind
[root@dns-server ~]#systemctl start named ##开启服务
[root@dns-server ~]#systemctl stop firewalld ##关闭防火墙

2.修改配置文件

[root@dns-server ~]#rpm -qc bind ##查找dns的配置文件
/etc/logrotate.d/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
[root@dns-server ~]#vim /etc/named.conf
 11         listen-on port 53 { any; }; ## 修改53接口对所有网卡开启
 17         allow-query     { any; }; ## 允许连接访问的客户主机 
 18         forwarders { 172.25.254.62; }; ##从62获取地址解析
 33         dnssec-validation no; ##网络安全认证
[root@dns-server ~]#systemctl restart named

文件的具体修改见下图红色标注:
这里写图片描述
这里写图片描述
3.重启服务

[root@dns-server ~]#systemctl restart named
[root@dns-server ~]#netstat -antlupe | grep named   ##查看named服务监听的端口为53

此时端口53开启在所有网卡上,包括eth0网卡,IP=172.25.254.105
这里写图片描述
客户端:server
1.修改客户端配置文件

扫描二维码关注公众号,回复: 1475241 查看本文章
[root@localhost ~]# vim /etc/resolv.conf

这里写图片描述
2.客户端测试

[root@localhost ~]# dig www.baidu.com

第一次dig的速度很慢
这里写图片描述
第二次dig明显得到了提升
这里写图片描述

三、DNS的正向解析

用于域名到IP地址的映射,当DNS客户端请求解析某个域名时,DNS服务器通过正向查找,并返回给DNS客户端对应的IP地址。

服务器:desktop
1.修改配置文件

[root@dns-server ~]# vim /etc/named.conf 
// forwarders{ 172.25.254.62; }; ##注释掉forwarders,自身为dns

这里写图片描述
2.添加域

[root@dns-server ~]#vim /etc/named.rfc1912.zones 
zone "westos.com" IN {         ## 添加westos.com域
        type master;    
        file "westos.com.zone"; ##正向解析域名文件
        allow-update { none; }; ## 远程不可写
};

这里写图片描述
3.配置westos.com.zone文件

[root@dns-server ~]#cd /var/named
[root@dns-server ~]#cp -p named.localhost westos.com.zone
[root@dns-server ~]#vim westos.com.zone 
$TTL 1D
@       IN SOA  dns.westos.com.  root.westos.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.westos.com.
dns     A       172.25.254.105
www     A       172.25.254.111
xupt    A       172.25.254.222

这里写图片描述
4.重启服务

[root@dns-server ~]#systemctl restart named

客户端测试:
1.设置客户端的dns服务器为172.25.254.105(即dns服务器ip)

[root@dns-client ~]#vim /etc/resolv.conf 
[root@dns-client ~]#nameserver 172.25.254.105

2.开始测试

[root@dns-client ~]# dig www.westos.com
[root@dns-client ~]# dig xupt.westos.com

这里写图片描述
这里写图片描述

四、DNS的反向解析

用于IP地址到域名的映射,当DNS客户端请求解析某个IP地址时,DNS服务器通过反向查找,并返回给DNS客户端对应的域名。

服务端:desktop
1.修改named的配置文件(添加域)

vim /etc/named.rfc1912.zones 
zone "254.25.172.in-addr.arpa" IN {
        type master;
        file "westos.com.ptr";
        allow-update { none; };
};

这里写图片描述
2.编写westos.com.ptr文件

[root@dns-server ~]#cd /var/named/
[root@dns-server ~]#cp -p named.loopback westos.com.ptr 
[root@dns-server ~]# vim westos.com.ptr 
$TTL 1D
@       IN SOA  dns.westos.com. root.westos.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.westos.com.
dns     A       172.25.254.105
111     PTR     www.westos.com.
123     PTR     ok.westos.com.

3.重启服务

[root@dns-server ~]#systemctl restart named

客户端测试:
1.设置客户端的dns服务器为172.25.254.105(即dns服务器ip)

[root@dns-client ~]#vim /etc/resolv.conf 
[root@dns-client ~]#nameserver 172.25.254.105

2.测试不同ip对应域名

[root@dns-client ~]# dig -x 172.25.254.111
[root@dns-client ~]# dig -x 172.25.254.123

具体结果如图示:
这里写图片描述
这里写图片描述

五、DNS的双向解析

DNS双向解析指内网与外网解析分离

1.编写外网域名文件

[root@dns-server named]#cd /var/named/
[root@dns-server named]#cp -p  westos.com.zone westos.com.inter
[root@dns-server named]#vim westos.com.inter                                  

这里写图片描述
2.编写外网配置文件

[root@dns-server ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.inter
[root@dns-server ~]# vim /etc/named.rfc1912.inter 

这里写图片描述
3.编写配置文件使内外网分离

[root@dns-server ~]# vim /etc/named.conf    ##实现内网和外网分离
/*
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
*/
view  localnet {
        match-clients { 172.25.254.105; };
        zone "." IN{
                type hint;
                file"named.ca";
        };
include "/etc/named.rfc1912.zones";
};
view  inter {
        match-clients { any; };
        zone "." IN{
                type hint;
                file"named.ca";
        };
include "/etc/named.rfc1912.inter";
};
[root@dns-server ~]# systemctl restart named ##切记勿忘重启服务

4.设置服务端(内网)的dns服务器ip

[root@dns-server ~]# vim /etc/resolv.conf 

nameserver 172.25.254.105

客户端测试:
1.设置客户端(外网)的dns服务器为172.25.254.105(即dns服务器ip)

[root@dns-client ~]#vim /etc/resolv.conf 
[root@dns-client ~]#nameserver 172.25.254.105

2.测试

[root@dns-client ~]# dig www.westos.com

这里写图片描述

六、DNS主从集群

辅助DNS主要是为了减轻主DNS服务器的工作负荷,可以配置多台辅助DNS服务器。

主DNS:172.25.254.105 副DNS:172.25.254.205 客户端:172.25.254.62
dns-master设置:
1.编写配置文件,将双向解析注释掉

[root@dns-master ~]# vim /etc/named.conf 

这里写图片描述
2.修改配置文件使205可以传输信息

[root@dns-server ~]# vim /etc/named.rfc1912.zones 
 26 zone "westos.com" IN {
 27         type master;       ##类型为主DNS
 28         file "westos.com.zone";
 29         allow-update { none; };
 30         also-notify { 172.25.254.205; }; ##当主dns变化时自动通知某主机
 31 };
 [root@dns-master named]# systemctl restart named

dns-slave设置:
1.安装dns服务软件

[root@dns-slave ~]# yum install bind -y

2.主配置文件的修改

[root@dns-slave ~]# vim /etc/named.conf 
11         listen-on port 53 { any; };
17         allow-query     { any; };
33         dnssec-validation no;

这里写图片描述

3.修改named的配置文件

[root@dns-slave ~]# vim /etc/named.rfc1912.zones 
26 zone "westos.com" IN {
 27         type slave;
 28         masters { 172.25.254.105 ;};
 29         file "slaves/westos.com.zone";  ##主dns传输的内容存放位置
 30         allow-update { none; };
 31 };
 [root@dns-slave ~]# systemctl restart named

这里写图片描述
测试:查看dns-slave是有dns-master缓存

[root@dns-master named]# vim westos.com.zone 

修改主dns的ip之前
这里写图片描述


[root@dns-slave slaves]# dig www.westos.com

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> www.westos.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17703
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.westos.com.            IN  A

;; ANSWER SECTION:
www.westos.com.     86400   IN  CNAME   node1.westos.com.
node1.westos.com.   86400   IN  A   172.25.254.101

;; AUTHORITY SECTION:
westos.com.     86400   IN  NS  dns.westos.com.

;; ADDITIONAL SECTION:
dns.westos.com.     86400   IN  A   172.25.254.105

;; Query time: 3 msec
;; SERVER: 172.25.254.105#53(172.25.254.105)
;; WHEN: Thu May 24 09:41:06 EDT 2018
;; MSG SIZE  rcvd: 113

对dns-master做出修改之后
这里写图片描述

[root@dns-slave slaves]# dig www.westos.com

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> www.westos.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9671
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.westos.com.            IN  A

;; ANSWER SECTION:
www.westos.com.     86400   IN  CNAME   node1.westos.com.
node1.westos.com.   86400   IN  A   172.25.254.110

;; AUTHORITY SECTION:
westos.com.     86400   IN  NS  dns.westos.com.

;; ADDITIONAL SECTION:
dns.westos.com.     86400   IN  A   172.25.254.105

;; Query time: 1 msec
;; SERVER: 172.25.254.105#53(172.25.254.105)
;; WHEN: Thu May 24 09:42:16 EDT 2018
;; MSG SIZE  rcvd: 113

七、DNS更新

服务端:

[root@dns-master named]# vim /etc/named.rfc1912.zones 
zone "westos.com" IN {
        type master;
        file "westos.com.zone";
        allow-update { 172.25.254.62; };
        also-notify{ 172.25.254.205 ;};
};
[root@dns-master named]# cp -p westos.com.zone /mnt/ ##进行备份
[root@dns-master named]#chmod 770 /var/named/  ##给权限
[root@dns-master named]#systemctl restart named

客户端:

[kiosk@foundation5 Desktop]$ nsupdate 
> server 172.25.254.105
> update add test.westos.com 86400 A 172.25.254.111
> send
> quit

在服务端生成 westos.com.zone.jnl
这里写图片描述

[root@dns-server named]# dig test.westos.com
; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> test.westos.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1735
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.westos.com.       IN  A

;; ANSWER SECTION:
test.westos.com.    86400   IN  A   172.25.254.111

;; AUTHORITY SECTION:
westos.com.     86400   IN  NS  dns.westos.com.

;; ADDITIONAL SECTION:
dns.westos.com.     86400   IN  A   172.25.254.105

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu May 24 10:52:42 EDT 2018
;; MSG SIZE  rcvd: 94

八、key认证更新DNS

本实验必须在远程更新dns的基础上才可做。

服务端配置:
1.恢复实验环境

[root@localhost named]# rm -rf westos.com.zone*
[root@localhost named]# cp -p /mnt/westos.com.zone .

2.加密文件的生成

[root@localhost named]# cd /mnt/
[root@localhost mnt]# ls
westos.com.zone
[root@localhost mnt]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST westos
   Kwestos.+157+07525
##生成对称加密文件,-a指定加密算法,-n,名称类型,-b,加密字符数
[root@localhost mnt]#    ls
Kwestos.+157+07525.key  Kwestos.+157+07525.private  westos.com.zone
[root@localhost mnt]# cat Kwestos.+157+07525.private 
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: lWswpzD+MsYxMYbJxmdvjg==
Bits: AAA=
Created: 20180524150145
Publish: 20180524150145
Activate: 20180524150145

3.编辑key文件

[root@localhost mnt]# cp -p /etc/rndc.key /etc/westos.key
[root@localhost mnt]# vim /etc/westos.key 
key "rndc-key" {
        algorithm hmac-md5;
        secret "lWswpzD+MsYxMYbJxmdvjg=="; ##将引号中的内容更改为加密文件的key,此时才会生效
};

4.编辑主配置文件

[root@localhost mnt]# vim /etc/named.conf 

这里写图片描述
5.修改named配置文件

[root@localhost mnt]# vim /etc/named.rfc1912.zones 
zone "westos.com" IN {
        type master;
        file "westos.com.zone";
        allow-update { key westos; };
};
[root@localhost mnt]# systemctl restart named

6.发送钥匙给允许动态更新该dns的主机;

[root@localhost mnt]# scp Kwestos.+157+07525.*  [email protected]:/mnt/
The authenticity of host '172.25.254.205 (172.25.254.205)' can't be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.254.205' (ECDSA) to the list of known hosts.
root@172.25.254.205's password: 
Kwestos.+157+07525.key                        100%   50     0.1KB/s   00:00    
Kwestos.+157+07525.private                    100%  165     0.2KB/s   00:00  

客户端测试:在205远程更新dns

[root@localhost mnt]# nsupdate -k Kwestos.+157+07141.private 
> server 172.25.254.105
> update add qwer.westos.com 86400 A 172.25.254.111
> send
> quit

切换到服务器dig看是否更新

[root@localhost mnt]# dig qwer.westos.com

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> qwer.westos.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42782
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;qwer.westos.com.       IN  A

;; ANSWER SECTION:
qwer.westos.com.    86400   IN  A   172.25.254.111  ##更新成功

;; AUTHORITY SECTION:
westos.com.     86400   IN  NS  dns.westos.com.

;; ADDITIONAL SECTION:
dns.westos.com.     86400   IN  A   172.25.254.105

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu May 24 11:38:38 EDT 2018
;; MSG SIZE  rcvd: 94

九、花生壳(dhcp+dns,ddns):动态域名解析服务

本实验要确保基于key认证远程更新dns成功。

恢复实验环境

[root@localhost named]# rm westos.com.zone* -f
[root@localhost named]# cp -p /mnt/westos.com.zone .
[root@localhost named]# systemctl restart named

1.部署dhcp服务器
ip:172.25.254.105

[root@localhost named]# yum install dhcp.x86_64 -y
[root@localhost named]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@localhost named]# vim /etc/dhcp/dhcpd.conf 
 7 option domain-name "example.com";
 8 option domain-name-servers 172.25.254.105;
14 ddns-update-style none;
 27 subnet 10.152.187.0 netmask 255.255.255.0 {
 28 } ##删除27、28这两行
 30 subnet 172.25.254.0 netmask 255.255.255.0 {
 31   range 172.25.254.80 172.25.254.90; ##dhcp自动分配ip范围
 32   option routers 172.25.254.105;
 33 };
 34 key westos {
 35         algorithm hmac-md5;
 36         secret cyUV3XyWrduqx1pJ8O5s0w==;  ##key认证密码
 37 };
 38 zone westos.com. {
 39         primary 127.0.0.1;##回环接口,内部网络
 40         key westos;
 41 }

重启服务

[root@localhost named]# systemctl restart named
[root@localhost named]# systemctl restart dhcpd
[root@localhost named]# systemctl stop firewalld
[root@localhost named]# systemctl disable firewalld

2.客户端测试

[root@localhost mnt]# vim /etc/sysconfig/network-scripts/ifcfg-eth0  ##删除ip,修改获取方式为dhcp
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
ONBOOT=yes
~       
[root@localhost mnt]# systemctl restart network

这里写图片描述
修改客户端主机名称

[root@localhost mnt]hostnamectl set-hostname linux.westos.com  

<3>修改dhcp分配的区域,重新使客户端获取ip,如果dig 主机名的结果随着ip的改变而改变,说明实验成功。
示图:dig主机名的ip为主机dhcp动态获取的ip,则实验成功.
这里写图片描述
这里写图片描述
这里写图片描述
实验成功!!!
小结:本篇博客难度较大,自己由于粗心导致很多错误,好在经过仔细排查更正过来,希望自己以后可以克服粗心的问题!

猜你喜欢

转载自blog.csdn.net/weixin_41476978/article/details/80425354