+86 13541016684Mon. - Fri. 10:00-22:00

自建DNS gdnsd (支持状态监控、负载均衡的GeoDNS )

自建DNS gdnsd (支持状态监控、负载均衡的GeoDNS )

自建DNS gdnsd (支持状态监控、负载均衡的GeoDNS )

一.介绍

在V2上介绍了gdnsd的文章,马上点了一波收藏,因为CentOS没有现成的包,所以一直放在那懒得折腾。最近遇到CloudXNS这件事之后开始寻思着拿出来折腾下,在折腾了好几天PowerDNS后终于可以腾出手来搞这货了。

这个还是很有特色的,因为它有个插件系统,功能还是挺强大的,因为实现了自带的状态监控(http以及tcp),并且能够通过多个插件配合实现宕机切换,很有意思,还能通过外部命令来进行自定义的检测。此外,和PowerDNS不同的是这个由于使用了libmaxminddb库,支持GeoIP2格式数据库。

二.安装

比起PowerDNS不如的是这个连个spec都不给,我去网上翻来翻去,结合Github历史Commit中的spec撸了个出来,试了下没报错,感动,至于init脚本,其实不用也行,因为gdnsd自带控制,不过为了方便自启我还是找了个,别人写的,试了下还行就懒得自己动手了,已经打包到rpm文件中

官方的依赖有ragel,而且只支持6.x版本(貌似是因为7.0出来的比较晚或者说官方更新的不勤,最后更新还是16年的了),这就带来了一个问题,CentOS6没这个包,CentOS7又只有7.x的,于是我只能顺便打个ragel的包了,然后因为这个依赖colm,于是……还好主要就这俩,其他的rpmforge以及epel源里都有,当然,为了更好的使用我把libmaxminddb也打包了个最新版本。

总而言之,CentOS6的应该是能直接用我的包了,7的同学可以自己研究下_(:з」∠)_如果我哪天换7了也许会做一份……如果想自己编译的同学请参考官方安装指导

另外为了方便请下载release版本,直接git的会比较麻烦,因为需要autoreconf然后对automake autoconf以及libtool都要求较高的版本,可能源里的不能满足要求。

CentOS6 快捷通道

在这个过程中可能安装其他依赖,如果出问题请添加rpmforge以及epel源。

这部分参考了一些东西,列举一下

  1. CentOS 6 / RHCE 6 gdnsd ( geo dns ) latest from source
  2. gdnsd的GitHub历史Commit
  3. Fedora上某个移植的Review

三.配置

rpm打包的时候我就把需要的各个配置目录以及运行用户全写进去了,所以不用额外处理,唯一需要在意的是如果要使用geoip功能请创建/etc/gdnsd/geoip 目录并把数据库丢这个文件夹里,下面演示的时候也会提到,这部分流程参考了兽兽的教程

不过说在前头,这玩意我还没玩明白,很多玩法请参照man以及GitHub上的wiki

简易GeoDNS配置,参照烧饼博客

插件介绍

四.同步

这部分其实的话……跟PowerDNS差不多,rsync的可以参考烧饼博客的最后一部分,btsync和syncthing的看我博客历史文章吧,左边搜索一下就有,至于文件同步后重载配置,gdnsd也有和pdns_control reload类似的命令,是gdnsd reload-zones,使用了我的rpm包的建议前面加个service来通过init脚本重载

如果你的内核版本够高,比如是4.x的那么gdnsd有内置的inotify,会自动检测配置文件改动,如果是自带的2.63内核,那么请参照我PowerDNS的文章丢个zone_watcher脚本上去吧,改改zone文件位置就行,当然这里是文件夹类型的,建议如下,加上-r参数是递归检测文件夹内文件

这样就可以使用了。