linux之DNS服务
阅读原文时间:2023年07月08日阅读:1

DNS是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网而不需要记忆能够直接被机器识别的IP。

BIND:  Berkeley Internet Name Domain  -->实现

监听端口: UDP:53  TCP:53

DNS默认是工作在UDP下,因为UDP快。一旦网络出现问题,才用TCP。

TCP传输:建立连接需要三次握手,四次断开。需要一定的网络代价。传文件用

UDP: 直接的传输,会丢包。快,即时通信qq用。

搭建步骤如下:

1.安装软件。2.修改配置文件(至少能够解析3个域+自己定义的域)

3.编写区域数据文件。4.启动服务测试。

2.主机间通讯机制的演变

MAC ==》IP ==》主机名

名称解析

名称解析的过程:就是某个应用程序基于某个搜索键在指定数据库中,查询,查询到对应的键,与键对应值被找出来的过程.

/etc/passwd
  <--
 root

login:

password:

输入用户名和密码之后,怎么知道passwd文件和shadow文件?查看文件more
/etc/nsswitch.conf

解析机制

# cat
/etc/nsswitch.conf

在这个文件中可以看到hosts后面的定义

主机名-->IP
      
正向解析

IP-->主机名 反向解析

hosts:
  file
 dns

2、域名解析发展历程

1)本地hosts

每台机器都需要维护一份,不知道新的主机,随着机器越来越多,维护成本高,通信之间不方便(不同机器直接通信访问本地的host文件)

2)地址分配机构(ftp)

每台机器到ICANNN进行注册,每台机器定期的从最全的服务器上去下载/刷新hosts文件;随着机器的数量的增多,服务器的带宽是有限的,很慢的

3)集中解析机制

机器本身不存hosts文件,直接去服务器请求,只发送请求的带宽

4)分布式数据库

主服务器建立了很多的子服务器,子服务分模块存储各个域名。

主服务器,下面有很多小服务器(1,2,3…),假如A访问B,通过主服务器反馈:我不知道B是谁,但是1号机器知道,你去问他吧,A再访问1号机器,1号机器解析反馈B的IP给A,A拿到B的IP后,再访问B

3.域介绍

 说明:www.baidu.com严格的说应该是www.baidu.com.后面得加根域

• 一级域/顶级域

• 早期有ICANN(The
Internet Corporation for Assigned Names and
Numbers)自行创建服务器

– 一级域分三类

– 1.组织域:.com,.org,.net,.mil,.gov,.edu
(.mil是军队的意思)

– 2.国家域:.cn,.hk,.tw,.jp,.us,.uk(中国,香港,台湾,日本,美国,英国)

– 3.反向域:.in-addr.arpa(IP-->主机名)

• 二级域(在互联网上,通常二级域就由公司等去申请的,因此通常被称为组织域)

说明点:

1)分属两个不同域的相同主机名是不会存在问题的.

2)而主机名的书写习惯是自下向上的,自底向上进行追溯

3)在书写上可以省略.(根域),但是在配置DNS时,绝对不能省略,否则可能会补上其他域名

4.DNS解析过程

 DNS服务器的类型(能双向问,能解析本地域加上缓存名称服务器)

-
   主DNS服务器
   (master)

-
   辅助DNS服务器(数据从主同步过来)

缓存名称服务器:只能单向问,不能解析本地域

 参考答案:告诉你去找com

 权威答案:直接告诉你IP地址

 迭代:先问根,根说是com,再去问com

 递归-->逐层向下,逐层向上,只发一次请求就能得到权威答案的称为递归

 根为谁提供递归?根不为任何人提供递归

 外来机器可否指定本DNS?看本地是否愿意了,比如谷歌提供的 8.8.8.8

 肯定应答: 给你响应了,就是肯定应答

 否定应答: ping 一个不存在的主机,得不到答复

肯定应答(有这个ip,并给你这个ip,本地DNS要缓存)

否定应答(没有这个ip,本地DNS要缓存)

 关于应答的缓存:

 为了加快访问速度,会对肯定答案进行缓存,那否定答案呢? 也需要缓存的,防止在一段时间内重复此访问

 肯定应答和否定应答有缓存时间,是需要设定的

FQDN(俗称网址)

 FQDN:Full
Qualified Domain Name

 完全限定域名 www.baidu.com

 FQDN-->IP正向解析
 IP-->FQDN反向解析

域:Domain 逻辑空间                 区域:zone
物理空间

DNS服务器的类型(能双向问,能解析本地域加上缓存名称服务器)

-
   主DNS服务器
   (master)

-
   辅助DNS服务器(数据从主同步过来)

缓存名称服务器(只能单向问,不能解析本地域,至少能的解析 根域 、localhost 、127.0.0.1反向域进行解析)

5.区域文件与资源记录

区域数据文件,里面的一行行的对应关系是资源记录(比如/etc/hosts文件)

资源记录(Resource Record,简称RR)

资源记录有类型,用于表示资源的功能

1)SOA:Start Of
Authority,起始授权记录这一区域划归谁管理

2)NS:Name Server,域名服务器

3)MX:Mail
eXchanger:邮件交换器

4)A:Address,(FQDN-->IP)正向解析

5)PTR: PoinTeR,(IP-->FQDN)反向解析

6)AAAA:Address,FQDN-->IPv6

7)CNAME:Canonical
Name,正式名称(别名记录)

早期DNS只支持FQDN-->IP的解析

后来利用指针实现反向解析,两种实现机制不同,所以

正向反向工作起来不相同,解析技术相差甚远

所以正反向解析使用的不是同一种技术,所以不能在同一个数据库中进行

域:Domain 逻辑空间     区域:zone
物理空间

DNS服务器的类型:1、主DNS服务器
   2、辅助DNS服务器 
  3、缓存名称服务器

6.安装软件bind:

yum install bind

DNS相关文件说明:

主配置文件:/etc/named.conf

启停脚本:/etc/rc.d/init.d/named

区域数据文件:/var/named/

7.删除并重写配置文件(/etc/named.conf)

删除主配置文件:rm /etc/named.conf
 重新写配置文件: vim /etc/named.conf

#至少对三个域的解析,叫缓存名称服务,加上对本地域的解析,就叫DNS
  (根域,local域,反向域,本地域)

内容如下:语法是:1 花括号后面有;
2 花括号里面的每行后面有;

#定义全局选项

options{

directory
 "/var/named";

};

# zone
  hint线索,可以解析,具体解析要到相对应的文件去实现

zone
 "."  IN {

type
hint;

file
"named.ca";

};

zone
 "localhost" IN {

type master
;

file
"named.localhost";

};

zone
 "1.0.0.127.in-addr.arpa"  IN
{

type master
;

file
"named.loopback";

};

# “lbg.com”双引号里面定义的名字叫区域名称

zone
 "lbg.com" IN {

type
master;

file
"lbg.com.zone";

};

上面最后的lbg.com就是本地域,其中本地域的文件/var/named/lbg.com.zone要自己建,自己编辑.

8.新建区域数据文件并编辑.(/var/named/lbg.com.zone)

 /var/named/bsr.com.zone就是区域数据文件,里面内容就是资源记录.@就是区域名称.

SOA记录,起始授权记录 ,有且只有一个,必须在第一个

#习惯性写一个@ 符号,@ 符号表示区域名称,$全局定义肯定应答缓存时间,默认是秒

ttl : time to
life  时间周期

区域数据文件里第一条必须是SOA(起始授权记录),里面的域名必须是绝对写法.

NS记录标识当前域的DNS服务器是谁的.故后面必须有对应的解析ip.有几个DNS服务器就写几条.NS记录必须写.

MX记录可写可不写.

资源记录的格式:

name
    [ttl(缓存时间)]
    IN(internet)
    资源记录类型(RRtype)
 Value(每行只有一条记录)

/var/named/bsr.com.zone里面内容例子:

例子:

@
600 IN SOA  dns.lbg.com.
   admin.bosenrui.com.(管理员邮箱)

600
      #为肯定应答缓存时间

20170716
  #序列号(serial number)
;(分号标示注释)注释内容,十进制数据,不能超过10位,通常使用日期,例如2014031001(辅助DNS同步用)

4H
      #刷新时间(refresh
time) ;即每隔多久到主服务器检查一次(如4H)

1D
      #重试时间(retry
time) ;应该小于refresh time(如果成功,又开始刷新时间)

7D
      #过期时间/失效时间(expire
time); (如果过了这个时间就自杀了)

7D
      #否定应答缓存时间negative
answer ttl ;否定答案的ttl,否定答案客户端能够缓存多久

@ IN  NS  dns
    #
前面是写绝对FQDN,如果写相对FQDN,“dns” 就补上bsr.com.  如何判断,看后面的 " ."

@  IN  MX  10
 mail  #
 10邮件的表示优先级

dns   IN
  A
  192.168.88.4
 # (DNS服务器要和本机的IP一样)除了SOA之外的@ 记录,其他的资源记录都要写与之对应的A记录

Lbg IN
CNAME     #别名记录

书写格式

name
    [ttl(缓存时间)]
    IN(internet)
    资源记录类型(RRtype)
 Value

name是指区域名称,通常可以简写为“@”

value DNS服务器的FQDN(可以使用相对名称)

NS:name:区域名称,通常可以简写为@.value:DNS服务器的FQDN(可以使用相对名称)

例子: @ 600 IN NS ns

A指A记录,只能出现在正向区域数据文件中,但凡以FQDN作为其值得记录,都应该给这个值创建至少一条A记录,以方便这个FQDN也有其IP地址

MX:可以有多个

name:区域名称,用于标识smtp服务器

value:包含优先级和FQDN

优先级:0-99,数字越小,级别越高,

例子:

@
600
 IN
MX
10
mail

@
600
 IN
MX
20
mail2

CNAME(用于创建别名)

name :FQDN(可以使用相对名称)

value :FQDN(可以使用相对名称)

例子:ftp
IN
CNAME
www

检查named的配置文件的语法错误: named-checkconf

9.测试DNS(/etc/resolv.conf)

 在测试主机上:vim /etc/resolv.conf
 进去修改

添加一行: nameserver 192.168.88.4
 #修改成本地DNS服务IP

服务器端启动:service named start

里面可以写多条nameserver ip 作为次选NDS服务.

当服务器主机本身也要用这个DNS时,若不在其 /etc/resolv.conf
里添上nameserver
 192.168.88.4,其不一定可用DNS,想确保可用,加上即可.

重启服务:service named restart

客户端ping试下.

1.修改配置文件(/etc/named.conf)

将ip的网络位反着写.

在/etc/named.conf下添加一行:

 zone “88.168.192.in-addr.arpa” IN
{

type master;

file “192.168.88.zone”

}

2.创建编辑反向区域文件

在/var/named里创建反向解析文件192.168.88.zone,并编写反向区域解析文件.

第一行SOA不变,后面行的所有域都必须写绝对路径. 反向解析主要的类型是PTR(pointer 指针)

3.测试(host/dig -t)

host命令和dig命都是是用来测试DNS服务器.

dig 命令

dig
[-t type] [-x addr]  [hostname]
 [@DNS服务器(指定服务器解析)]

host

host[-t
type] {hostname} [server]

测试时在服务器端的虚拟机:--rndc-confgen -r /dev/urandom

Host -t选项可正向解析与反向解析.

Dig命令里-t测试正向解析,-x测试反向解析.结果分:提问段/应答段/认证段/附加段.

正向解析:(dig -t A www.lbg.com
)/) 需加上类型.

反向解析:(dig -x
192.168.88.2),无须加类型.

注意:

host -t SOA
www.lbg.com  这样ping 没有应答,必须去掉 www.
 (跟区域名称,不要跟FQDN,说白了就是跟@符号)

dig
 -t NS www.lbg.com 这样ping 没有应答,必须去掉 www.

MX 也是这么查

host -t
 A www.lbg.com 这样OK

dig
 -t  A www.lbg.com
 这样OK

@指定DNS服务IP 优先级别高于 /etc/resolv.conf 里面的配置

指定DNS进行测试,主从服务器都是可以的

host -t A
www.lbg.com 192.168.100.10
   --指定DNS进行测试

dig -t A
sb.lbg.com @192.168.100.10
     --指定DNS进行测试

3.设置辅助DNS服务

1.安装软件: yum install
bind

2.修改主配置文件和子配置文件:

主配置文件:/etc/named.conf.

子配置文件:vim
/etc/named.rfc1912.zones

3.启动服务: service named start

再查看/var/named/slaves目录,里面就同步了区域文件.

4.测试。区域传送文件: /var/named/slaves

dig -t axfr lbg.com
 完全区域传送

5.验证区域数据文件的同步性:

第一步:编辑主服务器上的数据文件vim
lbg.com.zone,增加如下的信息:

@
IN  NS  dns1.lbg.com.

dns1
IN A  192.168.100.11

第二步:主服务器上重启服务并登陆客户端切换到/var/named/slaves后

查看文件 more
lbg.com.zone 发现数据文件并没有及时的更新

第三步:修改主服务上的数据文件vim lbg.com.zone,修改序列号,稍微的变动即可

第四步:主服务上的服务重启,并切换到从服务器的相关目录下,查看文件more
lbg.com.zone

可以看到,这次是可以了

说明:只要两边的区域文件是一样的,就是会认为是一样的。要想立即同步,修改序列号就可以了。可能有防火墙的限制。