1. 博客/

DNS服务器据源地址解析的实现

·585 字·3 分钟
Linux DNS

“就近"解析的优点
#

​ 假设有一个面向全网络的web服务,并且服务器都集中在一个地方,而访问请求是来自全国各地的,网络传输线路的长短势必会影响访问响应质量和速度。因此,为了提高客户端访问速度、提供容错能力等,公司可能会按区域部署服务器,比如说在北京、杭州、广州等地,每台服务器刚好能优先响应离自己最近的访问请求,从而提高服务器响应速度。

​ 实现"就近"解析的两种方法:

  • web调度器

    仅提供请求转发功能,转发给区域web服务器,把离请求主机"最近"的服务器IP返回给dns服务器,然后解析

  • dns服务器

    由dns服务器根据源地址直接解析到离请求主机"最近"的web服务器,本文将详细介绍此方法的实现

dns服务器据源地址解析的实现
#

实验环境
#

  • 系统:CentOS 7
  • dns服务程序:bind
  • dns服务器IP: 192.168.196.168

定义acl和启用view
#

acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用 只能先定义,后使用,一般定义在配置文件中, 处于options的前面

​ 格式:

acl acl_name {
				ip;
				PREFIX;
				……
};

view:视图,一个bind服务器可定义多个view,每个view中可定义一个或多个zone 每个view用来匹配一组客户端 客户端请求到达时,是自上而下检查每个view所服务的客户端列表

​ 格式:

view shanghaiview{
        match-clients { shanghai; };
        include "/etc/named.shanghaiview.zones";     <--指定对应区域配置文件
};

修改配置文件/etc/named.conf

acl beijing { 192.168.196.130 ;};        <--假设beijing区域只有IP.130
acl shanghai { 192.168.196.128 ;};       <--假设shanghai区域只有IP.128 
acl other { any;};                       <--假设其它包含在other区域

options{
listen-on port 53 { localhost; };         <--localhost为关键字,代表本机所有IP
allow-query   { any ; };                  <--可提供外部服务,允许其它主机查询
};

创建view对应的区域配置文件
#

  1. zone “.”

把name.conf文件定义的根区移动到/etc/named.rfc1912.zones

一旦启用了 view,所有的zone都只能定义在view中

zone "." IN {
type hint;
file "named.ca";
};
  1. 创建/etc/named.beijingview.zones
zone "ffu.com" IN {
type master;
file "ffu.com.zone.bj";                          <--对应各view的区域库文件名
};
  1. 创建/etc/named.shanghaiview.zones
zone "ffu.com" IN {
type master;
file "ffu.com.zone.sh";
};

创建各view的区域库文件
#

/var/named/ffu.com.zone.bj

$TTL 86400	; 1 day
@			IN SOA	dns1.ffu.com. dns1admin.ffu.com. (
				1          ; serial
				86400      ; refresh (1 day)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			    NS	dns1.ffu.com.
			    A	1.1.1.1
dns1			A	192.168.196.168
test			A	8.8.8.8
websrv			A	10.10.10.10
www			CNAME	websrv

/var/named/ffu.com.zone.sh

$TTL 86400	; 1 day
@			IN SOA	dns1.ffu.com. dns1admin.ffu.com. (
				1          ; serial
				86400      ; refresh (1 day)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			    NS	dns1.ffu.com.
			    A	2.2.2.2
dns1			A	192.168.196.168
test			A	9.9.9.9
websrv			A	13.13.13.13
www			CNAME	websrv

/var/named/ffu.com.zone

$ORIGIN .
$TTL 86400	; 1 day
ffu.com			IN SOA	dns1.ffu.com. dns1admin.ffu.com. (
				2          ; serial
				86400      ; refresh (1 day)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
		     	NS	dns1.ffu.com.
			    A	1.1.1.1
$ORIGIN ffu.com.
dns1			A	192.168.196.168
test			A	8.8.8.8
websrv			A	1.1.1.1
www			 CNAME	websrv

访问测试
#

192.168.196.130 主机

$ dig www.ffu.com @192.168.196.168      
; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.ffu.com @192.168.196.168
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60401
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.ffu.com.            IN    A
;; ANSWER SECTION:
www.ffu.com.           86400    IN    CNAME    websrv.ffu.com.
websrv.ffu.com.        86400    IN    A    10.10.10.10             <-- .130属于beijingview,解析到10.10.10.10服务器
;; AUTHORITY SECTION:
ffu.com.        86400    IN    NS    dns1.ffu.com.
;; ADDITIONAL SECTION:
dns1.ffu.com.        86400    IN    A    192.168.196.168
;; Query time: 2 msec
;; SERVER: 192.168.196.168#53(192.168.196.168)
;; WHEN: Fri Jul 28 09:55:47 CST 2017
;; MSG SIZE  rcvd: 112

192.168.196.128 主机

$ dig test.ffu.com @192.168.196.168                    
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> test.ffu.com @192.168.196.168
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57430
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;test.ffu.com.            IN    A
;; ANSWER SECTION:
test.ffu.com.        86400    IN    A    9.9.9.9             <-- .128属于shanghaiview,解析到9.9.9.9服务器
;; AUTHORITY SECTION:
ffu.com.        86400    IN    NS    dns1.ffu.com.
;; ADDITIONAL SECTION:
dns1.ffu.com.        86400    IN    A    192.168.196.168
;; Query time: 2 msec
;; SERVER: 192.168.196.168#53(192.168.196.168)
;; WHEN: Fri Jul 28 00:05:52 2017
;; MSG SIZE  rcvd: 81

192.168.196.155 主机

$dig www.ffu.com @192.168.196.168                     
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.ffu.com @192.168.196.168
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62993
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; QUESTION SECTION:
;www.ffu.com.            IN    A
;; ANSWER SECTION:
www.ffu.com.        86400    IN    CNAME    websrv.ffu.com.
websrv.ffu.com.        86400    IN    A    1.1.1.1           <-- .155属于otherview,解析到1.1.1.1服务器
;; AUTHORITY SECTION:
ffu.com.        86400    IN    NS    dns1.ffu.com.
;; ADDITIONAL SECTION:
dns1.ffu.com.        86400    IN    A    192.168.196.168
;; Query time: 2 msec
;; SERVER: 192.168.196.168#53(192.168.196.168)
;; WHEN: Thu Jul 27 02:29:47 2017
;; MSG SIZE  rcvd: 152

Related

使用XtraBackup工具实现MySQL数据备份及恢复
·1177 字·6 分钟
Linux Mysql Xtrabackup
使用mysqldump工具实现MySQL数据备份
·885 字·5 分钟
Linux Mysql
MySQL主从复制的实现
·632 字·3 分钟
Linux Mysql