DNS基本理论和实验

来源:互联网 发布:js设置input的值 编辑:程序博客网 时间:2024/05/16 09:43
 DNS全称叫Domain Name Service ,是域名解析协议,如果没有dns协议,我们就没法通过域名访问互联网,只能使用ip的方式访问。DNS使用端口有 tcp 53 、udp 53 和tcp 953 端口,其中 tcp 53 和udp 53 是用来解析客户端发起域名请求和主备dns 服务器同步,tcp953 是dns 的管理端口。DNS域名有根域,一级域名,二级域名,三级域名,最多有127级域名,根服务器: 13组服务器,如下图所示:

这里写图片描述
DNS查询类型有递归和迭代查询两种。
(1)递归查询
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
(2)迭代查询
DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。
如图:
这里写图片描述

描述下上图的过程:1 客户端向本地域名服务器查询163.com的网址,
2 本地服务器由于不能解析地址就向根服务器发起请求,根服务器告诉本地dns 服务器一级域.com 服务器的地址,
3 接着.com 域服务器返回告诉本地服务器163.com 域dns服务器地址
4 本地dns 服务器向163.com 域服务器发起查询,163.com 把解析的ip 地址返回给本地dns 服务器
5 本地dns 服务器把查询的结果
DNS服务器的类型:
主DNS服务器
从DNS服务器
缓存DNS服务器(转发器)
主DNS服务器:管理和维护所负责解析的域内解析库的服务器
从DNS服务器:从主服务器或从服务器“复制”(区域传输)解析库副本
序列号:解析库版本号,主服务器解析库变化时,其序列递增
刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
过期时长:从服务器联系不到主服务器时,多久后停止服务
“通知”机制:主服务器解析库发生变化时,会主动通知从服务器

一次完整的查询请求经过的流程:
client 端口发起dns 请求 —> 查找本地host 文件 —> 查找本地客户端缓存 —> 查找DNS server —> 查找 DNS server —> dns server 查找本服务器缓存 —-> 服务器去根服务器进行迭代查询—> 根服务器告诉本地dns server 顶级域名dns 地址 —>顶级域名服务器告诉本地dns server 二级域名dns 地址,如果没有的话接着进行三级,四级的查询最终查找到要访问的网站的具体dns server 地址,本地服务器把解析过的地址返回给客户端。

记录类型:
SOA,A, AAAA, PTR, NS, CNAME, MX
SOA: Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
A: internet Address,作用把域名解析成ip 地址。
AAAA: FQDN –> IPv6 ip
PTR: PoinTeR, 是把ip 地址解析成域名,反向解析。
NS: Name Server,专用于标明当前区域的DNS服务器
CNAME: Canonical Name,别名记录
MX: Mail eXchanger,邮件交换器

好了,说了这么多理论,相信大家对dns常用功能有个大概了解了吧,下面就让我们通过对dns的配置文件和实验来做做具体详细的说明吧。
DNS实验:

实验一:正向解析域名centos.com

  1. yum install bind 安装dns软件包
    rpm -ql bind 查询生成了哪些文件
    其中主配置文件: /etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
    解析库文件: /var/named/xxx
    systemctl start named #启动dns
    systemctl enable named #设置dns 开启启动
    centos5和centos6启动命令: service named start #启动dns服务
    chkconfig named on #开机启动DNS
ss -tunl  确认有tcp 53 和udp 53 端口[root@Centos6.9 rules.d]#ss -tunludp   UNCONN     0      0                            ::1:53                           :::*tcp   LISTEN     0      128                            *:111                           *:*     tcp   LISTEN     0      3                            ::1:53                           :::*     tcp   LISTEN     0      3                   192.168.23.1:53                            *:*     tcp   LISTEN     0      3                   192.168.12.2:53                            *:*     tcp   LISTEN     0      3                  192.168.10.30:53                            *:*     tcp   LISTEN     0      3                      127.0.0.1:53                            *:*     tcp   LISTEN     0      128                           :::22                           :::*     tcp   LISTEN     0      128                            *:22                            *:*     tcp   LISTEN     0      64                            :::23                           :::*     tcp   LISTEN     0      128                    127.0.0.1:631                           *:*     tcp   LISTEN     0      128                       

2 vim /etc/named.conoption listen-on port 53 { 127.0.0.1; }; #这行要去掉 要不默认只监听本机的
allow-query { any; }; #改为允许所有地址查询 /etc/named.rfc1912.zones #在该文件下增加linux.com 的域名*
zone “linux.com” IN {
type master;
file “linux.com.zone”; #linux 的解析库文件名
};vim /var/named/linux.com.zone #增加解析库文件
$TTL 1D
@ 2D IN SOA dns1 admin.linux.com. ( 2017091901;86400;1H;1W;3H )

     NS      dns1

dns1 2D A 192.168.25.107
websrv A 192.168.25.106
www CNAME websrv

大家一定对该库的文件的格式看的晕吧,下面来说明下库文件的格式:(1) TTL可从全局继承 @可用于引用当前区域的名字,这里就是代表 linux.com了,如果觉得@ 看着难懂写当前域名也可以。SOA 表示记录类型, dns1 代表该域的主dns 服务器 ,admin.linux.com. 表示邮箱地址 注意后面要加 .  ( 2017091901864001H;1W;3H )  分别代表dns 库文件版本号,刷新时间,重试时间,超时时间,  RR没有写到TTL的最小时间)chgrp named /var/named/linux.com.zone [root@Centos6.9 ~]#ll /var/named/linux.com.zone -rw-r-----. 1 root named 206 Sep 14 15:45 /var/named/linux.com.zone5 检测配置文件named-checkconf        检查rfc1912里面的语法是否有错误named-checkzone linux.com /var/named/linux.com.zone   检测配置文件的里的域名是否成功。rndc reload  重新加载配置文件,如果不行尝试 重启dns 服务6 测试[root@Centos6.9 ~]#dig www.linux.com @127.0.0.1 本地测试。

[root@centos7 named]#dig www.linux.com @192.168.10.33 远程<<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.linux.com @192.168.10.33
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6140
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2 # aa rd 表示权威解答
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linux.com. IN A
;; ANSWER SECTION:
www.linux.com. 86400 IN CNAME websrv.linux.com.
websrv.linux.com. 86400 IN A 192.168.10.30
;; AUTHORITY SECTION:
linux.com. 86400 IN NS dns1.linux.com.
;; ADDITIONAL SECTION:
dns1.linux.com. 172800 IN A 192.168.10.33
;; Query time: 0 msec
;; SERVER: 192.168.10.33#53(192.168.10.33)
;; WHEN: Tue Sep 19 20:33:38 HKT 2017
;; MSG SIZE rcvd: 116 可以看到dns 的域名解析成功了

实验二 智能DNS转发

DNS智能解析可以智能的判断访问您网站的用户,然后根据不同的访问者把您的域名分别解析成不同的IP地址,DNS策略解析服务器会返回给离用户最近区域web代理服务器地址例如在北京和上海的用户,当访问www.sina.com时候,dns 服务器会返回给北京的用户北京的代理服务器地址,返回给上海的用户上海的代理服务器地址,如下图:

这里写图片描述

在centos 上配置的具体思路如下:
1. 定义客户端a[root@centos7 ~]#vim /etc/named.conf
acl beijing {
10.10.0.0/16;
};
acl shanghai {
10.11.0.0/16;

2 定义vview “beijing”{match-clients {beijing;}; #上面定义的acl
zone “sina.com”{
type master;
file “beijing.sina.com.sh”;
};
include “/etc/named.rfc1912.zones”;

view “shanghai”{
match-clients {shanghai;};
zone “sina.com”{
type master;
file “shanghai.sina.com.sh”;
};
include “/etc/named.rfc1912.zones”;
dns1 2D A 10.10.10.33
dns2 1D A 10.10.10.30
websrv A 10.11.10.80
websrv A 10.11.10.32

cat beijing.sina.com.sh
dns1 2D A 10.10.10.33
dns2 1D A 10.10.10.30
websrv A 10.10.10.40
websrv A 10.10.10.32试
北京用户发起访问:

[root@Centos6.9 ~]#dig www.sina.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.sina.com @192.168.10.33;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58594;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2;; QUESTION SECTION:;www.sina.com.               IN      A;; ANSWER SECTION:www.sina.com.        86400   IN      CNAME   websrv.sina.com.websrv.sina.com.     86400   IN      A       10.10.10.40   # 注意和上海用户比较websrv.sina.com.     86400   IN      A       10.10.10.32   # 注意和上海用户比较;; AUTHORITY SECTION:sina.com.            86400   IN      NS      dns2.sina.com.sina.com.            86400   IN      NS      dns1.sina.com.;; ADDITIONAL SECTION:dns1.sina.com.       172800  IN      A       10.10.10.33dns2.sina.com.       86400   IN      A       10.10.10.30 

上海用户:

[root@Centos6.9 ~]#dig www.sina.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.sina.com @192.168.10.33;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58594;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2;; QUESTION SECTION:;www.sina.com.               IN      A;; ANSWER SECTION:www.sina.com.        86400   IN      CNAME   websrv.sina.com.websrv.sina.com.     86400   IN      A       10.11.10.80 #注意和北京用户比较websrv.sina.com.     86400   IN      A       10.11.10.32 #注意和北京用户比较;; AUTHORITY SECTION:sina.com.            86400   IN      NS      dns2.sina.com.sina.com.            86400   IN      NS      dns1.sina.com.;; ADDITIONAL SECTION:dns1.sina.com.       172800  IN      A       10.10.10.33dns2.sina.com.       86400   IN      A       10.10.10.30

从上面的测试结果中可以看出,北京用户获得的web server 是本地的10.10.10.40 和 10.10.10.32 两个地址;上海用户获得的 web server 是10.11.10.80 和 10.11.10.32 两个地址。通过这样的方法可以大大提高用户的页面访问速度。

dns 配置注意事项

1 dns 库文件 位于/var/named/ 里面,在执行的要保证 用户named 用户对该文件有读权限,named 用户是在安装dns 服务时候生成的。
2 在主dns 上修改库文件时候要主要修改版本号,否则不会同步到备机上
3 配置dns 父域委派给子域的时候最好关闭 dns 安全策略。修改方法为: /etc/named.conf 里面dnssec-enable和dnssec-validation改成 no,这个我在配置的时候就遇到这样的坑,折腾了好久。
4 关闭selinux
5 在/etc/named.conf里面 listen-on port 53 { 127.0.0.1; } 要改成想监听的ip,要不只监听本地;还有 allow-query 里面建议改成 any;
在配置主备dns 的时候 从安全角度来说 主dns 里面增加 allow-transfer { xx ;} 改成 备dns ip ,备机dns 里面改成 none 。