基于BIND实现智能DNS解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

    智能DNS又称为解析切割,是对请求DNS解析的IP地址进行判断,将域名解析成不同的地址

    一般智能DNS应用常见的场景就是CDN,中国特色社会主义的网络导致了电信和联通这2个特色的运营商,而这2个运营商通过在北京某机房的100G带宽相连,这就导致了电信用户访问联通的网络就会非常慢。玩游戏的童鞋就知道用游戏加速器来解决问题,但一般的用户访问在不同运营商网络的服务器时,变得非常慢。于是苦逼的服务提供商为了更好的用户体验就不得不去花费一笔钱去买CDN服务了。。。。

    CDN的原理就是在智能DNS基础上进行web的反向代理缓存实现的。通过不同地域的请求解析到对应地域的缓存服务器上,然后缓存服务器对主服务器进行数据请求,最终返回给客户。这对于静态页面的网站有着很好的加速。

    这里就不得不提一下著名的提供智能DNS解析服务的DNSpod(目前已被腾讯收购,软件源代码已经开源,宣称非BIND可以比拟,有兴趣的童鞋可以去研究研究)。还有比较著名的CDN服务提供商有帝盟等。。。

    还会一种会使用到智能DNS的场景:在公司内部NS服务器上区分内部和外部的请求,将内部请求解析到内网地址上,外网请求解析到外网地址上,此篇博文针对此应用展开

 

    BIND实现智能DNS的原理是通过view的方式,首先判断客户请求的来源,然后返回不同的IP

 

    规划:为lustlost.com域进行智能解析

分2个网段,192.168.92.0/24网段的请求解析到192.168.92.102主机上, 其它网段解析到172.19.19.102主机

这里172.19.19.102模拟外网。

这和一般公司的模式很接近,为公司内部提供内部私网地址的解析,避免路由器性能浪费。为外部提供公网地址的解析。

ns服务器的IP地址为192.168.92.102和172.19.19.102

 

[root@lustlost ~]# yum install bind caching-nameserver –y #安装bind和caching-nameserver,这里的caching-nameserver已经给我们在相应目录下提供了配置文件,根区域和本地区域的数据文件,而且它的主配置是默认以view方式配置的

 

[root@lustlost etc]# cp /etc/named.caching-nameserver.conf named.conf #用cp备份原配置文件,建立要使用的配置文件,然后进行修改

[root@lustlost etc]# vim /etc/named.conf

 


 
 
  1. #首先定义控制列表,这里定义了内网的网段 
  2.  
  3. acl innet {  
  4.         127.0.0.0/8;  
  5.         192.168.92.0/24;  
  6. }; 
  7.  
  8. #全局配置,精简一点,只配置数据文件目录位置 
  9.  
  10. options {  
  11.         directory       "/var/named";  
  12. }; 
  13.  
  14. #创建内网用户的view 
  15.  
  16. view in {  
  17.         match-clients      { innet; };            #定义用户为控制列表中所定义的  
  18.         recursion yes;  #允许内网用户进行递归查询 
  19.  
  20. #下面是定义根区域和本地区域的正反解析 
  21.  
  22.         zone "." IN {                
  23.                 type hint;  
  24.                 file "named.ca";  
  25.         };       
  26.  
  27.         zone "localhost" IN {  
  28.                 type master;  
  29.                 file "localhost.zone";  
  30.         }; 
  31.  
  32.         zone "0.0.127.in-addr.arpa" IN {  
  33.                 type master;  
  34.                 file "named.local";  
  35.         }; 
  36.  
  37.   
  38.  
  39. #定义内部网络用户解析 
  40.  
  41.         zone "lustlost.com" IN {  
  42.                 type master;  
  43.                 file "lustlost.com.in";  
  44.                 allow-transfer { none; }; #不允许区域传送  
  45.                 allow-update { none; }; #不允许更新  
  46.         };  
  47. }; 
  48.  
  49.   
  50.  
  51. #定义外部网络用户解析 
  52.  
  53. view out {  
  54.         match-clients      { any; }; #允许所有用户(这里之所以允许所有用户,
  55. 是因为bind对配置文件是从上往下读取解析的,
  56. 匹配不到上面view所定义的acl,
  57. 才会到这个view中来)  
  58.         recursion no;  #不允许外部网络用户进行递归查询(我们不是免费的公共dns) 
  59.  
  60.         zone "lustlost.com" IN {  
  61.                 type master;  
  62.                 file "lustlost.com.out";  
  63.                 allow-transfer { none; };  
  64.                 allow-update { none; };  
  65.         }; 
  66.  
  67. }; 

 

[root@lustlost etc]# named-checkconf  #配置完成后注意检查配置文件的语法错误

 

至此就配置好了主配置文件,接下来创建区域数据文件

[root@lustlost etc]# cd /var/named/

[root@lustlost named]# vim lustlost.com.in #创建内部网络客户解析区域文件

 


 
 
  1. #这里就随便建立几个记录了 
  2.  
  3. $TTL 600  
  4. $ORIGIN lustlost.com  
  5. @       IN      SOA     ns.lustlost.com.        admin.lustlost.com. (  
  6.                         2012070801  
  7.                         1H  
  8.                         10M  
  9.                         1W  
  10.                         1D  
  11. )  
  12.         IN      NS      ns  
  13.         IN      MX 10   mail  
  14. ns      IN      A       192.168.92.102  
  15. mail    IN      A       192.168.92.100  
  16. www     IN      A       192.168.92.101 

 

[root@lustlost named]# cp lustlost.com.in lustlost.com.out #创建外部网络客户解析区域文件

 


 
 
  1. $TTL 600  
  2. $ORIGIN lustlost.com  
  3. @       IN      SOA     ns.lustlost.com.        admin.lustlost.com. (  
  4.                         2012070801  
  5.                         1H  
  6.                         10M  
  7.                         1W  
  8.                         1D  
  9. )  
  10.         IN      NS      ns  
  11.         IN      MX 10   mail  
  12. ns      IN      A       172.19.19.102  
  13. mail    IN      A       172.19.19.100  
  14. www     IN      A       172.19.19.101 

 

至此所有配置都已经完成

检查下配置有无出错

Q~DUAJA0{$UH@D%_U~{WXMJ

 

检查无错误后启动服务

N1]Q8E@Q{0R019MEP43DQSN

 

查看下当前网络配置(为了方便,在网卡上配置了2个不同的地址,下面客户机也一样)

`Z7FZ05M7[L6$F3IQS820L1

 

查看下客户机的网络配置

T~[_]K1~DR(@SWNDF4QU`79

 

于是用这台客户机用不同地址去请求解析DNS

使用192.168.92.0/24网段去解析的结果

 

 

 

HOBS3]VY%G]8QA3${H@2DNS

 

使用172.19.19.0/24网段去解析的结果

~T]NL`L{)ICSQ5~QYJQS0Y5

 

可以看到,使用不同网段成功的解析到了不同的地址。

 

这就是基于BIND的智能DNS解析,使用了BIND的view功能,至于dnspod,在智能DNS解析方面应该有更加强大的功能,有兴趣可以去官网下载源代码安装研究


本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/924229,如需转载请自行联系原作者

相关文章
|
21天前
|
机器学习/深度学习 安全 大数据
揭秘!企业级大模型如何安全高效私有化部署?全面解析最佳实践,助你打造智能业务新引擎!
【10月更文挑战第24天】本文详细探讨了企业级大模型私有化部署的最佳实践,涵盖数据隐私与安全、定制化配置、部署流程、性能优化及安全措施。通过私有化部署,企业能够完全控制数据,确保敏感信息的安全,同时根据自身需求进行优化,提升计算性能和处理效率。示例代码展示了如何利用Python和TensorFlow进行文本分类任务的模型训练。
61 6
|
24天前
|
人工智能
歌词结构的巧妙安排:写歌词的方法与技巧解析,妙笔生词AI智能写歌词软件
歌词创作是一门艺术,关键在于巧妙的结构安排。开头需迅速吸引听众,主体部分要坚实且富有逻辑,结尾则应留下深刻印象。《妙笔生词智能写歌词软件》提供多种 AI 功能,帮助创作者找到灵感,优化歌词结构,写出打动人心的作品。
|
25天前
|
人工智能
写歌词的技巧和方法全解析:开启你的音乐创作之旅,妙笔生词智能写歌词软件
怀揣音乐梦想,渴望用歌词抒发情感?掌握关键技巧,你也能踏上创作之旅。灵感来自生活点滴,主题明确,语言简洁,韵律和谐。借助“妙笔生词智能写歌词软件”,AI辅助创作,轻松写出动人歌词,实现音乐梦想。
|
18天前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
25天前
|
监控 网络协议 安全
DNS服务器故障不容小觑,从应急视角谈DNS架构
DNS服务器故障不容小觑,从应急视角谈DNS架构
46 4
|
1月前
|
域名解析 网络协议
非阿里云注册域名如何在云解析DNS设置解析?
非阿里云注册域名如何在云解析DNS设置解析?
|
1月前
|
域名解析 弹性计算
内网域?名解析记录是否会覆盖公网域名解析记录?
内网域?名解析记录是否会覆盖公网域名解析记录?
|
5天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
18 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
67 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多