Linux运维bind9-DNS概述入门

DNS概念

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
DNS 的分布式数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space)。如图所示树的最大深度不得超过127 层,树中每个节点都有一个可以长达63 个字符的文本标号。

DNS域名解析服务采用的目录树层次结构

DNS域名解析过程

首先,客户端先在本地缓存查找有没有域名缓存,如果没有,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。
(4)若没有找到,则返回错误信息。

DNS的分类

主DNS服务器:就是一台存储着原始资料的DNS服务器。
从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器。也成辅助DNS服务器。
缓存服务器:不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。
转发器:这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

查询DNS常用命令dig、nslookup、host的介绍

host命令也是大多数系统、软件库调用的解析命令,比如php中。

1
2
3
4
5
6
7
8
[root@boysec.cn ~]$host www.boysec.cn
www.boysec.cn is an alias for my-blogssssss.b0.aicdn.com.
my-blogssssss.b0.aicdn.com is an alias for nm.aicdn.com.
nm.aicdn.com has address 183.131.200.61
nm.aicdn.com has address 183.131.200.72
nm.aicdn.com has address 183.131.200.74
nm.aicdn.com has address 183.131.200.68
nm.aicdn.com has address 1.81.5.177

nslookup能够反映出是哪个dnsserver返回的结果

1
2
3
4
5
6
7
8
9
[root@boysec.cn ~]$nslookup www.boysec.cn
Server: 114.114.114.114
Address: 114.114.114.114#53

Non-authoritative answer:
www.boysec.cn canonical name = my-blogssssss.b0.aicdn.com.
my-blogssssss.b0.aicdn.com canonical name = nm.aicdn.com.
Name: nm.aicdn.com
Address: 183.131.200.72

dig返回整个解析过程的详细路径,类似traceroute

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@boysec.cn ~]$dig www.boysec.cn

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.2 <<>> www.boysec.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25244
;; flags: qr rd ra; QUERY: 1, ANSWER: 10, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.boysec.cn. IN A

;; ANSWER SECTION:
www.boysec.cn. 437 IN CNAME my-blogssssss.b0.aicdn.com.
my-blogssssss.b0.aicdn.com. 137 IN CNAME nm.aicdn.com.
[root@boysec.cn ~]$dig www.boysec.cn +short
my-blogssssss.b0.aicdn.com.
nm.aicdn.com.
1.81.5.177
183.131.200.61
1.81.5.178
1.81.5.179
183.131.200.68
183.131.200.69
183.131.200.72
183.131.200.74

学习部署bind9

Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS

环境准备

1
2
3
4
[root@k8s-dns ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)
[root@k8s-dns ~]# uname -a
Linux k8s-dns.host.com 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

安装bind9

配置yum源
使用centos6自带的yum源即可,同时确保机器可以解析外网域名,并能连接公网

1
yum install -y bind-utils bind bind-devel bind-chroot

bind9主配置文件

1
2
3
4
5
6
7
8
9
10
options{
//全局选项
}
zone "zone name" {
//定义区域
}
logging{
//日志文件
}
include:加载别的文件

主配置文件的配置注意事项

  • 语法严格,分号,空格
  • 文件的权限,属主:root,属组:named,640
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@k8s-dns ~]# cat /etc/named.conf 
options {
listen-on port 53 { 10.1.1.250; }; # 监听地址和端口
directory "/var/named/chroot/etc/"; #区域数据文件的存放位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; #允许使用本DNS服务的网段
empty-zones-enable no;
forwarders {114.114.114.114;8.8.8.8; };

recursion yes;
dnssec-enable no;
dnssec-validation no;

bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";

pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};

logging {
channel default_debug {
file "/var/named/data/named.run";
severity dynamic;
};
};

include "/etc/named.rfc1912.zones"; #加载自定义区域文件
include "/etc/named.root.key";

检查配置文件

1
# named-checkconf -z /etc/named.conf

没有报错就属于正常

启动bind9服务

1
2
3
# systemctl start named
# systemctl enable named
# netstat -lnpt

验证解析

配置DNS服务器指向

在/etc/resole里配置DNS服务器的ip地址为我们部署的主机ip

1
2
3
4
[root@k8s-dns ~]# cat /etc/resolv.conf                          
# Generated by NetworkManager
search host.com
nameserver 10.1.1.250

验证解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@k8s-dns ~]# ping www.boysec.cn
PING nm.aicdn.com (223.85.20.154) 56(84) bytes of data.
64 bytes from 223.85.20.154 (223.85.20.154): icmp_seq=1 ttl=128 time=43.4 ms

[root@k8s-dns ~]# nslookup www.boysec.cn
Server: 10.1.1.250
Address: 10.1.1.250#53

Non-authoritative answer:
www.boysec.cn canonical name = my-blogssssss.b0.aicdn.com.
my-blogssssss.b0.aicdn.com canonical name = nm.aicdn.com.
Name: nm.aicdn.com
Address: 183.240.60.117
Name: nm.aicdn.com
Address: 223.85.20.154