在很多情况下一些web服务都会要求对内外网来的用户解析成不同的地址。这就需要DNS的分离解析技术。其实这个技术也是跟我们国内的网络情况有关的,两大运营商,电信、连通。特别是一些电商网站为了让用户有更好的体验效果解析速度更快,所以就用到了DNS分离解析技术,来自不同运营商的用户解析到相对应的服务器这样就大大提升了访问速度。

有有时候也叫智能DNS。。。。。下面就来了解下"DNS分离解析"的运作原理吧!

配置步骤

 1、规划拓扑

 2、安装DNS服务的软件包

 3、配置主配置文件

 4、配置解析库文件

 5、检查配置文件语法、启动服务并测试


一、规划拓扑

  Linux之centos6.5搭建DNS分离解析_第1张图片

二、安装DNS服务的软件包

  

[root@localhost ~]# yum -y install bind*

中间那台DNS服务器有两块网卡,一块连接win主机用,一块连接内网虚拟机用。


三、配置主配置文件

[root@localhost ~]# vi /etc/named.conf 
 
options {
        listen-on port 53 { 192.168.2.80; };     //监听本机或者any,若把此项注释掉则表示监听所有。特别注意:此处的大括号里的内容要与括号中间有空格,否则服务无法启动。
        //listen-on-v6 port 53 { ::1; };         //ipv6的监听,可注释掉
        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     { any; };               //允许所有主机解析,仅限实验环境下使用,真实环境为了保证外网用户不能递归查询不能用any。
        recursion yes;                          //允许递归查询
 
        //dnssec-enable yes;                    //dnssec是为了解决DNS欺骗和缓存污染而设计的一种安全机制。目前实验环境不建议开启。 
        //dnssec-validation y
        //dnssec-lookaside auto;
 
        /* Path to ISC DLV key */
        //bindkeys-file "/etc/named.iscdlv.key";
 
        //managed-keys-directory "/var/named/dynamic";
};

下边的内容就按默认配置来就行了,只不过需要把zone “.”这块内容给移走,移动到named.rfc1912.zones,我们在这个文件中专门存放zone,次文件在/etc/下。

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
include "/etc/named.rfc1912.zones";          //centos6会把一个比较大的配置文件分散成多个小的,并关联起来,此项就是说明named.rfc1912.zones也是DNS的配置文件,只不过我们让这个文件专门存放zone
//include "/etc/named.root.key";            //此项是dnssec的key存放的文件,由于前边我们已经把它给注释掉了,所以此项也无用。

特别注意:DNS的所有配置文件中“{}”这样的括号里有内容的话内容一定要与括号之间有空格否则服务无法启动。我们也可以每配置完配置文件保存后用语法检查命令来查看我们的配置语法是否有误,这样总比全部配置完后报错来的容易。

保存退出。



[root@localhost ~]# service named configtest    //检查配置文件语法


然后编辑vim /etc/named.rfc1912.zones ,在这个配置文件中我们来定义内网和外网的view

view "lan" {                                      //定义内网view,命名为lan
  match-clients { 10.0.0.0/24; };                 //设定可解析的客户端,此处可以是具体的IP,也可是网段,也可是我们定义的ACL(ACL的定义方式这里不细说)
zone "localhost.localdomain" IN {                    
        type master;
        file "named.localhost";
        allow-update { none; };
};
 
zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};
 
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};
 
zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};
 
zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};
 
zone "jinsanhong.com" IN {                        //这个zone就是我们要解析的区域
        type master;                              //类型,类型有hint,master,Slave,swap。Hint是根区域类型,master和slave是用来做DNS的主从,swap是交换类型。
        file "jinsanhong.com.lan";                //定义区域解析库文件,此路径是相对路径,相对named.conf中 directory  "/var/named"这个路径,所以区域解析文件要放在/var/named下。  
};
 
zone "." IN {
        type hint;
        file "named.ca";
};
};
 
view "wan" {                                     //这是我们定义的外网view
     match-clients { 192.168.2.0/24; };          
     zone "jinsanhong.com" IN {
             type master;
             file "jinsanhong.com.wan";
     };
};


注:一旦启用view,所有的zone必须都在view下,所以要把系统默认的自检用的zone也放在view下。


四、配置区域解析库文件


然后我们就来编辑区域解析库文件。

cp -p /var/named/named.localhost /var/named/jinsanhong.com.lan     //使用-p复制能够保留源文件的属组属主和权限(这点很重要)
cp -p /var/named/named.localhost /var/named/jinsanhong.com.wan

注:如果复制的时候没有用-p选项的话也不要紧,我们可以使用如下命令修改:

chown root:named jinsanhong.com.*

chmod 640 jinsanhong.com.*


Vim jinsanhong.com.lan
$TTL 1D
@       IN   SOA  ns.jinsanhong.com.  admin.jinsanhong.com. (
                                        2015081310      ; serial
                                        1D              ; refresh
                                        1H              ; retry
                                        1W              ; expire
                                        3H )            ; minimum
         IN     NS       ns.jinsanhong.com.
ns.jinsanhong.com.      IN     A        10.0.0.3       //这是DNS服务器内网卡IP
www.jinsanhong.com.    IN     A        10.0.0.2        //解析的web服务地址


Vim welcome.zone.wan
$TTL 1D
@       IN SOA  ns.jinsanhong.com.  admin.jinsanhong.com. (
                                        2015081310      ; serial
                                        1D              ; refresh
                                        1H              ; retry
                                        1W              ; expire
                                        3H )            ; minimum
        IN     NS       ns.jinsanhong.com.
ns.jinsanhong.com.      IN     A        192.168.2.80    //这是DNS服务器外网卡IP
www.jinsanhong.com.     IN     A        192.168.2.80    // 解析的web服务地址



五、检查配置文件语法、启动服务并测试

检查配置文件
service named configtest

然后重启named服务器
Service named restart

然后测试
[root@localhost ~]# host -t A www.jinsanhong.com 192.168.2.80
Using domain server:
Name: 192.168.2.80
Address: 192.168.2.80#53
Aliases: 
www.jinsanhong.com has address 192.168.2.80
这是用的外网地址测试,解析到的IP地址是192.168.2.80(就是我们设置的外网webIP)

[root@localhost ~]# host -t A www.jinsanhong.com 10.0.0.3
Using domain server:
Name: 10.0.0.3
Address: 10.0.0.3#53
Aliases: 
www.jinsanhong.com has address 10.0.0.2
这是用的内网地址测试,解析到的IP地址是10.0.0.2(这是我们设置的内网webIP)

注:域名后边加的IP 是我们DNS服务的内外网卡的IP


  接下来我们用win主机测试我们在虚拟机中搭建的DNS服务

首先保证我们的win主机的IP和虚拟机的外网IP在同一网段内,并设置win主机的DNS地址为虚拟主机外网IP(网关不用设置)


然后修改虚拟主机的/etc/resolv.conf文件

Servername = 192.168.2.80        //IP是我们虚拟机的DNS IP

然后就能在我们的win主机上使用nslookup www.jinsanhong.com来测试了

内网测试就需要我们用另外一台虚拟机来测试了,这里不做具体说明。



六、一些常见错误的解决办法


错误一

“/etc/named.conf:47: when using 'view' statements, all zones must be in views”

表示你的zone没有全部添加到view下

两种解决办法:

1、/*view localhost_resolver {
        match-clients      { localhost; };
        match-destinations { localhost; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};*/
此处要将view字段注释掉
 
 
 
2、
view "other" {
zone "." IN {
        type hint;
        file "named.ca";
};
};
将所有的zone都放在视图下。


错误二

jinsanhong.com.lan:9: ignoring out-of-zone data (ns.jisanhong.com)
zone jinsanhong.com/IN: NS 'ns.jinsanhong.com' has no address records (A or AAAA)
zone jinsanhong.com/IN: not loaded due to errors.
lan/jinsanhong.com/IN: bad zone
zone jinsanhong.com/IN: loaded serial 2015081310
                                                           [FAILED]

提示我们没有解析到地址,多半都是我们的解析库文件配置出错,仔细检查我们的解析库文件配置,大部分的错误是域名写错。


错误三

测试的时候能ping通DNS但是就是提示连接超时或者是没有找到www.****.com之类的错误

大部分原因是防火墙的关系,我们检查一下iptables表是否允许53端口通过,也可关闭防火墙。