使用CoreDNS搭建内网简易DNS服务器
CoreDNS是一个使用 Go语言编写,高性能的 DNS服务器/转发器,官网
前言
最近在搭工作室内网的时候,好多服务都有通过域名访问的需求,之前是直接把域名和对应的IP地址写在 OpenWRT路由器的 hosts文件里的,后面域名列表多起来之后维护这个 hosts文件非常麻烦,于是就萌生了搭一个内网 DNS服务器的想法
后面大概总结了一下需求,主要是 内网的文件服务器和 Gitlab以及跑的一些前端服务,再加上需要劫持一下校园网的认证域名。最后综合了一下性能、易用性后决定选用 CoreDNS。
下载安装
CoreDNS是基于 Go语言的项目并且使用了 go mod特性,编译需要 Go语言版本 >= 1.20
# 下载仓库
git clone https://github.com/coredns/coredns
cd coredns
# 如果访问官方镜像仓库速度慢的 可以设置为国内的镜像地址
export GOPROXY=https://goproxy.cn
# 编译
make
编译完成后会在当前目录生成名为 coredns的可执行文件,直接运行即可
./coredns
# 会看到如下输出
.:53
CoreDNS-1.6.6
linux/amd64, go1.16.10, aa8c32
使用 dnsutils包提供的 dig工具测试 DNS服务是否可用
dig @127.0.0.1 -p 53 www.example.com
命令执行后会输出服务器返回的解析信息
自定义域名解析
需要自定义域名解析或者使用插件的功能的话,需要编辑 coredns的核心配置文件 Corefile
# 每一个 {} 是一个配置段
# 监听53端口 对所有域名生效
.:53 {
# 启用whoami插件
whoami
}
# 监听53端口 对所有ml后缀的域名生效
ml:53 {
# 转发DNS请求到指定DNS地址
forward . 8.8.8.8 223.5.5.5
# 开启log插件 每次请求都会输出日志
log
}
最终的配置
.:53 {
# 使用host插件自定义域名解析 和hosts文件用法一致
# 还可选用file插件等
hosts {
10.10.10.11 work.gitlab.ml
10.10.10.10 www.xuecheng.ml xuecheng.ml ucenter.xuecheng.ml teacher.xuecheng.ml file.xuecheng.ml
10.34.2.9 auth.cqtbi.edu.cn
fallthrough
}
# hosts插件未匹配到的域名将会被转发到下面的dns服务器
forward . 10.34.5.253 223.5.5.5 114.114.114.114 8.8.8.8
# 启用缓存
cache
# 打开log
log
}
转为systemd
编译得到的二进制文件每次都需要手动启动停止,转为 systemd后可以使用 systemctl命令进行管理
我使用的 ArchLinux,所有用户包的 .service文件都放在 /usr/lib/systemd/system目录,先编辑 coredns的 service文件
# 在network之后启动
[Unit]
After=network.target
[Service]
# 简单类型
Type=simple
# 指定二进制文件路径 配置文件路径已经进程文件目录
ExecStart=/home/cola/coredns/coredns -conf /home/cola/coredns/Corefile -pidfile /var/run/coredns/coredns.pid
[Install]
# 设置别名
Alias=coredns.service
# 添加用户参数 以便设置开机自启
WantedBy=multi-user.target
配置文件编辑完后新建进程文件的目录,否则启动会报错
sudo mkdir /var/run/coredns
然后就可以使用 systemctl管理 coredns了
# 启动coredns
sudo systemctl start coredns
# 查看coredns状态
sudo systemctl status coredns
# 设置开机自启
sudo systemctl enable coredns
最后,服务跑起来之后将 OpenWRT路由器的 DNS服务器地址指向内网 DNS的 IP地址即可






0 条评论