BIND搭建DNS实践

2024-08-27 17:52
文章标签 实践 搭建 bind dns

本文主要是介绍BIND搭建DNS实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BIND搭建DNS实践

BIND 是一个开源的 DNS 软件系统,包括权威服务器、递归解析器和相关实用程序。搭建 BIND(Berkeley Internet Name Domain)DNS 服务器实现 DNS 服务的管理和配置。

1. bind安装

bind支持源码安装、镜像源安装等方式。

1.1 CentOS 7安装

sudo yum -y install bind bind-utils

1.2 ubuntu安装

sudo apt-get update
sudo apt-get install bind9 bind9utils bind9-doc

2. 配置 BIND

主要包括主配置文件/etc/named.conf;区域配置文件,例如,/var/named/test.com.zone,根据域名自行创建。

2.1 主配置文件

主配置文件 /etc/named.conf( BIND 的守护进程为named) 包含了 BIND服务器 的全局设置和区域配置。以下为一个配置文件示例:

[root@dns ~]# cat /etc/named.confoptions {listen-on port 53 { any; };   # ipv4监听地址:配置为any或者节点ip地址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     { any; };	# 允许查询的主机。引用acl:allow-query { trusted-clients; };/*- 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 enablerecursion.	# 如果你正在搭建一个递归(缓存)DNS服务器,你需要启用递归功能。- If your recursive DNS server has a public IP address, you MUST enable accesscontrol to limit queries to your legitimate users. Failing to do so willcause your server to become part of large scale DNS amplificationattacks. Implementing BCP38 within your network would greatlyreduce such attack surface# 如果你的递归DNS服务器拥有一个公网IP地址,你必须启用访问控制以限制查询仅来自合法用户。如果不这样做,你的服务器可能会成为大规模DNS放大攻击的一部分。在你的网络中实施BCP38标准将极大地减少这种攻击面。*/forwarders { 8.8.8.8; 8.8.4.4; };recursion yes;	# 是否允许递归查询dnssec-enable no;		# dns安全扩展,这里关闭dnssec-validation no;	# dns安全扩展确认,这里关闭/* Path to ISC DLV key */bindkeys-file "/etc/named.root.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;};
};acl "trusted-clients" {		# 定义了ACL之后在allow-query位置处应用ACL。192.168.1.0/24;127.0.0.1;
};zone "." IN {type hint;file "named.ca";
};include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
  1. options区块

options区块定义了全局配置选项和默认值,如服务器使用的IP地址、DNS查询转发、数据文件目录、缓存大小和查询超时等。

  1. Logging区块

定义了日志的记录方式和位置。配置文件为相对路径data/named.run,绝对路径为/var/named/data/named.run

  1. acl区块

acl区块定义了访问控制列表(ACL),包含了允许访问的 IP 范围。有的情况下,配置文件没有acl区块,可以根据需求进行添加。

  1. zone区块

zone区块定义了DNS服务器需要管理的域名,每个域名需要一个zone区块,并可以指定区域类型(master或slave)、对应的数据文件名和转发策略等。默认有一个根区域 .(通常用于引导 DNS 解析)。

  1. include语句

include语句用于将其他文件中的配置项包含到named.conf文件中,使配置文件更加灵活和易于管理。


这里以域名test.com为例,将域名区域信息写到配置文件/etc/named.rfc1912.zones

[root@dns ~]# cat /etc/named.rfc1912.zones# 增加域名配置,以test.com为例。
## 正向解析:
zone "test.com" IN {type master;file "test.com.zone";allow-update { none; };
};## 反向解析:zone名对应网络地址的反写。这里以10.210.10.0/24网段为例。
zone "10.210.10.in-addr.arpa" IN {type master;file "10.210.10.zone";allow-update { none; };
}

配置完成后通过下面命令检查语法:

named-checkconf

2.2 区域配置文件

区域配置文件包含了指定区域(域名)的 DNS 记录,例如/var/named/test.com.zone,需要根据域名进行创建。

1. 创建主区域文件

  • 正向解析文件

在目录/var/named/下,复制named.localhost文件,更改属组为named

cp -p named.localhost test.com.zone	# 通过-p保持文件权限和所属一致
chown named:named test.com.zone
vi test.com.zone

添加以下内容:

$TTL 3H
@          IN SOA @        dns.test.com.  (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimum
@          IN       NS  dns.test.com.
dns        IN       A   110.210.10.220
harbor     IN       A   110.210.10.210
os-master  IN       A   110.210.10.216
os-node1   IN       A   110.210.10.217
os-node2   IN       A   110.210.10.218

检查区域配置文件语法:

[root@dns named]# named-checkzone "test.com" /var/named/test.com.zone
zone test.com/IN: loaded serial 0
OK
  • 反向解析文件

使用named.localhost文件的副本,更改属组为named。

cp named.localhost 10.210.10.zone
chown named:named 10.210.10.zone
vi 10.210.10.zone

10.210.10.zone文件内容如下:

$TTL 1D
@       IN SOA  @ 			dns.test.com. (2017020701      ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimum
@        IN NS   dns.test.com.
220      IN PTR  dns.test.com.
210      IN PTR  harbor.test.com.

检查语法:

named-checkzone "10.210.10.ip-addr.arpa" /var/named/10.210.10.zone

3. 启动和测试 BIND

3.1 启动 BIND

# centos
sudo systemctl start named
sudo systemctl enable named

3.2 检查 BIND 状态

sudo systemctl status named

3.3 测试 DNS 解析

使用 dig , nslookup ,host命令来测试 DNS 解析,测试解析域名harbor.test.com(10.210.10.210),dns服务器地址为10.210.10.220

# dig正向解析测试
dig @10.210.10.220 harbor.test.com
# dig反向解析测试
dig -x 10.210.10.210 @10.210.10.220# nslookup测试
[root@client ~]# cat /etc/resolv.conf
nameserver 10.210.10.220
[root@client ~]# nslookup
> harbor.test.com               # 正向解析
Server:         10.210.10.220
Address:        10.210.10.220#53Name:   harbor.test.com
Address: 10.210.10.210
> 10.210.10.220                 # 反向解析
220.10.210.10.in-addr.arpa      name = dns.test.com.# host测试
[root@client ~]# host harbor.test.com
harbor.test.com has address 10.210.10.210
[root@client ~]# host 10.210.10.210
210.10.210.10.in-addr.arpa domain name pointer harbor.test.com.

4. 排错

  1. 区域配置文件语法错误
[root@infra named]# named-checkzone "test.com" test.com.zone
dns_rdata_fromtext: test.com.zone:3: near '1D': not a valid number
zone test.com/IN: loading from master file test.com.zone failed: not a valid number
zone test.com/IN: not loaded due to errors.

原因:

/var/named/test.com.zone配置文件 SOA 后面要加@ 或主域名。

5. 相关资料

  1. 官网:https://bind9.net/

  2. 文档: https://bind9.readthedocs.io/en/latest/

  3. 仓库:https://gitlab.isc.org/isc-projects/bind9

  4. https://blog.csdn.net/dinglinuX/article/details/54898189

  5. https://www.cnblogs.com/zhijiyiyu/p/14957522.html

这篇关于BIND搭建DNS实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112364

相关文章

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时