当前位置: 首页 > java >正文

DNS 服务详解与 BIND 部署

DNS 服务详解与 BIND 部署

一、DNS 服务概述

DNS(Domain Name System,域名系统)是互联网的核心服务之一,主要作用是将人类可读的域名(如 www.example.com)转换为计算机可识别的 IP 地址,实现网络资源的定位与访问。

核心特性

  • 域名与 IP 的映射关系:一个域名通常对应一个 IP 地址(也可通过负载均衡配置多个 IP);一个 IP 地址可绑定多个域名(如虚拟主机)。
  • 分布式架构:通过全球分布式的 DNS 服务器集群协同工作,避免单点故障,提高解析效率。

二、域名系统核心概念

1. 域名空间结构

DNS 采用分层树形结构,从根到叶依次为根域、顶级域、二级域、主机名,各级域名用点号(.)分隔。

层级

说明

示例(以 www.baidu.com. 为例)

根域

域名空间的最顶层,用 . 表示(通常省略不写)

最后的 . 即根域

顶级域

分为组织域(3 字符代号)和国家 / 地区域(2 字符代号)

.com(组织域,商业机构)

二级域

注册到个人、组织或公司的专属域名,是域名的核心标识

baidu(百度公司的二级域)

主机名

域名空间的最底层,标识具体的服务器或服务

www(Web 服务器主机名)

  • FQDN(完全合格域名):包含所有层级的完整域名,如 www.baidu.com.(必须以根域 . 结尾,实际使用中可省略)。

2. DNS 解析类型

  • 正向解析:将 FQDN 解析为对应的 IP 地址(最常用场景,如访问网站时)。
  • 反向解析:将 IP 地址解析为对应的 FQDN(多用于身份验证,如邮件服务器反垃圾邮件)。

三、DNS 查询原理

1. 查询方式

  • 递归查询:客户端向 DNS 服务器发送请求后,服务器全程处理查询并返回最终结果(客户端与服务器之间)。
  • 迭代查询:DNS 服务器收到请求后,若自身无结果,仅返回下一步查询的服务器地址,由原服务器继续查询(服务器与服务器之间)。

2. 解析流程(以正向解析为例)

  1. 客户端向本地 DNS 服务器发送域名解析请求(如 www.example.com)。
  2. 本地 DNS 服务器若无缓存,向根域服务器查询,根域返回顶级域(.com)服务器地址。
  3. 本地 DNS 服务器向 .com 顶级域服务器查询,顶级域返回二级域(example.com)服务器地址。
  4. 本地 DNS 服务器向 example.com 二级域服务器查询,二级域返回主机 www 对应的 IP 地址。
  5. 本地 DNS 服务器将 IP 地址返回给客户端,并缓存结果供后续查询。

四、DNS 服务器类型

  • 主 DNS 服务器:存储域名解析的权威数据(如 A 记录、MX 记录),是域名解析的 “数据源”,可直接修改解析记录。
  • 辅助 DNS 服务器:通过区域传输(Zone Transfer) 从主 DNS 服务器同步解析数据,作为备份。当主 DNS 故障时,辅助 DNS 可继续提供服务,保障可用性。

五、基于 BIND 搭建主 DNS 服务器

BIND(Berkeley Internet Name Domain)是最流行的 DNS 服务器软件,以下是在 Linux 系统中搭建主 DNS 服务器的步骤。

1. 环境准备

  • 服务器 IP:192.168.100.10
  • 目标域名:example.com
  • 需关闭防火墙和 SELinux(生产环境需按需开放端口):
# 关闭防火墙systemctl stop firewalld 
systemctl disable firewalld# 关闭 SELinuxsetenforce 0vim /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=disabled

2. 安装 BIND 软件

yum -y install bind bind-chroot# bind:DNS 核心服务;bind-chroot:提供安全的隔离环境

3. 配置主配置文件(/etc/named.conf)

主配置文件定义 DNS 服务的全局参数,如监听地址、权限等:

vim /etc/named.conf

修改以下内容:

// 允许所有主机查询(生产环境需限制网段)listen-on port 53 { any; };listen-on-v6 port 53 { any; };allow-query { any; };// 导入区域配置文件(正向/反向解析规则)include "/etc/named.rfc1912.zones";

4. 配置区域文件(/etc/named.rfc1912.zones)

区域文件定义正向和反向解析的 “区域” 规则,指定解析文件路径:

vim /etc/named.rfc1912.zones

添加以下内容:

# 正向解析区域(域名 → IP)zone "example.com" IN {type master; # 主 DNS 服务器file "example.com"; # 正向解析文件路径(相对 /var/named/ 目录)allow-update { none; }; # 禁止动态更新};# 反向解析区域(IP → 域名,IP 网段反写:192.168.100.0/24 → 100.168.192.in-addr.arpa)zone "100.168.192.in-addr.arpa" IN {type master;file "com.example"; # 反向解析文件路径allow-update { none; };};

5. 创建正向解析文件(/var/named/example.com)

正向解析文件存储域名到 IP 的映射,基于模板文件复制(保留权限):

# 复制模板文件(-p 保持原文件权限)cp -p /var/named/named.localhost /var/named/example.comvim /var/named/example.com

修改内容:

$TTL 1D # 缓存有效期:1天@ IN SOA server.example.com. root.example.com. (2025081101 ; 序列号(建议用日期+次数,如20250811第1次修改)1D ; 刷新时间(辅助DNS同步间隔)1H ; 重试时间(同步失败后重试间隔)1W ; 过期时间(超过此时间辅助DNS失效)3H ) ; 最小缓存时间NS server.example.com. # 本域的DNS服务器主机名# 主机记录(A记录):主机名 → IPserver IN A 192.168.100.10 # DNS服务器自身IPclient IN A 192.168.100.10 # 其他主机(如客户端)IPwww IN A 192.168.100.10 # Web服务器解析

6. 创建反向解析文件(/var/named/com.example)

反向解析文件存储 IP 到域名的映射,同样基于模板创建:

cp -p /var/named/named.empty /var/named/com.examplevim /var/named/com.example

修改内容:

$TTL 3H # 缓存有效期:3小时@ IN SOA server.example.com. root.example.com. (2025081101 ; 序列号需与正向解析一致1D ; 刷新时间1H ; 重试时间1W ; 过期时间3H ) ; 最小缓存时间NS server.example.com. # DNS服务器主机名# PTR记录:IP最后一段 → 域名(IP为192.168.100.10 → 仅写10)10 IN PTR server.example.com. # DNS服务器反向解析10 IN PTR client.example.com. # 客户端反向解析10 IN PTR www.example.com. # Web服务器反向解析

7. 启动并验证主 DNS 服务

# 启动服务并设置开机自启systemctl start named 
systemctl enable named# 验证服务状态systemctl status named # 确保状态为 active (running)

六、基于 BIND 搭建辅助 DNS 服务器

辅助 DNS 服务器从主 DNS 同步解析数据,需部署在与主 DNS 不同的服务器上。

1. 环境准备

  • 辅助 DNS 服务器 IP:192.168.100.20
  • 确保与主 DNS 服务器(192.168.100.10)网络连通,关闭防火墙和 SELinux(同主 DNS)。

2. 安装 BIND 软件

yum -y install bind bind-chroot

3. 配置主配置文件(/etc/named.conf)

与主 DNS 相同,允许所有主机查询:

vim /etc/named.conflisten-on port 53 { any; };listen-on-v6 port 53 { any; };allow-query { any; };include "/etc/named.rfc1912.zones";

4. 配置区域文件(/etc/named.rfc1912.zones)

定义从主 DNS 同步的区域,类型设为 slave:

vim /etc/named.rfc1912.zones

添加以下内容:

# 正向解析区域(从主 DNS 同步)zone "example.com" IN {type slave; # 辅助 DNS 服务器file "slaves/example.com"; # 同步文件存储路径(/var/named/slaves/)masters { 192.168.100.10; }; # 主 DNS 服务器 IP};# 反向解析区域(从主 DNS 同步)zone "100.168.192.in-addr.arpa" IN {type slave;file "slaves/com.example";masters { 192.168.100.10; };};

5. 启动并验证辅助 DNS 服务

# 启动服务并设置开机自启systemctl start named && systemctl enable named# 验证同步结果(查看 slaves 目录下是否生成同步文件)ls /var/named/slaves/ # 应存在 example.com 和 com.example 文件

七、DNS 解析验证

在客户端或其他主机上配置 DNS 服务器为 192.168.100.10(主)或 192.168.100.20(辅助),通过以下命令验证:

1. 配置客户端 DNS

# 编辑网卡配置文件(以 CentOS 为例)vim /etc/sysconfig/network-scripts/ifcfg-ens33# 添加 DNS 服务器DNS1=192.168.100.10DNS2=192.168.100.20# 重启网络服务systemctl restart network

2. 验证正,反向解析

​
nslookup 
> server.example.com
Server:		192.168.100.10
Address:	192.168.100.10#53Name:	server.example.com
Address: 192.168.100.10
> 192.168.100.10
Server:		192.168.100.10
Address:	192.168.100.10#5310.100.168.192.in-addr.arpa	name = server.example.com.
10.100.168.192.in-addr.arpa	name = client.example.com.
10.100.168.192.in-addr.arpa	name = www.example.com.​

八、总结

DNS 服务通过分层结构和分布式查询实现域名与 IP 的高效映射,主、辅 DNS 服务器的配合可保障服务高可用性。基于 BIND 搭建 DNS 服务的核心步骤包括:

  1. 安装 BIND 软件并配置主配置文件;
  2. 定义正向 / 反向解析区域及对应解析文件;
  3. 主 DNS 存储权威数据,辅助 DNS 通过区域传输同步数据;
  4. 验证解析结果确保服务正常。

合理配置 DNS 服务是网络稳定运行的基础,生产环境中需注意权限控制、缓存优化和安全加固(如 DNSSEC 验证)。

http://www.xdnf.cn/news/17641.html

相关文章:

  • Django ORM查询技巧全解析
  • 基于Springboot+UniApp+Ai实现模拟面试小工具九:移动端框架搭建
  • 第二章:变量与简单数据类型
  • 【lucene】livedocs描述
  • 【华为机试】208. 实现 Trie (前缀树)
  • 图像打标工具/方法的分类和特点说明
  • Launcher3启动
  • 实战:用 PyTorch 复现一个 3 层全连接网络,训练 MNIST,达到 95%+ 准确率
  • IoT/透过oc_lwm2m/boudica150 源码中的AT指令序列,分析NB-IoT接入华为云物联网平台IoTDA的工作机制
  • Java使用“Microsoft Print To PDF”打印时如何指定输出路径
  • Vue 利用el-table和el-pagination组件,简简单单实现表格前端分页
  • AI时代基于云原生的 CI/CD 基础设施 Tekton
  • Dubbo从入门到实战:分布式服务开发指南
  • USB 基本描述符
  • 视频播放器哪个好用?视频播放器PotPlayer,KMP Player
  • 下一个排列 的 思路总结
  • 从零开始的云计算生活——项目实战容器化
  • 标准IO详解(fgets、gets、fread、fwrite、fseek 等应用)
  • Java 包装类简单认识泛型
  • 《深度解构:React与Redux构建复杂表单的底层逻辑与实践》
  • C#使用EPPlus读写Excel
  • ubuntu20.04交叉编译vlc3.0.21 x64 windows版本
  • 大模型落地:AI 技术重构工作与行业的底层逻辑
  • Pytest 全流程解析:执行机制与报告生成实战指南
  • java 插入式注解的打开方式!
  • MySQL,Redis重点面试题
  • SQL179 每个6/7级用户活跃情况
  • Spring Framework源码解析——BeanPostProcessor
  • 【学习嵌入式day-22-Linux软件编程-IO】
  • SpringBoot集成支付宝二维码支付接口详解