一、 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.修改客户端配置文件
[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,则实验成功.
实验成功!!!
小结:本篇博客难度较大,自己由于粗心导致很多错误,好在经过仔细排查更正过来,希望自己以后可以克服粗心的问题!