导图社区 DNS
centos7 DNS服务的基本概述和配置过程,非常详细
编辑于2019-08-21 13:45:17DNS
网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。
服务概述
实际上,每一台DNS服务器都只负责管理一个有限范围(一个或几个域)内的主机域名和IP地址的对应关系,这些特定的DNS域或IP地址段称为"zone" (区域),根据地址解析的方向不同, DNS区域相应地分为正向区域(包含域名到IP地址的解析记录)和反向区域(包含IP地址到域名的解析记录)。
DNS (域名系统)负责域名解析的服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网
通常情况下一个域名同一时刻只能对应一个IP地址。理论上,一个域名是可以对应多个IP的,而在用户访问过程中,指向某一个具体IP,并不会同时访问多个IP。但不同用户在不同地点访问同一个域名,可能会访问到不同的IP地址,但表象仍旧是这个域名。 反过来,一个IP地址可以解析绑定多个域名,没有限制。
FQDN格式(完整域名格式)在常见域名后添加“.” "www.baidu.com."是域名 "."根域 ".com" 顶级域 "baidu.com" 二级域 "www" 主机名
FQDN全称为Fully Qualified Domain Name,即完全合格域名。FQDN由两个部分组成:主机名和域名。因为DNS是逐级管理的,所以在不同的层级中主机名与域名也是不同的;以www.google.com为例,在第二层中,.com就是域名,google就是主机名,而到了第三层中,.google.com就成了域名,www就成了主机名。 域并不是指诸如www.google.com这样的域名,而google.com才是域;
分为正向解析和反向解析
正向解析:根据域名查 IP 地址
反向解析:根据 IP 查域名
监听端口TCP和UDP的53端口
DNS在53端口上监听请求并提供响应的服务。出于性能的考虑,DNS查询请求用UDP协议交互并且每个请求的大小小于512字节,但是如果返回的请求大小大于512字节,交互双方会协商使用TCP协议。
服务器分类
缓存域名服务器
只提供域名解析结果的缓存,本身并不能缓存构建缓存域名服务器时,必须设置根域或指定其他 DNS 服务器作为解 析来源。
主域名服务器
维护某一个特定 DNS 区域的地址数据库,是指定 区域中唯一存在的权威服务器。
从域名服务器
主域名服务器的热备份,一台DNS服务器可以是一个区域的主域名服务器,同时也可以是另一个区域的从域名服务器
转发器
分布式结构
每一个点代表一个层级。一个域名完整的格式为www.baidu.com. 最末尾的点代表根域,常常省略;.com即顶级域(TLD);baidu.com即二级域。依次类推,还有三级域、四级域等等。子域是一个相对的概念,baidu.com是.com的子域,www.baidu.com是baidu.com的子域。
最大深度127层,每层域名最长63字符,总长度不得超过253字符
查询模式
递归查询
A问B一个问题,B问C,C问D… 然后D告诉C,C告诉B,B告诉A
主机问本地缓存域->本地缓存域问根域->根域问一级域->一级域问二级域->二级域找到www.baidu.com把信息返回给一级域->一级域再把信息返回给根域->根域把信息返回给本地缓存域->本地缓存域把信息返回给主机(客户端仅发出一次请求,让DNS服务器去查询返回结果)
迭代查询
A问B一个问题,B不知道答案说你可以问C,然后A再去问C,C推荐D,然后A继续问D,如此迭代…
主机问本地缓存域,本地缓存域说我不知道,你去找根域,主机问根域,根域说你去找一级域,主机问一级域,一级域说你去找二级域主机问二级域,二级域把www.baidu.com的信息告诉主机(要发出多次请求去分别查询不同的DNS服务器)
通常情况下,主机向本地域名服务器的查询一般都是采用递归查询,本地域名服务器向根域名服务器的查询通常采用迭代查询。
解析过程
1、浏览器检查缓存 2、查找hosts文件 3、LDNS(本地域名服务器) 4、Root Server(根域名服务器) 5、根域名服务器返回给本LDNS一个顶级域名服务器(TLDServer)地址。 6、LDNS给TLDServer发送请求 7、TLDServer查找并返回此域名对应的 Name Server(域名服务器)的地址,这个 Name Server通常就是你注册的域名服务器, 比如 baidu.com 8、Name Server根据映射关系表找到目标ip并连同一个TTL值返回给LDNS 9、LDNS缓存这个域名和对应的IP,缓存的时间由TTL值控制。 10、LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程完毕。
DNS配置
Bind
一款可以提供DNS域名解析的软件
bind,提供了域名服务的主要程序及相关文件
bind-utilis: 提供了对DNS服务器的测试工具程序,如nslookup
bind-libs提供了bind、 bin-utila要使用的库函数。.
bind-hbroct.可选软件包,为BIND服务提供一个伪菜的根目录(将/var/named/chroot作为BIND的根目录),以提高安全性。也称为jail(监牢)机制。
BIND 安装以后,会自动增加一个名为 named 的系统服务
配置文件
主配置文件
/etc/named.conf服务器主要运行参数
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // See the BIND Administrator's Reference Manual (ARM) for details about the // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html options { listen-on port 53 { 127.0.0.1; }; //端口和监听地址(对外提供服务的地址) 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 { localhost; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; //允许递归查询 dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { //正向根域 type hint; //类型有四种,hint是根区域,master是主区域,slave是从区域,forward是转发服务器 file "named.ca"; //根区域数据文件,默认存在 }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
全局配置段options {...}
区域配置段 zone {...}
区域数据文件
/var/named下,需手动建立,用来正向和反向的解析
【区域解析库】每一行一个资源记录rr(resource record) 资源记录:有类型概念,用于标记此记录解析的属性 资源记录类型: SOA:起始授权记录,一个区域文件只能有一个 NS : name server 标记谁是解析服务器,可有多个 MX: 标记谁是域内的邮件服务器,可有多个(有优先级0-99) A : 主机名->IP的映射关系 PTR:IP->主机名的映射关系 AAAA:主机名->IPV6的映射关系 CNAME:正式名称 如:A CNAME B :A是B的别名 * :泛域名解析
注意事项
句末分号,大括号中首尾空格及分号
环境配置
systemctl stop firewalld(关闭防火墙)
iptables -F(清空指定链所有规则)
setenforce 0(关闭sellinux安全机制)
缓存服务器
vim/etc/named.conf
options { listen-on port 53 { 192.168.132.139; }; 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; }; //允许使用本DNS服务的网段 recursion yes; //允许递归查询 zone "." IN { //正向根域 type hint; //类型为根区域 file "named.ca"; //根区域数据文件,自动生成 }; /*根域”.”的区域数据文件比较特殊。Internet中所有的DNS服务器都使用同一份根区域数据文件。其中列出了所有根服务器的域名和IP地址。根区域数据文件可以从国际互联网络信息中心(InterNIC)的官方网站地址http://www.internic.net下载*/ /*上述配置内容中,除了directory项通常会保留以外,其他的配置项都可以首略。若不指定listen-on配置项时, named默认在所有接口的UDP 53端口监听服务,不指定allow-query配置项时,默认会响应所有客户机的查询请求*/
named-checkconf /etc/named.conf(语法检查)
systemctl start named
systemctl enable named(设置开机自动启动)
主域名服务器
vim /etc/resolv.conf
nameserver 192.168.132.139(主) nameserver 192.168.132.140(从)
vim /etc/hosts
192.168.132.139 ns1.crushlinux.com(主) 192.169.132.140 ns2.crushlinux.com(从)
vim /etc/named.conf
options { directory "/var/named"; }; zone "crushlinux.com" IN { //正向“crushlinux.com”区域 type master; file "crushlinux.zheng"; //区域数据文件为crushlinux.zheng ,正反区域文件需手工建立 allow-transfer { 192.168.132.140; }; //允许下载的从服务器地址 }; zone "132.168.192.in-addr.arpa" IN { //反向“192.168.200.0/24”区域 type master; file "crushlinux.fan"; allow-transfer { 192.168.200.140; }; }; //区域配置中的部分参数(如allow-transfer)也可以放在全局配置里 /*修改完主配置文件以后,可以执行named-checkconf命令对named.conf文件进行语法检查,如果文件中没有语法错误,该命令将不给出任何提示,反之,则会给出相应的提示信息,只要根据出错提示修正文件中的错误即可。带“-z"选项的named-checkconf命令还可以尝试加载主配置文件中对应的区域数据库文件,并检查该文件是否存在问题。例如,当出现“···file not found”的错误时,表示找不到对应的文件。*/ //每个zone区域都是可选的(包括根域、回环域、反向域),具体根据实际需要而定,zone配置部分的“IN”关键字也可以省略
named-checkconf /etc/named.conf
cd /var/named/
vim crushlinux.zheng
$TTL 86400 //有效解析记录的生存周期 @ IN SOA crushlinux.com. admin.crushlinux.com. ( //SOA标记、域名、管理邮箱 /*@ 这个表示zone 定义出的那个部分!以这个文件内容为例,因为我们在 /etc/named.conf 当中就是定义出 crushlinux.com为一个 zone 的,因此,在这里, 这个符号就代表 crushlinux.com! ,SOA (Start of Authority 授权信息开始)也就是接在后面的设定要开始了!这个在每一个zone的文件中都存在! 在 SOA 后面会接着两个部分,第一个为主机名称(crushlinux.com.),请特别留意那个crushlinux.com后面有个小数点 (.) 这个东西很重要!他代表『一个完整的 hostname + domain name 』! 如果没有加上 (.) 的话,那么就表示该文字『仅为hostname ,还需要加上 domain name 』!第二个为管理员的 e-mail ! (由干“@”符号已有其他含义,因此将邮件地址中的“@”用"."代替), */ 20190818 //更新序列号,可以是10位以内的整数 /*SOA记录中的更新序列号用来同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载*/ 3H //刷新时间,重新下载地址数据的间隔 15M //下载失败后的重试间隔 1W //失效时间,超过该时间仍无法下载则放弃 1D //无效解析记录的生存周期 ) //上述配置内容中,时间单位默认为秒,也可以使用以下单位: M (分)、H (时)、W(周)、D(天) IN NS ns1.crushlinux.com. //NS(name server) 标记谁是解析服务器,可有多个 IN NS ns2.crushlinux.com. //IN表示 internet IN MX 10 mail.crushlinux.com. /*MX邮件交换(Mail Exchange),记录当前区域的邮件服务器的主机地址,数字10表示(当前有多个MX记录时)选择邮件服务器的优先级,数字越大优先级越低*/ ns1 IN A 192.168.132.139 // A :主机名->IP的映射关系 ns2 IN A 192.168.132.140 mail IN A 192.168.132.141 www IN A 192.168.132.142 study IN A 192.168.132.143 * IN A 192.168.132.139 /*当一台服务器需要同时承载某个DNS区域内的许多个不同的域名时(如IDC的虚拟主机服务器、提供个人主页空间的网站服务器等),可以在区域数据文件的最后一行添加泛域名解析记录,即使用“*”以匹配任意主机名*/ ftp IN CNAME www /*CNAME别名(Canonical Name):记录某一个正向解析条目的其他名称。例如“ftp IN CMANE www”表示ftp.crushlinux.com是www.crushlinux.com的别名*/ //其中, NS、MX记录行首的“@”符号可以省略(默认继承SOA记录行首的@信息),但是必须保留一个空格或Tab制表位。 //主机地址要使用完整FQDN格式,亦即加上“.”
named-checkzone crushlinux.zheng /var/named/crushlinux.zheng(检查区域配置文件)
vim crushlinux.fan
$TTL 86400 @ IN SOA crushlinux.com. admin.crushlinux.com. ( 20190818 3H 15M 1W 1D ) IN NS ns1.crushlinux.com. IN NS ns2.crushlinux.com. IN MX 10 mail.crushlinux.com. 139 IN PTR ns1.crushlinux.com. //IP->主机名的映射关系 140 IN PTR ns2.crushlinux.com. 141 IN PTR mail.crushlinux.com. 142 IN PTR www.crushlinux.com. 143 IN PTR study.crushlinux.com. 139 IN PTR ns1.crushlimux.com.
named-checkzone crushlinux.fan /var/named/crushlinux.fan
chown :named ./crushlinux.*(更改正反区域文件属组)
systemctl restart named
测试
将测试机的DNS服务器设为192.168.132.139,用nslookup命令测试
从域名服务器
yum -y install bind
vim /etc/resolv.conf
nameserver 192.168.132.139(主) nameserver 192.168.132.140(从)
vim /etc/hosts
192.168.132.139 ns1.crushlinux.com(主) 192.169.132.140 ns2.crushlinux.com(从)
vim /etc/named.conf
options { directory "/var/named"; }; zone "crushlinux.com" IN { type slave; //类型为从域名服务器 file "slaves/crushlinux.zheng"; //从主服务器下载的数据的存放位置 masters { 192.168.132.139; }; //指定主域名服务器 }; zone "132.168.192.in-addr.arpa" IN { type slave; file "slaves/crushlinux.fan"; masters { 192.168.132.139; }; };
named-checkconf /etc/named.conf
systemctl start named
测试
nslookup study.crushlinux.com 192.168.132.140