2018年11月07日
DNS递归解析过程
- 目标
- 模拟local - dns递归解析一个域名www.albert.com的过程
- 本地DNS服务器向根DNS转发 - node3.k8s上的local dns(dnsmasq or bind) -> master.k8s上的根域DNS(bind)转发
- com域实现主从域的搭建 - 没有做,只用了master dns
DNS基础及使用BIND搭建域名服务器 写得不错,大量图解。
如果local dns的域名解析出现问题,可以清空dns的cache。
# 清空dns cache rndc flush # 重新加载配置文件 rndc reload
根DNS(root server) - master.k8s(192.168.56.100)
使用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)
使用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,根服务器