内网DNS服务器搭建说明
搭建目标
- 内外网均可访问
- 支持自定义域名
技术选型
主要备选方案为小米开源的SmartDNS和云原生毕业的CoreDNS。经过多方考量,最终选用云原生出品的CoreDNS,
github地址:https://github.com/coredns/coredns
官方网站:https://coredns.io/
本次主要使用的插件:https://coredns.io/plugins/hosts/
部署过程
1、挑机器
选用一台性能较好的服务器,最好CPU和内存高点的。建议配置:8C/8G/200G (CPU/内存/磁盘)
2、下载安装包
从Github上下载服务器系统类型对应的二进制安装包,具体链接地址为:https://github.com/coredns/coredns/releases/tag/v1.8.4
这里演示使用的Centos7.9,所以下载的是:coredns_1.8.4_linux_amd64.tgz
3、释放安装包
# 上传安装包coredns_1.8.4_linux_amd64.tgz 到服务器的/root目录下
# 新建目录
mkdir -p /usr/local/coredns
# 新建用户
useradd coredns -s /sbin/nologin
# 释放安装包
tar -xvf coredns_1.8.4_linux_amd64.tgz -C /usr/local/coredns
4、添加转发规则配置
规则说明:
local:53,所有请求域名以“ local ”结尾的去找/usr/local/coredns/hosts 文件做解析
.:53,除了上面两个规则外的其他所有请求被转发到公网的DNS去做解析
vim /usr/local/coredns/Corefile
# 新增
local:53 {
hosts /usr/local/coredns/hosts
log
}
.:53 {
forward . 8.8.8.8:53 114.114.114.114:53 1.1.1.1:53 223.5.5.5:53 223.6.6.6:53
log
}
5、添加本地域名映射文件
vim /usr/local/coredns/hosts
# 新增
10.3.1.1 dev.gis4.local
10.3.1.48 dev.gis7.local
10.3.1.40 test.gis4.local
10.3.1.47 prod.gis4.local
6、添加开机自启配置
vim /etc/systemd/system/coredns.service
# 新增
[Unit]
Description=CoreDNS DNS server
Documentation=https://coredns.io
After=network.target
[Service]
PermissionsStartOnly=true
LimitNOFILE=1048576
LimitNPROC=512
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
User=coredns
ExecStart=/usr/local/coredns/coredns -conf=/usr/local/coredns/Corefile
ExecReload=/bin/kill -SIGUSR1 $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
7、启动服务
systemctl start coredns
systemctl enable coredns
systemctl status coredns
8、测试域名
若机器上无法使用dig命令,可以yum安装下:yum -y install bind-utils
dig命令用法:https://man.linuxde.net/dig
# 先在内网DNS服务器的做本地测试
[root@localhost coredns]# dig @localhost a dev.gis7.local
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> @localhost a dev.gis7.local
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29437
;; flags: qr aa rd; QUERY: 1, ANSWER: