BIND 9.11.*版本可以yum直接安装

安装BIND组件,开启DNS服务,检查状态

yum install bind bind-utils
systemctl start named
systemctl enable named
systemctl status named

开启DNS服务请求通过防火墙 firewall-cmd --permanent --add-service=dns或者firewall-cmd --zone=public --add-port=53/udp --permanent

systemctl start firewalld.service
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
firewall-cmd --list-all

编辑网卡配置文件,将DNS1服务器指向本机IPADDR实际IP

vim /etc/sysconfig/network-scripts/ifcfg-ens192

重启网卡

systemctl restart network

编辑主配置文件named.conf  别人的配置详解链接

vim /etc/named.conf

注意:这里如果不是设置为any而是改成0.0.0.0/0这样的话,就是仅响应IPv4地址的dns请求。

allow-query { 0.0.0.0/0; };

forward first; 或者forward only; //转发器选项,可以设置为first或only,当客户端发起DNS解析请求时,如果参数为first,而当前服务器缓存中无对应缓存时,会向转发器请求DNS解析记录,如果参数为only,则无论服务器是否有对应的缓存,均向转发器请求DNS解析记录。设置为only可以避免出现服务器缓存造成的DNS解析错误,但是会大大降低DNS解析效率并增加服务器压力,根据目前的运营需求,我们使用first即可

检查语法命令:named-checkconf   查看帮助命令:man named.conf

root@DNS-TianJin-T01:/root#named-checkconf
root@DNS-TianJin-T01:/root#

没有错误返回说明一切正常。一定要先检查语法再重启服务,不然named服务会挂掉,影响别人使用。

保存退出后,刷新配置,必须执行rndc flush,配置才能刷新成功。

systemctl reload named
systemctl restart named
rndc reload
rndc flush //刷新本地全部缓存
rndc flushname example.com //刷新指定域名缓存

要检查 bind 软件包的版本,可以运行以下命令:

rpm -qa | grep bind

要查看 bind 软件包的详细信息,可以运行以下命令:

rpm -qi bind

抓包检查,这是一轮完整的DNS服务器解析响应过程

root@DNS-TianJin-T01:/root#tcpdump -i ens192 udp port 53 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
10:24:48.601888 IP 10.50.101.26.60395 > 10.50.100.65.53: 15626+ A? extshort.weixin.qq.com. (40)
10:24:48.603145 IP 10.50.100.65.46682 > 123.150.150.150.53: 61685+ A? extshort.weixin.qq.com. (40)
10:24:48.606635 IP 123.150.150.150.53 > 10.50.100.65.46682: 61685 9/2/6 CNAME short.weixin.qq.com., A 117.89.176.67, A 117.89.176.31, A101.91.37.29, A 101.227.131.222, A 101.91.37.39, A 180.101.242.227, A 180.101.242.212, A 101.227.131.167 (340)
10:24:48.607320 IP 10.50.100.65.57032 > 123.150.150.150.53: 61229+ A? short.weixin.qq.com. (37)
10:24:48.610577 IP 123.150.150.150.53 > 10.50.100.65.57032: 61229 8/2/6 A 117.89.176.31, A 117.89.176.67, A 180.101.242.212, A 180.101.242.227, A 101.227.131.222, A 101.227.131.167, A 101.91.37.29, A 101.91.37.39 (317)
10:24:48.611156 IP 10.50.100.65.53 > 10.50.101.26.60395: 15626 9/13/6 CNAME short.weixin.qq.com., A 101.227.131.222, A 101.91.37.29, A 180.101.242.227, A 117.89.176.31, A 101.227.131.167, A 117.89.176.67, A 101.91.37.39, A 180.101.242.212 (508)

以下的案例是光有请求没有回应的案例

这时,应检查
1、BIND服务是否启用

2、防火墙是否打开,若打开是否放行了DNS协议

3、检查BIND配置文件 vim /etc/named.conf port53端口的是否为any访问,将这些改成any

检查监听端口 ss -ntul

以下是一些常见的 BIND 9.11.4 日志文件名称和默认位置的示例:

  1. named.lognamed.run:这是主要的 BIND 服务器日志文件,记录了服务器的运行情况、事件和错误信息。在某些系统中,可能以日期作为后缀,例如 named.log.2023-06-14。通常位于 /var/log/ 目录下。

  2. query.log:该日志文件记录 BIND 服务器接收到的 DNS 查询请求的详细信息,如查询类型、查询来源和响应时间等。通常位于 /var/log/ 目录下。

  3. security.log:该日志文件记录了 BIND 服务器的安全事件,如拒绝访问、拒绝转发等。通常位于 /var/log/ 目录下。

root@DNS-T01:/#find / -name named.run
/var/named/data/named.run
root@DNS-T01:/#cd /var/named/data/
root@DNS-T01:/var/named/data#ls
named.run named.run-20230528 named.run-20230604 named.run-20230611
root@DNS-T01:/var/named/data#

定制脚本,每小时自动检查

cd /opt
vim /opt/dns_health_check.sh

在脚本/opt/dns_health_check.sh里添加如下命令

#!/bin/bash
date +"%Y-%m-%d %H:%M:%S"
# 检查 BIND 服务状态
bind_status=$(systemctl is-active named.service) if [ "$bind_status" != "active" ]; then
echo "BIND 服务未运行或出现错误,正在尝试重启"
sudo systemctl restart named
sudo rndc reload
dig www.baidu.com +short
exit 1
fi # 检查 DNS 解析
dns_query=$(dig www.baidu.com +short) if [ -z "$dns_query" ]; then
echo "DNS 解析未返回任何结果。"
echo "执行 DNS 重启操作..."
sudo systemctl restart named
sudo rndc reload
echo "执行 DNS 缓存清理操作..."
sudo rndc flush
echo "DNS 服务已重启。"
else
echo "DNS 解析正常。"
echo "www.gwmfc.com的解析为:"
dig www.gwmfc.com +short
fi

给脚本增加可运行权限

chmod +x dns_health_check.sh
crontab -e

在crontab里添加下面内容,wq保存退出

# 每小时执行一次
0 * * * * /opt/dns_health_check.sh >> /opt/dns_health_check.log 2>&1

看到这样的显示说明定期执行成功

root@DNS-TianJin-T01:/opt#crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

使用 crontab -e 命令编辑 crontab 文件时,它显示 "no crontab for root - using an empty one",然后安装了一个新的 crontab。

这段输出表示当前用户 root 没有任何已存在的 crontab 配置。因此,系统会创建一个空的 crontab 文件,并将您所编辑的内容保存为新的 crontab。

当你第一次使用 crontab -e 命令编辑 crontab 文件时,或者在没有先前的 crontab 配置的情况下编辑 crontab 文件时,会显示类似的输出。安装新的 crontab 意味着您的编辑内容已成功保存为新的定时任务配置。


拓展材料

TTL值设置

zone "example.com" {
type stub;
masters { 1.2.3.4; };
TTL 1800; // 设置 example.com 的缓存时间为 3600 秒
};

全局设置TTL值设置

options {
max-cache-ttl 300; // 设置本地缓存的最大 TTL 为 300 秒
max-ncache-ttl 300; // 设置负向缓存的最大 TTL 为 300 秒
}
zone "example.com" {
type stub;
masters { 192.168.1.100; };
forwarders { 8.8.8.8; 8.8.4.4; };
};

这段配置表示针对 example.com 域名创建了一个 type stub 区域,并指定了主服务器的 IP 地址为 192.168.1.100。同时还配置了转发器(forwarders)为 8.8.8.88.8.4.4

让我们逐行分析这段配置的含义:

  1. zone "example.com":定义了一个名为 example.com 的区域。

  2. type stub:指定了区域的类型为 stub,表示这是一个 stub 区域。

  3. masters { 192.168.1.100; }:指定了 example.com 区域的主服务器的 IP 地址为 192.168.1.100。这意味着该区域将向该主服务器发送查询请求以获取域名解析结果。

  4. forwarders { 8.8.8.8; 8.8.4.4; }:配置了转发器(forwarders),指定了转发查询到的域名给 8.8.8.88.8.4.4 这两个 DNS 服务器。当 BIND 服务器无法从 192.168.1.100 获取到域名解析结果时,它将向这两个转发器发送查询请求,并将它们返回的结果缓存起来。

因此,这段配置的作用是设置 example.com 域名使用 192.168.1.100 作为主服务器,同时使用 8.8.8.88.8.4.4 作为转发器。当 BIND 服务器无法从主服务器获取到解析结果时, 将首先使用 8.8.8.8 进行解析,如果没有结果,则使用 8.8.4.4 进行解析。并将查询结果缓存起来。这样可以提高解析效率并减少对主服务器的查询负载。

CentOS配置DNS服务器(BIND 9.11.*版本),并配置3种转发模式的更多相关文章

  1. redhat配置dns服务器bind

    配置Oracle11g的RAC需要使用DNS服务器来解析SCAN IP,本文就是以此为例介绍bind服务器的使用.首先科普一下bind服务器,属于企业级产品了,还是开源的: Bind是Berkeley ...

  2. 在Debian上用Bind 配置DNS服务器

    1 什么是DNS 初学者可能不理解DNS到底是什么,干什么用.我是在1998年大学毕业时才听说这个词的.那时我在聊天室碰到潍坊信息港的一个网管,我恬不知耻地说我也是个网管,他说也维护DNS吗?我说,D ...

  3. 烂泥:centos安装及配置DNS服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要在centos配置DNS服务器,要先安装DNS软件BIND.当然我们也可以安装其他的DNS软件,比如国内的开源DNS软件DNSPod. 在此我们以通过 ...

  4. centos6.5环境DNS-本地DNS服务器bind的搭建

    centos6.5环境DNS-本地DNS服务器bind的搭建 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库, ...

  5. Linux下搭建Oracle11g RAC(2)----配置DNS服务器,确认SCAN IP可以被解析

    从Oracle 11gR2开始,引入SCAN(Single Client Access Name) IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层,即是SCAN IP和SCAP IP  ...

  6. centOS7配置DNS服务器

    世上无难事只怕有心人,遇事千万千万不要抵触,消极的情绪是失败之母,一点一滴,踏踏实实是通往幸福的捷径. 历经激动,受挫,抵触和鼓励以及征服,终于配好了让我欢喜让我忧的dns.在这里记录下来,希望能够给 ...

  7. CentOS7安装和配置dns服务器

    (1)dns介绍 1.基本介绍 名字解析: NetBIOS名:localhost wins hosts FQDN:完全限定域名,www.baidu.com hosts文件: 作用:实现名字解析,主要为 ...

  8. centos 7.3 服务器环境搭建——MySQL 安装和配置

    centos 7.3 服务器环境搭建——MySQL 安装和配置服务器信息如下:服务器:阿里云系统 centos 7.3 (阿里云该版本最新系统)mysql版本:5.7.18 (当前时间最新版本)连接服 ...

  9. 如何配置DNS服务器(局域网——域名指向某个IP地址)

    单击“开始”,指向“管理工具”,然后单击“DNS”,打开 DNS 管理器.   如有必要,向管理单元添加适用的服务器,然后连接该服务器.在控制台树中,单击适用的 DNS 服务器.   在“操作”菜单上 ...

  10. 配置DNS服务器IP

    #############################脚本功能及说明#################### #该脚本用来在本地服务器上配置DNS服务器IP #创建时间:2014-10-22 ## ...

随机推荐

  1. 「codeforces - 585E」Present for Vitalik the Philatelist

    link. 设 \(\displaystyle f(x) = \# S', s.t. S' \subseteq S, S' \neq \varnothing, \gcd(S') = x\),\(g(x ...

  2. Python经典编程题40题(二)

    Python经典编程题40题(二)    题目 给你一个list L, 如 L=[2,8,3,50], 对L进行降序排序并输出, 如样例L的结果为[50,8,3,2] 输入示例 输入:L = [4, ...

  3. 一个简单的C4.5算法,采用Python语言

    Test1.py 主要是用来运行的 代码如下: # -*- coding: utf-8 -*- from math import log import operator import treePlot ...

  4. Avalonia 实现视频聊天、远程桌面(源码,支持Windows、Linux、国产OS)

    现在最火的.NET跨平台UI框架莫过于Avalonia了.Avalonia 基于.NET Core,因此它可以运行在任何支持.NET Core的平台上.之前基于CPF跨平台UI框架写过一个视频聊天的d ...

  5. Java替换RequestBody和RequestParam参数的属性

    Java替换RequstBody和RequestParam参数的属性 本文主要讲解在Java环境中如何替换RequestBody和RequestParam参数中的属性 背景 近期由于接手的老项目中存在 ...

  6. springboot整合shiro框架学习

    springboot整合shiro框架做用户认证与授权 springboot整合shiro框架的流程主要分为: 导入shiro依赖 <dependency> <groupId> ...

  7. .NET6发布项目到腾讯云Windows2012R全网最详细教程

    注意:本次使用腾讯云作为本次的演示 1.创建服务器及连接 1.1 请先在腾讯云.阿里云等创建实例 1.2 打开远程连接工具输入在腾讯云获取的公网iP输入计算机 1.3 根据图片点击连接 1.4 输入服 ...

  8. IT运营与DevOps:有何不同?

    IT 运营和 DevOps 满足许多现代企业密切相关的需求.然而,尽管这两种角色之间有许多相似之处,但也有重要的区别,将 IT 运营与 DevOps 混为一谈是错误的. 本文通过解释每种类型的角色是做 ...

  9. KingabseES例程-事实数据与规则的匹配校验

    KingabseES例程-事实数据与规则的匹配校验 背景 使用规则,对数据进行校验,比如电商的用户购物订单,是否合法.这就需要订单的多维度,如 用户.地区.物流.支付手段.供应商 等各类信息,进行动态 ...

  10. ereere

    发现没有main函数 搜索start发现有,不过f5后发现不太像 然后在字符串那里搜索flag,点进去,然后f5但是失败了,最后发现得先定位到对应的函数处才能f5  f5 逐个查看函数,找到sub_4 ...