美文网首页
从根开始搭建一套DNS系统

从根开始搭建一套DNS系统

作者: 死鱼 | 来源:发表于2019-05-25 18:14 被阅读0次

    实验机器准备(已匿名)

    机器名称 机器ip 功能
    青岛机 1.1.1.1 根服务器
    深圳机 2.2.2.2 com.顶级DNS服务器
    香港机 3.3.3.3 应用服务器
    本地 127.0.0.1 递归dns服务器

    dns搭建工具

    bind9

    配置

    青岛机(根服务器)
    #named.conf
    key "rndc-key" {
          algorithm hmac-sha256;
          secret "xxxxx";
    };
    
    controls {
          inet 127.0.0.1 port 953
          allow { 127.0.0.1; } 
          keys { "rndc-key"; };
    };
    
    options {
        directory "~/zones"; # 解析文件存放根目录
        pid-file "named.pid";
        recursion no; # 非递归
    };
    
    # "." 域名的解析配置
    zone "." IN {
        type master; # 类型master,因为青岛机器为根服务器
        file "root.master"; # 解析文件
    };
    

    named.conf中配置了.的域名解析,但是类型为master,代表本机负责解析根域名,作为根域名服务器。

    #~/zones/root.master
    $TTL 86400
    $ORIGIN .
    @       IN      SOA     @       root(
            12169
            1m
            1m
            1m
            1m
    )
    
    .               IN      NS      a.root.net.
    a.root.net.     IN      A       1.1.1.1 # 本机ip,代表本机就是DNS根服务器
    
    com.            IN      NS      a.com-ns.com.
    a.com-ns.com.   IN      A       2.2.2.2 # 深圳机的ip
    

    根域名服务器中,需要指出顶级域名的NS,授权给他们。正常的根域名服务器会把所有顶级域名的NS(1000多个)写死在配置中,外部访问就能直接拿到顶级域名ns的ip地址了。

    深圳机(顶级域名服务器)
    #named.conf
    key "rndc-key" {
          algorithm hmac-sha256;
          secret "xxxxx";
    };
    
    controls {
          inet 127.0.0.1 port 953
          allow { 127.0.0.1; }
          keys { "rndc-key"; };
    };
    
    options {
        directory "~/zones";
        pid-file "named.pid";
    };
    
    zone "." IN {
        type hint; # 配置根域名服务器信息
        file "root.hint"; # 配置文件在~/zones/root.hint
    };
    
    zone "com." IN {
        type master; # 配置com.解析信息,本机为权威解析DNS。
        file "com.master";
    };
    
    #root.hint
    .               86400   IN      NS      a.root.net //根服务器ns名称
    a.root.net.     86400   IN      A       1.1.1.1
    // 根服务器的ip,不然就要配多一台.net的权威服务器去解析a.root.net
    //这里直接解析就好,省事(钱)。
    

    (暂时发现这个root.hint好像可有可无)

    # com.master
    $TTL 86400
    @       IN      SOA     @       root(
            2
            1m
            1m
            1m
            1m
    )
    
    com.            IN      NS      a.com-ns.com.
    a.com-ns.com.   IN      A       2.2.2.2 
    #解析出这台a.com.ns.net的权威服务器就是本机ip
    
    # 此处添加A解析,站长接入网站解析的时候,就是在这里添加的
    hongkong.com.   IN      A       3.3.3.3
    

    权威服务器用于给次级域名做解析,站长购买域名后,需要接入到DNS中时,就由权威服务器添加到解析配置中去。这样在递归的时候,根服务器给递归服务器一堆顶级服务器ns,然后递归服务器再问这些服务器拿需要对应的域名解析。

    香港机(应用服务器)

    随便处理一下80端口返回

    本地DNS(递归DNS)
    #named.conf
    key "rndc-key" {
          algorithm hmac-sha256;
          secret "xxxxxx";
    };
    controls {
        inet 127.0.0.1 port 953
        allow { 127.0.0.1; } 
        keys { "rndc-key"; };
    };
    
    options {
        directory "~/zones";
        pid-file "named.pid";
        dnssec-enable no; #暂时关掉,后面研究这个工具
        dnssec-validation no;
    };
    
    #配置根域名信息
    zone "." IN {
        type hint;
        file "root.hint";
    };
    
    #root.hint
    .               86400   IN      NS      a.root.net
    a.root.net.     86400   IN      A       1.1.1.1
    

    本地递归DNS只需配置根域名服务器的ns和ip就行了,这个一般都会写死几个ip在路由器DNS配置当中去,防止递归查询。

    实践操作:

    直接访问一下:
    访问hongkonog.com

    这里直接把hongkong.com解析到3.3.3.3去了,成功

    如何保证域名唯一性

    注册新域名需要到国际互联网中心进行备案注册,而这个操作在国内会有域名注册商代替用户去做,例如阿里云的万网。这时候国际互联网中心就会校验域名的唯一性,和注册商(用户)双向确认,然后进行授权。

    相关文章

      网友评论

          本文标题:从根开始搭建一套DNS系统

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