========================================================================================================================================= DNS基本原理 1、DNS介绍 DNS(Domain Name System),网域名称系统,DNS 早在1983年由保罗·莫卡派乔斯发明。是互联网上基础性的服务。DNS 将域名和网络服务器的 IP 地址 相互映射,并将这些数据保存至 DNS 服务器。 随着 IP 地址和主机的增加,由少量的服务器负责解析域名显然是不堪重负的,所以 DNS 名称系统使用分层级的思想,当有人发出请求解析时,自上 而下的一级一级进行解析。 两台主机通信事实上是依赖于IP地址,而不能识别域名,因为 IP 地址非常不方便于记忆,所以域名的产生,极大的方便了访问互联网。例如,有一台 服务器的IP为 115.159.221.170,当我们访问这台服务器的资源时,更多的时候是通过输入域名来访问的,当输入(www.xuejinwei.com)域名后,DNS服 务器自动将域名"翻译"成 IP 地址,然后访问网络的服务器。DNS 是一个域名和 IP 地址相互映射关系的分布式数据库。 在浏览器中输入 www.xuejinwei.com 域名,操作系统会先检查自己本地的 hosts 文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完 成域名解析。 DNS 是一个应用层的一个协议,基于 53/UDP 端口工作。 2、相关概念 1、DNS域名称 域名采用层次化结构进行组织。以 www.xuejiwnei.com. 为例进行叙述:每个点代表一个层次,例如 www.xuejinwei.com. 最后面的 "." 代表[根域], 常常省略;com 是[顶级域] TLD(Top-level Domain);xuejinwei.com 是二级域。 每一级域名的字符长度限制的63个字符,域名总长度不能超过253个字符。 ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD) 以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理。 2、子域 [子域]是一个相对概念,例如 xuejinwei.com 是 com 的子域,www.xuejinwei.com 是 xuejinwei.com 是子域。子域也是一个网域,是更大网域的一部分; 例如,mail.google.com、www.google.com 和 docs.google.com 都是网域 google.com 的子域。网域所有者可以创建子域,为其顶级网域内的网页或服务 提供简单易记的地址。 3、正向、反向解析 正向解析:通过域名查找 IP 的过程 反向解析:通过 IP 查找域名的过程 4、FQDN FQDN:(Fully Qualified Domain Name)完全限定域名,[唯一地]标识在 DNS 分层树中的主机的位置,通过指定的路径中点分隔从根引用的主机的名 称列表。 3、DNS查询方式 递归查询 客户端向本地名称服务器发出请求后,一直处于等待状态,直到本地名称服务器返回查询结果。当客户端向本地名称服务器发出请求后,本地名称服 务器查询本机高速缓存中有无此条目,如果有记录,则直接返回;如果没有,则本地名称服务器再以客户端的角色将查询请求发给根名称服务器,以 www.xuejinwei.com 为例:根名称服务器通过查询返回给本地名称服务器 .com 顶级名称服务器的IP地址;本地名称服务器收到 .com 顶级名称服务 器的IP 地址后继续向 .com 顶级名称服务器发出请求,顶级名称服务器收到请求后查询缓存,如果有记录则直接返回本地名称服务器,如果没有, 则返回负责解析 xuejinwe.com 二级名称服务器的IP地址;本地名称服务器继续发出请求,二级名称服务器同样查找缓存,返回 www.xuejinwei.com 的 IP 地址。 迭代查询 客户端向本地名称服务器发出请求后,本地名称服务器若有缓存记录则直接返回,如果没有,则本地名称服务器返回根名称服务器的IP地址,客户端通 过自主向根名称服务器发出请求,一级一级的向下查询,从而到域名的IP地址。 4、DNS服务器类型 DNS域名服务器是用来存储主机-域名映射信息的,这些服务器具体又可以分为以下几类: 1、主域名服务器(primary name server)   它是特定域所有信息的权威性信息源。它从域管理员构造的本地磁盘文件中加载域信息,该文件(区文件)包含着该服务器具有管理权的一部分域结构的 最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对其管辖域的任何查询。 2、从域名服务器(secondary name server)   它可从主服务器中复制一整套域信息。区文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为"区文件复制"。在辅 助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需 要生成本地区文件,因为可以从主服务器中下载该区文件。 3、缓存名称服务器(caching-only server)   可运行域名服务器软件,但是没有域名数据库软件。它从某个远程服务器取得域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询 相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。当 BIND 被配置为缓存服务器的时候,它只会 回应已缓存的请求,并将所有其他的请求转发到上游的 DNS 服务器(例如 ISP 的服务器,或者 Google、OpenNIC 等知名的服务)。不转发,只利用最基 本的三个区域文件进行客户端发来的解析请求 4、转发域名服务器(forward server)   负责所有非本地域名的本地查询。转发域名服务器接到查询请求时,在其缓存中查找,如找不到把请求依次转发到指定的域名服务器,直到查询到结果为止, 否则返回无法映射的结果。 5、DNS资源记录格式及类型 1、DNS服务器数据库中每一个条目都是一个资源记录 (Resource Record,RR) 2、常见的正向解析文件 RR 相关信息 (IN代表互联网) [domain] IN [RR type] [RR data] 主机名. IN A IPv4 的 IP 地址 主机名. IN AAAA IPv6 的 IP 地址 领域名. IN NS 管理这个领域名的服务器主机名字. 领域名. IN SOA 管理这个领域名的七个重要参数(容后说明) 领域名. IN MX 顺序数字 接收邮件的服务器主机名字 主机别名. IN CNAME 实际代表这个主机别名的主机名字 3、格式 NAME TTL IN RRType VALUE 注:1.@可以引用当前区域的名称 2.TTL可以从全局继承 3.相领的两个资源记录NAME相同时,下一条的资源记录的NAME可省略,加一个Tab制表符即可; NAME:FQDN(www.xuejinwei.com)|DomainName(xuejinwei.com)|IPaddr TTL:对大多数资源记录,该字段为可选项。指明其它DNS服务器在过了该时间段后,放弃该记录信息之前对其缓存 IN:Internet RRTYPE: A (Inernet Adderss),A记录也称为主机记录。将 FQDN 指向一个IPv4的IP地址,一个域名可以创建多个不同的IPv4地址 FQDN可以使用相对名称,例如将 www.xuejinwei.com. 写成 www 。 注: @可用于引用当前区域的名字 示例:www.xuejinwei.com. IN A 115.159.221.170 注:1.同一个主机名可以有多条不同的A记录,DNS 会以轮询的方式解析主机名 2.多个主机名指向同一个值 3. *.xuejinwei.com. 表示泛域名解析 AAAA 将DNS域名指向一个IPv6的IP地址 CNAME (Canonical Name)别名记录,由一个域名指向另一个域名,DNS系统将继续解析别名指向的域名。 MX (Mail exchanger),邮件交换。(区域名称 --> FQDN) 示例: xuejinwei.com. [@] 600 IN MX 10[优先级] mail.xuejinwei.com. mail.xuejinwei.com. 600 IN A 1.1.1.1 注:1.一个区域内,MX记录可有多个,每个记录 VALUE 之前应该有一个数字0-99,表示此服务器的优先级, 数字越小,优先级越高。 2.任何一个MX资源记录,都应该有一个A记录。 SRV PTR (PoinTeR),将一个 IP 地址解析为 FQDN,(IP --> FQDN) NAME:IP,逆向的主机地址,即主机地址要反过来写例如:172.16.100.7 的 name 为:7.100 VALUE:FQDN 示例:7.100.16.172.in-addr.arpa. IN PTR www.xuejinwei.com. 注:1.网络地址和后缀(.in-addr.arpa.)可省略 NS (Name Server),域名服务器记录,用来指定该域名由哪个 DNS 服务器来进行解析 NAME:区域名称,可以简写为@符号。例如 xuejinwei.com TTL: IN: VALUE:DNS 服务器的 FQDN,(可以使用相对名称)可以有多条; 示例:@ 600 IN NS ns1.xuejinwei.com. 示例:xuejinwei.com. 600 IN NS ns1.xuejinwei.com. 注:任何NS类型的资源记录条目中后面VALUE对应的FQDN(ns1.xuejinwei.com.),都应该有一个A记录。 SOA (Start Of Authority),NS记录说明了有多台服务器在进行解析,但哪一个才是主服务器,NS并没有说明,这个就 要看SOA记录了,SOA名叫起始授权机构记录,SOA记录说明了在众多NS记录里那一台才是负责此域的DNS服务器。更 通俗的讲就是:当前解析库被哪个域所用,由那个 DNS 服务器负责。 SOA:(Start of Authority) 格式:ZONE_NAME TTL IN SOA NS_FQDN ADMINSTRATOR_MAILBOX (sereial number refresh retry exprire na ttl) 注意: 1、ZONE NAME:区域名称。例如:xuejinwei.com. ,通常可以简写为@符号 2、时间单位:默认是秒。M是分钟、H是小时、D是天 3、邮箱格式:jinweiayy@gmail.com --> jinweiayy.gmail.com 4.一个区域解析库中只能有一个 SOA 记录,且必须为资源记录的第一条。 示例:xuejinwei.com. 600 IN SOA ns.xuejinwei.com. jinweiayy.gmail.com[邮箱地址,不能使用@符号,换成. ] ( 20170217 # ";"号后面为注释。serial number,序列号,x从服务器同步依据,主服务器 记录发生变化,序列号加1,序列号不能超过10位,例:2017022001 1H # refresh time 刷新时间,每隔多久到主服务器检查一次资源记录是否改变,时间单位 默认是秒 2M # retry time 重试时间,小于refresh time。从服务器从主服务器请求同步解析库失 败时,再次尝试的时间间隔 1W # ecpire time 过期时间。在此时间后,如果从服务器一直无法连接主服务器,则从服 务器的区域数据过期,主动停止自己的解析职责 1D # negative answer TTL 否定答案的缓存 TTL 时间。否定答案缓存失效时间 ) 6、DNS报文 DNS报文格式,不论是请求报文,还是DNS服务器返回的应答报文,都使用统一的格式。 文档:http://yi-love.github.io/blog/node.js/javascript/dns/2016/11/11/dns-request.html Header 报文头 12字节 Question 查询的问题 Answer 应答(响应报文) Authority 授权应答(响应报文) Additional 附加信息(响应报文) Header: ID 2个字节(16bit),标识字段,客户端会解析服务器返回的DNS应答报文,获取ID值与请求报文设置的ID值做比较,如果相同,则认为是同一个DNS会话。 FLAGS 2个字节(16bit)的标志字段。包含以下属性: QR 0表示查询报文,1表示响应报文; opcode 通常值为 0(标准查询),其他值为 1(反向查询) 2(服务器状态请求) [3,15]保留值; AA 表示授权回答(authoritative answer)– 这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器; TC 表示可截断的(truncated)–用来指出报文比允许的长度还要长,导致被截断; RD 表示期望递归(Recursion Desired) – 这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析, 递归查询的支持是可选的; RA 表示支持递归(Recursion Available) – 这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询; Z 保留值,暂未使用; RCODE 应答码(Response code) - 这4个比特位在应答报文中设置,代表的含义如下: 0 : 没有错误。 1 : 报文格式错误(Format error) - 服务器不能理解请求的报文; 2 : 服务器失败(Server failure) - 因为服务器的原因导致没办法处理这个请求; 3 : 名字错误(Name Error) - 只有对授权域名解析服务器有意义,指出解析的域名不存在; 4 : 没有实现(Not Implemented) - 域名服务器不支持查询类型; 5 : 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答.比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作 (比如区域传送zone transfer); [6,15] : 保留值,暂未使用。 QDCOUNT 无符号16bit整数表示报文请求段中的[问题记录数]。 ANCOUNT 无符号16bit整数表示报文回答段中的[回答记录数]。 NSCOUNT 无符号16bit整数表示报文授权段中的[授权记录数]。 ARCOUNT 无符号16bit整数表示报文附加段中的[附加记录数]。 Question 查询的问题 Answer 应答(响应报文) Authority 授权应答(响应报文) Additional 附加信息(响应报文) 7、解析结果 1、肯定答案:正确返回了发出请求的内容 否定答案:请求的条目不存在等原因无法返回的结果,叫否定答案 权威答案:由负责此域的解析的 DNS 服务器返回的解析结果 非权威答案:从非权威服务器上获得的的解析结果 注:通常,我们能够解析得到的DNS记录值都是非权威答案。 8、拓展阅读: https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E4%BC%BA%E6%9C%8D%E5%99%A8%E8%A8%98%E9%8C%84%E9%A1%9E%E5%9E%8B%E5%88%97%E8%A1%A8 =========================================================================================================================================== BIND 1、BIND(Berkeley Internet Name Daemon),是现今互联网上最常使用的DNS服务器软件。由互联网系统协会(Internet Systems Comsortium)。 unbound 也实现了名臣解析的功能。 2、BIND软件包及安装 包名:bimd 进程:named 使用端口:53 相关包: bind # 主程序 bind-chroot # 将named进程的活动范围限定在chroot目录,保证安全性 { yum install bind-chroot systemctl named-chroot.service 注:通常挂载绑定目录的方式构建出named进程运行的环境,并经这个环境缩小到一个范围内, 目的在于如果DNS服务器被工具,避免系统本身被工具 } bind-devel # 与开发相关的头文件和库文件(编译安装bind时所需) bind-libs # bind服务器端和客户端都使用到的公共库文件 bind-utils # bind客户端工具 bind-dyndb-ldap # 将解析数据存储在ldap等数据库中的组件 3、安装 yum -y install bind bind-utils 4、相关文件 $ rpm -ql bind /etc/logrotate.d/named # 日志滚动文件 /etc/named.conf # 区域主配置文件 /etc/named.rfc1912.zones # 区域配置文件(用include指令包含在主配置文件) /etc/named.iscdlv.key /etc/named.root.key /etc/rndc.conf # rndc(远程名称服务器控制器)配置文件 /etc/rndc.key # rndc加密密钥 /etc/rwtab.d/named /etc/sysconfig/named # 服务脚本的环境配置文件 /run/named/named.pid # named进程pid文件 /usr/lib/systemd/system/named-setup-rndc.service /usr/lib/systemd/system/named.service # named的服务脚本 /usr/lib/tmpfiles.d/named.conf /usr/lib64/bind /usr/libexec/generate-rndc-key.sh /usr/sbin/arpaname /usr/sbin/ddns-confgen /usr/sbin/dnssec-checkds /usr/sbin/dnssec-coverage /usr/sbin/dnssec-dsfromkey /usr/sbin/dnssec-importkey /usr/sbin/dnssec-keyfromlabel /usr/sbin/dnssec-keygen /usr/sbin/dnssec-revoke /usr/sbin/dnssec-settime /usr/sbin/dnssec-signzone /usr/sbin/dnssec-verify /usr/sbin/genrandom /usr/sbin/isc-hmac-fixup /usr/sbin/lwresd /usr/sbin/named # bind主程序,二进制文件 /usr/sbin/named-checkconf # 检查bind的配置文件语法错误 /usr/sbin/named-checkzone # 检查区域解析库语法错误 /usr/sbin/named-compilezone /usr/sbin/named-journalprint /usr/sbin/nsec3hash /usr/sbin/rndc # rndc二进制程序 /usr/sbin/rndc-confgen # rndc密钥生成工具 /var/log/named.log # bind 运行日志文件 /var/named # 解析库文件存放目录 /var/named/ZONE_NAME.zone # 区域解析文件。一台物理服务器可同时为多个区域提供解析 /var/named/data # 有rndc工具生成的DNS服务器统计数据和DNS服务器缓存数据存放目录 /var/named/dynamic /var/named/named.ca # 根区域解析文件 /var/named/named.empty /var/named/named.localhost # localhost地址解析库 /var/named/named.loopback # 本地回环地址解析库 /var/named/slaves # 从服务器从主服务器传送接收的区域解析文件存放目录 $ rpm -ql bind-utils /etc/trusted-key.key /usr/bin/dig # 最常用的DNS测试工具 /usr/bin/host # 轻量级的DNS测试工具 /usr/bin/nslookup # 交互式DNS查询工具 /usr/bin/nsupdate # 更新工具 4、dig 文档:https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_61/com.ibm.aix.cmds2/dig.htm 基本格式: dig @dns_server name type @dns_server # DNS服务器IP地址,默认使用 /etc/resolv 文件中定义的DNS服务器 name # 要查询的域名,默认的查询根 type # 查询记录类型,默认是A记录 选项: -f # 从文件中读取域名,依次查询 -t # 指定查询记录的类型 -q # 指定要查询的域名名称 -x # 反向解析 +tcp # 采用tcp协议进行查询 +trace # 追踪查询过程 +recurse # 使用递归解析 +short # 显示精简信息 +nocmd # 不显示版本命令信息 +nocomment # 不显示详细的注释信息 +time=5 # 请求超时时长,默认是5秒 +multiline # 多行显示 # 多行的形式显示SOA记录 dig @8.8.8.8 +multiline -q www.baidu.com -t SOA # 查看区域的所有正向解析记录 dig -t axfr 区域[xuejinwie.com] @DNS-serverIP # 查看区域所有反向解析记录 dig -t axfr 1.168.192.in-addr.arpa. @server-ip # 反向解析 dig -t ptr 100.25.168.192.in-addr.arpa @IP 5、host 基本格式: host [-aCdlnrsTwv] [-c class] [-N ndots] [-R number] [-t type] [-W wait] [-m flag] [-4] [-6] {name} [server] 选项: -a # 等同于-v -t ANY         -c # 为非IN数据指定查询类         -C # 比较权威名称服务器上的SOA记录         -d # 相当于-v         -l # 使用AXFR列出域中的所有主机         -i # IP6.INT反向查找         -N # 更改根查找完成之前允许的点数         -r # 禁用递归处理         -R # 指定UDP数据包的重试次数         -s # SERVFAIL响应应该停止查询         -t # 指定查询类型 host -t axfr         -T # 启用TCP/IP模式         -v # 启用详细输出         -w # 指定永远等待回复         -W # 指定等待回复的时间         -4 # 仅使用IPv4查询传输         -6 # 仅使用IPv6查询传输         -m # 设置内存调试标志(trace | record | usage) 6、whois whois xuejinwei.com #查询域名注册情况 7、nslookup 基本格式: nslookup [-option] [name | -] [server] 交互模式: server DNS_IP # 指定DNS服务器 set q=RR_TYPE # 设置查询资源记录的类型 8、 /etc/hosts:此文件早期在没有出现DNS服务器的时候,作用和DNS服务器类似,不过随着网络的发展,单个文件根本无法满足需求, 于是,此文件通常运用于本地IP解析。 /etc/resolv.conf:定义DNS服务器IP地址,本地解析域名通常使用的都是这里面定义的IP地址。 /etc/nsswitch.conf:这个文件则是来决定先要使用/etc/hosts还是/etc/resolv.conf的设置。 9、 检测主配置文件是否有语法错误 named-checkconf 检测区域解析文件是否有语法错误 named-checkzone "xuejinwei.com.zone" /var/named/xuejinwei.com.zone 10、named配置文件named.conf 注:帮助文件 man 5 named.conf options { # 全局配置段 listen-on port 53 { 127.0.0.1; }; # named进程监听的端口的IP地址,可以使用any关键字表示监听所有地址 listen-on-v6 port 53 { ::1; }; # 监听的IPv6地址和端口 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 { localhost; }; # bind内置的访问控制列表,localhost|any allow-transfer {none; }; # 是否允许来自 slave DNS 对我的整个领域数据进行传送 /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - 如果创建一个权威DNS服务器,则不需要开启 - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - 如果创建一个缓存DNS服务器,则需要开启 recursion yes|no 选项。 - 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。如果权威服务器具有公网IP地址,则需要进行查询限制。 */ recursion yes; # 是否允许别人向主机发起递归查询 //dnssec-enable yes; # DNSSEC验证DNS响应报文真实性,通常如果安全要求不是很高,建议关闭此功能 dnssec功能默认是开启状态 //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; file "named.ca"; # 指明区域文件 }; zone "xuejinwei.com." IN { # 正向解析 type master; file "xuejinwei.com.zone"; }; zone "26.18.172.in-addr.arpa" IN { # 反向解析,此处以网络地址反写并加上特定后缀的形式 type master; # 区域文件类型 master|slave|hint{提示域}|forward file "172.18.26.zone"; # 反向解析区域文件名称,通常以网络地址命名 }; include "/etc/named.rfc1912.zones"; # 包含named.rfc1912.zones配置文件 include "/etc/named.root.key"; 11、dnssec 域名系统安全扩展(Domain Name System Security Extensions)。它是对 DNS 提供给 DNS 客户端(解析器)的 DNS 数据来源进行认证,并验证不存在 性和校验数据完整性验证,但不提供或机密性和可用性。 DNS欺骗和污染 用户的在访问某一个域名时,客户端会通过递归解析的方式向本地DNS服务器发出请求,本地DNS服务器向根域名服务器以及顶级域名服务器发出请求, 从而获得域名所对应的IP地址。当有人冒充根域名服务器或者根域名服务器伪造一个响应报文发给客户端,而客户端毫无察觉,这就叫DNS欺骗。 DNSSEC技术利用密码技术可以验证响应报文是否来自真正的DNS服务器。 DNSSEC DNSSEC依靠数字签名保证DNS应答报文的真实性和完整性。权威域名服务器用自己的私有密钥对资源记录(Resource Record, RR)进行签名,解析服务 器用权威服务器的公开密钥对收到的应答信息进行验证。如果验证失败,表明这一报文可能是假冒的,或者在传输过程、缓存过程中被篡改了。 =========================================================================================================================================== 转发DNS服务器 1、nc -z -w 10 IP 端口 # 查看端口是否开放 2、firewall-cmd --zone=public --add-port=53/tcp --permanent # 开放53端口 3、firewall-cmd --list-all # 查看端口开放情况 4、named.conf options { listen-on port 53 { any; }; 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; }; # 允许谁查询 forward only; # 这个设定可以让 DNS 服务器仅进行 forward forwarders { 8.8.8.8; 8.8.8.4; }; # 指定转发DNS服务器转发目的地的DNS服务器 }; =========================================================================================================================================== 正向解析、反向解析 1、区域文件注意: 1、设定的数据要从行首开始且不能有空格符 2、"@"代表区域的意思。例如写在 www.xuejiwnei.com. 中,@ 代表xuejiwnei.com.,如果写在 named.192.168.100 中,则 @ 代表 100.168.192.in-addr.arpa.的意思 3、每次修改数据都要增加区域文件的序列号 4、区域数据库文件的属主是 root,属组是 named chown root:named xuejiwnei.com.zone chmod 640 xuejinwei.com.zone 5、反向区域文件的区域名称的是网络地址的反写格式,并以.in-addr.arpa为后缀 6、* 号表示范域名解析。示例:* IN A 172.18.26.1 7、{$TTL 600 }表示定义全局默认TTL值。TTL缓存的有效时间 {$ORIGIN xuejinwei.com.}表示定义区域名 8、除第一行外,剩余的资源记录的 IN 字段可以省略 9、解析,泛域名解析 $GENERATE 1-254 HOST$ A 1.2.3.$ *.magedu.com. IN A 5.5.5.5 magedu.com. IN A 6.6.6.6 2、正向解析文件 $TTL 600 @ IN SOA dns.xuejinwei.com. jinweiayy.gmail.com ( 2017022210 2H 10M 1W 1D ) @ IN NS dns dns IN A 118.89.242.38 @ IN MX 10 mail mail IN A 115.159.221.170 www IN A 115.159.221.170 pop IN CNAME mail ftp IN CNAME www 3、反向解析文件 (以172.18.26.0为例) $TTL 600 $PRIGIN 26.18.172.in-addr.arpa. @ IN SOA dns.xuejinwei.com. jinweiayy.gmail.com ( 2017022210 2H 10M 1W 1D ) @ IN NS dns.xuejinwei.com. 100 IN PTR dns.xuejinwei.com. 101 IN PTR www.xuejinwei.com. 102 IN PTR mail.xuejinwei.com. =========================================================================================================================================== RNDC 1、介绍 利用rnds管理DNS服务器:Remote Name Domain Controller,远程管理 BIND 的工具,默认与bind安装在同一主机,且只能通过 127.0.0.1 来连接 named 进程, 提供辅助性的管理功能。监听在 953/tcp 端口。 2、设定rndc key 命令使用格式 rndc-confgen [-a] [-b bits] [-c keyfile] [-k keyname] [-p port] [-r randomfile] [-s addr] [-t chrootdir] [-u user] rndc-confgen -s 127.0.0.1 -r /dev/urandom > /etc/rndc.conf # 生成conf文件 rndc-confgen # 更新密钥 3、建立 rndc.key 文件,复制密钥 1、将密钥字段复制到 /etc/rndc.key 2、将密钥字段和控制字段复制到 named.conf 文件内 注意: /etc/rndc.conf 文件内的密钥必须和 named.conf 和 rndc.key 的密钥一致,rndc.conf 和 rndc.key 文件不能同时存在 5、命令 rndc status # 查看DNS服务器状态 rndc stats # 记录当前DNS服务器统计数据,并写入data/目录下 rndc dumpdb # 记录当前DNS服务器缓存数据,并写入data/目录下 rndc reload # 重新载入配置文件和区域文件 rndc reload zone_name # 重新载入指定区域文件 rndc stop # 停止服务器 rndc flush # 清空所有缓存 rndc retransfer zone_name # 重新传送某个区域 rndc reconfig # 只重读配置文件并加载新增的区域 rndc querylog # 关闭或开启查询日志。客户端查询记录会在日志信息中显示 rndc trace # 打开debug模式,每次执行都增加一个debug级别。或者直接指定 rndc trace NUM notify zone_name # 重新对区域传送发送通知 =========================================================================================================================================== 主/从DNS服务器(Master/Slave DNS) 1、主DNS服务器、辅助DNS服务器 1、区域传送:辅助 DNS 服务器从主 DNS 服务器或其他辅助 DNS 服务器请求传输数据的过程。 完全区域传送:AXFR,传送区域的所有数据 增量区域传送:IXFR,传送区域改变的数据 2、一般而言,主 DNS 服务器的 bind 版本可以低于从服务器 bind 的版本 3、从服务器和主服务器都需要获得上级授权,可以利用域名提供商的管理面板去修改 DNS 服务器 IP 从而获得授权 4、主服务器的解析库内容发生变化,其序列号要递增 5、主服务器的资源记录发生变化时,有通知机制来通知从服务器进行区域传送 6、正向解析和反向解析是两个独立的系统。所以可以只搭建正向的主 DNS 服务器,或者只搭建反向的主 DNS 服务器, 甚至可以主 DNS 服务器负责正向解析,从DNS服务器负责反向解析,且两台服务器互为主从。 7、从服务器可以扮演另外一台从服务器的主服务器 8、主服务器的正向解析文件必须要有从服务器的 NS 记录及向对应的 A 记录 9、从服务器只需要提供区域配置,不需要提供区域配置文件 10、主服务器要允许从服务器传送区域文件 11、主从服务器的时间版本应该同步 12、主从复制使用TCP协议进行,客户端查询使用UDP协议或者TCP协议 2、修改主DNS服务器/etc/named.conf options { 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; }; recursion yes; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "xjwlinux.com" IN { type master; file "xjwlinux.com.zone"; allow-transfer { 127.0.0.1; 192.168.1.108; }; # 增加slave服务器的ip,安全机制,允许谁传送,127.0.0.1表示本机 }; zone "1.168.192.in-addr.arpa." IN { type master; file "192.168.1.zone"; allow-transfer { 127.0.0.1; 192.168.1.108; }; # 增加slave服务器的ip }; include "/etc/named.rfc1912.zones"; 3、设定主服务器,在区域文件中添加相应的NS记录 正向解析文件 $TTL 600 @ IN SOA dns.xjwlinux.com. jinweiayy.gmail.com ( 2017022207 2H 10M 1W 1D) @ IN NS dns.xjwlinux.com. @ IN NS dns1.xjwlinux.com. # 从服务器 dns IN A 192.168.1.107 dns1 IN A 192.168.1.108 @ IN MX 10 mail mail IN A 192.168.1.109 www IN A 192.168.1.109 ftp IN CNAME 192.168.1.109 反向解析文件 $TTL 600 @ IN SOA dns.xjwlinux.com. jinweiayy.gmail.com ( 2017022207 2H 10M 1W 1D ) @ IN NS dns.xjwlinux.com. @ IN NS dns1.xjwlinux.com. 107.1.168.192 IN PTR dns.xjwlinux.com. 108.1.168.192 IN PTR dns1.xjwlinux.com. 109 IN PTR www.xjwlinux.com. 109 IN PTR mail.xjwlinux.com. 4、从服务器配置 /etc/named.conf options { 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; }; recursion yes; allow-transfer { "none"; }; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "xjwlinux.com" IN { type slave; file "slaves/xjwlinux.com.zone"; masters { 192.168.1.107; }; }; zone "1.168.192.in-addr.arpa" IN { type slave; file "slaves/192.169.1.zone"; masters { 192.168.1.107; }; }; include "/etc/named.rfc1912.zones"; =========================================================================================================================================== bind子域授权 1、子域授权 分布式数据库存储的理念。顶级域由根域授权规划,通常情况下不会发生变化,例如 com. 顶级域(TLD),二级域的使用通常有组织或个人 向上级域名机构申请授权。例如 xuejinwei.com. 域名使用者必须向上级域名 com. 申请注册使用,即在管理 com. 这个顶级域的服务器 上添加管理 xuejinwei.com. 这个二级域DNS服务器的 NS 记录和 A 记录,也就是通常我们所说的指向下一级的 DNS 服务器的IP地址。 2、在父域的配置文件中添加: 授权的区域名称 子区域的名称服务器的FQDN,即NS记录 子区域的名称服务器IP,A记录 3、配置过程 例如:管理二级域 xjwlinux.com. 的上级 DNS 服务器授权 xixi.xjwlinux.com. 这个三级域。则添加: 配置文件: 区域解析文件: xixi IN NS dns.xixi.xjwlinux.com. dns.xixi.xjwlinux.com. IN A 192.168.1.120 4、配置区域转发 1、解析某个本主机不负责的区域内的名称时不转发给根,而是转给指定主机。 2、全部转发(全局转发) 注:转发非本机负责解析的所有请求。 opotions { forward only|first; # only,只转发,如果DNS服务器不应答也不去找根;first,先转发,如果DNS服务器不应答就去找根 only只进行递归操作,first还会帮客户端进行迭代查询 forwarders { DNS_SERCVER; }; }; 3、区域转发 注:转发特定的区域 zone "特定区域" IN { type forward; forward only|first; forwarders { IP; }; }; 注意: 1.允许使用转发的前提:本机要在对方允许的递归主机名单 2.当同时打开全局转发和区域转发后,区域转发的优先级更高,当接受到请求查询时,如果查询的域是本地指定的 准发的域,则进行区域转发。 =========================================================================================================================================== 安全控制 1、ACL:访问控制列表 BIND支持使用访问控制列表,只有定义后才能使用。将一个多个地址归并为一个集合,并通过统一的名称调用。ACL列表只能先定义后 使用,通常定义在配置文件最顶部 options 前面。 1、自定义ACL列表示例: acl ACL_NAME { ip; ip; 172.18.26.0/16; # 定义一个网络 }; 2、BIND有四个内置的访问控制列表 any none local # 本机 localnet # 本机所在的网络 2、控制配置段(这些控制字段可以调用ACL的定义) allow-transfer { server_ip|none|any }; # 定义允许谁做传送区域文件,默认是any。如果定义,则此选项为白名单。 allow-query { server_ip|none|any }; # 定义谁可以查询,默认是any。如果定义,则此选项为白名单。此配置可以配置在options配置段, 也可以配置在zone配置段中 allow-recursion { server_ip }; # 定义允许递归白名单 allow-update { none; }; # 定义是否允许动态更新区域数据文件的白名单,DDNS:Dynamic DNS 动态DNS {允许DNS服务器被其他外部的服务器更改资源记录} 指定的zone语句块中:Allow-update {any;}; chmod 770 /var/named setsebool -P named_write_master_zones on nsupdate >server 127.0.0.1 >zone magedu.com >update add ftp.magedu.com 88888 IN A 8.8.8.8 # 添加一个A记录 >send # 发送 >update delete www.magedu.com A # 动态删除一个记录 >send 测试:dig ftp.magedu.com @127.0.0.1 ll /var/named/magedu.com.zone.jnl cat /var/named/magedu.com.zone =========================================================================================================================================== View功能 DNS:view功能:不同的客户端发来请求时答复给给不同的解析结果 1、注意 1.一旦启用 view,则所有的 zone 必须放在 view 中,包括根域 2.view 从配置文件中的定义从上往下匹配 3.一个bind服务器可以定义多个view,每个view中可定义一个或多个zone,在多个view中可定义相同的zone,相同的zone使用不同的区域解析文件, 从而达到返回客户端不同结果的目的。 2、使用规则 acl internal { 172.18.26.0/16; }; acl external { 172.18.23.0/16; }; view view_name { match-clients { internal }; # 匹配 ACL 名称为 internal 的 ACL 列表 zone "xjwlinux.com." IN { type master; file "xjwlinux.com.internal"; }; }; view view_name { match-clients { external }; zone "xjwlinux.com." IN { type master; file "xjwlinux.com.external"; } } view view_name { match-clients { any; }; zone "xjwlinux.com." IN { type master; file "xjwlinux.com.external"; }; }; 3、内容分发 内容分发网络(Content delivery network或Content distribution network,缩写:CDN)是指一种通过互联网互相连接的电脑网络系统,利用最靠 近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给 用户。将内容缓存到离用户更近的敌方的服务器上,使得用户更快的访问请求资源。 蓝汛、网宿、帝联 CDN服务商 4、智能DNS 自动判断访问者的IP地址,使得网通用户能够返回网通服务器地址,电信用户能够返回电信服务器地址。 =========================================================================================================================================== 编译安装bind bind官方地址:https://www.isc.org/downloads/bind/ bind官方管理手册:https://ftp.isc.org/isc/bind9/cur/9.11/doc/arm/Bv9ARM.html 1、创建系统用户 groupadd -r -g 53 named useradd -u 53 -g named named 系统脚本: /usr/sbin/groupadd -g 25 -f -r named /usr/sbin/useradd -u 25 -r -N -M -g named -s /sbin/nologin -d /var/named -c Named named 2、指定编译参数 ./configure --prefix=/usr/local/named9 --sysconfdir=/etc/named/ --enable-threads --disable-ipv6 --disable-chroot 3、提供配置文件服务脚本等后续步骤 1.导出二进制程序 vim /etc/profile.d/named.sh export PATH=/usr/local/named9/bin:/usr/local/named9/sbin:$PATH 2.导出头文件 ln -sv /usr/local/named9/include /usr/include/named 3.导出man文档 vim /etc/man_db.conf MANDATORY_MANPATH /usr/local/named9/share/man 4.提供配置文件 vim /etc/named/named.conf options { directory "/var/named"; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa." IN { type master; file "named.localhost"; allow-update { none; }; }; 5.提供根域解析文件 dig -t NS . @172.18.0.1 > /var/named/named.ca 6.提供本地解析区域文件及本地反向解析区域文件并修改权限 chmod 640 * chown :named * 7.启动服务 named -u named 8.使用rndc工具 =========================================================================================================================================== 性能测试 1、下载bind https://www.isc.org/downloads/# 2、编译压测工具 cd /root/bind-9.9.9-P6/contrib/queryperf # 压力测试工具源码目录 ./configure make cp queryperf /usr/bin/ 6、querypert -h # 查看帮助 打开naned的日志功能,比对性能测试结果 7、测试 提供测试文本: vim test.dns mail.xjwlinux.com A dns3.xjwlinux.com NS mail.xjwlinux.com A dns3.xjwlinux.com NS .... .... .... 开始测试: querypert -d test.DNS -s server_ip ===========================================================================================================================================