1、智能DNS的实现
所谓智能DNS就是让不同地区的客户端访问网站时能将就近网站的IP地址反馈到客户端,这样可以增加客户端的访问速度,比如beijing的客户去访问[www.magdu.com](https://link.jianshu.com/?t=http://www.magdu.com)网站反馈一个ip地址,henan的客户访问这个网站时反馈另外一个ip地址,实现过程如下:
在centos7上的操作
1、vim /etc/named.conf
acl beijing {
192.168.25.226/24; ---北京客户的地址
};
acl henan {
172.18.21.106/16; ---河南客户的地址
};
view bjview {
match-clients {beijing;}; ---如果匹配北京的地址
zone "magedu.com"{ ---定义区域解析库,也可以将这个内容写到/etc/named.rfc1912.zones中,将下面三行的内容换为include "/etc/named.rfc1912.zones.bj"
type master;
file "magedu.com.bj"; ---就走这个区域解析库文件
};
};
view hnview {
match-clients {henan;};
zone "magedu.com"{
type master;
file "magedu.com.hn";
};
include "/etc/named.rfc1912.zones"; 这个文件中也可以定义其他的域,那么如果河南的客户去访问这个文件中定义的其他域,就会解析解析库文件中定义的相应地址
};
view otherview { ---这个view是兜底用的,如果不是来自这两个地址的客户,就反馈给北京的地址
match-clients {any;};
zone "magedu.com"{
type master;
file "magedu.com.bj";
};
};
2、 vim /var/named/magedu.com.bj
$TTL 1D
@ IN SOA dns1 admins.magedu.com. (
66 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 172.18.21.107
websrv A 192.168.25.226
www CNAME websrv
vim /var/named/magedu.com.hn
$TTL 1D
@ IN SOA dns1 admins.magedu.com. (
68 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 172.18.21.107
websrv A 172.18.21.106
www CNAME websrv
3、测试
在centos6.9上操作,有两个ip地址,分别是定义的beijing和henan的客户地址
dig www.magedu.com @192.168.25.21 ---相当于是用我的192.168.21.226地址去访问这个dns服务器
dig www.magedu.com @172.18.21.107
总结:
1、view(视图),一个bind服务器可定义多个view,每个view中可定义一个或多个zone.
2、每个view用来匹配一组客户端地址段
3、多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
4、 一旦启用了view,所有的zone都只能定义在view中
5、 仅在允许递归请求的客户端所在view中定义根区域
6、 客户端请求到达时,是自上而下检查每个view所服务的客户端列表
2、编译安装bind
1、安装开发包组、创建named账号
yum groupinstall " Development Tools"
useradd -r -m -d /var/named -s /sbin/nologin named
2、执行configure脚本并安装
./configure --prefix=/app/bind9 --without-openssl
make && make install
3、将别的主机的named.ca文件拷贝到本主机
scp /var/named/named.ca 172.18.21.7:/app/bind9/etc/
chgrp named named.ca
4、vim /etc/profile.d/env.sh
export PATH=/app/bind9/sbin:/app/bind9/bin:$PATH
5、 编写named.conf文件
vim /app/bind9/etc/named.conf
options {
directory "/var/named";
};
zone "test.com"{
type master;
file "test.com.zone";
};
zone "."{
type hint;
file "named.ca";
};
6、编写区域解析库文件
vim /var/named/test.com.zone
$TTL 1D
@ IN SOA dns1 admins.test.com ( 1 1d 1h 1w 1d )
NS dns1
dns1 A 172.18.21.7
www A 8.8.8.8
7、加添man 帮助的路径
8、开启服务
named -u named -g -f -d 3 --- -u谁来开启服务,-f前段运行,-g前段运行并显示标准错误,有助于排错,-d是debug级别,级别越高,显示的信息越详细
9、测试
dig www.test.com @172.18.21.7
安装rndc工具
1、生成rndc.conf文件
rndc-confgen -r /dev/urandom >/app/bind9/etc/rndc.conf
cat /app/bind9/etc/rndc.conf
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "h5c6Wu39YsRht3YzwoK2MA==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "h5c6Wu39YsRht3YzwoK2MA==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
这个文件相当于生成两把钥匙,分别放在这个文件和下面的文件中,使sync这个命令能够控制dns。
2、编辑named.conf文件,将上面文件中的# key "rndc-key" {行 至# End of named.conf行添加到文件中
vim /app/bind9/etc/named.conf
options {
directory "/var/named";
};
zone "test.com"{
type master;
file "test.com.zone";
};
zone "."{
type hint;
file "named.ca";
};
# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
algorithm hmac-md5;
secret "h5c6Wu39YsRht3YzwoK2MA==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
# End of named.conf
3、测试
rndc status ---发现rndc命令已经可以使用了。
3、压力测试
压力测试的目的是测试某个dns服务器的性能,查看一下这个服务器一秒钟可以并发处理多少个用户的请求。dns的压力测试工具是queryperf,这个工具也需要编译安装,过程如下
1、编译安装
cd /app/bind-9.11.2/contrib/queryperf/
./configure
make
cp -a queryperf /app/bind9/bin/ --移动到PATH变量的路径下
2、测试
vim test.txt ---创建一个文件,比如解析www.test.com的A记录
www.test.com A
这个文件要尽量的大才能测出来,也就是多复制几行,实验时复制了38万行。这样才能模拟并发处理多少个操作
开启服务
在另外一个终端输入如下面命令
queryperf -d test.txt -s 127.0.0.1 ---s指定测哪个主机,实验时测的本主机
DNS Query Performance Testing Tool
Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $
[Status] Processing input data
[Status] Sending queries (beginning with 127.0.0.1)
[Status] Testing complete
Statistics:
Parse input file: once
Ended due to: reaching end of file
Queries sent: 377856 queries
Queries completed: 377856 queries
Queries lost: 0 queries
Queries delayed(?): 0 queries
RTT max: 0.085477 sec
RTT min: 0.000586 sec
RTT average: 0.007314 sec
RTT std deviation: 0.011023 sec
RTT out of range: 0 queries
Percentage completed: 100.00%
Percentage lost: 0.00%
Started at: Thu Sep 21 23:13:33 2017
Finished at: Thu Sep 21 23:15:52 2017
Ran for: 138.438754 seconds
Queries per second: 2729.409136 qps ---可以看出一秒钟能并发处理2729个请求。