首页 > 代码库 > 智能NDS服务器的搭建——三大运营商线路分流解析DNS

智能NDS服务器的搭建——三大运营商线路分流解析DNS

    在我们中国电信运营商不止一家,有电信、移动、网通,但我们在访问互联网资源时,有时候就会现跨网访问的情况,但有时间跨网访问速度是奇慢的。所以我们的网站运营商,也会在网站的服务器上同时配上三大电信运营商的线路,如此一来,电信用户访问的时候就走电信的出口,移动用户访问的时候就走移动的出口,网通通用户访问的就走网通的出口,这样也就很好的解决了跨网访问速度奇慢的问题的了。但这里其实就用到了,如何让DNS在解析地址的过程中智能的去判断哪个运营商的用户走哪条线路了。今天在这里给大家模拟实现一下,智能DNS如何帮你实现这一效果。

智能NDS服务器的搭建八步骤:

第一步:yum安装bind

第二步:修改DNS的主配置文件/etc/named.conf的options段

第三步:在主配置文件/etc/named.conf的options段后面定义ACL(一定要紧跟其后)

第四步:在主配置文件/etc/named.conf的acl选项后面定义view

第五步:使用//注释掉/etc/named.conf的倒数第二行include "/etc/named.rfc1912.zones";

第六步:创建正反向解析数据库存文件(由于我们只是示例,所以有就建立正向解析的了)

第七步:启动DNS,查看日志验证是否启动成功

第八步:验证DNS的线路分流解析效果


第一步:yum安装bind

[root@centos730g ~]# yum install -y bind


第二步:修改DNS的主配置文件/etc/named.conf的options段

options {

//      listen-on port 53 { 127.0.0.1; };

        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";

//      allow-query     { localhost; };


        /* 

           recursion. 

           reduce such attack surface 

        */

        recursion no;


        dnssec-enable yes;

        dnssec-validation yes;


        /* 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;

        };

};

第三步:在主配置文件/etc/named.conf的options段后面定义ACL(一定要紧跟其后)

哪些IP段属于哪个运营商的,互联网上都有相关的数据库。可以直接查询之后复制过来写进去即可。当然格式都是固定的,不能写错。在这里我们就用两个IP地址来模拟一下。

acl lan {10.1.42.61;};

acl wan {10.1.42.72;};


acl CN-CTT {101.144.0.0/12;103.3.128.0/22;110.192.0.0/11;110.96.0.0/11;114.208.0.0/14;115.104.0.0/14;115.180.0.0/14;118.204.0.0/14;120.90.0.0    /15;122.64.0.0/11;123.64.0.0/11;221.172.0.0/14;222.32.0.0/11;36.192.0.0/11;61.232.0.0/14;61.236.0.0/15;}


 这是拿14年中国铁通的IP段给大家做了一个示例,当然像中国电信,以及中国联通的IP段就比较多了。当然,同样是这样写在acl里面就行了。


需要运营商IP分段文件的,可以到附件中自行下载(移动和铁通的合成一个文件了)

;# 数据来自于: http://www.lbase.net 超级查询基地

;# 数据生成时间:2014-10-22


第四步:在主配置文件/etc/named.conf的acl选项后面定义view


view lan {

match-clients {lan;};

zone "." IN {

        type hint;

        file "named.ca";

};


zone "firewall.com" IN {

        type master;

        file "firewall.com.lan";

};


zone "localhost.localdomain" IN {

        type master;

        file "named.localhost";

        allow-update { none; };

};


zone "localhost" IN {

        type master;

        file "named.localhost";

        allow-update { none; };

};

};


view wan {

match-clients {wan;};

zone "." IN {

        type hint;

        file "named.ca";

};


zone "firewall.com" IN {

        type master;

        file "firewall.com.wan";

};


zone "localhost.localdomain" IN {

        type master;

        file "named.localhost";

        allow-update { none; };

};


zone "localhost" IN {

        type master;

        file "named.localhost";

        allow-update { none; };

};

};


当然这里只是给出了正向解析,反向解析也是一个一样的


第五步:使用//注释掉/etc/named.conf的倒数第二行include "/etc/named.rfc1912.zones";

或者删除/etc/named.rfc1912.zones中所有的区域定义,否则会报一个使用view后所有的zone必须都在view里面

[root@centos730g ~]# named-checkconf 

/etc/named.rfc1912.zones:12: when using ‘view‘ statements, all zones must be in views


第六步:创建正反向解析数据库存文件(由于我们只是示例,所以有就建立正向解析的了)

创建lan口的解析文件

[root@centos730g ~]# cd /var/named/

[root@centos730g named]# vim firewall.com.lan 


$TTL 1D

@ IN SOA dns.firewall.com. admin.firewall.com. (

                2016092601

                1D  

                1H  

                1W  

                1D  

                        )   

@       IN      NS      dns.firewall.com.

dns     IN      A       10.1.42.71

@       IN      A       10.1.42.71

www     IN      A       10.1.42.74


创建wan口的解析文件

[root@centos730g named]# vim firewall.com.wan 


$TTL 1D

@ IN SOA dns.firewall.com. admin.firewall.com. (

                2016092601

                1D  

                1H  

                1W  

                1D  

                        )   

@       IN      NS      dns.firewall.com.

dns     IN      A       10.1.42.73

@       IN      A       10.1.42.73

www     IN      A       10.1.42.75


第七步:启动DNS,查看日志验证是否启动成功

[root@centos730g ~]# systemctl start named

[root@centos730g ~]# cat /var/log/messages


Sep 26 15:38:42 centos730g named[2503]: zone localhost.localdomain/IN/lan: loaded serial 0

Sep 26 15:38:42 centos730g named[2503]: zone firewall.com/IN/lan: loaded serial 2016092601

Sep 26 15:38:42 centos730g named[2503]: zone localhost/IN/lan: loaded serial 0

Sep 26 15:38:42 centos730g named[2503]: zone localhost.localdomain/IN/wan: loaded serial 0

Sep 26 15:38:42 centos730g named[2503]: zone localhost/IN/wan: loaded serial 0

Sep 26 15:38:42 centos730g named[2503]: zone firewall.com/IN/wan: loaded serial 2016092601

Sep 26 15:38:42 centos730g named[2503]: all zones loaded

Sep 26 15:38:42 centos730g named[2503]: running

Sep 26 15:38:42 centos730g systemd: Started Berkeley Internet Name Domain (DNS).

Sep 26 15:38:42 centos730g systemd: Reached target Host and Network Name Lookups.

Sep 26 15:38:42 centos730g systemd: Starting Host and Network Name Lookups.

当从日志里面看到上述信息时,说明DNS启动成功。


第八步:验证DNS的线路分流解析效果

现在使用lan口的机器来查询DNS的解析效果

[root@Centos630G ~]# cat /etc/resolv.conf

; generated by /sbin/dhclient-script

search

nameserver 10.1.42.71

[root@Centos630G ~]# ip addr show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:e1:ee:04 brd ff:ff:ff:ff:ff:ff

    inet 10.1.42.61/16 brd 10.1.255.255 scope global eth0

    inet6 fe80::20c:29ff:fee1:ee04/64 scope link 

       valid_lft forever preferred_lft forever


[root@Centos630G ~]# nslookup dns.firewall.com

Server:     10.1.42.71

Address:    10.1.42.71#53


Name:   dns.firewall.com

Address: 10.1.42.71


[root@Centos630G ~]# nslookup www.firewall.com

Server:     10.1.42.71

Address:    10.1.42.71#53


Name:   www.firewall.com

Address: 10.1.42.74


[root@Centos630G ~]# 


现在使用lan口的机器来查询DNS的解析效果

[root@centos72-gui ~]# cat /etc/resolv.conf 

# Generated by NetworkManager

nameserver 10.1.42.71

[root@centos72-gui ~]# ip addr show eno16777736 

2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:0c:33:c2 brd ff:ff:ff:ff:ff:ff

    inet 10.1.42.72/24 brd 10.1.42.255 scope global eno16777736

       valid_lft forever preferred_lft forever

    inet6 fe80::20c:29ff:fe0c:33c2/64 scope link 

       valid_lft forever preferred_lft forever


[root@centos72-gui ~]# nslookup dns.firewall.com

Server:     10.1.42.71

Address:    10.1.42.71#53


Name:   dns.firewall.com

Address: 10.1.42.73


[root@centos72-gui ~]# nslookup www.firewall.com

Server:     10.1.42.71

Address:    10.1.42.71#53


Name:   www.firewall.com

Address: 10.1.42.75


[root@centos72-gui ~]# 


当前设置下,其它机器使用不了当前的DNS,因为当前ACL中只给定了两个IP,10.1.42.61;10.1.42.72,其它机器的查询都会被拒绝(包括服务器本身)

[root@centos730g ~]# dig www.firewall.com


; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> www.firewall.com

;; global options: +cmd

;; connection timed out; no servers could be reached

[root@centos730g ~]# 


当然在这里还要补充一点的是,DNS服务器使用的查询端口UDP53必须处于放行状态。否则客户端的查询会被防火墙拦截的。


这里我们只是拿了两个IP给大家演示了一下,如果把三大运营商的IP段全部按照上面给的中国铁通的ACL格式写好的话,那么现在属于电信的用户我们就给它解析到电信的接口上了,其它效果同样。


通过这个案例我们也可以看出,利用智能DNS我们不仅可以做到线路自动分配,还可以把内外和外网用户访问的web服务器地址解析成不一样的,比如说,公司的员工使用域名访问web服务器时就让DNS解析到内网的服务器上,如果是外部用户的访问当然就直接解析到公网服务器上了

本文出自 “爱情防火墙” 博客,请务必保留此出处http://183530300.blog.51cto.com/894387/1856697

智能NDS服务器的搭建——三大运营商线路分流解析DNS