近期本人有自定义大量域名解析的需求,虽改动「Hosts」文件可以实现此功能,但如此灵活性欠佳,且不便于在未解锁系统分区的手机上使用,因而萌生了自建DNS的想法。
由于境内服务器对53端口有限制,使用基于TLS加密的「DNS over TLS」协议来作为「传统DNS」的替代;「CoreDNS」是个开源且简便的DNS工具,正好满足我简单的需求。
一、工具下载
在系统中创建一个名为「coredns」的目录,并cd
至其中:
mkdir coredns
cd coredns
在官方提供的GitHub Releases页面找到对应系统的版本,复制链接,
直接wget下来(x64版)并以「coredns.tgz」命名:
wget -O coredns.tgz https://github.com/coredns/coredns/releases/download/v1.12.0/coredns_1.12.0_linux_amd64.tgz
解压下载的「coredns.tgz」压缩包到当前目录:
tar zxvf coredns.tgz -C ./
解压后会获得一个名为「coredns」的可执行文件,既是其本体,非常简单。
尝试运行一下:./coredns
,可能有如下输出:
.:53
CoreDNS-1.12.0
linux/amd64, go1.23.3, 51e11fe
此时意味着可以运行,但不能正常解析,因为未有配置文件。
若提示53端口被占用,可暂且不理,因为用不到ㄟ( ▔, ▔ )ㄏ。
二、工具配置
CoreDNS的大部分功能由插件实现,以下所提插件为本体自带;
因采用TLS,需先申请SSL证书。
1. 创建配置文件
在CoreDNS执行文件的同一目录中,用vim
创建一个名为「Corefile」文件:
vim Corefile
按「i」开始编辑,输入以下配置:
tls://.:853 {
#「tls」后为证书和密钥文件路径,可自定义
tls tnpc.crt tnpc.key
#第二个「hosts」为hosts文件路径,可自定义
hosts hosts . {
fallthrough
}
#「forward .」后为上游DNS地址,可自定义
forward . tls://1.12.12.12:853 {
tls_servername dns.pub
}
log
errors
}
解释:
tls://
使用TLS协议,.:853
对所有域名监听853端口;
tls
调用tls插件,引入SSL证书;
hosts
调用hosts插件,按hosts文件解析,fallthrough
若hosts文件中无则以下面配置的方法解析;
forward
调用forward插件,设置上游DNS,我在此选择腾讯DNSPod的「dns.pub」作为上游,其地址为1.12.12.12
且采用TLS协议及853端口,tls_servername
后为其主机名;这里也可以使用DNS协议的DNS,只需在forward .
后写上地址即可,可写多个同或不同协议的,如forward . 119.29.29.29:53 223.5.5.5:53 tls://1.12.12.12:853
;
log
调用log插件,在控制台上输出日志;errors
调用errors插件,在控制台上输出错误;
最后按下「Esc」并输入:wq
再「回车」保存推出;
2. 启动测试
前面配置了引入hosts文件,在此创建一个vim hosts
,方便自定义解析;
启动程序:
./coredns
#或coredns -conf ./Corefile
#可以-conf自定义配置文件路径
启动后打开另一终端窗口,使用kdig
测试:
若提示找不到kdig命令,可先用包管理器安装
knot-dnsutils
kdig -p 853 @服务器地址 +tls tnpc.space
输出将包含如下内容:
;; QUESTION SECTION:
;; tnpc.space. IN A
;; ANSWER SECTION:
tnpc.space. 600 IN A 202.95.9.130
在hosts文件中自定义几条,再以同样的方式测试是否返回想要的结果,若是则配置完成。
三、保持运行
这个东西的启动方式对于有过Minecraft服务器架设经验的人来说应该都有种熟悉感,
我在此尝试用Minecraft的方式,即直接将其挂在screen
中:
screen -S dns
#创建一个名为「dns」的screen
在刚创建的新窗口重复上述的启动流程,
启动后按下Ctrl + A + D
即可将其挂在后台,
(想看输出刷屏幕的时候)可随时切回来:
screen -r dns
为了方便,整个脚本:
#!/bin/bash
#看启动没有
if screen -list | grep -q "dns"; then
echo "服务端早已启动!执行“screen -r dns”以查看"
exit 1
fi
#移动到安装目录
cd ~/coredns
echo "正启动服务端。欲浏览窗口则请执行screen -r dns"
echo "要使窗口最小化并后台运行,可按下Ctrl+A+D"
#启动在screen中
screen -dmS dns /bin/bash -c "./coredns"
乆,年更完成。(¦3[▓▓]
Comments NOTHING