DNS 转发
全局转发
对非本机所负责解析区域的请求,全转发给指定的服务器。
在转发服务器的主配置文件 /etc/named.conf 中设置全局转发
options { #在全局配置中设置
listen-on port 53 { localhost; };
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;any; };
allow-transfer { 192.168.30.174; };
forward only; #设置转发为全部转发
forwarders { 192.168.30.75; }; #转发至指定主机
向转发服务器请求一个不在转发服务器却在 192.168.30.75 上的域名
[root@CentOS69 ~]# host www.test.com 192.168.30.74
Using domain server:
Name: 192.168.30.74
Address: 192.168.30.74#53
Aliases:
www.test.com is an alias for websver.test.com.
websver.test.com has address 192.168.30.75
发现可以解析成功,说明成功转发。
向内网地址请求一个外网地址,也可以解析成功,说明这条请求也被转发至目标服务器进行解析。
[root@CentOS69 ~]# host www.baidu.com 192.168.30.74
Using domain server:
Name: 192.168.30.74
Address: 192.168.30.74#53
Aliases:
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 61.135.169.125
www.a.shifen.com has address 61.135.169.121
局部转发
仅转发对特定的区域的请求,比全局转发优先级高
在 /etc/named.rfc1912.zones 中添加
zone "test.com" IN {
type forward;
forward only;
forwarders { 192.168.30.75; };
};
重载配置文件后,只有请求 test.com 域的时候,才会转发至192.168.30.75,请求其他的域名,若本机没有对应的 DNS 记录,则会向根服务器询问。
[root@CentOS69 ~]# host www.test.com 192.168.30.74
Using domain server:
Name: 192.168.30.74
Address: 192.168.30.74#53
Aliases:
www.test.com is an alias for websver.test.com.
websver.test.com has address 192.168.30.75
主配置文件中 recursion yes 如果设置为 no,则会禁止转发,只查找本机区域数据库中的 DNS 记录。
[root@CentOS69 ~]# host www.test.com 192.168.30.74
Using domain server:
Name: 192.168.30.74
Address: 192.168.30.74#53
Aliases:
Host www.test.com.Miriam not found: 5(REFUSED) #禁止转发后,无法转发查询
DNS 服务 ACL
bind 中内置了四种 acl 权限
none: 没有一个主机
any: 任意主机
localhost: 本机
localnet: 本机网段内的所有主机
也可以指定 IP 地址为acl权限。
acl 控制指令
allow-query {}: 允许查询的主机;白名单
allow-transfer {}:允许区域传送的主机;白名单
allow-recursion {}: 允许递归的主机,建议全局使用
allow-update {}: 允许更新区域数据库中的内容
实现智能 DNS
修改 DNS 服务器的主配置文件
[root@CentOS74 named]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
acl zone1 { #添加acl策略
192.168.30.69;
};
acl zone2 {
192.168.30.174;
};
acl otherzone {
any;
};
options {
listen-on port 53 { localhost; };
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;any; };
allow-transfer { 192.168.30.174; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
dnssec-enable no;
dnssec-validation no;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view view1 { #声明view
match-clients { zone1; }; #指定此view使用那个acl策略
include "/etc/named.rfc1912.zones1"; #指定区域数据库文件路径
};
view view2 {
match-clients { zone2; };
include "/etc/named.rfc1912.zones2";
};
view otherview {
match-clients { otherzone; };
include "/etc/named.rfc1912.zones";
};
include "/etc/named.root.key";
仅在允许递归请求的客户端所在 view 中定义根区域;
客户端请求到达时,是自上而下检查每个 view 所服务的客户端列表。
设置区域数据库
[root@CentOS74 named]# ll /etc/named.rfc1912.zones*
-rw-r----- 1 root named 1187 Jun 23 20:50 /etc/named.rfc1912.zones #对应otherzone策略
-rw-r----- 1 root named 1187 Jun 23 20:38 /etc/named.rfc1912.zones1 #对应zone1策略
-rw-r----- 1 root named 1187 Jun 23 20:38 /etc/named.rfc1912.zones2 #对应zone2策略
[root@CentOS74 named]# cat /etc/named.rfc1912.zones* | grep jiangbowen.com.cn
zone "jiangbowen.com.cn" IN {
file "jiangbowen.com.cn.other"; #对应不同的解析库文件
zone "jiangbowen.com.cn" IN {
file "jiangbowen.com.cn.zone1";
zone "jiangbowen.com.cn" IN {
file "jiangbowen.com.cn.zone2";
然后在不同的解析库中保存不同的 DNS 记录就可以实现智能 DNS。
在不同的主机上解析同一个域名,查看解析结果
[root@CentOS69 ~]# host www.jiangbowen.com.cn
www.jiangbowen.com.cn is an alias for websver.jiangbowen.com.cn.
websver.jiangbowen.com.cn has address 192.168.30.11
[root@CentOS174 ~]# host www.jiangbowen.com.cn
www.jiangbowen.com.cn is an alias for websver.jiangbowen.com.cn.
websver.jiangbowen.com.cn has address 192.168.30.22
[root@CentOS75 named]# host www.jiangbowen.com.cn
www.jiangbowen.com.cn is an alias for websver.jiangbowen.com.cn.
websver.jiangbowen.com.cn has address 192.168.30.33
DNS 测试
rndc 命令是一个远程管理bind的工具,监听在 tcp 的 953端口上。
语法:rndc 选项 动作
选项:
-b:指定目标服务器地址
-s:指定服务器
-c:指定文件作为配置文件
-p:将命令发送至指定端口
动作:
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录
nsupdate 是一个动态DNS更新工具.可以向DNS服务器提交更新记录的请求.它可以从区文件中添加或删除资源记录,而不需要手动进行编辑区文件.
dig 命令是常用的域名查询工具,可以用来测试域名系统工作是否正常。
语法:dig [选项] 主机/域名
选项:
@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
-f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的DNS数据类型;
-x<IP地址>:执行逆向域名查询;
-4:使用IPv4;
-6:使用IPv6;
-h:显示指令帮助信息。
host 命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。
语法:host [选项] 主机/域名
选项:
-a:显示详细的DNS信息;
-c<类型>:指定查询类型,默认值为“IN“;
-C:查询指定主机的完整的SOA记录;
-r:在查询域名时,不使用递归的查询方式;
-t<类型>:指定查询的域名信息类型;
-v:显示指令执行的详细信息;
-w:如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答;
-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;
-4:使用IPv4;
-6:使用IPv6.