Linux DNS服务简介
一.DNS简介
在互联网这个大环境中,我们平时上网使用的都是类似于www.baidu.com的域名,这是我们人类易读的互联网,但是在实际的数据传输中,我们用到的都是ip地址,计算机无法直接识别我们常用的域名,因此我们就需要一个在我们和计算机之间做翻译的服务,而这个服务就是DNS。DNS是基于tcp和udp协议的服务,用于我们日常的域名解析,帮助我们在域名和ip地址中相互转换,DNS所用端口为53号端口,在linux中dns服务的服务名为named,安装包为bind,一般情况下我们可以在linux系统中直接通过“yum -y install bind”即可安装我们需要的DNS服务。
二.DNS服务原理
要了解DNS服务我们首先要知道什么是域名
域名就是一串由点分隔的字符串,用来表示网络上某一台或一组计算机的名称,如果说ip为计算机的身份证,那么域名就是计算机的名字就像www.baidu.com就是百度的网络名字,域名的存在是为了方便人们记忆,和管理网络。因此域名也分为根域名,顶级域名,二级域名,三级域名等根域名为“.”,其实在我们所有的网络域名后面都是有一个隐藏的点的就像百度的完整域名为“www.baidu.com.”,顶级域名就是com,cn,gov之类的在整串域名除“.”之外的最后的位置,二级域名就是指顶级域名之下的域名例如我们的baidu,taobao等,在二级域名前的就是三级域名,以此类推。
而我们的域名作为数据存储在世界上13台根DNS服务器上,当我们需要查找域名时就会去这13台服务器去访问然后就会告诉你你询问的域名所对应的ip
DNS解析过程:
客户端先查看浏览器缓存和本地host文件,本地DNS解析缓存,没有的话就交给本地域名解析服务器(由运营商提供),本地域名缓存解析服务器收到解析请求后,先看本地缓存有没有,如果没有直接找域名根服务器,根收到www.google.com这个请求时,会说不明白在哪里,但是根节点服务器会返回.com给本地域名解析服务器,然后本地域名解析服务器再找.com,找到后,再找google.com,最终找到www.google.com这个主机
三.linux中DNS服务的配置文件
在我们安装过DNS服务后我们就可以通过配置文件去配置我们的DNS服务了,以下是我们配置DNS服务的常用配置文件及其相关配置(由于文件较大,在此只列出我们常用的配置)
1./ect/named.conf 全局配置文件
这个文件是DNS服务的全局配置文件,包括了zone文件的配置,DNS服务的基础配置,秘钥配置等
options { listen-on port 53 { any; }; //监听的端口和监听的ip,在此用any代表固定ip表示所有ip directory "/var/named"; //所在zone文件路径(所在目录) 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,any代表所有ip ... recursion yes; //是否迭代查询,一般只有缓存DNS服务器开启 dnssec-enable no; //是否使用秘钥 dnssec-validation no; //是否确认秘钥 //缓存文件的配置 logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; //根zone文件的配置 zone "." IN { //zone表示这是个zone配置,引号中间为配置的zone,IN为固定格式 type hint; //type有很多种,我们常用的有hint表示根,master表示主DNS服务器,slave表示从DNS服务器,在一般情况下我们的type为master file "named.ca"; //指定对应的zone文件的位置 }; //这是我们主要配置的区域,用来配置DNS服务中最重要的zone(在baidu中设置一个DNS服务器,这个DNS服务器将完成域名空间"baidu.com"下的域名解析工作,我们称之为一个区域ZONE)再添加新的zone时我们可以仿照根zone文件,
除了上面根zone的配置我们在指定主从服务器时还要指定从服务器对应的主服务器ip“master {ip;};” //读取以下文件 include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
2./var/named/* 所有zone文件的配置
在这个目录下named.ca文件定义了根zone的配置,里面包含了13台根DNS服务器的ip,named.localhost定义了本机的zone配置slaves/目录下是我们的从DNS服务器的zone目录,当我们在/ect/named.conf配置了新的zone后需要在这个目录下创建对应的zone配置文件在创建zone文件时可参照named.localhost文件
下面是我自己定义的一个com.zone文件,也就是com的zone配置文件
$TTL 1D //表示下面的时间都是一天 /*下面是 SOA记录 SOA的作用是说明一个区域(zone)解析文件的生效区域,由谁负责,以及主从同步时的参数设定 区域数据文件有版本号(序列号): serial,长度不能大于10位 刷新时间(检查周期):refresh 重试时间(重试周期): retry 过期时间(失效时长): expire 否定应答的TTL值; */ @ IN SOA ns.com. rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum /*下面是NS记录和A记录,当也有其他的记录,不过在此我们不做配置 NS: 一个区域数据文件可以有多个NS记录; name: NS前的区域,区域名称,可使用@替换也可用空格代替,同@表示当前zone; value:dns服务的FQDN; 注意: 1.相邻的资源记录name相同时,后面的可省略; 2.任何一个value中指定的FQDN,在其域的正向解析文件中应该有A记录; 3.同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应; A记录用来表示目标域所对应的ip */ NS ns.com. //在此空格代表当前zone也就是com.此条表示解析com去询问ns.com(可以自己定义名字,在后面引用时对应即可) ns.com. A 192.168.230.3 //ns.com(上一条定义的)对应的ip为192.168.230.3 magedu.com. NS ns.magedu.com. alibaba.com. NS ns.alibaba.com. ns.magedu.com. A 192.168.230.4 ns.alibaba.com.A 192.168.230.6
在zone文件中可以简单的理解NS记录和A记录作为一组时是用来告诉前来询问的DNS服务器你所询问的域名我不知道对应的ip,但是我知道谁知道并告诉对方下一级别要访问的DNS服务器,当A记录单独出现时就是一个完整域名的ip,可以直接返回给缓存DNS服务器,然后它再返回给客户端
3./etc/resolv.conf 客户端的指向配置文件
这个文件用来告诉客户端你需要域名解析时要访问的DNS服务器,一般指向缓存DNS服务器
当我们想修改或添加指向的DNS服务器时直接修改或者添加“namesrver 对应DNS服务器ip”即可
# Generated by NetworkManager
search magedu.com //定义域名的搜索列表
nameserver 192.168.43.1 //定义DNS服务器的搜索列表