06实现DNS转发(缓存)
前言
利用DNS转发,可以将用户的DNS请求,转发至指定的DNS服务,而非默认的根DNS服务器,并将指定服务器查询的返回结果进行缓存,提高效率。
注意事项
-
被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
-
在全局配置块中,关闭dnssec功能
-
dnssec-enable no; dnssec-validation no;
转发方式
- first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询
- only:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询
全局转发
- 对非本机所负责解析区域的请求,全转发给指定的服务器
- 常用
- 在全局配置块中实现:
Options {
...
forward first|only;
forwarders { ip;};
...
};特定区域转发
- 仅转发对特定的区域的请求,比全局转发优先级高
- 不常用
- 在区域数据库配置文件中实现:
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};实现 DNS 转发
环境说明
- dns-forward 服务器也应该实现高可用,具体实现方法???
| hostname | IP | service | role | OS |
|---|---|---|---|---|
| dns-forward | 10.0.0.18 | bind9 | dns转发服务器 | CentOS |
| dns-master | 10.0.0.103 | bind9 | 主DNS | Ubuntu |
dns-master 配置
# 区域数据库文件
root@dns-master:~# cat /var/cache/bind/xiangzheng.com.zone.bind
$TTL 600
@ IN SOA ns1 mail.xiangzheng.com. (
2015042204 ;
1H ;
10M ;
1D ;
12H ;
)
@ NS ns1
@ NS ns2
ns1 A 10.0.0.103
ns2 A 10.0.0.104
@ A 10.0.0.77实现前客户端测试
# 使用公网的公共DNS测试是否能实现解析自己的网站
[root@client ~]# host xiangzheng.vip 223.5.5.5
Using domain server:
Name: 223.5.5.5
Address: 223.5.5.5#53
Aliases:
xiangzheng.vip has address 8.140.166.135
# xiangzheng.com 直接从根服务器迭代查询了
[root@client ~]# host xiangzheng.com 10.0.0.18
Using domain server:
Name: 10.0.0.18
Address: 10.0.0.18#53
Aliases:
xiangzheng.com is an alias for overdue.aliyun.com.
overdue.aliyun.com has address 170.33.9.230dns-forward 实现转发
- 以全局转发的方式实现转发
# 只需在全局配置块添加以下配置即可
[root@dns-forward ~]# vim /etc/named.conf
options {
listen-on port 53 { localhost; }; #或者注释也许
...
allow-query { any; }; #或者注释也行
forward first; #first表示转发的服务器如果查询不到则去根服务器查询
forwarders { 10.0.0.103;}; #转发的DNS服务器IP
...
dnssec-enable no; #no
dnssec-validation no; #no
...
#检查配置文件
[root@dns-forward ~]# named-checkconf
#重新加载配置文件
[root@dns-forward ~]# rndc reload
server reload successful实现后客户端测试
# 如果目标DNS服务器有记录,则会直接返回结果
[root@client ~]# host xiangzheng.com 10.0.0.18
Using domain server:
Name: 10.0.0.18
Address: 10.0.0.18#53
Aliases:
xiangzheng.com has address 10.0.0.77
# 如果目标DNS服务器没有记录,则转发服务器会向根服务器发起迭代查询
[root@client ~]# host xiangzheng.vip 10.0.0.18
Using domain server:
Name: 10.0.0.18
Address: 10.0.0.18#53
Aliases:
xiangzheng.vip has address 8.140.166.135
---------------------------------
#当主dns服务器停掉
root@dns-master:~# poweroff
#还是可以解析,因为 forward-dns 会有缓存
[root@client ~]# host xiangzheng.com 10.0.0.18
Using domain server:
Name: 10.0.0.18
Address: 10.0.0.18#53
Aliases:
xiangzheng.com has address 10.0.0.77
---------------------
#当 forward-dns 清理掉缓存
[root@dns-forward ~]# rndc flush
# 又会去根服务器迭代查询
[root@client ~]# host xiangzheng.com 10.0.0.18
Using domain server:
Name: 10.0.0.18
Address: 10.0.0.18#53
Aliases:
xiangzheng.com is an alias for overdue.aliyun.com.
overdue.aliyun.com has address 170.33.9.230