2018年11月07日

DNS递归解析过程

DNS基础及使用BIND搭建域名服务器 写得不错,大量图解。

如果local dns的域名解析出现问题,可以清空dns的cache。

# 清空dns cache
rndc flush
# 重新加载配置文件
rndc reload

根DNS(root server) - master.k8s(192.168.56.100)

[2018-11-07 Wed 11:11] 使用bind9来做根dns服务器。

[root@master ~]# named-checkconf
[root@master ~]# named-checkzone . /var/named/root.zone
zone ./IN: loaded serial 2
OK

[root@master ~]# cat /etc/named.conf

options {
        // listen-on port 53 { 127.0.0.1; }; // ipv4 监听端口, 注释掉,如果不注释的话不知道怎么配置可以监听所有ip
        listen-on-v6 port 53 { ::1; };       // ipv6 监听端口
        directory       "/var/named";        // 制定装载zone区域文件的目录
        dump-file       "/var/named/data/cache_dump.db";    // cache
        statistics-file "/var/named/data/named_stats.txt";  // statistics
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        // allow-query     { localhost; };
        allow-query     { any; }; // 允许访问列表,修改为any

        recursion yes; // 对应root来说,是否需要递归?

        dnssec-enable yes;      // 考虑改为no
        dnssec-validation yes;  // 考虑改为no

# 新增
zone "." IN {  // "."代表根区域        
        //type hint;
        type master;
        file "root.zone"; // 指定zone文件,bind安装时默认已经生成,这里要用自己指定用/var/named/root.zone,注意mode=640和owner=root:named
}; // "}"后也得分号结束

[root@master ~]# cat /var/named/root.zone

至此看来,named.conf的配置并不复杂,不过接下来的zone文件的配置就会改变你的看法。

; 注意,zone文件的注释是以分号";"开始的。
; 添加域数据库文件:vim /var/named/root.zone
$TTL 1D ; 生存期, 默认单位为秒,另可设定为[W|D|H|M]

; [zone] IN SOA [主机名] [管理员email] ([五组更新时间参数])  
; @=>zone IN SOA @=>主机名 rname.invalid.=>email  
; @代表根域  
; rname.invalid.解析为rname@invalid,第一个".""@"的替代,尾部的"."为根域,表明其为绝对URL。

; @是SOA记录中的name字段的缩写,a.root-server.net是当前服务器主机名称,mail.albert.com是当前区域文件负责人邮箱,可以看做mail@albert.com,因为@有特殊用途,用.代替
@ IN  SOA  a.root-server.net  mail.albert.com. (
                   2       ; serial
                   1D      ; refresh
                   1H      ; retry
                   1W      ; expire
                   3H )    ; minimuim

;       NS      @          ; 直接输入域名,访问@  
;       A       127.0.0.1  ; 直接输入域名,解析到的IPV4的IP  
;       AAAA    ::1        ; 直接输入域名,解析到的IPV6的IP
                      NS a.root-server.net.
com                IN NS a.tl-server.net.  ;//委派
a.root-server.net. IN A  192.168.56.100
a.tl-server.net.   IN A  192.168.56.101

com权威DNS server - node1.k8s(192.168.56.101)

使用bind9来做com域dns服务器

[root@node1 ~]# cat /etc/named.conf

vim /etc/named.conf
options {
        // listen-on port 53 { 127.0.0.1; }; // 注释掉,如果不注释的话不知道怎么配置可以监听所有ip
        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";
        // allow-query     { localhost; };
        allow-query     { any; }; // 修改为any

        recursion yes; // 对应root来说,是否需要递归?

        dnssec-enable yes;      // 考虑改为no
        dnssec-validation yes;  // 考虑改为no

[root@node1 ~]# cat /etc/named.rfc1912.zones

// 新增下面的内容
zone "com" IN {
       type master;
       file "com.zone";
}

[root@node1 ~]# cat /var/named/com.zone

[root@node1 ~]# cat /var/named/com.zone 
$TTL 86400
@      IN  SOA   dns1 mail.albert.com. (
                   0          ; serial
                   86400      ; refresh (1 day)
                   3600       ; retry (1 hour)
                   604800     ; expire (1 week)
                   10800      ; minimum (3 hours)
                                )
                NS      dns1
albert          NS      dns2  ;// 委派子域
dns1            A       192.168.56.101
dns2            A       192.168.56.102

albert.com授权DNS server - node2.k8s(192.168.56.102)

使用bind作为子域的授权服务器。

[root@node2 ~]# named-checkzone albert.com  /var/named/albert.com.zone                    
dig www.albert.com @192.168.56.102

[root@node2 named]# cat /etc/named.conf

在全局配置文件/etc/named.conf中修改

options {
        //listen-on port 53 { 127.0.0.1; }; 注释掉,监听所有地址
        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";
        allow-query     { any; }; // 允许所有ip来查询
        recursion yes;

        dnssec-enable yes;      // [2018-11-07 周三 11:15:34] 边缘dns这里设置为了no,否则就是不能正确解析!
        dnssec-validation yes;  // 可以改为no

[root@node2 named]# cat /etc/named.rfc1912.zones

在/etc/named.rfc1912.zones文件最后,新增下面的配置

zone "albert.com" IN {
       type master;
       file "albert.com.zone";
};

[root@node2 named]# cat albert.com.zone

创建albert.com.zone,内容如下:

$TTL 1D 
@      IN SOA  dns1 mail.albert.com. (
          2018112302       ; serial
          1D      ; refresh
          1H      ; retry
          1W      ; expire
          3H)    ; minimum
       NS      dns1
dns1       A  172.16.9.103
www        A  172.16.9.100
static     A  172.16.9.102  ; 输入子域名,解析到的IP
img        A  172.16.9.103
js         A  172.16.9.104
log        A  172.16.9.101     
a.login    A  172.16.9.101
/usr/sbin/named-checkconf -z

递归server/边缘cache DNS server - node3.k8s(192.168.56.103)

[2018-11-07 Wed 11:20] 使用dnsmasq或者bind作为边缘dns都可以ok,检查一下TTL的设置。

[root@node3 ~]# vim /etc/dnsmasq.conf

修改/etc/dnsmasq.conf,新增或去掉注释

resolv-file=/etc/resolv.dnsmasq.conf
strict-order
# log level可以调整吗?看看cache了哪些域名?
log-facility=/var/log/dnsmasq.log

[root@node3 ~]# cat /etc/resolv.dnsmasq.conf

nameserver 192.168.56.100 # 指向我自己的root dns server,根服务器