zoukankan      html  css  js  c++  java
  • DNS:从零搭建公司内网DNS服务器

    写在前面的话

    网上关于 DNS 的文章其实一搜索一大把,但是看别人的文档一般都会有个问题,乱,不讲究,全是 ctrl c + ctrl v,我个人是看不下去的。头皮发麻。所以决定自己来写写这方面的东西,当然很多概念性的东西还是来源于网络。至于写这篇的目的其实算是做个总结。对于 DNS 这个东西。它可能不是你工作的必须,但是有它能够解决你很多公司内网中复杂问题。我们后面提到的企业级,可能更多的还是说公司内网这样的环境,至于生产环境,人有多大胆,地有多大产吧。

    DNS 概念性东西

    FQDN:完全限定域名,即每个域在全球唯一,域不是域名,google.com 是域,www.google.com 是域名。

    域可以分为根域(.)和顶级域(TLD

    顶级域又可以分为三类:

    1. 通用顶级域(.com 商业机构,.org 非营利性组织,.net 网络服务机构等)

    2. 国家顶级域(.cn 中国,.uk 英国,.us 美国,.jp 日本)

    3. 反向域(基础建设顶级域,.arpa

    DNS 查询方式包含递归和迭代:

    1. 递归是客户端发起一次请求给 DNS 服务器,通过多次查找返回正确解析。

    2. 迭代是发出多次请求查询不同的 DNS 服务器。

    解析方式包含正向解析和反向解析:正向解析指代将 FQDN 转换成 IP,反向则相反。

    一般 DNS 的服务器类型包含:主从 DNS 服务器,缓存服务器,转发服务器。

    主从好理解,就是从自动更新同步主的配置,作为 backup 存在。

    缓存的服务器作用在于使用递归查询,将查询到的结果返回客户端,并缓存查询的结果。

    转发服务器作用在于当发现查询不是本机的时候则将请求转发出去。

    DNS 监听 TCP 和 UDP 都是 53 端口。

    以下是一次完整的请求大致过程:

    从客户机到服务器之前采用得是递归查询,而服务器之间则是采用迭代查询。

    DNS 记录类型:DNS 域名数据库由资源记录和区文件指令组成。

    SOA 记录:起始授权机构记录,SOA 备注说明了众多 NS(name server)记录中谁是主名称服务器,不参与功能,但是不能缺少。

    NS 记录:域授权记录,当请求到达根域的时候,通过 NS 记录找到对应的域。

    A 记录:当通过 NS 记录到达域以后,比如访问 www.baidu.com,通过 NS 我们找到了 baidu.com,此时就需要通过 A 记录找到 www。

    MX:将该域下的所有邮件服务器地址指向邮件服务器。

    AAAA 记录:A 记录处理 IPV4,AAAA 处理 IPV6。

    PTR 记录:反向解析,将 IP 解析成域名。

    CNAME:别名记录,允许多个名字映射到另外一个域名。比如我们 ping 百度的时候可以发现返回其实是 www.a.shifen.com 这个域名返回。所有 www.baidu.com 其实是个别名。

    搭建单台 DNS

    我们这里准备了三台虚拟机:

    IP系统说明
     192.168.100.111  CentOS Linux release 7.5  DNS 服务器,主机名:demo-node1
     192.168.100.112  CentOS Linux release 7.5  客户机,主机名:demo-node2
     192.168.100.113  CentOS Linux release 7.5  客户机,主机名:demo-node3

    1. DNS 服务器安装 bind 服务:

    yum -y install bind-utils bind bind-devel bind-libs

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

    options {
        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     { any; };
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
    forwarders { 202.96.128.166;8.8.8.8; }; }; logging { channel default_debug { file
    "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";

    最终内容如下,红色部分为我们修改的。

    3. 追加域名解析入口配置:/etc/named.rfc1912.zones

    zone "dylan.com" IN {           # 测试用的域是 dylan.com
            type master;
            file "dylan.com.zone";  # 配置文件为 dylan.com.zone,该文件目录为 /var/named/ 下
    };

    4. 配置单独的解析文件:

    /var/named/
    cp named.localhost dylan.com.zone
    chown named.named dylan.com.zone

    修改配置:dylan.com.zone

    $TTL 1D                                         ;TTL 修改配置生效时间,默认为一天
    @       IN SOA  @ rname.invalid. (
                                            0       ; serial,配置编号,每次改完配置 +1,这样从服务器就知道更新配置
                                            1D      ; refresh,从服务器刷新时间,默认一天刷新一次
                                            1H      ; retry,如果刷新失败,默认1小时重试一次
                                            1W      ; expire,缓存过期时间,一周
                                            3H )    ; minimum
            NS      @
            A       127.0.0.1
            AAAA    ::1
    www     IN A       192.168.100.112

    我们新加了个 www.dylan.com 的 A 记录。

    4. 启动服务测试:

    systemctl start named
    systemctl enable named

    查看端口:

    netstat -tlunp | grep 53

    结果如图:

    我们看到除了服务本身的 53 端口外,还监听了 953,这是 dns 服务的一个插件,现在我们先不管。

    本机测试解析:

    dig @127.0.0.1 www.dylan.com

    查看结果: 

    另外介绍两种检查配置的方法:

    # 检查主配置
    named-checkconf /etc/named.conf
    
    # 检查 zone 配置
    named-checkzone dylan.com /var/named/dylan.com.zone

    结果如下:

    我们在客户端修改 DNS 配置测试,修改网卡 DNS 配置重启网卡:

    主从 DNS 服务搭建

    1. 主从 DNS 的搭建开始的时候其实是和单机搭建一样的,我们修改主服务器的配置文件:/etc/named.rfc1912.zones

    将我们之前的配置进行修改:

    zone "dylan.com" IN {           # 测试用的域是 dylan.com
            type master;
            file "dylan.com.zone";  # 配置文件为 dylan.com.zone,该文件目录为 /var/named/ 下
            allow-update { 192.168.100.113; };
            allow-transfer { 192.168.100.113; };    # 允许同步DNS的辅助服务器IP
            also-notify { 192.168.100.113; };
            notify yes;                             # 启用变更通告,当主文件变更,通知从进行比较同步
    };

    红色部分是我们新加的,并指定了从的地址,重启服务

    systemctl restart named

    2. 从服务器也安装 bind 并将 /etc/named.conf 配置拷贝过来。

    接着也是配置:/etc/named.rfc1912.zones,此时就能体现主从的不同:

    zone "dylan.com" IN {
            type slave;
            file "slaves/dylan.com.zone";
            masters { 192.168.100.111; };   # 指定主服务器的 IP
            masterfile-format text;         # 指定区域文件的格式为text,不指定有可能会为乱码
    };

    我们不需要再去配置 dylan.com.zone 文件,因为我们需要去主同步。所有直接启动从的 dns 服务。

    systemctl start named
    systemctl enable named

    重启成功后我们会发现,在从服务器的 /var/named/slaves 目录下,dylan.com.zone 已经同步成功。

    3. 修改主配置测试同步情况:

    我们修改主服务器的 dylan.com.zone,新加解析的同时,修改配置编号,让从能够探测到变化。

    此时我们重启主服务器,会发现从服务器就能够同步成功。

    顺便值得一提的是,我这里使用 reload named 服务并没有使配置生效。

    小结

    值得一提的是,我们在域名解析过程中,还会遇到某些特殊情况:

    1. @ 可以引用当区域名字,比如直接访问 baidu.com 就是这样的解析

    2. 同一名字通过不同的名字定义多条记录,此时 DNS 会轮询响应。

    3. 同一值可以多个名字。

    4. * 泛域名解析,比如配置 *.baidu.com 指向某个 IP,那么如果你访问 a.baidu.com 这种没有配置的会默认走这个配置。

  • 相关阅读:
    【大厂面试】字节跳动、京东等大厂面试题分享,已拿字节offer~
    听说这十道面试题,把百分之八十的程序员都淘汰了?不是吧,阿sir
    阿里大神的刷题笔记.pdf
    在家学了6个月,拿到阿里offer!
    【面试题】2020年底总结200道带答案的常见Java面试题!
    面试一家小公司,被问了 1 个小时并发编程。。全程已记录!
    分享一份技术书籍《Java 8 》PDF版,可自行下载
    Delphi的TDataSetProvider、TDataSet、TAdoQuery、TDataSource、TDataModule控件的组合使用
    初学Delphi与sql server的存储过程
    delphi简单的分页实现(高手可以不看)
  • 原文地址:https://www.cnblogs.com/Dy1an/p/11157152.html
Copyright © 2011-2022 走看看