你有没有见过4 段的域名?大部分人打开网站只见过3段的域名,像www.baidu.com等,但是多段域名是真实存在的

当我们用dig命令解析www.baidu.com的NS记录时,就会出现四段域名了

linux中DNS子域授权和视图view_视图

这个域名,其实是百度众多dns域中的一个子域中的某一台主机,现在,我们来讨论一下子域

    当你的公司有很多部门,销售部,生产部,财务部,这么多部门很多人都向公司里唯一的dns服务器解析,那你的dns服务器会忙死,所以,你可以为每一个部门分派一个子域服务器,各自部门的dns请求都发送到各自部门安置的子域dns去解析,又减少了主dns服务器压力,又优化了逻辑管理结构。下面,我们就来介绍如何实现dns的子域授权


实验环境:

linux中DNS子域授权和视图view_智能DNS_02

父域DNS服务器/etc/named.conf配置文件:

做子域授权开启转发功能时注意dnssec-valadition和dnssec-enable必须禁用,注意是禁用不是注释掉----因为注释掉默认还是开着的,否则父域和子域会出现不能相互解析的情况

linux中DNS子域授权和视图view_DNS_03

父域magedu.zone文件:

最后两行定义了子域dns服务器在哪里,这里我们的ns2实际上是不存在的,实验的话无关紧要

linux中DNS子域授权和视图view_子域授权_04

检查语法,更改zone文件权限并查看状态:

[root@node3 named]# named-checkzone "magedu.com" /var/named/magedu.com.zone 
zone magedu.com/IN: loaded serial 2015042501
OK
[root@node3 named]# chown :named magedu.com.zone 
[root@node3 named]# chmod 640 magedu.com.zone 
[root@node3 named]# rndc reload
server reload successful
[root@node3 named]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
CPUs found: 4
worker threads: 4
number of zones: 20
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
[root@node3 named]# tail /var/log/messages
Nov 15 10:38:32 node3 named[4947]: loading configuration from '/etc/named.conf'
Nov 15 10:38:32 node3 named[4947]: reading built-in trusted keys from file '/etc/named.iscdlv.key'
Nov 15 10:38:32 node3 named[4947]: using default UDP/IPv4 port range: [1024, 65535]
Nov 15 10:38:32 node3 named[4947]: using default UDP/IPv6 port range: [1024, 65535]
Nov 15 10:38:32 node3 named[4947]: sizing zone task pool based on 7 zones
Nov 15 10:38:32 node3 named[4947]: Warning: 'empty-zones-enable/disable-empty-zone' not set: disabling RFC 1918 empty zones
Nov 15 10:38:32 node3 named[4947]: reloading configuration succeeded
Nov 15 10:38:32 node3 named[4947]: zone magedu.com/IN: loaded serial 2015042501
Nov 15 10:38:32 node3 named[4947]: reloading zones succeeded
Nov 15 10:38:32 node3 named[4947]: zone magedu.com/IN: sending notifies (serial 2015042501)

子域DNS服务器/etc/named.conf配置文件:

定义了ops.magedu.com的zone

下面的magedu.zone时定义如果子域内的主机查询父域(magedu.com)下的主机时,不用去查找根,而是直接查找父域服务器,指定了父域为转发器,转发器的概念我们在<<linux中DNS原理详解>>中描述过

linux中DNS子域授权和视图view_智能DNS_05

子域ops.magedu.zone文件:

linux中DNS子域授权和视图view_视图_06

测试:

通过子域查询子域:

linux中DNS子域授权和视图view_智能DNS_07

通过子域查询父域内的主机:(发现没有找根,而是直接去找父域dns服务器了,这就是指定转发器的好处,省去了许多流量)

linux中DNS子域授权和视图view_DNS_08

通过父域查询子域内的主机:

linux中DNS子域授权和视图view_DNS_09

BIND还有一个很强大的功能就是视图-----view,国内运营商之间竞争激烈,当我们发送数据包时有时会经过好几家运营商内部的网络设备才能到达目的地,这样会带来极大延迟,大大减弱了网络传输质量,如果我们可以控制,对于电信用户只走电信,联通用户只走联通,对于同一个域名,走电信线路时由电信运营商的服务器解析,走联通线路时由联通运营商的DNS服务器解析,这样就可以大大优化网络性能,这是一种情况。还有时候,我们公司的某一台内部服务器是靠边缘路由器通过NAT把数据流量转发上来的,这时,这台服务器的真实地址对于外网用户是隐藏的,而对于内网用户却是透明的,我们希望外网用户访问时要走边缘路由器访问,而内网用户直接可以局域网访问。这两种情况都会用到DNS的视图功能。说到底,view就是可以判断客户端来源,根据来源解析同一域名为不同地址的一种DNS功能,与CDN结合可以构成智能DNS,全局负载均衡

视图:
    一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
    每个view用一来匹配一组客户端;
    多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;
            view VIEW_NAME {
                match-clients {  };
            }
    注意:
        (1) 一旦启用了view,所有的zone都只能定义在view中;
        (2) 仅有必要在匹配到允许递归请求的客户(内部本地客户端),所在view中定义根区域,不该为外              部主机做递归

        (3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表;

案例:

linux中DNS子域授权和视图view_视图_10



定义192.168.20.2上的DNS服务:

acl localnet {
        192.168.20.0/16;
        127.0.0.0/8;
};
acl externalnet {
        192.168.30.0/24;
};
view internal {
        match-clients { localnet; };
        allow-recursion { localnet; };
zone "." IN {
        type hint;
        file "named.ca";
};
zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
view external {
        match-clients { externalnet; };
        allow-recursion { externalnet; };
        zone "magedu.com" IN {
            type master;
            file "magedu.com.external";
            allow-update { none; };
    };
};
zone文件定义
magedu.com.external文件:
$TTL 1D
$ORIGIN magedu.com.
@       IN      SOA     ns1.magedu.com. admin.magedu.com. (
                                        2015042501
                                        1H
                                        5M
                                        3D
                                        1D
                                        )
        IN      NS      ns1
ns1     IN      A       192.168.20.2
www     IN      A       200.200.200.200
*       IN      A       200.200.200.300
magedu.com.zone文件:
$TTL 1D
$ORIGIN magedu.com.
@       IN      SOA     ns1.magedu.com. admin.magedu.com. (
                                        2015042501
                                        1H
                                        5M
                                        3D
                                        1D
                                        )
        IN      NS      ns1
ns1     IN      A       192.168.30.2
www     IN      A       200.200.200.200
*       IN      A       200.200.200.100

测试两个域是否返回了不同结果:
用192.168.30.1请求解析:
[root@node3 named]# dig -t A ftp.magedu.com @192.168.20.2

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A ftp.magedu.com @192.168.20.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64251
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;ftp.magedu.com.            IN    A

;; ANSWER SECTION:
ftp.magedu.com.        86400    IN    A    200.200.200.100

;; AUTHORITY SECTION:
magedu.com.        86400    IN    NS    ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.        86400    IN    A    192.168.30.2

;; Query time: 2 msec
;; SERVER: 192.168.20.2#53(192.168.20.2)
;; WHEN: Sun Nov 15 12:57:12 2015
;; MSG SIZE  rcvd: 82

用192.168.20.1请求解析:
[root@node1 ~]# dig -t A www.magedu.com @192.168.20.2

; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t A www.magedu.com @192.168.20.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19058
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.magedu.com.            IN    A

;; ANSWER SECTION:
www.magedu.com.        86400    IN    A    192.168.20.1

;; AUTHORITY SECTION:
magedu.com.        86400    IN    NS    ns2.magedu.com.
magedu.com.        86400    IN    NS    ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.        86400    IN    A    192.168.20.2
ns2.magedu.com.        86400    IN    A    192.168.20.7

;; Query time: 1 msec
;; SERVER: 192.168.20.2#53(192.168.20.2)
;; WHEN: Sun Nov 15 12:56:22 CST 2015
;; MSG SIZE  rcvd: 127
试验成功

CDN网络:一个主机房,各地有他的缓存服务器(让用户访问更快),借助view(智能DNS)可以实现不同用户访问统一资源时总是能使用离他最近的缓存服务器

国内提供智能DNS的机构:
    dnspod
    dns.la

编译安装DNS:

# tar
# cd
# groupadd -r -g 53 named
# useradd -r -u 53 -g 53 named
# ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --disable-ipv6 --disable-chroot --enable-threads
# make
# make install

启用rndc:

rndc-confgen -r /dev/urandom生成rndc.key配置文件

编译安装后需要自己提供启动脚本,还缺乏很多配置文件,如rndc

(1) 导出二进制程序目录至PATH环境变量中;
    编辑文件/etc/profile.d/NAME.sh
    export PATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径
    编辑/etc/ld.so.conf.d/NAME.conf
    添加新的库文件所在目录至此文件中;
    让系统重新生成缓存:
        ldconfig [-v]

(3) 导出头文件
    基于链接的方式实现:
    ln -sv /usr/local/bind9/include/* /usr/include
    或者:ln -sv /usr/local/bind9/include /usr/include/bind9

(4) 导出帮助手册
    编辑/etc/man.config文件
    添加一个MANPATH

(5)添加配置文件


压力测试工具:queryperf,编译安装包中有提供,直接./configure安装即可

创建一个测试文件:

www.magedu.com A

www.lee.com NS

执行:queryperf -d test -s dns主机地址