首页 > 代码库 > 智能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