美文网首页
内网DNS系统搭建记录

内网DNS系统搭建记录

作者: A二十一画 | 来源:发表于2022-10-10 11:19 被阅读0次

    因为最近处理公司内网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.
    

    相关文章

      网友评论

          本文标题:内网DNS系统搭建记录

          本文链接:https://www.haomeiwen.com/subject/prkoartx.html