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

前言:

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

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

实验环境:

VmwareWorkStation 17——虚拟机软件

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

备注:

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

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

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

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

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

实验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       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      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       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxprobe.com.
        A       192.168.31.128
        AAAA    ::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

 

未完待续。

关于报错和排查:

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

执行:

cat /var/named/data/named.run

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

设置防火墙:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/371434.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决IntellIJ Idea内存不足

突然有一天我在IDEA打开两个项目时,发生了报错,说我内存不足,我这电脑内存16G怎么会内存不足。下面是我的解决方案。 IntelliJ IDEA 报告内存不足的原因通常与以下几个因素有关: 项目规模较大:如果您正在开发的项目非…

【Python之Git使用教程001】Git简介与安装

一、简介 Git其实就是一个分布式版本的控制系统,在分布式版本的控制系统,大家都拥有一个完整的版本库,不需要联网也可以提交修改,所以中心服务器就显得不那么重要。由于大家都拥有一个完整的版本库,所有只需要把各自的…

假期刷题打卡--Day23

1、MT1190分数乘法 输入5组分数,对他们进行乘法运算,输出结果。不考虑分母为0等特殊情况。 格式 输入格式: 输入整型,每组一行,如样例所示。 输出格式: 输出计算结果实型,如样例所示。 样…

Centos 7.5 安装 NVM 详细步骤

NVM(Node Version Manager)是一个用于管理Node.js版本的工具,它可以让你轻松地在多个版本之间切换。NVM 通过下载和管理 Node.js 的多个版本,为用户提供了一种灵活的方式来使用不同版本的 Node.js。如果你需要更多关于NVM的信息&a…

【MySQL进阶】事务原理

文章目录 事务机制基本介绍事务管理基本操作提交方式事务 ID 隔离级别四种级别加锁分析 原子特性实现方式实现原理undo log 隔离特性实现方式MVCC实现原理隐藏字段undo logRead View RC RR 持久特性实现方式redo log 一致特性 面试题MySQL的ACID特性分别是怎么实现的&#xff1…

工信部颁发的《计算机视觉处理设计开发工程师》中级证书

计算机视觉(Computer Vision)是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说,计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标,计算机视觉结合了图像处理、机器学习、模…

在java中获取excel的cell值的时候报错

在获取cell的时候,通常会有报错类型不匹配的问题,这是因为你的cell中存储的数据类型和使用的方法不匹配的原因,假如说cell中存储了一个数字,但是使用的cell.getStringCellValue()获取值,就会有如下错误 java.lang.Ill…

属性“xxxx”在类型“ArrayConstructor”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“es2015”或更高版本。

使用vscode编写vue,在使用elementUI时,发现代码中的form报错如下: 属性“form”在类型“ArrayConstructor”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“es2015”或更高版本。 解决方法: 打开jsconfig.…

智能边缘计算网关实现高效数据处理与实时响应-天拓四方

在当今时代,数据已经成为驱动业务决策的关键因素。然而,传统的数据处理方式往往存在延迟,无法满足实时性要求。此时,智能边缘计算网关应运而生,它能够将数据处理和分析的能力从中心服务器转移至设备边缘,大…

【Linux】文件重定向与实现支持文件重定向的minishell

目录 0.前提 ​编辑 1.重定向 1.1重定向的本质 1.2dup2 1.3模拟实现输出重定向 > 1.4模拟实现追加重定向 >> 1.5模拟实现输入重定向 < 2.让minishell支持重定向 0.前提 文件描述符的分配规则&#xff1a; 在文件描述符表里面&#xff0c;从小到大按照顺…

windows10 powershell多个选项卡

您可以使用下载新的 Windows 终端&#xff0c;新的终端是可以开启多个选项卡的 Windows Terminal - Microsoft Appshttps://apps.microsoft.com/detail/9N0DX20HK701?hlen-us&glUS

使用Pycharm安装Python的库

1.点击文件-----设置&#xff08;setting&#xff09; 2.找到Python解释器&#xff0c;点击加号 3.搜索你需要的库&#xff0c;安装

利用k8s Infra 容器,解决pod网络故障注入的问题

目录 一、infra容器作用 二、pod网络故障注入问题 三、充分利用pod infra容器 一、infra容器的作用 我们知道&#xff0c;在kubernetes中&#xff0c;pod中容器的资源隔离主要通过namespace和cgroup来实现。那如果我们需要为pod中的容器共享某种资源应该怎么做。kubernetes …

91.网游逆向分析与插件开发-游戏窗口化助手-游戏窗口化助手的UI设计

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目需求与需求拆解-CSDN博客 码云地址&#xff08;游戏窗口化助手 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;e512d44da1b7e6a8726b1be0…

用GOGS搭建GIT服务器

GOGS官网 Gogs: A painless self-hosted Git service 进入文件所在目录 cd /usr/local/develop 解压文件 tar -xvf gogs_0.13.0_linux_amd64.tar.gz 解压之后 进入gogs 目录 cd gogs 创建几个目录 userdata 存放用户数据 log文件存放进程日志 repositories 仓库根目…

docker 网络模型

一、docker的网络模型分为四种 【1】Host(与宿主机共享一个网络)&#xff0c;宿主机的localhost 及 容器内的localhost 【2】Bridge(与宿主机共享一个局域网&#xff0c;有自己的网络&#xff1b;docker运行默认Bridge)&#xff1b;容器内localhost不是宿主机localhost 【3】…

Scrapy:Python中强大的网络爬虫框架

Scrapy&#xff1a;Python中强大的网络爬虫框架 在当今信息爆炸的时代&#xff0c;从互联网上获取数据已经成为许多应用程序的核心需求。Scrapy是一款基于Python的强大网络爬虫框架&#xff0c;它提供了一种灵活且高效的方式来提取、处理和存储互联网上的数据。本文将介绍Scrap…

初始数据库

华子目录 什么是数据库DBMS&#xff08;数据库管理系统&#xff09;数据库系统和文件系统的区别文件系统数据库系统对比区别优缺点总结 常见数据库关系型数据库ACID原则关系型数据库的优缺点优点缺点 非关系型数据库存储方式常见的非关系型数据库非关系型数据库的优缺点优点缺点…

docker 构建个人博客网站

1、项目地址 https://gitee.com/hhll/blog-hangliang.git 2、打包docker镜像并上传docker hub 【1】注册docker hub账号https://hub.docker.com/ 【2】在docker hub建对应的仓库 【3】登录docker hub并打包上传前后端镜像 sudo docker login -u xxxx 密码 xxxxxx 后端&am…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(五)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十二章&#xff1a;使用 TensorFlow 进行自定义模型和训练 到目前为止&#xff0c;我们只使用了 TensorFlow 的高级 API&#…