Quantcast
Channel: polygun2000的博客
Viewing all articles
Browse latest Browse all 55

构建复合型DNS服务器

$
0
0
公司办公用的DNS服务器,要实现以下几个需求:

1. 公司内部的系统,包括wiki等系统,使用的是内部域名,互联网上不能解析;
2. 访问中国国内网站,使用114和阿里的DNS
3. 访问google等网站,DNS不能被污染

本方案结合使用dnsmasq和dnscache实现上述目标。主要是使用dnsmasq灵活的配置,以及djbdns中dnscache不信任任何上游DNS服务器的特点。单独用dnscache也能实现,但是配置繁琐。


配置过程流水账一下, ubuntu 16.04:

一、安装daemontools和ucspi-tcp
$ sudo apt-get install daemontools daemontools-run ucspi-tcp

二、编译安装dbndns
1. 确保在软件源配置文件/etc/apt/sources.list中添加了deb-src项

2. 安装dpkg-dev
$ sudo apt-get install dpkg-dev

3. 查询当前镜像站点中是否有该源码包
$ sudo apt-cache showsrc dbndns

4. 将源码包下载到用户当前目录
$ sudo apt-get source dbndns

源码包中通常包含3个文件,分别以dsc,orig.tar.gz和diff.gz为后缀名。

5. 构建依赖(dbndns其实不需要此步骤,可跳过)
$ sudo apt-get build-dep dbndns

6. 修改djbdns的补丁

$ vi djbdns-1.05/dbndns/diff/0002-Apply-fefe-s-djbdns-1.05-test23-ipv6-patch.diff

找到diff --git a/dnscache.c b/dnscache.c这一行,将下边4行中的53改成853如下:

   if (x->port < 1024) if (x->port != 853) return;
   if (x->port < 1024) if (x->port != 853) { close(x->tcp); return; }
+  if (socket_bind6_reuse(udp53,myipincoming,853,interface) == -1)
+  if (socket_bind6_reuse(tcp53,myipincoming,853,interface) == -1)

7. 编译deb包
$ cd djbdns-1.05
$ sudo dpkg-buildpackage

8. 使用dpkg安装编译好的包
$ sudo dpkg -i dbndns_1.05-8ubuntu1_amd64.deb

三、配置dnscache
$ groupadd dnscache
$ useradd -g dnscache dnscache
$ useradd -g dnscache dnscachelog
$ dnscache-conf dnscache dnscachelog /etc/dnscache 192.168.0.10
$ touch /etc/dnscache/root/ip/192.168.0

$ ln -s /etc/dnscache /etc/service/
$ svstat /etc/service/dnscache
$ ss -nul|grep 853

四、 安装配置dnsmasq
$ sudo apt-get install dnsmasq

修改配置文件
$ sudo vi /etc/dnsmasq.conf
port=53
domain-needed
bogus-priv
no-resolv
interface=eth0
bind-interfaces
cache-size=512
#log-queries

# 这里配置多个上游服务器,配合all-servers
server=114.114.114.114
server=223.5.5.5
server=223.6.6.6

# 特定域 转交给指定DNS服务器解析
server=/internal.com/192.168.1.1
server=/foo.bar.com/223.5.5.5

# 特定域名 直接返回指定的IP地址
address=/foo.fake.com/10.10.10.10

# 其他被引用的配置文件目录
conf-dir=/etc/dnsmasq.d

为避免污染,将相应的域名指向本机的dnscache解析(853端口)
$ sudo vi /etc/dnsmasq.d/gfw.conf
....
server=/google.com/127.0.0.1#853
server=/zyzc9.com/127.0.0.1#853
....

修改启动脚本,加入--all-servers 参数
$ sudo vi /etc/systemd/system/multi-user.target.wants/dnsmasq.service
...
ExecStart=/etc/init.d/dnsmasq systemd-exec --all-servers

$ sudo systemctl daemon-reload
$ sudo systemctl start dnsmasq


参考文档:
https://louwrentius.com/secure-caching-dns-server-on-linux-with-djbdns.html
https://blog.csdn.net/MaoshiYIHAO/article/details/70947578
https://www.linux.com/learn/intro-to-linux/2018/2/advanced-dnsmasq-tips-and-tricks
https://ma.ttwagner.com/make-dns-fly-with-dnsmasq-all-servers/

 

Viewing all articles
Browse latest Browse all 55

Trending Articles