内网DNS系统搭建记录

2022-10-10  本文已影响0人  A二十一画

因为最近处理公司内网DNS系统,借此机会记录一下DNS的相关知识以防后面遗忘。

在日常使用中,我们访问网站常用的是域名,即www.baidu.com,但是这个域名只是为了使用方便而增加的一个方式,我们可以看做别名,其访问域名,计算机会将其解析为IP地址来将请求转发到相对应的机器上进行对请求的处理。而将域名转为或者说将域名和IP地址对应起来的方式叫做DNS(域名解析服务)。

DNS简介

DNS提供的服务分为两种:
正向解析:也就是常用将域名解析为IP地址,就可以通过域名来查找对应的IP地址,例如:www.baidu.com -> xxx.xxx.xxx.xxx
反向解析:也称逆向解析,是将IP地址解析为域名,可以通过IP地址来寻找对应的域名,例如:xxx.xxx.xxx.xxx -> www.baidu.com

DNS服务使用的是两个端口,一个是UDP的53端口,用于解析DNS,另一个是TCP的53端口,用于连接DNS。

DNS域

DNS域名的可以看做倒树状结构:根域名 -> 顶级域名 -> 二级域名 -> 三级域名 -> 四级域名
以下是从网上找到的一个图片可以用作参考:


202210101118373.jpeg

根域名:‘.’,一般在写域名时会省略
顶级域名:由国家或者组织使用,例如:com\cn\edu...
二级域名:在顶级域名下个人或者组织使用的,例如:baidu.com
三级域名:在已经注册的二级域名下衍生的,例如:test.baidu.com、dd.baidu.com

查询过程

查询过程老生常谈了,这里只做简单的查询过程描述。一般来说,浏览器输入域名之后,DNS解析会经过一下几个过程:
 -- 首先搜索浏览器的DNS缓存,缓存中维护一张域名与IP地址的对应表;
 -- 若浏览器中没有命中,则会从操作系统的DNS中搜索;
 -- 若操作系统中的DNS缓存依然没有的话,则会向本地DNS服务器发送域名,本地DNS服务会递归查询自己的DNS缓存,查找成功则返回结果;
 -- 若本地DNS服务器依然没有命中,则会向上级DNS服务进行迭代查询;
  1、本地DNS服务器向根DNS服务发起请求,获取顶级DNS服务器地址;
  2、本地DNS服务器向顶级DNS服务器发起请求,获取权限DNS服务器地址;
  3、本地DNS服务器向权限DNS服务器地址发起请求,获取该域名对应的IP地址;
 -- 本地DNS服务器将得到的IP地址返回给操作系统,同时增加一条缓存;
 -- 操作系统将IP地址返回给浏览器,同时增加一条缓存;
 -- 浏览器获取正确的解析地址,也会增加一条缓存;

202210100932684.jpeg

内网DNS服务器搭建

DNS服务器:192.168.33.131
测试服务器:192.168.33.128
软件版本:bind-9.11.4-26.P2.el7_9.9.x86_64

安装bind

# 安装bind服务
[root@localhost ~]# yum -y install bind
# 查看bind软件的相关文件
[root@localhost ~]# rpm -qc bind
/etc/logrotate.d/named
/etc/named.conf     # 主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones    # 区域配置文件
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost  # 区域数据配置文件(正向)
/var/named/named.loopback   # 区域数据配置文件(反向)

配置文件介绍

主配置文件:/etc/named.conf

# 全局选项
options {
    # 定义监听的IP地址和端口,若注释则监听全部IP的53端口
    listen-on port 53 { 192.168.33.131; };
    # 定义IPV6地址
    listen-on-v6 port 53 { ::1; };
    # 定义区域数据文件位置
    directory   "/var/named";
    # 定义 dump cache位置
    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";
    # 在收到rndc secroots指令后,服务器转储安全根的目的文件的路径名。默认named.secroots
    recursing-file  "/var/named/data/named.recursing";
    # 指定服务器在通过rndc recursing命令指定转储当前递归请求到的文件路径。默认named.recursing
    secroots-file   "/var/named/data/named.secroots";
    # 指定允许哪些主机可以进行普通的DNS查询,可以是关键字:any/localhost/none,也可以是IPV4,IPV6地址
    allow-query     { any; };
    # 设置DNS转发方式
    #   - first:优先使用forwarders DNS解析,查询不到使用本地DNS服务解析;
    #   - only: 只使用forwarders DNS解析,查询不到返回查询失败;
    forward first;
    # 转发地址
    forwarders {
        114.114.114.114;
        202.106.0.20;
    };
    # 设置递归查询
    recursion yes;
    # 是否支持dnssec开关
    dnssec-enable yes;
    # 是否支持dnssec确认开关
    dnssec-validation yes;

    # ISC DLV KEY 路径
    bindkeys-file "/etc/named.root.key";
    # 指定管理密钥路径
    managed-keys-directory "/var/named/dynamic";
    # 指定服务器进程pid文件路径
    pid-file "/run/named/named.pid";
    # named生成的TSIG session key写入文件的路径
    session-keyfile "/run/named/session.key";
};

# 定义日志
logging {
        channel default_debug {
                file "data/named.run";
                # 设置当前日志调试级别
                severity dynamic;
        };
};

# 定义区域
zone "." IN {
    # 域(master)、从域(slave)、缓存域(hint)、转发域(forward)、stub 只负责主域的NS记录
    type hint;
    # 指定根域的文件
    file "named.ca";
};

# 正反向区域文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

区域配置文件:/etc/named.rfc1912.zones

# 设置维护域
zone "localhost.localdomain" IN {
    # 指定为主域服务器
    type master;
    # 指定区域数据的zone文件名
    file "named.localhost";
    # 是否允许辅助dns更新: allow-updata
    allow-update { none; };
};

# IPV6的PTR配置文件设定
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
    type master;
    file "named.loopback";
    allow-update { none; };
};

# 配置PRT维护域
zone "1.0.0.127.in-addr.arpa" IN {
    type master;
    file "named.loopback";
    allow-update { none; };
};

区域数据配置文件

/var/named/named.localhost(正向)
# DNS记录过期时间
$TTL 1D
# 第一个@表示当前区域的名字;第二个@表示主dns服务器区域记录 SOA 表示dns的SOA记录类型: rname.invalid. 表示管理该域名管理员邮箱地址(其中'.'代表电子邮件中的'@')
@   IN SOA  @ rname.invalid. (
                    # 序列号
                    0   ; serial 
                    # 更新时间
                    1D  ; refresh
                    # 重试时间
                    1H  ; retry
                    # 过期时间
                    1W  ; expire
                    # 缓存时间
                    3H )    ; minimum
    # NS:NameServer 即指定dns区域服务器记录
    NS  @
    A   127.0.0.1
    AAAA    ::1
/var/named/named.loopback(反向)
$TTL 1D
@   IN SOA  @ rname.invalid. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    NS  @
    A   127.0.0.1
    AAAA    ::1
    # 反向与正向代理不同点,一定要记得域名后面的'.'
    PTR localhost.

添加新解析记录 - 正文开始

以test.com为例

添加的过程基本是 - 添加区域文件 -> 将区域文件位置添加到主配置文件中 -> 添加区域数据文件。
顺序可以乱,但是不能落下,区域文件有两种:
1、新建区域文件,需要添加之后将新增区域文件位置增加到主配置文件中;
2、或者直接将解析记录添加到默认的区域文件(/etc/named.rfc1912.zones),不需要再次修改主配置文件。

新增区域文件

[root@localhost ~]# vim /etc/named.test.zones
# 正向
zone "test.com" IN {
        type master;
        file "test.com.zone";
};
# 反向(若没有反向解析的需求,可以省略,下面区域数据配置文件也不需要反向解析的配置文件,即/var/named/192.168.33.zone)
zone "33.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.33.zone";
};

修改主配置文件

[root@localhost ~]# vim /etc/named.conf
......
include "/etc/named.rfc1912.zones";
# 新增区域文件位置
include "/etc/named.test.zones";
include "/etc/named.root.key";

新增区域数据配置文件

[root@localhost ~]# cd /var/named/
[root@localhost named]# cp -a named.localhost test.com.zone
[root@localhost named]# vim test.com.zone
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
# 新增解析记录,将dddd.test.com解析为192.168.33.129
dddd IN A 192.168.33.129
[root@localhost named]# cp -a named.loopback 192.168.33.zone
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
129     PTR     dddd.test.com.

重启DNS服务

[root@localhost ~]# systemctl restart named

测试解析

在192.168.33.128上配置DNS指向192.168.33.131,来测试是否可正常解析dddd.test.com

[root@localhost ~]# vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.33.131

[root@localhost ~]# systemctl restart network
[root@localhost ~]# nslookup dddd.test.com
Server:     192.168.33.131
Address:    192.168.33.131#53

Name:   dddd.test.com
Address: 192.168.33.129

[root@localhost ~]# nslookup 192.168.33.129
129.33.168.192.in-addr.arpa name = dddd.test.com.
上一篇下一篇

猜你喜欢

热点阅读