自建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了也许会做一份……如果想自己编译的同学请参考官方安装指导——>传送门 阅读全文→

自建DNS系列——PowerDNS GeoIP版(多节点,分区解析)

一.原因

自从月初CloudXNS突然翻脸,以及一个星期了,虽然我在最短的时间内知道了这个消息并在V2顺利骗了一波铜币,然后花了一个晚上迁移自己的一堆域名,成功将这个事件的影响降到了最低。但是,针对这种情况还是需要做一些预防,所以把之前攒的自建DNS的相关资料拿出来好好研究了一下,并在这几天中实验了其中一种,基于PowerDNS的GeoDNS方案,发现效果还行,于是打算分享一下,也顺便做个记录。(之后打算研究下兽兽安利过的gdns,不过这玩意好像在Centos上比较蛋疼)

二.安装

由于Centos6平台求稳,所以各种包的版本都比较落后,因此在PowerDNS的官方源中没有支持GeoIP的版本,这特么就很尴尬了,在Github发issue求助被告知因为yaml-cpp版本不够所以只能自己编译后,我就开始了长达两天的修(编)仙(译)过程。

其实吧,一开始没发现官方的Github里有打包脚本,于是只能自己拆Centos6和Centos7的src.rpm包来拼一份spec出来,在折腾半天后发现各种不对劲,于是重新去找,结果在官方的Github里发现了build-scripts/build-auth-rpm这个脚本……蛋疼,好吧,拿来修修改改,加个pdns-backend-geoip进去,然后开始了编译打包大业。接着就碰到了一个简直日狗的问题,成功编译,成功打包,成功安装,然后……查询不出设置的txt记录,提示如下

这就很绝望,因为查询a记录啥都正常,于是怀疑是不是编译过程中有啥依赖有问题,折腾了一天,最后发现……yaml格式的配置文件中txt记录部分少了俩空格……这,我的内心是崩溃的,大哥,你格式不对提醒下啊,别报这种八竿子打不到一起的错误啊。好吧,总算是成功了,所以用Centos6的各位就不用蛋疼了,用我的rpm包就行。 阅读全文→

Centos6特殊方法安装最新版Dnsmasq——鸠占鹊巢

一.介绍

Dnsmasq是一个轻量级的DNS服务器,功能强大,而且配置安装来说都相对简单,我之前提到过Pcap_DNSProxy,那个主要是防污染效果好,不过那个编译起来确实有点头疼,而Dnsmasq就不一样了,安装方便,yum就行,不过不是最新版的,最新版的话编译安装可以,但是还得各种改配置文件,那么怎么办呢?我现在就来分享一个之前看到过的一个方法,yum和编译相结合,试了下确实方便。

二.方法

首先我们来yum安装一波

然后看下当前版本

然后我们下载编译下dnsmasq最新版(请务必记得安装编译套件)

这个只编译了主程序,没带配置文件啥的,然后,就是见证奇迹的时刻了 阅读全文→

Centos6编译安装Pcap_DNSProxy——DNS防污染利器

一.缘起

最近有朋友提起自建dns的方案,我个人用的是dnsmasq+dnscrypt-proxy,他吐槽说我这个太麻烦,用pcap_dnsproxy一个就够了,然而……这玩意我上手之后发现编译起来简直是神坑,特别是对于centos6来说,感人肺腑= =……不过问题的出现就是为了解决吗,作者在说明里把依赖全列出来了,所以我折腾了下搞定了,在此记录一下,以方便其它有需要的人。

二.解铃

安装方法:
安装过程比较漫长而且操作比较复杂,请给予一定的耐心按照说明操作!

1.准备程序编译环境:编译前需要使用包管理工具安装,或者需要自行编译和安装依赖库
* 依赖工具/库列表:
* GCC/g++ 可访问 https://gcc.gnu.org 获取
* GCC 最低版本要求为 4.9 从此版本开始 GCC 完整支持 C++ 11 标准,4.9 之前的版本对 C++ 11 标准的实现有问题
* GCC 当前版本可使用 gcc --version 查看,使用旧版本 GCC 强行编译可能会出现无法预料的问题!
* Bison 可访问 https://www.gnu.org/software/bison 获取
* M4 可访问 https://www.gnu.org/software/m4 获取
* Flex 可访问 http://flex.sourceforge.net 获取
* CMake 可访问 https://cmake.org 获取
* LibPcap 可访问 http://www.tcpdump.org/#latest-release 获取
* 获得 root 权限后使用 ./configure -> make -> make install 即可
* 部分 Linux 发行版可能还需要 LibPcap-Dev 工具的支持
* Libsodium 可访问 https://github.com/jedisct1/libsodium 获取
* 编译时如果剥离 Libsodium 的依赖则可跳过编译和安装下表的依赖库和工具,具体参见下文的介绍,不建议使用
* Libsodium 的编译和安装依赖 Automake/Autoconf 套装工具:
* aclocal
* autoscan
* autoconf 可访问 https://www.gnu.org/software/autoconf 获取
* autoheader
* automake 可访问 https://www.gnu.org/software/automake 获取
* libtool 可访问 https://www.gnu.org/software/libtool 获取
* 获得 root 权限后进入目录,运行 ./autogen.sh -> ./configure -> make -> make install 即可
* 部分 Linux 发行版可能还需要 Libsodium-Dev 工具的支持
* 部分 Linux 发行版可能还需要运行 ldconfig 刷新系统的库缓存

2.编译 Pcap_DNSProxy 程序并配置程序属性
* 切勿更改脚本的换行格式 (UNIX/LF)
* 使用终端进入 Source/Scripts 目录,使用 chmod 755 CMake_Build.sh 使脚本获得执行权限
* 使用 ./CMake_Build.sh 执行编译程序
* 添加参数 --enable-static 即 ./CMake_Build.sh --enable-static 可启用静态编译
* 脚本所进行的操作:
* CMake 将编译并在 Release 目录生成 Pcap_DNSProxy 程序
* 设置 Pcap_DNSProxy 程序以及 PcapDNSProxyService 和 Pcap_DNSProxy.service 服务控制脚本的基本读写可执行权限
* 设置 Linux_(Un)Install.Systemd.sh 以及 Linux_(Un)Install.SysV.sh 服务控制安装脚本的基本读写可执行权限
* 从 ExampleConfig 复制默认配置文件到 Release 目录
* 执行时使用 ./CMake_Build.sh --disable-libsodium 可剥离 Libsodium 的依赖,不建议使用
* 剥离后编译时将不需要 Libsodium 库的支持
* 剥离后程序将完全失去支持 DNSCurve/DNSCrypt 协议的功能,且运行时将不会产生任何错误提示,慎用!

3.配置系统守护进程服务
* 由于不同的 Linux 发行版对系统服务和守护进程的处理方式不同,本步仅供参考
* 附带的 Linux_Install.Systemd.sh 脚本适用于默认使用 Systemd Init 的系统
* Linux Debian 8.x 官方发行版以及更新版本系统环境,经测试可直接使用
* 附带的 Linux_Install.SysV.sh 脚本适用于默认使用 System V Init 的系统
* Linux Debian 6.x - 7.x 官方发行版系统环境,经测试可直接使用
* 更多详情可参见下文其它 Linux 发行版服务的说明,以及所使用 Linux 发行版的官方说明
* 使用 Systemd Init 时:
* 进入 Release 目录并编辑 Pcap_DNSProxy.service 文件,编辑完成后保存:
* WorkingDirectory= 项为程序所在目录的绝对路径
* ExecStart= 项为程序所在目录的绝对路径,并在最后加上程序的名称
* 在 root 权限下使用 ./Linux_Install.Systemd.sh 执行服务安装脚本,脚本所进行的操作:
* 将 Pcap_DNSProxy.service 服务控制脚本的所有者更改为 root
* 安装服务控制脚本到 /etc/systemd/system 目录中
* 尝试启动 Pcap_DNSProxy 服务,并显示执行操作后服务的状态
* 以后每次系统启动都将自动启动服务
* 更多 Systemd 服务控制的方法,参见各 Linux 发行版官方文档的说明
* 使用 System V Init 时:
* 进入 Release 目录并编辑 PcapDNSProxyService 文件,编辑完成后保存:
* NAME 项为程序的名称
* PATH 项为程序的绝对路径
* 在 root 权限下使用 ./Linux_Install.SysV.sh 执行服务安装脚本,脚本所进行的操作:
* 将 PcapDNSProxyService 服务控制脚本的所有者更改为 root
* 安装服务控制脚本到 /etc/init.d 目录中
* 尝试启动 PcapDNSProxyService 服务,并显示执行操作后服务的状态
* 以后每次系统启动都将自动运行脚本启动服务
* 可直接输入 sh PcapDNSProxyService 不带参数查询用法
* start - 启动服务
* stop - 停止服务
* force-reload/restart - 重启服务
* status - 服务状态,如果 PID 为空则服务未启动

阅读全文→