在互联网这个大环境中,咱们平时上网使用的都是相似于www.baidu.com的域名,这是咱们人类易读的互联网,可是在实际的数据传输中,咱们用到的都是ip地址,计算机没法直接识别咱们经常使用的域名,所以咱们就须要一个在咱们和计算机之间作翻译的服务,而这个服务就是DNS。DNS是基于tcp和udp协议的服务,用于咱们平常的域名解析,帮助咱们在域名和ip地址中相互转换,DNS所用端口为53号端口,在linux中dns服务的服务名为named,安装包为bind,通常状况下咱们能够在linux系统中直接经过“yum -y install bind”便可安装咱们须要的DNS服务。linux
要了解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这个主机tcp
在咱们安装过DNS服务后咱们就能够经过配置文件去配置咱们的DNS服务了,如下是咱们配置DNS服务的经常使用配置文件及其相关配置(因为文件较大,在此只列出咱们经常使用的配置)google
这个文件是DNS服务的全局配置文件,包括了zone文件的配置,DNS服务的基础配置,秘钥配置等spa
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";
在这个目录下named.ca文件定义了根zone的配置,里面包含了13台根DNS服务器的ip,named.localhost定义了本机的zone配置slaves/目录下是咱们的从DNS服务器的zone目录,当咱们在/ect/named.conf配置了新的zone后须要在这个目录下建立对应的zone配置文件在建立zone文件时可参照named.localhost文件翻译
下面是我本身定义的一个com.zone文件,也就是com的zone配置文件debug
$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服务器,而后它再返回给客户端
这个文件用来告诉客户端你须要域名解析时要访问的DNS服务器,通常指向缓存DNS服务器
当咱们想修改或添加指向的DNS服务器时直接修改或者添加“namesrver 对应DNS服务器ip”便可
# Generated by NetworkManager
search magedu.com //定义域名的搜索列表
nameserver 192.168.43.1 //定义DNS服务器的搜索列表