前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

anolis7下使用CoreDNS搭建DNS【详细操作步骤】

qiguaw 2025-04-26 20:29:19 资源文章 4 ℃ 0 评论

anolis7下使用CoreDNS搭建DNS

CoreDNS 是一个用 Go 语言编写的 DNS 服务器/转发器。

背景:

电脑A,安装CoreDNS,ip是192.168.2.100

电脑B,配置dns的电脑,ip是192.168.2.104。

需求:配置该dns的电脑B,如果在浏览器输入hljcors.com,则指向ip地址192.168.2.200。

一. 下载CoreDNS软件

通过coredns的github,下载coredns。coredns的release版本地址:

https://github.com/coredns/coredns/releases/tag/v1.12.1

但是github下载较慢,可以在这里下载:版本1.12.1,有windows和linux的64位版本

https://caiyun.139.com/m/i?2mknq2domBdd3  提取码:rtb9 

二. 解压

下载后的coredns软件放在目录:
/home/zhao/programs/coredns

[zhao@anolis7 ~]$ mkdir -p /home/zhao/programs/coredns
[zhao@anolis7 coredns]$ pwd
/home/zhao/programs/coredns
[zhao@anolis7 coredns]$ ls
coredns_1.12.1_linux_amd64.tgz
[zhao@anolis7 coredns]$

解压文件后,删除压缩文件:

tar -zxvf coredns_1.12.1_linux_amd64.tgz
rm coredns_1.12.1_linux_amd64.tgz

将压缩包解压之后,就得到了一个可执行的程序“coredns”

执行该软件,参数-help,会给出相关参数帮助信息。


[zhao@anolis7 coredns]$ ./coredns -help
Usage of ./coredns:
  -conf string
        Corefile to load (default "Corefile")
  -dns.port string
        Default port (default "53")
  -p string
        Default port (default "53")
  -pidfile string
        Path to write pid file
  -plugins
        List installed plugins
  -quiet
        Quiet mode (no initialization output)
  -version
        Show version
[zhao@anolis7 coredns]$

注意:对于预编译的版本(也就是本版本),会内置全部官方认证的插件。

三. 创建编辑配置文件

在coredns目录下,新建一个文件 Corefile,这个配置文件会告诉coredns如何进行dns解析。

[zhao@anolis7 coredns]$ touch Corefile
[zhao@anolis7 coredns]$ nano Corefile

为实现简单的dns功能,也就是如果配置该dns的电脑,如果在浏览器输入hljcors.com,则指向ip地址192.168.2.200。配置文件内容如下:

# 监听所有接口的 53 端口,处理 DNS 请求
.:53 {
    # 记录错误信息
    errors
    # 记录 DNS 查询日志
    log
    # 启用缓存功能,缓存时间设置为 30 秒
    cache 30
    # 允许动态重新加载配置文件
    reload
    # 自定义主机记录
    hosts {
        # 将 hljcors.com 指向 192.168.2.100
        # 192.168.3.200 hljcors.com
        192.168.2.100 hljcors.com
        # 如果查询的域名不是 hljcors.com,则忽略请求
        fallthrough
    }
}

说明:dns服务器跑在53端口下。

四. 启动测试

在coredns所在目录下通过命令:

./coredns -conf ./Corefile

五. 查找占用端口 53 的进程

使用 lsofnetstat 命令来查找占用端口 53 的进程

[zhao@anolis7 coredns]$ sudo lsof -i :53
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dnsmasq 1469 nobody    5u  IPv4  28516      0t0  UDP t420vmanolis7:domain
dnsmasq 1469 nobody    6u  IPv4  28517      0t0  TCP t420vmanolis7:domain (LISTEN)
[zhao@anolis7 coredns]$
##输出说明:
COMMAND:占用端口的进程名称(如 dnsmasq)。
PID:进程的 ID(如 1469)。
USER:运行该进程的用户(如 nobody)。
NAME:监听的端口信息(如 *:domain,其中 domain 是端口 53 的服务名称)。


[zhao@anolis7 coredns]$ sudo netstat -tulnp | grep :53
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1469/dnsmasq
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           761/avahi-daemon: r
udp        0      0 192.168.122.1:53        0.0.0.0:*                           1469/dnsmasq
[zhao@anolis7 coredns]$

结束1469的进程:

sudo kill -9 1469

六. 防火墙开启53端口

dns需要tcp和udp协议的53端口,均设置防火墙开放。

sudo firewall-cmd --permanent --add-port=53/tcp
sudo firewall-cmd --permanent --add-port=53/udp

修改防火墙规则后,需要重新加载 firewalld 以使更改生效:

sudo firewall-cmd --reload
##运行以下命令检查端口 53 是否已成功开放
sudo firewall-cmd --list-all

七. 初步验证

在另一台机器B上,将 DNS 设置为你的 CoreDNS 电脑的 IP 地址,然后尝试解析域名和ping域名

#在配置dns的电脑B上,运行的结果
C:\Users\Administrator>nslookup hljcors.com 192.168.2.100
服务器:  hljcors.com
Address:  192.168.2.100

名称:    hljcors.com
Address:  192.168.2.100

C:\Users\Administrator>
C:\Users\Administrator>ping hljcors.com

正在 Ping hljcors.com [192.168.2.100] 具有 32 字节的数据:
来自 192.168.2.100 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.2.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.2.100 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.2.100 的回复: 字节=32 时间<1ms TTL=64

192.168.2.100 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 1ms,平均 = 0ms

C:\Users\Administrator>

八. 创建系统服务

为了实现开机自启动coredns,且便于管理,采用配置为系统服务的方式。

1. 创建 systemd 服务文件

sudo nano /etc/systemd/system/coredns.service

因coredns程序所在的目录为
/home/zhao/programs/coredns

所以coredns.service内容如下:

[Unit]
# 服务的描述信息,用于标识服务用途
Description=CoreDNS DNS Server
# 定义服务的启动顺序,确保在网络就绪后启动(DNS服务依赖网络)
After=network.target

[Service]
# 指定运行服务的用户和组(此处为zhao,生产环境建议改用非特权用户如nobody)
User=zhao
Group=zhao
# 明确设置工作目录(避免路径问题)
WorkingDirectory=/home/zhao/programs/coredns/
# 核心配置:启动命令
# - /home/zhao/programs/coredns/coredns:CoreDNS可执行文件路径
# - -conf /home/zhao/programs/coredns/Corefile:指定配置文件路径
ExecStart=/home/zhao/programs/coredns/coredns -conf /home/zhao/programs/coredns/Corefile
# 服务崩溃时自动重启(常见于进程意外退出)
Restart=on-failure
# 重启前等待时间(避免频繁重启)
RestartSec=5s
# 设置文件描述符限制(DNS服务可能需要处理大量连接)
LimitNOFILE=1048576
# 安全配置:允许绑定低端口(即使非root用户运行也需要此权限)
# CAP_NET_BIND_SERVICE:允许绑定<1024的端口(如DNS默认53端口)
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
# 放宽安全限制(可选)
NoNewPrivileges=false
RestrictAddressFamilies=AF_INET AF_INET6

[Install]
# 定义服务所属的target,multi-user.target表示多用户命令行模式
# 即系统正常启动时会自动启动此服务
WantedBy=multi-user.target

注意:这里的User和Group采用当前用户,而没有用root用户,因采用root会报错。

2. 设置权限并重载 systemd

sudo chmod 644 /etc/systemd/system/coredns.service
sudo systemctl daemon-reload

权限说明:

  • 权限的数字表示法,对应以下权限:
    • 6(所有者 owner):rw-(读 + 写)
    • 4(所属组 group):r--(仅读)
    • 4(其他用户 others):r--(仅读)

3. 启动 CoreDNS 并设置开机自启

sudo systemctl start coredns         # 启动
sudo systemctl enable coredns        # 开机自启
sudo systemctl status coredns        # 查看状态

4. 查看 CoreDNS 服务日志

journalctl -u coredns -xe

说明:

  • journalctl systemd 提供的日志管理工具,用于查看系统和服务的日志。
  • -u coredns 仅显示与 coredns.service 相关的日志(-u 表示 --unit)。
  • -x 显示更详细的解释信息(如错误码的说明)。
  • -e 直接跳转到日志的末尾(最新内容),方便查看最近的错误。

七. 再次验证

在电脑B上,执行ping,如果返回正常,那么配置完毕。

C:\Users\Administrator>ping hljcors.com

正在 Ping hljcors.com [192.168.2.100] 具有 32 字节的数据:
来自 192.168.2.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.2.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.2.100 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.2.100 的回复: 字节=32 时间=1ms TTL=64

192.168.2.100 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 1ms,平均 = 0ms

C:\Users\Administrator>



Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表