前段时间腾讯云活动撸了个1核2G内存云服务器,上海二区使用上海电信ping值不超过8ms左右,但带宽只有1M,适合玩玩,想着搭建一个自用DNS服务器。
按照网上的很多文章,都是直接用apt install dnsmasq
安装的,我这样安装后死活不行,最多本地解析可以,而且会自动替换成本地dns服务器,简单看来下是启动脚本改的,我的目的只想开放53端口对外服务就可以,但是外网就是不可以,nmap可以扫描的udp53端口是打开着的,始终不通,所有放弃,最后自己编译安装dnsmasq。
编译
服务器环境 Ubuntu 16.04.4 LTS,其他发行版可能有所差别。
先安装一些依赖库,可能不完整apt update
apt install nettle-dev pkg-config
下载源代码解压wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.79.tar.gz
tar vxzf dnsmasq-2.79.tar.gz
cd dnsmasq-2.79
make
make install
生成的二进制文件在/usr/local/sbin/dnsmasq
如果需要开启DNSSEC功能,按照文档提示使用make COPTS=-DHAVE_DNSSEC
这样就可以,但是编译报错。
还可以手动修改src/config.h
文件,把/* #define HAVE_DNSSEC */
这一行的注释去掉也行。
编译成功后执行dnsmasq -v
就会看到已经启用DNSSECDnsmasq version 2.79 Copyright (c) 2000-2018 Simon Kelley
Compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth DNSSEC loop-detect inotify
...
配置
创建/etc/dnsmasq.conf
配置文件,dnsmasq会默认读取此文件,有关配置的详细文档查看 http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html/etc/dnsmasq.conf
bogus-priv
domain-needed
#不自动同步文件更改
no-poll
#上游配置
resolv-file=/etc/resolv.dnsmasq.conf
#按顺序从上游dns查找
strict-order
#dns缓存大小
cache-size=1000
#如果想启用dnssec请配置添加下面配置,不用就删掉
dnssec
trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
dnssec-check-unsigned
继续新建/etc/resolv.dnsmasq.conf
文件,配置上游dns服务,会按顺序解析,根据喜好自行选择配置。nameserver 8.8.8.8
nameserver 119.29.29.29
nameserver 114.114.114.114
运行
以前台调试模式运行,会输出查询日志 |
然后我们登录另一个终端使用dig
命令解析dig qq.com @127.0.0.1
输出类似如下,表示dns服务已经搭建成功dnsmasq: query[A] qq.com from 127.0.0.1
dnsmasq: forwarded qq.com to 119.29.29.29
dnsmasq: reply qq.com is 125.39.240.113
dnsmasq: reply qq.com is 61.135.157.156
现在在你本机使用 dig qq.com @your_server_public_ip
也可以解析到了。
开机启动和守护进程管理可以通过Supervisor
启动/etc/supervisor/conf.d/dnsmasq.conf
[program:dnsmasq] |
如果要输出dnsmasq日志做后续分析,加上
-q
参数,日志输出到了/var/log/syslog
文件中,可以通过journalctl -f
查看实时输出的日志
然后supervisor更新一下supervisorctl update
supervisorctl status
输出
...
dnsmasq RUNNING pid 13035, uptime 0:04:18
优化
此时 dnsmasq 已经在正常运行,可以设置电脑dns server为自己服务器ip了,但是解析国内地址访问不太理想。
借助dnsmasq-china-list项目的dns配置加速解析,默认使用的是
114.114.114.114
解析国内域名,可以通过项目自带的dnsmasq-update-china-list
脚本替换为其他的dns服务器。
手动安装,更多用法查看项目说明mkdir /etc/dnsmasq.d
wget -P /etc/dnsmasq.d https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf修改
/etc/dnsmasq.conf
配置文件,在后面添加一行conf-dir=/etc/dnsmasq.d
使用EDNS-CLIENT-SUBNET 优化自用线路
建议使用阿里公共DNS223.5.5.5
解析速度比较理想。
最后重启dnsmasq生效supervisorctl restart dnsmasq
测试
http://tools.cloudxns.net/index.php/Index/Diag
参考:
http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html
https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions
https://github.com/felixonmars/dnsmasq-china-list/