dns

DNS概述

DNS服务器:
什么是DNS服务器?
简单来说就是将不容易记住的IP地址转换为容易主机的网站域名的一个服务器(www.baidu.com www.taobao.com

1
2
 vim /etc/nsswitch.conf 
hosts: files dns #涉及到名称翻译的都会先查找/etc/hosts,再查找DNS(/etc/resolv.conf)

主机名和域名的区别?

主机名是内网的名字
域名是外网的名字

主机名和域名其实是两个完全可以不同的名字,但是有很多软件(如邮件系统postfix)会默认认为它们一致

DNS服务器特点:

1,分布式的数据库
2,解决了数据不一致,避免了名字冲突
3,有缓存机制,提高了性能和可靠性

分层结构,最多127层

查询方式:递归查询,迭代查询

全世界共有有13台DNS根域服务器

顶级域名

1
2
3
4
5
6
7
8
.com    .org     .edu   .gov       .net      .mil    .info
商业 组织 教育 政府 通讯 军事 信息



cn hk us jp tw in

.com.cn .net.us .edu.cn

深圳电信的DNS地址:
首选的:202.96.134.133
备选的:202.96.128.86

课后扩展:
上网查询 全球现在免费的DNS服务器

对应的linux主机上写DNS指向,由/etc/resolv.conf

1
2
3
 vim /etc/resolv.conf 
nameserver 192.168.224.2 #一共可以写三个,如果第一个没有记录,则找第二个
nameserver 8.8.8.8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
	根(com)


中国(cn) USA


大运营商(电信)


小运营商(百度,google)



自己的DNS服务器 US电信
| |
| |
qianyun.com.cn. abc.com.us.

上图中qianyun在小运营商申请了域名,自己搭DNS服务器,请问如何与运营商联系起来(意思就是说,域名的查询怎样才能转到你自己搭的DNS服务器)

如果上面的DNS服务器做好了,全世界的任意一个访问点如何能访问到你的这个DNS服务器里的域名?

上图中DNS服务器里除了自己的域名和IP对应,能否写上qq.com这个域和IP的对应呢?

===========================================================

开始安装DNS服务器

bind (berkeley internet name domain)

1
yum  install bind* -y

查看软件包;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 rpm -qa |grep ^bind-		#rhel7.3下的包

bind-pkcs11-libs-9.9.4-73.el7_6.x86_64
bind-sdb-9.9.4-73.el7_6.x86_64
bind-pkcs11-9.9.4-73.el7_6.x86_64
bind-devel-9.9.4-73.el7_6.x86_64
bind-libs-9.9.4-73.el7_6.x86_64
bind-libs-lite-9.9.4-73.el7_6.x86_64
bind-9.9.4-73.el7_6.x86_64
bind-sdb-chroot-9.9.4-73.el7_6.x86_64
bind-dyndb-ldap-11.1-4.el7.x86_64
bind-lite-devel-9.9.4-73.el7_6.x86_64
bind-pkcs11-devel-9.9.4-73.el7_6.x86_64
bind-utils-9.9.4-73.el7_6.x86_64
bind-license-9.9.4-73.el7_6.noarch
bind-chroot-9.9.4-73.el7_6.x86_64
bind-pkcs11-utils-9.9.4-73.el7_6.x86_64

DNS使用的协议端口: tcp/udp 53

查询DNS记录只使用udp 53端口
主DNS服务器和备DNS服务器之间的数据同步使用tcp 53端口

配置文件的目录:

配置文件为/etc/named.conf
数据文件在/var/named目录下

安装完成后启动DNS服务器:

1
2
systemctl start named
systemctl enable named

配置文件详解:

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
options {
listen-on port 53 { any; }; #监听端口 IPV4
listen-on-v6 port 53 { any; }; #监听端口 IPV6
directory "/var/named"; #工作目录
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; }; #允许解析的IP地址
recursion yes; # 开启递归查询
dnssec-enable yes; #开启加密
dnssec-validation yes; #在递归查询服务器上开启DNSSEC验证
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};

logging { #日志
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

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

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

例一.正向解析(将域名解析成ip)

配置步骤:
1,编辑named.conf –记录你的域和域对应的数据文件在哪
2, 编辑zone区域文件 –就是数据文件,记录域名和IP的对应

1
2
3
4
5
6
7
8
9
10
11
 vim /etc/named.conf
options {
listen-on port 53 { any; }; #改为any,表示监听所有来自53端口的请求
listen-on-v6 port 53 { ::1; };
directory "/var/named";
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; #改为any,表示所有客户端都可以访问该服务器
1
2
3
4
5
6
 vim /etc/named.rfc1912.zones	#打开这个文件,最后加上一个域的配置

zone "server2.com" IN {
type master;
file "data/server2.com.zone";
};
1
2
3
4
5
6
7
8
9
10
11
12
13
vim /var/named/data/server2.com.zone		#建立数据文件,路径要对应上面的配置
$TTL 3600 ; 缓存时间(生存周期)
@ IN SOA ns.server2.com. root.server2.com. ( ; #DNS服务器名称 DNS管理员邮箱;可以随便写,但最后得有个 .
0 ; #更新序列号(主从服务器时使用)
30 ; #更新时间
60 ; #重试时间
90 ; 失效时间
3600 ) ; #无效解析记录缓存时间
@ IN NS 192.168.224.12. ; NS = name server #域名服务器地址(注意:这里可以写域名或IP,后方必须有个 . )
www IN A 192.168.224.12 ; A = address #A记录,表示直接将该域名解析至指定服务器
mail IN A 192.168.224.13 ;
dns IN A 192.168.224.12 ; #一个IP可以解析为多个域名
bbs IN A 192.168.224.13 ; #同理,一个域名也可解析为多个IP
1
2
3
4
5
$TTL 600
@ IN SOA @ IN SOA ns.server2.com. root.server2.com ( 2019071701; 1D; 1H; 1W; 3H; )
@ NS ns.server2.com
dns A 192.168.224.11
www A 192.168.224.12

3.配置完成,重启服务

1
systemctl restart named

4.测试,客户端修改nameserver,指向自己搭建的服务器

1
2
3
4
 vim /etc/resolv.conf
Generated by NetworkManager
search localdomain
nameserver 192.168.224.12
1
2
3
4
5
6
7
8
9
10
11
12
13
 nslookup mail.server2.com
Server: 192.168.224.12
Address: 192.168.224.12#53

Name: mail.server2.com
Address: 192.168.224.13 #这里可以看到该域名的解析情况

nslookup bbs.server2.com
Server: 192.168.224.12
Address: 192.168.224.12#53

Name: bbs.server2.com
Address: 192.168.224.13

例二:反向解析

IP解析为域名
比如我们使用公司的一台内部机器,可以模拟zhangsan@126.com去给另一个@qq.com发邮件; 那么qq如何知道你发的这封邮件是真的从126来的?
通过反向解析(IP解析为域名)就可以判别

第一步:服务器端主配置文件添加以下区域:

1
2
3
4
5
6
 vim /etc/named.rfc1912.zones

zone "224.168.192.in-addr.arpa" IN {
type master;
file "data/master.224.168.192.in-addr.arpa.zone";
};

我这里做的是一个内网网段,在这里只是实验

第二步:建立区域数据文件

1
2
3
4
5
6
7
8
9
10
11
 vim /var/named/data/master.3.3.3.in-addr.arpa.zone
$TTL 86400
@ IN SOA 224.168.192. root. (
0
30
40
50
86400 )
IN NS 192.168.224.12.
3 IN PTR www.server2.com. ; 将192.168.224.12解析为www.server2.com
4 IN PTR bbs.server2.com. ; 将192.168.224.13解析为bbs.server2.com

注意反向解析后方的 .

重启named

1
systemctl restart named

第三步;客户端测试

1
2
3
4
5
6
7
8
9
10
11
 nslookup 192.168.224.12
Server: 192.168.224.12
Address: 192.168.224.12#53

192.168.224.12.in-addr.arpa name = www.server2.com. --反向解析成功

nslookup 192.168.224.13
Server: 192.168.224.12
Address: 192.168.224.12#53

4.3.3.3.in-addr.arpa name = bbs.server2.com.

例三:使用DNS轮询

实现简单的不可靠的负载均衡(一个域名对应多台服务器)

DNS轮循相对于其它的负载均衡软件来说:
优点:配置简单,成本低
缺点:没有后台健康检查,算法单一,因为DNS的缓存,会影响你修改DNS调度的生效速度

            client
             |        
           DNS服务器
             |
              |
        `www.server2.com`


    web1        web2        web3   

   192.168.224.12        192.168.224.13    192.168.224.14

             rsync
      共享存储  保证数据一致

服务器端操作:

第一步:
vim /etc/named.rfc1912.zones –打开这个文件,最后加上一个域的配置(刚刚有添加的就不用添加了)

1
2
3
4
zone "server2.com" IN {
type master;
file "data/server2.com.zone";
};

第二步:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 vim /var/named/data/server2.com.zone 

$TTL 3600
@ IN SOA ns.server2.com. root.server2.com. (
0
30
60
90
3600 )
@ IN NS 192.168.224.12.
ns IN A 192.168.224.12
www IN A 192.168.224.12
www IN A 192.168.224.13
www IN A 192.168.224.14

第三步:客户端测试

1
2
3
4
5
6
7
8
9
10
 nslookup www.server2.com
Server: 192.168.224.12
Address: 192.168.224.12#53

Name: www.server2.com
Address: 192.168.224.14
Name: www.server2.com
Address: 192.168.224.12
Name: www.server2.com
Address: 192.168.224.13 #单域名对应多机器解析成功

例四:CNAME记录的使用

(一个IP对应多个域名) 别名

vim /var/named/data/master.server2.com.zone

1
2
3
4
5
6
7
8
9
10
11
12
$TTL 86400
@ IN SOA ns.server2.com. root.server2.com. (
2013011101
10
20
30
86400 )
IN NS 192.168.224.12.
aaa IN CNAME www
www IN A 192.168.224.12
www IN A 192.168.224.13
www IN A 192.168.224.14

客户端测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 nslookup www.server2.com
Server: 192.168.224.12
Address: 192.168.224.12#53

Name: www.server2.com
Address: 192.168.224.14
Name: www.server2.com
Address: 192.168.224.12
Name: www.server2.com
Address: 192.168.224.13

[root@server ~]# nslookup aaa.server2.com
Server: 192.168.224.12
Address: 192.168.224.12#53

aaa.server2.com canonical name = www.server2.com. #注意看这条
Name: www.server2.com
Address: 192.168.224.13
Name: www.server2.com
Address: 192.168.224.12
Name: www.server2.com
Address: 192.168.224.14

例五:直接对域的解析

(域名不需要前缀)

1
2
3
4
5
6
7
8
9
10
11
 vim /var/named/data/server2.com.zone

$TTL 86400
@ IN SOA ns. root. (
2013011101
10
20
30
86400 )
IN NS 192.168.224.12.
server2.com. IN A 192.168.224.12 #直接写域名即可

配置完成,重启服务
systemctl restart named

测试:

1
2
3
4
5
6
 nslookup server2.com
Server: 192.168.224.12
Address: 192.168.224.12#53

Name: server2.com
Address: 192.168.224.12 #解析成功

例六:使用通配符实现泛解析

1
2
3
4
5
6
7
8
9
10
11
12
vim /var/named/data/server2.com.zone

* IN A 192.168.224.13



nslookup a.server2.com
Server: 192.168.224.12
Address: 192.168.224.12#53

Name: a.server2.com
Address: 192.168.224.13
1
2
3
4
5
6
[root@server ~]# nslookup b.server2.com
Server: 192.168.224.12
Address: 192.168.224.12#53

Name: b.server2.com
Address: 192.168.224.13

例七: 辅助DNS服务器(从DNS服务器)的配置

    192.168.224.12             192.168.224.13
    主      ----        从
    type master         type slave
    zone文件             被动的从主传过来zone文件

从DNS服务器的准备工作:
    和主DNS服务器一样

准备工作有:
1,主机名三步
2,时间同步
3,iptables,selinux关闭
iptables -L –查看,有写规则的话,则表示需要关闭
iptables -F –清空规则
systemctl disable iptables

vim /etc/selinux/config
SELINUX=disabled    #改为disabled

reboot   #selinux的关闭需要重启电脑才能完全生效

如果你不想重启来关闭selinux,那么使用setenforce 0(这不是关闭selinux,只是改成警告模式,但是这种模式不会拒绝你的操作)

4,yum配置好

1,配置从服务器的主配置文件

在从服务器上安装bind软件包

yum install bind* -y

vim /etc/named.conf #打开此文件,和主的配法一样

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
33
34
options {
listen-on port 53 { any; }; #改为any
listen-on-v6 port 53 { ::1; };
directory "/var/named";
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; }; #改为any
recursion yes;

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";

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

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

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

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

vim /etc/named.rfc1912.zones #在最后加上下面一段

1
2
3
4
5
zone "server2.com" IN {
type slave; #类型定义为slave
file "slaves/slave.server2.com.zone"; #最好把zone文件定义到slaves目录下;
masters { 192.168.224.12; }; #指定主DNS服务器的IP地址
};

systemctl start named #在从上启动named服务

ls /var/named/slaves/ #再次查看发现是主上面下载过来了
slave.server2.com.zone

如果不能下载过来:
    查看网络是否连通,就是ping一下
    查看iptables,selinux是否关闭

tail /var/log/messages #或者查看日志也可以看到相关的日志内容

例九:转发服务器的设置
前面所做的全是一个域的情况,也就是我只能解析server2.com这一个域,如果想要解析另外一个域该怎么办?

方法一:在/etc/named.conf 里再写一个域
然后再配置一个对应zone数据文件
重启服务

方法二:做转发
先在其它机器上搭建一个test.com 的域名解析

单域转发
1,named.conf里加上下面一段

1
2
3
4
5
6
7
8
9
10
zone "test.com" IN {
type forward;
forwarders { 192.168.224.14; }; #将test.com这个域的解析转发到3.5的服务器上
};

修改dnssec-validation改为no

options {
dnssec-validation no; #在递归查询服务器上关闭DNSSEC验证
};

systemctl restart named

nslookup test.com #查找能查出来,是因为127的DNS服务器的zone文件里有,我这里转发过去查找到结果,再返回过来

1
2
3
4
5
6
Server:		192.168.224.12
Address: 192.168.224.12#53

Non-authoritative answer:
Name: www.test.com
Address: 192.168.224.12

2,完全转发

1
2
3
4
5
6
7
8
9
10
 vim /etc/named.conf

options {
dnssec-validation no;
forwarders { 114.114.114.114; }; #这是写到options里的完全转发,指的是本机的zone文件查不到的情况,会去查找10.0.0.1,都查不到才会返回错误
};

options {
forwarders { 8.8.8.8;114.114.114.114; }; #可以用分号隔开,写多个转发服务器的IP
};

评论


:D 一言句子获取中...

加载中,最新评论有1分钟缓存...