目录
一、背景
二、dns简介
1、dns服务器类型
1、缓存域名服务器
2、主域名服务器
3、从域名服务器
2、dns解析过程
1、递归查询
2、迭代查询:
3、dns服务器类型
1、根域名服务器
2、顶级域名服务器
顶级域名可分为两类
顶级域名服务器的重要性体现在一下几个方面
3、权威域名服务器
权威域名服务器的核心职责主要包括
在配置和管理权威域名服务器时,需要考虑几个关键因素
4、本地域名服务器
本地域名服务器的主要功能包括
为了充分发挥本地域名服务器的性能,可以采取一下优化措施:
4、dns记录类型
A记录
CNAME记录
mx记录
其他常见记录类型
5、dns安全与优化
dns缓存污染
6、dnssec
7、dns负载均衡
8、DNS解析流程示例
三、bind服务
1、简介
2、bind服务中三个关键文件
/etc/named.conf(服务的主/核心配置文件)
/etc/named.rfc1912.zones(区域设置文件)
/var/named(数据配置文件目录)
3、主配置文件详细解析
主配置文件结构
访问控制
其他设置
4、SOA记录参数解释
5、配置文件验证命令
named-checkconf
named-checkzone
三、搭建dns服务器
1、使用到的服务器
2、主dns服务器搭建
1、配置静态ip地址(防止自动分配地址导致客户端找不到dns服务器)
2、安装bind
3、修改配置文件
4、新建正向区域配置文件
5、新建反向区域配置文件
6、重启named服务使其生效
7、修改网卡加入dns
8、在客户端进行测试
9、从服务器搭建
10、修改从服务器主配置文件
11、启动named服务
12、查看主域名服务器同步过来的文件
13、验证
四、部署过程中遇到的问题
1、问题1
2、问题2
一、背景
在搭建内网邮箱服务时,需要请求dns服务器,解析与反向解析域名,为了避免向服务商租用域名带来的费用,计划在内网搭建一个dns域名服务器,仅实现权威域的解析,不进行递归或迭代解析,为内网邮箱提供域名解析服务。
二、dns简介
1、dns服务器类型
1、缓存域名服务器
只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定其他dns服务器作为解析来源。
2、主域名服务器
管理和维护所负责解析的域内解析库的服务器
3、从域名服务器
从主服务器或从服务器“复制”(区域传输)解析库副本
序列号:解析库版本号,主服务器解析库变化时,序列递增
2、dns解析过程
1、递归查询
在dns解析的过程中,递归查询是一种重要的查询方式。这种方式主要用于客户端(如用户的计算机)向本地dns服务器发起的查询请求。递归查询的核心特点是客户端只需要发出一次查询请求,随后的所有查询工作都有dns服务器代为完成。
递归查询的过程可以概括为一下几个步骤:
1)、客户端发起请求:用户在浏览器中输入网址,操作系统首先检查本地缓存和hosts文件。如果未能找到匹配项,他会向本地服务器发送查询请求。
2)、本地dns服务器查询:本地dns服务器接收到请求后,首先检查其缓存。如果缓存中有相应记录,则直接返回结果。若缓存中没有相应信息,服务器以dns客户端的身份继续向上级dns服务器发起查询。
3)、向上级dns服务器查询:本地dns服务器会逐步向上级dns服务器发起查询,查询顺序通常为:根域名服务器>顶级域名服务器>权威域名服务器。
4)、获取最终结果:权威域名服务器返回正确的ip地址给本地dns服务器。
5)、返回结果给客户端:本地dns服务器将最终返回给客户端,同时将查询结果缓存起来,供后续查询使用。
值得注意的是,虽然递归查询在整个dns解析过程中占有重要位置,但在实际应用中,为了提高效率和较少dns服务器负担,许多dns服务器采用了混合策略。例如,有些dns服务器可能会在达到一定查询深度后切换到迭代查询模式。这种灵活性是的dns系统能够在不同的网络环境中保持搞笑的动作。
2、迭代查询:
在dns解析过程中,迭代查询是一种与递归查询并存的重要查询方式。与递归查询不同,迭代查询采取了一种更为灵活和搞笑的方法来获取域名对应的ip地址。
迭代查询的核心思想是逐级查询。在这个过程中,dns服务器并不会全程参与查询,而是仅负责提供下一个查询目标的信息。这种方法显著降低了单个dns服务器的负载,特别适合处理大规模的查询请求。
迭代查询的工作流程如下:
1)、客户端向本地dns服务器发起查询请求。
2)、如果本地dns服务器无法直接解析域名,它会向根域名服务器发起查询。
3)、根域名服务器不会直接返回ip地址,而是提供下一个级别的域名服务器(通常是顶级域名服务器)的ip地址。
4)、本地dns服务器根据根域名服务器提供的信息,向顶级域名服务器发起查询。
5)、顶级域名服务器同样不会直接返回ip地址,而是提供权威域名服务器的ip地址。
6)、最终,本地dns服务器从权威域名服务器获取到目的ip地址,并将其返回给客户端。
迭代查询的主要优势在于能够有效减轻上级dns服务器的压力。相比递归查询。迭代查询不需要上级服务器全程参与查询过程,只需提供下一步查询的方向。这大大提高了整个dns系统的整体性能和稳定性。
然而,迭代查询也存在一些局限性:
1)、查询过程较为复杂:需要多次交互才能获得最终结果。
2)、查询速度相对较慢:特别是对跨地域的查询,可能需要经理更多的dns服务器跳转。
在实际应用中,迭代查询和递归查询常常结合使用,以平衡查询效率和系统负载。例如,对于本地dns服务器,它可能会常用域名采用递归查询以提高响应速度,而对于不常用的域名则采用迭代查询以降低系统负载。
3、dns服务器类型
1、根域名服务器
在dns系统的金字塔结构中,根域名服务器无疑是最顶端的存在。作为整个域名解析过程的起点,他们承担着至关重要的角色。
根域名服务器的主要职责是存储和提供顶级域名(TLD)的dns信息。这些服务器并不直接存储所有互联网域名的具体信息,而是仅存储顶级域名的dns服务器地址。当用户尝试访问一个网站时,本地dns服务器会首先向根服务器查询顶级域名的dns服务器地址,然后一次向下查询,最终获取目标域名对应的ip地址。
全球范围内共有13组根服务器,分别标记为A至M。值得注意的是,这里的13并不代表只有13台服务器。实际上,每组根服务器都包含多个实际服务器,形成一个分布式的网络。这种设计旨在提高系统的雯儿定性和容错性。
2、顶级域名服务器
在dns系统的层级结构中,顶级域名服务器帮沿着承上启下的关键角色。作为连接根域名服务器和权威域名服务器的纽带,它们负责管理和解析顶级域名下的所有二级域名。
顶级域名服务器主要负责管理特定域名下的所有二级域名。当本地dns服务器无法直接接续出域名对应的ip地址时,他会像dns服务器查询。根dns服务器不直接解析域名,而是指向负责该顶级域名的顶级域名服务器。顶级域名服务器随后会指向该域名的权威dns服务器的地址。
顶级域名可分为两类
通用顶级域名:如com\org\net等,适用于各类组织和个人。
国家代码顶级域名:如cn\uk\jp等,专用于特定国家或地区。
这两类顶级域名在管理有明显区别:
gtld:有icann授权给不同的组织管理
cctld:通常由各国的nic(网络信息中心)负责管理
顶级域名服务器的重要性体现在一下几个方面
互联网基础设置:顶级域名服务器时互联网dns查询过程中的关键组成部分,确保域名可以被正确解析到对应的ip地址。
全球分布:为了提高解析效率和确保服务的稳定性,顶级域名服务器通常在全球多个地点部署。
安全性:顶级域名服务器的安全性对整个互联网的稳定运行至关重要。因此,他们通常会采取多种安全措施来防止dns攻击,如dns欺骗、ddos攻击等。
值得注意的是,顶级域名服务器的管理权分配反映了互联网治理的全球化与本土化并重的特点。例如,com、net等Gtld由美国的versign公司管理,而cn等cctld则有中国互联网网络信息中心cnnic管理。这种管理模式既保证了全球互联网的一致性,有尊重了各国的特殊需求和文化特点。
3、权威域名服务器
在dns系统的层级结构中,权威域名服务器扮演者至关重要的角色。作为特定域名的最终权威管理者,他们负责存储和提供该域名下所有子域名的dns记录。这些记录包括但不限于主机记录(A记录)、邮件交换记录(mx记录)和别名记录(cname记录)。
权威域名服务器的核心职责主要包括
存储和管理zone文件:zone文件是权威域名服务器的核心,包含了特定域名及其子域名的所有dns记录。这些记录定义了域名与ip地址之间的映射关系,是实现域名解析的基础。
提供权威解析:当其他dns服务器或客户端需要查询特定域名的dns记录时,权威域名服务器会提供最准确、最权威的答案。这种权威性确保了互联网上域名解析的准确性和一致性。
维护dns记录的完整性和一致性:权威域名服务器需要定期更新和同步dns记录,切薄所有相关方都能获取到最新的信息。这涉及到复杂的同步机制和版本控制,以防止数据冲突和不一致。
为了提高性能和可靠性,权威域名服务器通常采用分布式架构。一个域名通常会有多个权威服务器,他们分布在不同的地理位置,并且互相之间实时同步dns记录。这种设计不仅提高了系统的可用性,还能有效减少查询延迟,提升整体性能。
在配置和管理权威域名服务器时,需要考虑几个关键因素
选择合适的dns服务器软件:常见的选择包括bind、powerdns和unbound等。这些软件各有特点,可以根据具体需求和技术背景进行选择。
何利规划zone文件结构:zone文件应该清晰、有序,便于管理和维护。合理的规划可以提高dns查询的效率,减少潜在错误。
设置合适的dns记录生存时间(TTL):ttl值决定了dns记录在缓存中的保留时间。设置果断会导致频繁查询,增加服务器负载;设置过长则可能导致新纪录不能及时传播。需要根据具体情况权衡利弊。
加强安全防护:权威域名服务器时dns攻击的主要目标,需要采取多重安全措施,如启用防火墙、定期更新安全补丁、配置安全策略等。
监控和日志分析:持续监控服务器性能和查询统计,可以帮助及时发现潜在问题,优化服务器配置。同时,定期分析日志文件可以揭示攻击行为和异常活动,提高系统的安全性。
通过精心配置和管理,权威域名服务器可以为用户提供快速、稳定和安全的域名解析服务,成为整个dns生态系统中不可或缺的支柱。
4、本地域名服务器
在dns系统的层级结构中,本地域名服务器扮演着至关重要的角色。作为连接用户和全球dns基础设施的桥梁,它不仅提高了域名解析的效率,还增强了网络的整体性能和安全性。
本地域名服务器的主要功能包括
缓存功能:这是本地域名服务器最核心的功能之一。它会将近期查询过的域名-ip地址映射关系存储在本地缓存中。当用户再次请求同一域名时,服务器可以直接从缓存中返回结果,无需重新发起完整的dns查询过程。这种机制显著提高了域名解析的速度,减少了网络延迟。
负载均衡:通过合理配置,本地域名服务器可以实现负载均衡功能。它可以根据域名的访问频率和网络状况,将请求均匀地分配给多个后端服务器。这种智能分配不仅可以提高服务器的响应速度,还能有效提升整体的服务质量。
为了充分发挥本地域名服务器的性能,可以采取一下优化措施:
何利设置缓存过期时间(TTL):ttl值决定了缓存记录的有效期限。设置较长的ttl可以减少对外部dns服务器的查询次数,提高解析速度。然而,过长的ttl可能导致混村中的信息过时。因此,需要根据域名的更新频率和业务需求,合理设置ttl值。
启用dns与解析(dns prefetching):这是一种主动优化技术,通过预先解析可能出现的域名,减少用户的等待时间。例如,在网页中嵌入预解析指令,可以提前获取链接页面的dns解析结果,加快页面的加载速度。
使用分布式部署:在大型网络环境中,可以将本地dns服务器部署在多个地理位置。这种分布式架构不仅提高了用户访问的速度,还能增强系统的可用性和容错能力。
启用dnssec:虽然不是直接提高解析效率的技术,但dnssec可以增强dns查询的安全性,防止中间人攻击和dns缓存中毒等问题。间接地,这也提高了dns服务的整体质量和可靠性。
通过这些技术和策略的应用,本地域名服务器能在保障安全的同时,大幅提升dns查询的效率和用户体验。
4、dns记录类型
A记录
在dns系统中,A记录是一种基本且常用的记录类型。它用于将域名映射到ipv4地址,从而实现从易记的域名到实际网络位置的转换。A记录的基本格式包括三个关键元素:主机名、ttl值和ip地址。
设置A记录时,管理员需要在dns管理界面中指定这些参数。值得注意的是,A记录的ttl值决定了记录在dns缓存中的存活时间,合理设置ttl可以平衡解析速度和灵活性。
A记录的一个重要应用场景是在负载均衡中。通过为统一域名设置多个A记录,可以实现简单的负载分发。在这种情况下,dns服务器会在相应中随机返回不同的ip地址,从而将流量分散到多个服务器上。这种方法虽然简单,但对于效性网站和初步实现负载均衡的需求来说,是一个经济有效的解决方案。
CNAME记录
在dns系统中,cname记录时一种特殊的记录类型,用于将一个域名别名指向另一个标准域名。与直接指向ip地址的A记录不同,cname记录提供了更大的灵活性和便利性。通过使用cname记录,管理员可以在不修改多个A记录的情况下轻松改变域名的指向,特别是在需要同时管理多个相关域名时,这种方法可以显著提高效率并降低出错风险。cname记录常用于cdn集成、企业邮箱配置和全局流量管理等场景,为dns管理带来了更高的灵活性和可扩展性。
mx记录
在dns系统中,mx记录是一种专门用于邮件服务的dns记录类型。它用于指定接收电子邮件的邮件服务器,并将邮件按照有优先级顺序路由到相应的服务器。mx记录的核心功能是实现基于smtp协议的邮件路由,确保电子邮件能够准确、高效地送达目的地。
mx记录的一个关键特性是优先级设置。通过为多个mx记录分配不同的优先级数值,可以实现邮件流量的灵活分配和故障转移。这种机制不仅提高了邮件系统的可靠性,还为企业提供了更精细的邮件管理选项。例如,可以将高优先级的mx记录指向主邮件服务器,低优先级的mx记录指向备份服务器,以确保在主服务器发生故障时,邮件仍能顺利送达。
其他常见记录类型
在dns系统中,除了前文提到的A记录、cname记录和mx记录外,还有集中常见的记录类型值得一提:
ns记录:用于指定负责解析特定域名的权威dns服务器。它在域名委托给其他dns服务商时尤为重要,确保了域名解析的正确性和权威性。
txt记录:允许在dns区域中存储任意文本信息。它常用于spf记录(sender policy framework)以防止邮件伪造,或者用于验证网站所有权(如google search console验证)。txt记录的灵活性十七成为传递额外信息的理想选项。
ptr记录:用于反向dns解析,即将ip地址映射回域名。这对于邮件服务器尤为重要,因为许多邮件系统会执行反向dns查询已验证发件人的身份,从而减少垃圾邮件和钓鱼攻击的风险。
这些记录类型的组合使用,为dns系统提供了强大的功能和灵活性,满足了各种复杂的网络需求。
DNS资源记录类型:
记录类型 | 编码 | 用途 |
A | 1 | 将域名映射到ipv4地址 |
NA | 2 | 指定负责该区域的名称服务器 |
CNAME | 5 | 将一个域名别名指向另一个真实的域名 |
SOA | 6 | 表示区域的起始授权信息,包含管理信息(如序列号、刷新时间等) |
PTR | 12 | 用于反向解析,是A记录的逆向记录,将ip地址映射到域名 |
MX | 15 | 指定处理邮件的邮件服务器 |
TXT | 16 | 存储任意文本信息,如spf记录或验证信息 |
AAAA | 28 | 将域名映射到ipv6地址 |
SRV | 33 | 定义提供特定服务的主机及其端口 |
DS | 43 | 与dnssec相关,提供子域的信任链 |
DNSKEY | 48 | 用于dnssec,包含公钥信息 |
NSEC | 47 | 用于dnssec,提供域名的存在性证明 |
NSEC3 | 50 | 一种改进的nsec,增强了安全性 |
5、dns安全与优化
dns缓存污染
dns缓存污染是一种严重的网络安全威胁,通过注入虚假dns记录来舞蹈用户访问恶意站点。攻击者利用dns查询的脆弱性,抢先返回伪造应答包,污染缓存服务器。这种哦那估计可能到中用户隐私泄露、敏感数据盗取,甚至引发更大规模的网络攻击。为防范dns缓存污染,可采取以下措施:
- 实施dnssec;
- 使用加密dns查询(如doh或dot);
- 启用edns client subnet选项;
- 定期清理dns缓存;
这些措施能显著提高dns查询的安全性和准确性,有效抵御dns缓存污染攻击。
6、dnssec
dnssec(域名系统安全扩展)是解决dns安全问题的一项关键技术。它通过在dns记录中添加数字签名来验证数据的完整性和来源,有效防止中间人攻击和dnsdns缓存污染。dnssec引入了三种新的dns记录类型:
-
- rrsig:存储加密签名
- dnskey:包含公钥
- ds:用于上级区域验证
实施dnssec设计多个步骤,包括生成密钥对、创建签名记录、配置dns服务器,并在注册商处激活。尽管部署过程相对复杂,但dnssec显著提高了dns系统的安全性和可信度,为用户提供了更可靠的网络体验。
7、dns负载均衡
在dns系统的基础上,dns负载均衡通过巧妙地配置实现了网络访问的优化。这种方法不仅提高了网站的访问速度,还增强了系统的可靠性。器核心原理是在dns服务器中为同意主机名配置多个ip地址,并采用轮询或其他智能算法返回不同的解析结果。
这种机制有效地将客户端的访问请求分散到不同的服务器上,从而达到负载均衡的目的。通过何利配置dns记录的生存时间TTL,管理员可以在灵活性和稳定性之间取得平衡,确保系统能够及时适应变化的网络环境。这种方法不仅简单易行,还能充分利用现有的dns基础设置,为网站提供一种低成本、高效率的负载均衡方案。
8、DNS解析流程示例
以访问www.example.com为例
- 用户请求:设备向本地DNS服务器查询www.example.com的IP。
- 本地DNS查询:
- 若缓存中有记录,直接返回IP;否则开始递归查询。
- 根服务器指引:本地DNS询问根服务器,根返回.com顶级域服务器的地址。
- 顶级域服务器指引:本地DNS询问.com服务器,获取example.com的权威服务器地址。
- 权威服务器响应:本地DNS向example.com的权威服务器查询www子域,得到IP地址。
- 结果返回与缓存:本地DNS将IP返回用户设备,并缓存该记录。
三、bind服务
1、简介
Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件。Bind原本是美国DARPA资助伯克利大学(Berkeley)开设的一个研究生课题,后来经过多年的变化发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上半数以上的DNS服务器有都是用Bind来架设的。
2、bind服务中三个关键文件
/etc/named.conf(服务的主/核心配置文件)
作用:这是bind(berkeley internet name domain)服务的核心配置文件,用于定义全局设置和区域设置。
内容:它包含了服务器的运行模式、安全策略、日志记录、访问控制以及区域文件的定义等关键信息。通过编辑此文件,管理员可以配置bind服务器以监听特定的ip地址和端口,允许或拒绝特定客户端的查询请求,以及设置其他全局参数。
/etc/named.rfc1912.zones(区域设置文件)
作用:管理员可以在此文件中添加正向解析和反向解析的区域配置,以便bind服务器能够正确地解析域名和ip地址。该文件类似于目录,可以快速查找到各域名与ip地址的映射文件。
内容:该文件用于保存域名和IP地址对应关系的配置关系,但并不直接包含具体的域名和ip地址数据。它指定了域名与ip地址解析规则保存的文件位置以及服务类型等内容。
/var/named(数据配置文件目录)
作用:此目录用于存放实际的域名和ip地址对应关系的数据文件。这些数据文件通常具有“.zone“或”.db”后缀,以区域文件的形式存在,包含了具体的域名和ip地址映射信息。bind服务器会根据区域配置文件中的指示来读取这些数据文件,并提供dns解析服务。
内容:该目录下存放的文件包含实际的dns记录,如A、CNAME、PTR等记录。
总结:各文件关系与协作
文件 | 核心作用 | 依赖关系 |
named-chroot.files | 定义 chroot 环境所需文件 | 影响 BIND 在隔离环境中的运行 |
named.conf | 主配置文件,全局和区域设置 | 包含其他配置文件(如 named.rfc1912.zones) |
named.rfc1912.zones | 预配置私有 IP 反向解析区域 | 被 named.conf 引用 |
named.root.key | 根区域 DNSSEC 信任锚 | 被 named.conf 引用 |
3、主配置文件详细解析
主配置文件共4部分组成, 下面是对 BIND 主配置文件 /etc/named.conf 的分析,主要包含其结构、常用指令和配置选项的详细说明。
options:用于定义全局配置选项,影响所有区域。
zone:定义特定的区域,包括其名称、类型(master/slave)、数据文件等
logging:设置日志记录的方式和存储位置,方便进行故障排查和监控。
include:可以引用其他文件的配置内容,作为/etc/named.conf文件的补充,有助于简化配置文件的管理
主配置文件结构
1、全局选项
设置 DNS 服务器的全局行为,比如默认的目录、查询权限等。
options {
directory "/var/named"; // DNS数据文件存储的默认目录
allow-query { any; }; // 允许所有用户进行查询
listen-on port 53 { any; }; // 监听所有地址的53端口
recursion no; // 禁止递归查询(可选),删除则为迭代查询
};
2、区域定义
定义 DNS 区域(zone),指定该区域的类型(主、从)及其对应的数据文件。
zone "example.com" IN {
type master; // 主区域
file "example.com.zone"; // 区域数据文件
};
zone "26.168.192.in-addr.arpa" IN {
type master; // 反向解析区域
file "reverse.openlab.com"; // 反向区域数据文件
};
3、日志设置
指定日志记录选项,用于调试和监控。
logging { //指定日志记录的分类及其存储目录
channel default_log { // 设置日志输出方式
file "/var/log/named/named.log"; // 日志文件保存路径
severity info; // 日志级别
print-time yes; // 打印时间戳
};
category default { default_log; }; // 将所有日志记录到 default_log
};
4、内容补充
可以引用其他文件的配置内容,作为/etc/named.conf文件的补充,有助于简化配置文件的管理
include "/etc/named.rfc1912.zones"; # 表示当前DNS服务器的区域配置文件位置
include "/etc/named.root.key"; # 密钥存储文件位置
5、其余常用参数
options {
listen-on-v6 port 53 { ::1; };# 重要,监听允许访问的ipV6与端口
dump-file "/var/named/data/cache_dump.db"; # 默认缓存文件位置,默认即可
statistics-file "/var/named/data/named_stats.txt"; # DNS状态文件保存文件,默认即可
memstatistics-file "/var/named/data/named_mem_stats.txt"; # 内存状态文件保存文件,默认即可
secroots-file "/var/named/data/named.secroots"; # 安全根服务器保存位置,默认即可
recursing-file "/var/named/data/named.recursing"; # 递归查询文件保存位置,默认即可
dnssec-validation yes; # 开启加密,默认即可
managed-keys-directory "/var/named/dynamic"; # 指定目录中文件保存位置,用于管理密钥(DNSSEC)
pid-file "/run/named/named.pid"; # pid文件保存路径,默认即可
session-keyfile "/run/named/session.key";}; # 会话密钥存储路径,自动生成,默认即可
访问控制
配置谁可以访问 DNS 服务器,设置 ACL(访问控制列表),控制不同 IP 地址或子网的访问权限。
acl "trusted" {
192.168.26.0/24; // 信任的网络
10.0.0.0/8; // 另外的信任网络
};
options {
allow-query { trusted; }; // 只允许受信任的网络查询
};
其他设置
可以添加其他特定的配置选项,例如缓存、转发设置等。
forwarders {
8.8.8.8; // Google Public DNS
8.8.4.4; // Google Public DNS
};
注:forwarders:指定转发 DNS 查询的服务器,通常用于没有完整的 DNS 数据库
正向解析资源文件
$TTL 1D # 设置生存周期时间,为1天,$表示宏定义
@ IN SOA @ rname.invalid. (
# @ :表示zone域,现在表示域名,如baidu.com
# IN SOA : 授权信息开始
# rname.invalid. : 域名管理员的邮箱(不能使用@,使用点替代邮件分隔符@)
0 ; serial # 序列号,10位以内的整数
1D ; refresh # 更新频率为1天
1H ; retry # 失败重试时间为1小时
1W ; expire # 失效时间1周
3H ) ; minimum # 缓存时间为3小时
IN NS ns.域名.
ns IN A 域名解析服务器IP地址
www IN A 域名解析服务器IP地址
bbs IN A 域名解析服务器IP地址
mail IN A 域名解析服务器IP地址
# A:表示IPv4地址, AAAA表示IPv6地址
反向解析资源文件
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
; Name Server Record
IN NS ns.域名. ; 域名服务器记录,注意结尾的点
; Name Server A Record
ns IN A 域名解析服务器的IP地址
; PTR Record for Reverse Lookup
IP地址 PTR 域名. ; PTR 指针记录,用于反向解析
4、SOA记录参数解释
序列号(Serial namber) :每次修改区域记录时,都会增加序列号的值,它是辅授权DNS服务器更新数据的依据
刷新时间(refresh) :辅授权DNS服务器根据此时间间隔周期性地检查主授权DNS服务器的序列号是否改变,若有改变则更新自己的区域记录(以秒为单位)
重试延时(Retry):当辅授权DNS服务器因与主授权DNS无法连通而导致更新区域记录信息失败后,要等待多长时间会再次请求刷新区域记录(以秒为单位)
失效时间(Expire):若辅授权DNS服务器超过该时间仍无法与主授权DNS连通,则不再尝试,且辅授权DS服务器不再响应客户端要求域名解析的请求(以秒为单位)
无效缓存时间(Minimum):无效解析记录(查找名称且名称不存在的资源记录)在缓存中持续的时间(以秒为单位)
5、配置文件验证命令
named-checkconf和named-checkzone是用于dns配置文件验证的两个命令,通常在使用bind作为dns服务器是使用。
named-checkconf
作用:用于检查bind配置文件的语法,确保配置文件没有错误。这对于避免再启动或重新加载dns服务器时出现故障非常重要。
named-checkconf /etc/named.conf
如果配置文件没有错误,命令将不返回任何内容,如果语法有错误,它将显示相关的错误信息和行号。
named-checkzone
作用:用于检查特定区域(zone)的dns区域文件的语法。它确保区域文件的格式正确,并可以识别潜在的问题。
named-checkzone example.com /var/named/example.com.zone
在这个例子中,example.com是要检查的区域名,而/var/named/example.com.zone是该区域的区域文件。如果没有错误,命令将返回“ok“。如果有错误,将显示错误信息和行号。
三、搭建dns服务器
1、使用到的服务器
192.168.48.128 | dns主服务器 |
192.168.48.129 | dns从服务器 |
192.168.48.132 | dns客户端/邮件服务器 |
2、主dns服务器搭建
1、配置静态ip地址(防止自动分配地址导致客户端找不到dns服务器)
vim /etc/sysconfig/network-scripts/ifcfg-ens160
BOOTPROTO=static
IPADDR=192.168.48.128
NETMASK=255.255.255.0
注:如此方法配置完两台dns服务器
2、安装bind
yum -y install bind
3、修改配置文件
cp -p /etc/named.conf /etc/named.conf.bak
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
vim /etc/named.conf
options {
listen-on port 53 { any; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
recursion no;
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "9527.com" IN {
type master;
file "9527.com.zone";
};
zone "48.168.192.in-addr.arpa" IN {
type master;
file "192.168.48.zone";
};
include "/etc/named.rfc1912.zones";
注:保存named.conf文件后,使用named-checkconf /etc/named.conf检查配置文件合法性。如果没有报错说明我们的配置文件修改无问题。
4、新建正向区域配置文件
vim /var/named/9527.com.zone
$TTL 1D
@ IN SOA 9527.com. root.9527.com. (
0 ;serial #更新序列号
1D ;refresh #更新时间
1H ;retry #重试延时
1W ;expire #失效时间
3H) ;minimum #无效解析记录的缓存时间
@ IN NS ns1.9527.com.
IN MX 10 mail.9527.com.
ns1 IN A 192.168.48.128
mail IN A 192.168.48.132
注:配置完域配置文件后,使用named-checkzone 9527.com 9527.com.zone命令做验证。ok代表正向区域配置文件没有错误。
5、新建反向区域配置文件
vim /var/named/192.168.48.zone
$TTL 1D
@ IN SOA 9527.com. root.9527.com. (
0 ;serial
1D ;refresh
1H ;retry
1W ;expire
3H) ;minimum
@ IN NS ns1.9527.com.
128 IN PTR ns1
132 IN PTR mail.9527.com.
注:配置完反向区域配置文件后,使用named-checkzone 48.168.192.in-addr.arpa 192.168.48.zone命令验证合法性。ok代表文件没有问题。
6、重启named服务使其生效
systemctl restart named
7、修改网卡加入dns
vim /etc/sysconfig/network-scripts/ifcfg-ens160
加入下面的两个ip
DNS1=192.168.48.128
DNS2=192.168.48.129
重启网卡:
systemctl restart NetworkManager
查看本机的dns的ip地址:
cat /etc/resolv.conf
注:由于systemd-resolved服务可能在第一次解析失败之后不会自动切换到下一个服务器。所以需要我们手动删除/etc/resolv.conf文件中多余的dns服务器,且为了不让NetworkManager服务对其进行自动管理,编辑/etc/NetworkManager/NetworkManager.conf文件,添加dns=none参数。重启网络服务:systemctl restart NetworkManager。
8、在客户端进行测试
9、从服务器搭建
yum -y install bind
10、修改从服务器主配置文件
options {
listen-on port 53 { any; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
recursion no;
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "9527.com" IN {
type slave;
file "slaves/9527.com.zone";
masters { 192.168.48.128; };
};
zone "48.168.192.in-addr.arpa" IN {
type slave;
file "slaves/192.168.48.zone";
masters { 192.168.48.128; };
};
include "/etc/named.rfc1912.zones";
注:检查配置文件,使用named-checkconf /etc/named.conf
11、启动named服务
systemctl restart named
12、查看主域名服务器同步过来的文件
cd /var/named/slaves;ll
13、验证
正向解析:
反向解析:
四、部署过程中遇到的问题
1、问题1
问:ping 域名时,为什么bind日志中会输出’域名.localdomain’拒绝解析的词条?
答:这种情况通常发生在客户端配置中,比如dhcp或系统设置中制定了搜索域,导致系统在解析不完全合格的域名时自动追加后缀。由于客户端上/etc/resolv.conf中设置了search localdomain导致系统自动追加后缀。
2、问题2
问:/etc/resolv.conf功能及参数详解?
答:此文件时linux系统中dns客户端配置文件,用于定义系统进行域名解析时的行为,包括dns服务器地址、搜索域、超时设置等。
1、nameserver
作用:指定dns服务器的ip地址
语法:nameserver 192.168.48.128
规则:
最多可配置3个dns服务器,按顺序尝试查询。
若第一个无响应,超时后(默认5秒)尝试下一个。
nameserver 192.168.1.1表示使用本地路由器的dns服务。
2、search
作用:定义域名搜索范围。当输入非完全限定域名(如server时),系统会自动尝试附加搜索域。
语法:search example.com sub.example.com
示例:输入ping webserver>自动尝试解析webserver.example.com和webserver.sub.example.com。
注:搜索域最多可配置6个,总长度不超过256个字符。
3、domain
作用:指定本地主机的默认域名(通常域search冲突,二者只能选其一)。
语法:domain example.com
示例:主机名为myhost>完全限定域名为myhost.example.com
4、options
作用:控制dns解析的附加选项。
常见选项:
timeout:n dns查询超时时间(秒),默认5
attempts:n 重试次数,默认2
rotate: 轮询使用多个nameserver(默认按顺序)。
edns0: 启用扩展dns(edns0),支持更大的udp数据包。
ndots:n 当域名包含至少n个点(.)时,直接查询,否则附加搜索域(默认1)。
5、注意问题:
1)、动态覆盖
该文件可能被网络管理工具(如networkmanager、systemd-resolved或dhclient)自动生成和覆盖。
永久修改dns需通过以下方式:
networkmanager:使用nmcli或编辑/etc/NetworkManager/conf.d/下的配置文件。在/etc/NetworkManager/NetworkManager.conf中添加dns=none。
system-resolved:修改/etc/system/resolved.conf
dhcp客户端:修改/etc/dhcp/dhclient.conf
2)、优先级:
若同时配置search和domain,只有最后一个生效。
推荐使用search定义多级搜索域。