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

news2024/11/24 23:51:48

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 ; serial
                        21600      ; refresh after 6 hours
                        3600       ; retry after 1 hour
                        604800     ; expire after 1 week
                        86400 )    ; 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 ; serial
                        21600      ; refresh after 6 hours
                        3600       ; retry after 1 hour
                        604800     ; expire after 1 week
                        86400 )    ; minimum TTL of 1 day


        IN      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.163


nginx   IN     A       192.168.0.163

www     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: nginx
    volumes:
      - ./nginx:/etc/nginx/templates
      - ./nginx/html:/usr/share/nginx/html
    ports:
      - 80:80
    environment:
      - NGINX_HOST=fenglm.yy
      - NGINX_PORT=80
    restart: 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.coloradmin.cn/o/1350275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS学习记录:ROS系统中的激光雷达消息包的数据格式

一、在工作空间中输入source ./devel/setup.bash 二、输入roslaunch wpr_simulation wpb_simple.launch打开机器人仿真环境 三、机器人仿真环境打开成功 四、给机器人围上一圈障碍物 五、再打开一个工作空间终端 六、输入roslaunch wpr_simulation wpb_rviz.launch打开RViz 七、…

Node.js使用jemalloc内存分配器显著减少内存使用

前言 Node.js 默认使用的是 ptmalloc(glibc) 内存分配器,而: 在服务端领域「不会选择默认的 malloc」是一个常识。( 来源 ) ptmalloc 的分配效率较低( 来源 ),对于 长时间、多核 / 多线程 运行…

手机录屏没有声音?让你的录屏有声有色

“有人知道手机录屏怎么录声音吗?今天录制了一个小时的直播视频,后面查看的时候发现没有声音,真的非常崩溃,想问问大家有没有办法,解决这个问题。” 在手机录屏的过程中,有时候我们可能会面临录制视频没有…

第19届楚天春晚在九省通衢大武汉闪亮登场

——中国明星后代女子歌舞团刘亦菲等兼任形象大使 2024年新年伊始,一场以繁荣中国传统文化为主旨的“楚天春晚”全国文旅活动在湖北武汉拉开帷幕!以“文化强省,旅游大省”为神州特色的联合国世界品牌之都,在辞旧迎新的早春来临之…

手机摄影学习

手机摄影学习 基础知识1,成像基本原理2,什么是焦距3,快门(简称s)4,上面功能之间的相互影响5,焦点6,过爆、欠曝7,cmos(感光芯片)、测光、聚焦&…

考研用什么光源比较好?五款好用台灯推荐

人眼对光是非常敏感的,特别是儿童青少年眼睛还在发育的状态来说,光线是至关重要的,于是这次测评就不能马虎,必须要本着专业严谨的态度进行测评,这次测评呢就花了不少钱买下了现在市面上热度很高、或是较有名气的专业款…

贝锐花生壳全新功能:浏览器一键远程访问SSHRDP远程桌面

为了满足特定场景的远程访问需求,如:远程群晖NAS设备、远程SQL Server数据库/MySQL数据库、3389远程桌面(RDP远程桌面)、远程SSH、我的世界游戏联机…… 贝锐花生壳推出了场景映射服务,不仅提供满足相应场景的网络带宽…

机器人活动区域 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 现有一个机器人,可放置于 M x N 的网格中任意位置,每个网格包含一个非负整数编号,当相邻网格的数字编号差值的绝对值小于等于 1 时机器人可以在网格间移动。 问题: 求机器人可活动的最大范围对应的网格点数目。 说明: 网格…

剑指“CPU飙高”问题

一、什么是cpu飙高? 一般指程序运行时cpu占用率过高   linux系统中,我们使用top命令,会看到正在运行进程的cpu使用率等,同时在最上面也会看到总的cpu使用率,当总的cpu使用率过高,如果有运维监控平台&…

听GPT 讲Rust源代码--library/portable-simd

File: rust/library/portable-simd/crates/core_simd/examples/spectral_norm.rs spectral_norm.rs是一个示例程序,它展示了如何使用Portable SIMD库中的SIMD(Single Instruction Multiple Data)功能来实现频谱规范化算法。该示例程序是Rust源…

严格的老师对学生的好处

从踏入学校的大门开始,我们便与老师结下了不解之缘。他们不仅是传授知识的导师,更是陪伴我们成长的良师益友。其中,那些对学生要求严格的老师,更是让我们受益匪浅。他们以严谨的教育态度,为学生点亮了前行的路。 塑造良…

高可用解决方案 Keepalived 概述

概述 Keepalived 介绍 Keepalived 是 Linux 下一个轻量级别的高可用解决方案,通过 **VRRP 协议(虚拟路由冗余协议)**来实现服务或者网络的高可用,可以利用其来解决单点故障。 起初是为 LVS 设计的,一个 LVS 服务会有 …

【字典树Trie】LeetCode-139. 单词拆分

139. 单词拆分。 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s "leetcode&q…

零知识证明(zk-SNARK)- groth16(二)

From Computational Problem to zk-SNARK 本部分就是将计算难题转换为多项式,然后使用zk-SNARK。(注:以下用 P,V 替代 Prover,Verifier) 计算难题->R1CS R1CS(Rank-1 Constraint System)是一种能够将…

连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver‘,亲测有效!!!

Jmeter连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver’ 1.到官方下载驱动注意:根据项目的JDK版本来下载对应的驱动Download | pgJDBC 2.将postgresql-42.2.27.jar复制到lib目录下面, 然后重新启动 连接driver信息如下&#…

三、医学影像云平台(院内PACS叫号系统实践)

1. 业务概述 在云PACS中,排队和叫号系统是最灵活,定制化最强的业务,而且实时性要求高,否则,这里是容易发生医患矛盾的地方,所以,需要慎重。但是,这个系统又有个低要求特点&#xff…

数据库SQL ,零基础入门到精通,看完这一篇就够了!

目录 📚 前言🌴 SQL 介绍 🌼 什么是 SQL🌀 SQL 的类型🌵 学习 SQL 的作用🍄 数据库是什么 🐥 SQL 基础语言学习 🐤 CREATE TABLE – 创建表🐑 INSERT – 插入数据&#…

aspose通过开始和结束位置关键词截取word另存为新文件

关键词匹配实体类: Data EqualsAndHashCode(callSuper false) public class TextConfig implements Serializable {private static final long serialVersionUID 1L;/*** 开始关键词,多个逗号分隔*/private String textStart ;/*** 结束关键词&#x…

第 6 章 统计量及其抽样分布

统计量 卡方分布,t分布,f分布 样本均值的抽样分布 中心极限定理 样本比例的的抽样分布 两个均值之差的抽样分布 样本方差的分布(重要) 两个样本方差比的分布 注意理解下面这个图里面的定义(比较重要&#xff09…

从公司代码仓库更新代码出现错误

错误: 解决:点击idea右上角,将远程代码和本地合并