DNS域名解析服务器搭建

基础介绍

DNS 从哪里获取 IP 地址?
  1. 本地缓存: DNS服务器会将先前查询过的域名和对应的IP地址存储在本地缓存中,以便在后续查询中加快响应速度。如果之前已经查询过某个域名,DNS服务器会直接从本地缓存中获取对应的IP地址。
  2. 递归查询: 如果本地缓存中没有目标域名的IP地址,DNS服务器会发起递归查询。它首先向根域名服务器发送查询请求,根域名服务器会返回指向负责顶级域(如.com、.net、.org等)的权威域名服务器的IP地址。然后,DNS服务器会向权威域名服务器发送查询请求,直到获取到目标域名的IP地址或者查询失败。
  3. 转发查询: DNS服务器还可以配置为转发查询,即将未命中本地缓存的查询请求转发给其他DNS服务器处理。通常情况下,本地DNS服务器会将这些请求发送给ISP(Internet Service Provider,互联网服务提供商)提供的DNS服务器或者其他可靠的DNS服务器进行处理。
DNS的作用
  1. 域名解析: DNS最主要的作用是将域名解析为对应的IP地址。当用户在浏览器中输入一个域名时,DNS系统会将这个域名转换为相应的IP地址,然后浏览器才能通过IP地址找到并访问目标网站。
  2. 负载均衡: 通过DNS解析可以实现负载均衡,即将多个服务器的域名解析为不同的IP地址并在不同的时间将其返回给用户。这样可以分散流量到多台服务器上,提高网站的访问速度和稳定性。
  3. 邮箱服务器定位: DNS也用于指定邮件服务器的IP地址。当发送电子邮件时,邮件服务器通过DNS解析找到收件人域名的邮件服务器IP地址,然后发送邮件。
  4. 防止DNS劫持: DNS还能够通过各种方式来防止DNS劫持,即恶意修改DNS解析结果以实施网络攻击或监视用户活动的行为。例如,DNSSEC(DNS Security Extensions)可以通过数字签名来保护DNS解析结果的完整性和真实性。
  5. 提供其他网络服务: DNS还可以用于提供其他网络服务,如反向DNS解析(将IP地址解析为域名)、动态域名解析(将动态IP地址映射到域名)、域名注册等。

BIND 简介:
BIND 全称为 Berkeley Internet Name Domain(伯克利因特网名称域系统),BIND 主要有三个版本:BIND4、BIND8、BIND9
BIND8 版本:融合了许多提高效率、稳定性和安全性的技术,而 BIND9 增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等

基础环境

mv /etc/yum.repos.d/CentOS-* /tmp/
systemctl disable firewalld --now && setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
curl -o /etc/yum.repos.d/centos.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装DNS服务

[root@dns ~]# yum install -y bind bind-chroot bind-utils

bind-9.9.4-50.el7.x86_64		   # 该包为 DNS 服务的主程序包。
bind-chroot-9.9.4-50.el7.x86_64    # bind-chroot 是 bind 的一个功能,使 bind 可以在一个 chroot 的模式下运行,也就是说,bind 运行时的/(根)目录,并不是系统真正的/(根)目录,只是系统中的一个子目录而已,这样做的目的是为了提高安全性,因为在 chroot 的模式下,bind 可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中。
bind-utils-9.9.4-50.el7.x86_64.rpm #该包为客户端工具,系统默认已经安装的了,它用于搜索域名指令。

DNS 相关配置文件

[root@dns ~]# ll /etc/named.conf

`named.conf 是 BIND 的核心配置文件,它包含了 BIND 的基本配置,但其并不包括区域数据`
`/var/named/ 目录为 DNS 数据库文件存放目录,每一个域文件都放在这里`

修改配置文件

[root@dns ~]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
		# listen-on port 53 { 127.0.0.1; }; 修改为any
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        # allow-query     { localhost; };
        allow-query     { any; };

        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "gxl.com" IN {
        type master;
        file "gxl.com.zone";
        allow-update { none; };
};
zone "169.168.192.in-addr.arpa" IN {
        type master;
        file "gxl.com.arpa";
        allow-update { none; };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
以下是详细配置解释:
  1. options 这个部分包含了DNS服务器的一般选项设置
  2. listen-on port 53 { any; } 指定DNS服务器监听的端口。在这个示例中,DNS服务器监听在53端口,允许任何IP地址连接到该端口。这意味着DNS服务器会接受来自任何IP地址的DNS查询请求
  3. listen-on-v6 port 53 { ::1; } 指定IPv6地址的监听端口。在这个示例中,DNS服务器监听IPv6地址的53端口,只允许本地IPv6地址(::1)连接到该端口
  4. directory "/var/named"; 指定存储DNS服务器相关数据文件的目录路径。在这个示例中,数据文件存储在/var/named目录下
  5. dump-file "/var/named/data/cache_dump.db"; 指定DNS服务器在关闭时将缓存内容写入的文件路径。这个文件通常用于调试和故障排除
  6. statistics-file "/var/named/data/named_stats.txt"; 指定DNS服务器的统计信息输出文件路径,用于记录DNS服务器的运行统计数据
  7. memstatistics-file "/var/named/data/named_mem_stats.txt"; 指定DNS服务器的内存使用统计输出文件路径,用于记录DNS服务器的内存使用情况
  8. recursing-file "/var/named/data/named.recursing"; 指定DNS服务器递归查询的记录文件路径
  9. secroots-file "/var/named/data/named.secroots"; 指定DNS服务器的安全根文件路径
  10. allow-query { any; }; 指定允许查询的IP地址范围。在这个示例中,允许任何IP地址进行DNS查询

定义正向查询

正向查询是最常见的DNS查询方式之一

正向查询用于将域名解析为IP地址,这样用户就可以使用易记的域名来访问互联网上的各种网络资源,而不需要记忆IP地址

在dns配置文件中加入如下信息:

[root@dns ~]# cat /etc/named.conf
zone "gxl.com" IN {
        type master;
        file "gxl.com.zone";
        allow-update { none; };
};
以下是配置详解:
### 需要强调的是file指定的是文件路径
`type master;` 表明这是主 DNS 服务器,负责提供 "example.com" 区域的数据

`file "example.com.zone";` 指定了包含 "example.com" 区域数据的文件的路径

`allow-update { none; };` 指定了允许对区域进行动态更新的权限。在这种情况下,none 表示不允许任何动态更新,因此区域数据只能通过手动编辑区域文件来更新

定义反向查询

反向查询是一种从IP地址到域名的查询方式之一

反向查询主要用于安全审计、网络管理和验证IP地址归属等方面。例如,当收到来自某个IP地址的网络流量时,可以通过反向查询确认该IP地址对应的域名,从而了解到流量的来源

[root@dns ~]# cat /etc/named.conf
zone "169.168.192.in-addr.arpa" IN {
        type master;
        file "gxl.com.arpa";
        allow-update { none; };
};

检测是否语法错误

[root@dns ~]# named-checkconf /etc/named.conf

修改正反区域文件(重点)

进入到DNS服务器相关文件存储目录 /var/named/

named.emptynamed.localhost观察这两个文件 其实是一个实例文件接下来我们复制两份用(找任意一个都可以)

[root@dns ~]# cd /var/named/

[root@dns named]# ll
total 24
drwxr-x---. 7 root  named   61 Apr 17 03:28 chroot
drwxrwx---. 2 named named   23 Apr 17 04:31 data
drwxrwx---. 2 named named   60 Apr 17 04:32 dynamic
-rw-r-----. 1 root  named 2253 Apr  5  2018 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named    6 Oct 16  2023 slaves
[root@dns named]# cp -p named.localhost gxl.com.zone	### 当做正向查询解析来使用
[root@dns named]# cp -p named.localhost gxl.com.arpa	### 当做反向查询解析来使用

修改解析信息(正向)

[root@dns named]# cat gxl.com.zone
$TTL 1D
@       IN SOA  gxl.com. admin.gxl.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN NS   dns.gxl.com.
dns     IN A    192.168.169.204
exam    IN A    192.168.169.204
www     IN A    192.168.169.204
mail    IN A    192.168.169.205
ftp     IN A    192.168.169.204
*       IN A    192.168.169.204    
  1. gxl.com.: 指定了主域名为 gxl.com
  2. admin.gxl.com.: 这个字段指定了负责管理该域名的DNS服务器的邮箱地址,形式为 admin@gxl.comadmin 是指定了这个域名的管理员(或者叫根管理员),而 gxl.com 是该管理员的邮箱地址的域名部分
  3. @ IN NS dns.gxl.com.:这行指定了域名 gxl.com 的DNS服务器是 dns.gxl.com。NS记录(Name Server)指定了管理特定区域的DNS服务器
  4. dns IN A 192.168.169.204:这行指定了主机名 dns 对应的IP地址是 192.168.169.204。A记录(Address Record)用于将域名解析为IPv4地址
  5. exam IN A 192.168.169.204:这行指定了主机名 exam 对应的IP地址是 192.168.169.204
  6. www IN A 192.168.169.204:这行指定了主机名 www 对应的IP地址是 192.168.169.204
  7. mail IN A 192.168.169.204:这行指定了主机名 mail 对应的IP地址是 192.168.169.204
  8. ftp IN A 192.168.169.204:这行指定了主机名 ftp 对应的IP地址是 192.168.169.204
  9. sun IN A 192.168.169.204:这行指定了主机名 sun 对应的IP地址是 192.168.169.204
  10. * IN A 192.168.169.204:这行指定了主机名 * 泛域名解析代表任意主机名

修改解析信息(反向)

[root@dns named]# cat gxl.com.arpa 
$TTL 1D
@       IN SOA gxl.com. admin.gxl.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN NS   dns.gxl.com.
204     IN PTR  dns.gxl.com.
204     IN PTR  www.gxl.com.
204     IN PTR  exam.gxl.com.
204     IN PTR  ftp.gxl.com.
204     IN PTR  sun.gxl.com.

PTR 记录将 IP 地址映射到相应的域名

@ IN NS dns.example.com.:这行指定了该反向区域的DNS服务器是 dns.gxl.com。NS记录(Name Server)指定了管理特定区域的DNS服务器。

  1. 204 IN PTR dns.example.com.:这行指定了IP地址以 204 结尾的主机对应的域名是 dns.gxl.com。PTR记录(Pointer Record)用于将IP地址解析为域名
  2. 204 IN PTR www.gxl.com.:这行指定了IP地址以 204 结尾的主机对应的域名是 www.gxl.com
  3. 204 IN PTR exam.gxl.com.:这行指定了IP地址以 204 结尾的主机对应的域名是 exam.gxl.com
  4. 204 IN PTR ftp.gxl.com.:这行指定了IP地址以 204 结尾的主机对应的域名是 ftp.gxl.com
  5. 204 IN PTR sun.gxl.com.:这行指定了IP地址以 204 结尾的主机对应的域名是 sun.gxl.com

客户机测试

[root@dns ~]# vim /etc/resolv.conf
[root@dns ~]# cat /etc/resolv.conf
# Generated by NetworkManager
#nameserver 114.114.114.114
#nameserver 8.8.8.8
nameserver 192.168.169.204

正向解析

[root@dns ~]# nslookup www.gxl.com
Server:         192.168.169.204
Address:        192.168.169.204#53

Name:   www.gxl.com
Address: 192.168.169.204

[root@dns ~]# host www.gxl.com
www.gxl.com has address 192.168.169.204

反向解析

[root@dns ~]# nslookup 192.168.169.204
204.169.168.192.in-addr.arpa    name = exam.gxl.com.
204.169.168.192.in-addr.arpa    name = www.gxl.com.
204.169.168.192.in-addr.arpa    name = ftp.gxl.com.
204.169.168.192.in-addr.arpa    name = sun.gxl.com.
204.169.168.192.in-addr.arpa    name = dns.gxl.com.

[root@dns ~]# host 192.168.169.204
204.169.168.192.in-addr.arpa domain name pointer ftp.gxl.com.
204.169.168.192.in-addr.arpa domain name pointer exam.gxl.com.
204.169.168.192.in-addr.arpa domain name pointer www.gxl.com.
204.169.168.192.in-addr.arpa domain name pointer dns.gxl.com.
204.169.168.192.in-addr.arpa domain name pointer sun.gxl.com.
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值