从零开始:使用 BIND 构建和管理您的 DNS 服务器

1 前言

        在这篇文章中,我将详细介绍如何使用 BIND(Berkeley Internet Name Domain)软件包中的 named 程序来配置和管理一个基本的 DNS 服务器。

        从安装 BIND 开始,到设置 DNS 区域文件,再到运行和测试您的服务器,我会一步步指导您完成整个过程。

        这里我们来演示一下,如何配置一个自定义域名如:fenglm.yy

2 BIND 和 named 简介

2.1 BIND 的作用

        BIND 是互联网上使用最广泛的 DNS 软件之一,它负责将域名转换为 IP 地址。

2.2 named 的角色

        在 BIND 中,named 是一个守护进程,负责处理所有的 DNS 请求。

3 安装 BIND

        这里我使用的是Rocky9.3操作系统来给大家做一个实操演示,我们先来执行下面这个命令来安装bind👇

sudo dnf install bind bind-utils

验证是否安装成功👇

named -v

安装成功示意图

3.1 配置文件介绍

        安装完成后,会生成一些bind相关的文件,这里我们需要关注的有两个目录下的文件

        (1)/etc/named.conf

        (2)/var/named

3.1.1 named.conf配置文件

        我们来通过sudo vim /etc/named.conf 命令查看一下这个配置文件,如下图所示👇

配置文件解析👇

# 监听设置
options {# 监听IPv4地址127.0.0.1上的53端口,这是DNS服务的标准端口。listen-on port 53 { 127.0.0.1; };# 监听IPv6地址::1(即IPv6的本地回环地址)上的53端口。listen-on-v6 port 53 { ::1; };# 指定存放区域文件和其他相关文件的目录。directory "/var/named";# 指定DNS缓存转储文件的位置。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";# 允许从localhost发起查询。allow-query { localhost; };# 关于服务器类型的说明。这里启用了递归查询,适用于递归或缓存DNS服务器。recursion yes;# 启用DNSSEC验证。dnssec-validation yes;# 指定动态密钥文件的存放目录。managed-keys-directory "/var/named/dynamic";# 指定GeoIP数据库文件的存放目录。geoip-directory "/usr/share/GeoIP";# 指定named进程PID文件的存放位置。pid-file "/run/named/named.pid";# 指定会话密钥文件的存放位置。session-keyfile "/run/named/session.key";# 引入加密策略配置文件。include "/etc/crypto-policies/back-ends/bind.config";
};# 日志设置
logging {# 定义一个日志通道channel default_debug {file "data/named.run"; # 日志文件位置severity dynamic; # 动态日志级别};
};# 根区配置
zone "." IN {type hint; # 类型为“hint”,意味着这是根域的提示。file "named.ca"; # 指向根域的文件。
};# 引入其他配置文件
include "/etc/named.rfc1912.zones"; # RFC1912推荐的区域文件。
include "/etc/named.root.key"; # 根密钥文件,用于DNSSEC。

3.1.2 /var/named目录文件

/var/named目录文件解析

目录结构解析:- data- 用途:存储BIND运行时生成的数据,如DNS查询日志和统计信息。- dynamic- 用途:存放动态DNS更新的记录,用于DDNS服务。- named.ca- 用途:根提示文件,包含根DNS服务器地址,用于互联网DNS解析。- named.empty- 用途:空的DNS区域文件,用于特殊配置。- named.localhost- 用途:定义`localhost`的DNS记录,包含本地回环地址。- named.loopback- 用途:用于定义回环地址的DNS区域,通常用于DNS服务器内部查询。- slaves- 用途:存放从主DNS服务器同步的区域文件,用于备份或辅助解析。

4 开始配置named

   这个文件是 named 的主配置文件。它定义了服务器的运行参数,如监听的 IP 地址、日志文件位置等。

4.1 新增0.168.192.db

        在/var/named目录下新增0.168.192.db文件,配置如下👇


$ORIGIN 0.168.192.in-addr.arpa.
$TTL 86400
@       IN      SOA     dns1.fenglm.yy.     hostmaster.fenglm.yy. (2001062501 ; serial21600      ; refresh after 6 hours3600       ; retry after 1 hour604800     ; expire after 1 week86400 )    ; minimum TTL of 1 day@       IN      NS      dns1.fenglm.yy.
163     IN      PTR     dns1.fenglm.yy.163     IN      PTR    nginx.fenglm.yy.

4.2 新增fenglm.yy.db

$ORIGIN fenglm.yy.
$TTL 86400
@       IN      SOA     dns1.fenglm.yy.     hostmaster.fenglm.yy. (2001062501 ; serial21600      ; refresh after 6 hours3600       ; retry after 1 hour604800     ; expire after 1 week86400 )    ; minimum TTL of 1 dayIN      NS      dns1.fenglm.yy.IN      NS      dns2.fenglm.yy.@       IN      A       192.168.0.163
dns1    IN      A       192.168.0.163
dns2    IN      A       192.168.0.163nginx   IN     A       192.168.0.163www     IN      CNAME   nginx

4.3 修改named.conf

        修改后如下图所示

与原文件相比,我们主要改动了以下内容👇

listen-on port 53 {any;};allow-query     { any; };listen-on-v6 { none; };dnssec-validation no;zone "fenglm.yy" IN {type master;file "fenglm.yy.db";allow-update { none;};
};zone ".168.192.in-addr.arpa" IN {type master;file "0.168.192.db";allow-update { none; };
};

        为了方便看到测试效果,我给大家安装个nginx演示一下,这样可以更直观检验实操效果。

这里我用的是docker-compose来安装nginx的,比较方便快捷,核心安装配置脚本如下👇

(1)docker-compose

version: "3"
services:nginx:image: nginxvolumes:- ./nginx:/etc/nginx/templates- ./nginx/html:/usr/share/nginx/htmlports:- 80:80environment:- NGINX_HOST=fenglm.yy- NGINX_PORT=80restart: always

(2)nginx配置文件

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
### Default server configuration
#
server {listen 80;listen [::]:80;# SSL configuration## listen 443 ssl default_server;# listen [::]:443 ssl default_server;## Note: You should disable gzip for SSL traffic.# See: https://bugs.debian.org/773332## Read up on ssl_ciphers to ensure a secure configuration.# See: https://bugs.debian.org/765782## Self signed certs generated by the ssl-cert package# Don't use them in a production server!## include snippets/snakeoil.conf;server_name nginx.fenglm.yy;location / {proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://nginx:80;client_max_body_size 50M;}# pass PHP scripts to FastCGI server##location ~ \.php$ {#	include snippets/fastcgi-php.conf;##	# With php-fpm (or other unix sockets):#	fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;#	# With php-cgi (or other tcp sockets):#	fastcgi_pass 127.0.0.1:9000;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#	deny all;#}
}# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}

        那么核心配置文件有了,如果会使用docker-compose的话,相信安装也是肯定没有问题的,这里就不多做说明了。

安装完成后的效果如下图👇 

然后我们向html目录中放一张图片66.png,以便一会我们来做效果演示

准备工作都做完了,接下来我们还要进行最关键的一步,那就是运行和测试named啦~_~

5 运行和测试named

5.1 启动named服务

sudo systemctl start named.service

        上图演示一下启动后如果报错了该如何查看错误日志,这里我们看到错误日志中显示的主要问题是:_default/0.168.192.in-addr.arpa/IN: permission denied

5.1.1 排错1:检查区域文件的正确性

named-checkzone 0.168.192.in-addr.arpa 0.168.192.db

5.1.2 排错2:检查named主配置文件的正确性

named-checkconf /etc/named.conf

5.1.3 排错3:从文件权限入手

        通过上图我们发现文件的所有者是flmtest用户,而不是named,猜想问题可能是出在这里,现在我们来更改一下文件的所有者,执行如下命令

sudo chown named:named /var/named/0.168.192.db
sudo chown named:named /var/named/fenglm.yy.db

        确保named用户对该文件具有读权限。通常,区域文件的推荐权限是640(即所有者有读写权限,组有读权限),可以使用chmod命令设置👇

sudo chmod 640 /var/named/0.168.192.db
sudo chmod 640 /var/named/fenglm.yy.db

5.1.4 排错4:检查SELinux状态

        如果上面的方法都解决不了问题,那么这一步将是你解决报错问题的关键步骤,我们可以临时关闭SELinux看看是否可解决问题

如上图所示,果然是SElinux的问题

        之前的文章中我有提到,SELinux 是一个强大的安全工具,它可以防止许多类型的漏洞和攻击,因此,不建议永久禁用 SELinux,所以这里我就来演示一下不关闭SELinux的情况下我们要怎么去解决这个报错问题。

        我们也可以通过下面命令查看SELinux日志来确认SELinux是否确实是导致权限问题的原因

sudo ausearch -m avc -c named | audit2why

        如果SELinux确实是导致问题的原因,我们需要更新受影响文件的SELinux上下文,以便named服务能够访问它们,可以使用semanage为文件添加正确的上下文规则👇

sudo semanage fcontext -a -t named_zone_t "/var/named/fenglm.yy.db"

        然后,使用restorecon应用这些更改👇

sudo restorecon -v /var/named/fenglm.yy.db

        再重新运行一下named服务,这时我们发现问题已经解决了✌

测试一下我们DNS服务器配置的域名是否解析成功👇

sudo dig @localhost nginx.fenglm.yy

解析成功啦

        好,那接下来我们使用该域名访问一下我们之前上传的66.png图片,首先我们要先在客户端机器上设置一下DNS,如下图所示👇

然后我们用cmd命令验证一下,发现如下问题👇

        这时我们需要检查一下我们的防火墙,如果防火墙正处于开启状态,则需要确保防火墙规则允许 DNS 流量,因为DNS 使用的是 UDP 和 TCP 协议的 53 端口,咱放开53端口👇

firewall-cmd --zone=public --add-port=53/tcp --permanent
firewall-cmd --zone=public --add-port=53/udp --permanent

重载防火墙配置,以更改生效👇

firewall-cmd --reload

        然后我们再来测试一下,发现没有问题了,这个时候我们就可以使用我们配置好的自定义域名来访问我们nginx中预先放置好的66.png图片了

问题全部解决

5.2 浏览器访问查看运行效果

5.2.1 IP直接访问👇

http://192.168.0.163/66.png

 5.2.2 通过自定义域名访问👇

http://nginx.fenglm.yy/66.png

        也可以这样http://www.fenglm.yy/66.png访问哦✌,因为我们做了相关的配置,忘了的小伙伴可以往上翻,看看我们之前配置文件中是咋配的!


        至此,我们已经对 BIND 和 named 的基础用法做了详尽的阐述。这些内容应当足够作为大家的入门学习参考。随着我在这个领域不断深入研究,我希望在未来能够探索并分享 BIND 的更多高级特性。敬请大家持续关注,更多精彩内容即将呈现!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

typescript 中 infer 用法

infer 介绍 infer 一般在 extends 子语句中,infer 会引入一个待推断的类型变量 (如 infer R) R可以是任意单词字母 这个推断的类型变量可以在有条件类型的 true 分支中被引用 允许出现多个同类型变量的 infer。 基本示例 type ParamType<T> T extends (arg: infer…

kubeadm创建k8s集群

kubeadm来快速的搭建一个k8s集群&#xff1a; 二进制搭建适合大集群&#xff0c;50台以上。 kubeadm更适合中下企业的业务集群。 部署框架 master192.168.10.10dockerkubelet kubeadm kubectl flannelnode1192.168.10.20dockerkubelet kubeadm kubectl flannelnode2192.168.1…

新火种AI|福布斯Top50,估值高达50亿,这家AI法律公司令人震惊

2023年3月&#xff0c;OpeAI以雷霆之势推出了ChatGPT&#xff0c;为AI产业带来了颠覆性的进展&#xff0c;让所有人为之震惊。其中有一项对于ChatGPT的测试还引起了了不小的轰动&#xff0c;当时美国伊利诺伊理工大学芝加哥肯特法学院称&#xff0c;GPT-4通过了美国律师资格考试…

嵌入式视频播放器(mplayer)

1.文件准备&#xff1a; MPlayer-1.0rc2.tar.bz2 libmad-0.15.1b.tar.gz 直接Git到本地 git clone https://gitee.com/zxz_FINE/mplayer_tarball.git 2.文件夹准备&#xff1a; src存放解压后的源码文件&#xff0c;target_Mplayer存放编译安装的目标文件 mkdir src targe…

将本地工作空间robot_ws上传到gitee仓库

git config --global user.name "geniusChinaHN" git config --global user.email "12705243geniuschinahnuser.noreply.gitee.com" cd ~/robot_ws #git init#创建原始仓库时候用 git add . git commit -m "上传文件内容描述" #git remote add r…

​iOS实时查看App运行日志

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 &#x1f4dd; 摘要&#xff1a; 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具&#xff0c;我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

009:vue结合el-table实现表格行拖拽排序(基于sortablejs)

文章目录 1. 实现效果2. 安装 sortablejs 插件3. 完整组件代码4. 注意点 1. 实现效果 2. 安装 sortablejs 插件 sortablejs 更多用法 cnpm i --save sortablejs3. 完整组件代码 <template><div class"home"><div class"body"><el-ta…

pytorch深度学习笔记(共计169页,基于本人听完B站小土堆PyTorch深度学习快速入门教程所写)

一、笔记视频 pytorch深度学习&#xff08;共计169页&#xff0c;基于本人听完B站小土堆PyTorch深度学习快速入门教程所写&#xff09; 二、获取方式 方式一&#xff1a; 点击下面的链接 pytorch深度学习笔记 如果链接无法打开 直接复制下方链接即可 https://mall.bilibili.c…

appium入门基础

介绍 appium支持在不同平台的UI自动化&#xff0c;如web,移动端,桌面端等。还支持使用java&#xff0c;python&#xff0c;js等语言编写自动化代码。主要用于自动化测试脚本&#xff0c;省去重复的手动操作。 Appium官网 安装 首先必须环境有Node.js用于安装Appium。 总体来…

【前缀和】【分类讨论】【二分查找】2983:回文串重新排列查询

作者推荐 【动态规划】【字符串】C算法&#xff1a;正则表达式匹配 本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 二分查找算法合集 回文串重新排列查询 给你一个长度为 偶数 n &#xff0c;下标从 0 开始的字符…

Pandas数据可视化

pandas库是Python数据分析的核心库 它不仅可以加载和转换数据&#xff0c;还可以做更多的事情&#xff1a;它还可以可视化 pandas绘图API简单易用&#xff0c;是pandas流行的重要原因之一 Pandas 单变量可视化 单变量可视化&#xff0c; 包括条形图、折线图、直方图、饼图等 …

精确率(Precision,P),召回率(Recall,R)以及F1值(F1-score,F1)

狗狗识别系统的例子&#xff1a; 假设我们有两个集合&#xff1a; 实际狗狗的集合&#xff08;实际真正是狗狗的图片&#xff09;&#xff1a;A我们识别为狗狗的集合&#xff08;我们认为是狗狗的图片&#xff09;&#xff1a;B 精确率&#xff08;Precision&#xff0c;P&am…

Codeium在IDEA里的3个坑

转载自Codeium在IDEA里的3个坑&#xff1a;无法log in&#xff0c;downloading language server和中文乱码_downloading codeium language server...-CSDN博客文章浏览阅读1.7w次&#xff0c;点赞26次&#xff0c;收藏47次。Codeium安装IDEA插件的3个常见坑_downloading codeiu…

一文初识Linux进程(超详细!)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;HEART BEAT—YOASOBI 2:20━━━━━━️&#x1f49f;──────── 5:35 &#x1f504; ◀️ ⏸ ▶️ ☰ …

Linux实战:部署基于Postfix 与 Dovecot 的邮件系统

一、电子邮件系统简介 在电子邮件系统中&#xff0c;为用户收发邮件的服务器名为邮件用户代理&#xff08;Mail User Agent&#xff0c;MUA&#xff09;&#xff0c;MTA &#xff08;邮件传输代理&#xff09;的工作职责是转发处理不同电子邮件服务供应商之间的邮件&#xff0…

Java EE Servlet之Cookie 和 Session

文章目录 1. Cookie 和 Session1.1 Cookie1.2 理解会话机制 (Session)1.2.1 核心方法 2. 用户登录2.1 准备工作2.2 登录页面2.3 写一个 Servlet 处理上述登录请求2.4 实现登录后的主页 3. 总结 1. Cookie 和 Session 1.1 Cookie cookie 是 http 请求 header 中的一个属性 浏…

网络交换机端口管理会面临的问题

交换机端口管理是跟踪网络交换机及其端口连接详细信息的过程&#xff0c;在大型网络中&#xff0c;交换机端口管理过程通常使用自动化交换机端口管理工具执行。 通过网络交换机端口提供的完全控制和可见性使交换机端口管理工具在管理网络时必不可少&#xff0c;在网络中部署交…

【SpringCloud】从实际业务问题出发去分析Eureka-Server端源码

文章目录 前言1.EnableEurekaServer2.初始化缓存3.jersey应用程序构建3.1注册jeseryFilter3.2构建JerseyApplication 4.处理注册请求5.registry&#xff08;&#xff09; 前言 前段时间遇到了一个业务问题就是k8s滚动发布Eureka微服务的过程中接口会有很多告警&#xff0c;当时…

Halcon闭运算closing

Halcon闭运算 文章目录 Halcon闭运算 闭运算的计算步骤&#xff0c;为先膨胀&#xff0c;后腐蚀。这两步操作能将看起来很接近的元素&#xff0c;如区域内部的空洞或外部孤立的点连接成一体&#xff0c;区域的外观和面积也不会有明显的改变。通俗地说&#xff0c;就是类似于“填…

解决Hive在DataGrip 中注释乱码问题

注释属于元数据的一部分&#xff0c;同样存储在mysql的metastore库中&#xff0c;如果metastore库的字符集不支持中文&#xff0c;就会导致中文显示乱码。 不建议修改Hive元数据库的编码&#xff0c;此处我们在metastore中找存储注释的表&#xff0c;找到表中存储注释的字段&a…