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

Linux实验记录:使用BIND提供域名解析服务

前言:

本文是一篇关于Linux系统初学者的实验记录。

参考书籍:《Linux就该这么学》

实验环境:

VmwareWorkStation 17——虚拟机软件

RedHatEnterpriseLinux[RHEL]8——红帽操作系统

备注:

  为了降低用户访问网络资源的门槛,域名系统(Domain Name System,DNS)技术应运而生。

这是一项用于管理和解析域名与IP地址对应关系的技术。

就是能够接受用户输入的域名或IP地址,然后自动查找与之匹配的IP地址或域名,

正向解析:域名解析为IP地址

反向解析:IP地址解析为域名

目录

前言:

备注:

实验1:安装bind服务程序

实验2:正向解析实验

Step1:配置区域配置文件

Step2:编辑数据配置文件。

Step3:检验解析结果

实验3:反向解析实验

Step1:编辑区域配置文件

 Step2:编辑数据配置文件

 Step3:检验解析结果

 实验4:部署从服务器

Step1:在主服务器上的区域配置文件中允许该从服务器更新请求

Step2:在主服务器上配置防火墙放行规则

Step3:在从服务器上安装bind-chroot软件包,修改配置文件,测试与主服务器网络连通性

 Step5:检测解析结果

实验5:安全的加密传输

Step1:在主服务器中生成密钥

Step2:在主服务器中创建密钥验证文件。

Step3:开启并加载bind服务的密钥验证功能。

 Step4:配置从服务器使其支持密钥验证。

 Step5:开启并加载从服务器的密钥验证功能。

 Step6:DNS从服务器同步域名区域数据。

实验6:部署缓存服务器

Step1:配置系统的双网卡参数。

Step2:将新添加的网卡设置为“桥接模式”

Step3:在bind服务的主配置文件中添加缓存转发参数。

Step4:重启DNS服务,验证成果

实验7:分离解析技术 

关于报错和排查:


实验1:安装bind服务程序

BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务器。

安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,确保整个服务器的安全。

yum install bind-chroot

在bind服务程序中有三个比较关键的文件:

主配置文件(/etc/named.conf):用来定义bind服务程序的允许

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

该目录用来保存域名和IP地址对应关系所在位置。

数据配置文件目录(/var/named):

该目录用来保存域名和IP地址真实对应关系的数据配置文件。

vim /etc/named.conf

在Linux系统中,bind服务程序的名称为named。

在/etc目录找到主配置文件,把第11行和第19行地址均修改为any,

分别表示:服务器上所有IP地址均可提供DNS域名解析服务、允许所有人对本服务器发起DNS查询请求

   下面的实验会分别修改bind服务程序的主配置文件、区域配置文件与数据配置文件。

如果遇到bind服务程序启动失败的情况,执行:

named-checkconf
named-checkzone

检查参数是否写错。

实验2:正向解析实验

  在域名解析服务中,正向解析:根据域名查找到对应的IP地址/

当用户输入了一个域名后,bind服务程序会自动进行查找,并将匹配到的IP地址返给用户。

Step1:配置区域配置文件

vim /etc/named.rfc1912.zones

 

Step2:编辑数据配置文件。

可以从/var/named 目录中复制一份正向解析的模板文件(named.localhost)

然后把域名和IP地址的对应数据填写数据配置文件并保存。

复制时,-a参数可以保留原始文件的所有者、所属组、权限属性信息,以便让bind服务程序读取。

cd /var/named/
ls -al named.localhost
cp -a named.localhost linuxprobe.com.zone
vim linuxprobe.com.zone
$TTL 1D
@       IN SOA  linuxprobe.com. root.linuxprobe.com (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      ns.linuxprobe.com.
ns      IN      A       192.168.31.128
www     IN      A       192.168.31.128

Step3:检验解析结果

要把Linux系统网卡中的DNS地址参数修改成本机IP地址,这样就可以使用由本机提供的DNS查询服务了,nslookup命令用于检测能否从DNS服务器中查询到域名与IP地址的解析记录,进而更准确地检测DNS服务器是否已经能够为用户提供服务。

实验3:反向解析实验

  反向解析将用户提交的IP地址解析为对应的域名信息,它一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。

Step1:编辑区域配置文件

在定义区域时,要把IP地址反写。

vim /etc/named.rfc1912.zones
zone "linuxprobe.com" IN {type master;file "linuxprobe.com.zone";allow-update {none;};
};
zone "31.168.192.in-addr.arpa" IN {type master;file "192.168.31.arpa";allow-update {none;};
};

 Step2:编辑数据配置文件

cd /var/named
cp -a named.loopback 192.168.31.arpa
vim 192,168.31.arpa

 

$TTL 1D
@       IN SOA  Linuxprobe.com. Root.linuxprobe.com. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      ns.linuxprobe.com.A       192.168.31.128AAAA    ::1
10      PTR     na.linuxprobe.com.
10      PTR     www.linuxprobe.com.
20      PTR     bbs.linuxprobe.com.
systemctl restart named

 Step3:检验解析结果

正向解析和反向解析实验完成。

 实验4:部署从服务器

    在DNS域名解析服务中,从服务器可以从主服务器上获取指定的数据文件,从而起到备份解析记录与负载均衡的作用。因此,通过部署从服务器不仅可以减轻主服务器的负载压力,还可以提升用户的查询效率。

主机名称操作系统IP地址
主服务器RHEL 8192.168.31.128
从服务器RHEL 8192.168.31.130

Step1:在主服务器上的区域配置文件中允许该从服务器更新请求

即修改allow-update参数,然后重启服务器的DNS程序

vim /etc/named.rfc1912.zones 
zone "linuxprobe.com" IN {type master;file "linuxprobe.com.zone";allow-update {192.168.31.130;};
};
zone "31.168.192.in-addr.arpa" IN {type master;file "192.168.31.arpa";allow-update {192.168.31.130;};
};

Step2:在主服务器上配置防火墙放行规则

iptables -F 
firewall-cmd --permanent --zone=public --add-service=dns
firewall-cmd --reload

Step3:在从服务器上安装bind-chroot软件包,修改配置文件,测试与主服务器网络连通性

dnf install bind-chroot
vim /etc/named.conf

Step4:在从服务器中填写主服务器的IP地址与要抓取的区域信息,然后重启服务

vim /etc/named.rfc1912.zones
zone "linuxprobe.com" IN {type slave;masters { 192.168.31.128; };file "slaves/linuxprobe.com.zone";
};
zone "31.168.192.in-addr.arpa" IN {type slave;masters { 192.168.31.128; };file "slaves/192.168.31.arpa";
};
systemctl restart named

 Step5:检测解析结果

将从服务器DNS指向自身IP地址。

实验完成。

实验5:安全的加密传输

  互联网中绝大多数DNS服务器都是基于BIND域名解析服务搭建的,而bind服务程序为了提供安全的解析服务,已经对TSIG加密机制提供了支持。

  TSIG主要是利用了密码编码的方式来保护区域信息的传输,即TSIG加密机制保证了DNS服务器之间传输域名信息的安全性。

接上文,此时从服务器可以获取到主服务器上的数据配置文件

rm -rf /var/named/slaves/*

Step1:在主服务器中生成密钥

  dnssec-keygen命令用于生成安全的DNS服务密钥,

格式:"dnssec-keygen[参数]“

参数作用
-a指定加密算法,包括:RSAMD5、RSASHA1、DSA
-b密钥长度
-n密钥的类型

生成一个主机名称为master-slave的128位HMAC-MD5算法的密钥文件。

需要把私钥文件中Key参数后面的值记录下来,一会儿要将其写入传输配置文件中。

[root@linuxprobe ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
Kmaster-slave.+157+18003
[root@linuxprobe ~]# ls -l Kmaster-slave.+157+18003.*
-rw-------. 1 root root  56 Feb  4 20:07 Kmaster-slave.+157+18003.key
-rw-------. 1 root root 165 Feb  4 20:07 Kmaster-slave.+157+18003.private
[root@linuxprobe ~]# cat Kmaster-slave.+157+18003.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: qvwiBDk12W9lczRsWhNtHQ==
Bits: AAA=
Created: 20240204120748
Publish: 20240204120748
Activate: 20240204120748

Key: qvwiBDk12W9lczRsWhNtHQ== 

Step2:在主服务器中创建密钥验证文件。

进入bind服务程序用于保存配置文件的目录,把刚刚生成的密钥名称、加密算法和私钥加密字符串按照格式写入tansfer.key传输配置文件中。

为了安全起见,需要将文件的所属组修改成named,并将文件权限设置小一定,创建一个硬链接,指向/etc目录。

cd /var/named/chroot/etc/
vim transfer.key
key "master-slave" {algorithm hmac-md5;secret "qvwiBDk12W9lczRsWhNtHQ==";
};
chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key

Step3:开启并加载bind服务的密钥验证功能。

首先需要在主服务器的主配置文件中加载密钥验证文件,然后进行设置,使得只允许带有master-slave密钥认证的DNS服务器同步数据配置文件。

vim /etc/named.conf

   现在:DNS主服务器的TSIG密钥加密传输功能已经配置完成。

然后清空DNS从服务器同步目录中的数据配置文件,重启bind服务。已经无法自动获取数据配置文件。

 Step4:配置从服务器使其支持密钥验证。

在bind服务程序的配置文件目录中创建密钥认证文件,并设置相应的权限,然后设置该文件的一个硬链接,并指向/etc目录,

cd /var/named/chroot/etc/
vim transfer.key
key "master-slave" {algorithm hmac-md5;secret "qvwiBDk12W9lczRsWhNtHQ==";
};
chown root:named transfer.key
chmod 640 transfer.key
ln transfer.key /etc/transfer.key

 Step5:开启并加载从服务器的密钥验证功能。

在主配置文件中加载密钥认证文件,然后按照指定的格式写上主服务器的IP地址和密钥名称。

这里参数位置不宜太靠前:51行处左右较为合适

 Step6:DNS从服务器同步域名区域数据。

现在两台服务器的bind服务程序都已经配置妥当,并匹配到了相同的密钥认证文件。

systemctl restart named
ls /var/named/slaves/

  实验成功。

实验6:部署缓存服务器

DNS缓存服务器是一种不负责域名数据维护的DNS服务器。

简单来说,缓存服务器就是把用户经常使用到的域名与IP地址解析记录保存在主机本地,从而提升下次解析的效率。

DNS缓存服务器一般用于经常访问某些固定站点而对这些网站的访问速度由较高要求的企业内网中,但实际的应用并不广泛。

缓存服务器是否可以成功解析还与指定的上级DNS服务器的允许策略有关。

Step1:配置系统的双网卡参数。

为了更加贴近真实的网络环境,实现外网查询功能,在缓存服务器再添加一块网卡。

主机名称操作系统IP地址
缓存服务器

RHEL 8 

网卡(外网):根据物理设备的网络参数进行配置

网卡(内网):192.168.31.128

客户端RHEL 8192.168.31.130

Step2:将新添加的网卡设置为“桥接模式”

Step3:在bind服务的主配置文件中添加缓存转发参数。

在大约第二十行添加参数:"forwarders{上级DNS服务器地址;};"

上级DNS服务器地址指的是获取数据配置文件的服务器。

iptables -F
iptables-save
firewall-cmd --permanent --zone=public --add-service=dns
firewall-cmd --reload

Step4:重启DNS服务,验证成果

客户端主机的DNS服务器地址参数改为缓存服务器的IP地址。

然后重启客户端网络。

 实验成功。

实验7:分离解析技术 

  模拟情景:

  为分别处于北京的DNS服务器和处于美国的DNS服务器分配的IP地址,让国内用户自动匹配到北京的服务器,而让海外读者自动匹配到美国的服务器。这样提高了访问速度。

主机名称操作系统IP地址
DNS服务器RHEL 8

北京网络:122.71.115.10

美国网络:106.185.25.10

北京用户Windows 7122.71.115.1
海外用户Windows 7106.185.25.1

 分离解析技术可以加快国内和国外用户访问DNS的速度。

关于报错和排查:

如果检查配置无误,未显示报错,但运行结果异常:

执行:

cat /var/named/data/named.run

查看日志,分析报错原因。 

设置防火墙:

iptables -F
iptables-save
firewall-cmd --permanent --zone=public --add-service=dns
firewall-cmd --reload

相关文章:

Linux实验记录:使用BIND提供域名解析服务

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: 为了降低用户访问网络资源的门槛&am…...

基于单片机的智能寻光小车设计

摘 要:随着物联网技术的飞速发展和逐渐成熟,以单片机为主的智能小车在巡查、仓储、探险及国防等领域得到广泛应用。本文设计了一种基于单片机的智能寻光小车,该小车以STC89C52RC 芯片为设计核心,结合光敏传感器和超声波传感器等多…...

数据结构——A/复杂度

A/基础铺垫 1. 什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的 数据元素的集合。 2.什么是算法? 算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输…...

锐捷VSU和M-LAG介绍

参考网站 堆叠、级联和集群的概念 什么是堆叠? 框式集群典型配置 RG-S6230[RG-S6501-48VS8CQ]系列交换机 RGOS 12.5(4)B1005版本 配置指南 总结 根据以上的几篇文章总结如下: 级联:简单,交换机相连就叫级联,跟搭…...

MYSQL——MySQL8.3无法启动

在新电脑上装了个MySQL,但是无法使用net start mysql启动,很是纳闷,使用mysqld --console去查看报错,也是没报错的,但是奇怪的是,我输入完这个mysqld --console之后,就等于启动了mysql了&#x…...

PyTorch识别验证码

## 一、生成测试集数据pip install captcha common.py import random import time captcha_array list("0123456789abcdefghijklmnopqrstuvwxyz") captcha_size 4from captcha.image import ImageCaptchaif __name__ __main__:for i in range(10):image ImageC…...

手把手教你开发Python桌面应用-PyQt6图书管理系统-图书类别信息表格数据显示以及搜索实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…...

【HarmonyOS】鸿蒙开发之自定义组件——第3.7章

自定义构建函数 (适合内部页面的封装,更加合适)(构建页面) 案例: 自定义组件文件 Index.ets //全局自定义构建函数写法 Builder function item1(){Row({space:10}){Text("我是自定义构建函数")} }Component export struct Index{build(){Column(){item…...

初探unity中的ECS

ECS是一种软件架构模式,就像MVC一样。ECS最早在游戏《守望先锋》中提及到的相关链接。ECS具体是指实体(entity)、 组件(component)和系统(system): 实体:实体是一个ID&a…...

力扣:131. 分割回文串

回溯解法思路: 1.先声明一个集合来接受全部的回文子串组合,在声明一个集合来接收单个回文子串的组合。 2.写一个回溯函数,里面有终止条件和遍历全部组合的for循环来进行遍历全部的组合,终止条件为开始索引等于字符串的长度时&am…...

2024美赛数学建模B题思路源码

赛题目的 赛题目的: 问题描述: 解题的关键: 问题一. 问题分析 要开发一个模型来预测潜水器随时间的位置,我们需要考虑以下几个关键因素: 海洋环境因素:当前和预测的洋流、海水密度(可能会随…...

线程的取消和互斥

线程的取消 int pthread_cancel(pthread_t thread); 注意:线程的取消要有取消点才可以,不是说取消就取消,线程的取消点主要是阻塞的系统调用(前面sleep就是一个阻塞的系统调用) 如果没有取消点,手动设置一个 把上图中sleep函数替换成这个一样可以取消 void pth…...

机器学习之DeepSequence软件使用学习1

简介 DeepSequence 是一个生成性的、无监督的生物序列潜变量模型。给定一个多重序列比对作为输入,它可以用来预测可获得的突变,提取监督式学习的定量特征,并生成满足明显约束的新序列文库。它将序列中的高阶依赖性建模为残差子集之间约束的非…...

【Kotlin】Kotlin环境搭建

1 前言 Kotlin 是一种现代但已经成熟的编程语言,由 JetBrains 公司于 2011 年设计和开发,并在 2012 年开源,在 2016 年发布 v1.0 版本。在 2017 年,Google 宣布 Kotlin 正式成为 Android 开发语言,这进一步推动了 Kotl…...

langgraph学习--创建基本的agent执行器

本文介绍如何使用langgraph创建一个基本的Agent执行器,主要包括下面几个步骤: 1、定义工具 2、创建langchain Agent(由LLM、tools、prompt三部分组成) 3、定义图形状态 传统的LangChain代理的状态有几个属性: (1&#…...

Mybatis中的sql-xml延迟加载机制

Mybatis中的sql-xml延迟加载机制 hi,我是阿昌,今天记录一下关于Mybatis中的sql-xml延迟加载机制 一、前言 首先mybatis技术本身就不多介绍,说延迟加载机制之前,那要先知道2个概念: 主查询对象关联对象 假设咱们现…...

【Linux系统学习】1.初识Linux

初识Linux 操作系统概述 初识Linux 虚拟机介绍 VMware WorkStation安装 1.操作系统概述 了解操作系统的作用 了解常见的操作系统 1.1 硬件和软件 计算机由哪两个主要部分组成? 硬件:计算机系统中由电子,机械和光电元件等组成的各种物理装置的…...

政安晨:政安晨:机器学习快速入门(三){pandas与scikit-learn} {模型验证及欠拟合与过拟合}

这一篇中,咱们使用Pandas与Scikit-liarn工具进行一下模型验证,之后再顺势了解一些过拟合与欠拟合,这是您逐渐深入机器学习的开始! 模型验证 评估您的模型性能,以便测试和比较其他选择。 在上一篇中,您已经…...

分享65个节日PPT,总有一款适合您

分享65个节日PPT,总有一款适合您 65个节日PPT下载链接:https://pan.baidu.com/s/1hc1M5gfYK8eDxQVsK8O9xQ?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。知…...

架构学习(二):原生scrapy如何接入scrapy-redis,初步入局分布式

原生scrapy如何接入scrapy-redis,实现初步入局分布式 前言scrpy-redis分布式碎语 实现流程扩展结束 前言 scrpy-redis分布式 下图是scrpy-redis官方提供的架构图,按我理解,与原生scrapy的差异主要是把名单队列服务器化,也是存储…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

动态规划-1035.不相交的线-力扣(LeetCode)

一、题目解析 光看题目要求和例图&#xff0c;感觉这题好麻烦&#xff0c;直线不能相交啊&#xff0c;每个数字只属于一条连线啊等等&#xff0c;但我们结合题目所给的信息和例图的内容&#xff0c;这不就是最长公共子序列吗&#xff1f;&#xff0c;我们把最长公共子序列连线起…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…...

LINUX编译vlc

下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总&#xff08;最简化&#xff09;_底部的附件列表中】: ffmpeg - lzip…...

Spring Boot 与 Kafka 的深度集成实践(二)

3. 生产者实现 3.1 生产者配置 在 Spring Boot 项目中&#xff0c;配置 Kafka 生产者主要是配置生产者工厂&#xff08;ProducerFactory&#xff09;和 KafkaTemplate 。生产者工厂负责创建 Kafka 生产者实例&#xff0c;而 KafkaTemplate 则是用于发送消息的核心组件&#x…...

SDU棋界精灵——硬件程序ESP32实现opus编码

一、 ​​音频处理框架​ 该项目基于Espressif的音频处理框架构建,核心组件包括 ESP-ADF 和 ESP-SR,以下是完整的音频处理框架实现细节: 1.核心组件 (1) 音频前端处理 (AFE - Audio Front-End) ​​main/components/audio_pipeline/afe_processor.c​​功能​​: 声学回声…...