CoreDNS 命令行使用手册(coredns(1)):从启动参数到插件链式解析的完整指南 后端网络云原生【免费下载链接】corednsCoreDNS is a DNS server that chains plugins项目地址https://gitcode.com/gh_mirrors/co/coredns点击查看免费下载本篇技术指南基于 CoreDNS 官方手册 coredns.1.md完整讲解 CoreDNS 二进制程序的全部启动选项-conf、-dns.port/-p、-pidfile、-plugins、-quiet、-version、-windows-service并深入剖析其插件链式处理 DNS 请求的核心设计、Corefile 自动发现机制与默认回退配置。读完本文你将能够独立完成 CoreDNS 的安装、启动、参数调优与插件能力查询并理解每次 DNS 查询在插件链中的流转原理。SynopsisCoreDNS 的命令行语法CoreDNS 的通用启动语法如下coredns [-conf FILE] [-dns.port PORT] [OPTION]...其中-dns.port也可以写作-p二者等价。与许多守护进程不同CoreDNS 不接受任意位置参数额外的命令行参数会导致启动直接报错退出所有行为都由选项开关和 Corefile 配置驱动。Description一个插件链式的 DNS 服务器手册原文将 CoreDNS 定义为a DNS server that chains plugins——它不是一个功能固定、编译期写死的 DNS 服务器而是一个插件链plugin chain运行时。每个插件负责一类 DNS 能力例如重写查询rewriteKubernetes 服务发现kubernetes导出指标metrics缓存cache、转发forward、文件/权威区file、hosts 解析hosts等插件之间按固定的顺序串联成链一次查询会按顺序流过链上的每一个插件直到某个插件决定处理并返回结果。这个顺序不是随意的而是由仓库中的 plugin.cfg 显式定义Directives are registered in the order they should be executed并通过go generate生成到 core/dnsserver/zdirectives.go 与 core/plugin/zplugin.go 中这一生成逻辑由 directives_generate.go 和 owners_generate.go 驱动见 Makefile 的check目标。默认构建中包含的插件各有对应的 man 手册见 man 目录下coredns-*.7文件未随默认构建打包的外部插件另有说明。你可以通过下文介绍的-plugins选项随时查看当前构建实际可用的插件列表。无参数启动时的行为Corefile 发现与默认回退手册明确规定了 CoreDNS 的启动查找顺序不带任何选项启动时CoreDNS 会在当前目录查找名为Corefile的文件若找到则解析其内容并据此启动相应服务器若未找到则加载内置的默认配置启动whoami插件并监听 53 端口除非用-dns.port覆盖。这套逻辑在源码中有完整实现。在 coremain/run.go 中caddy.DefaultConfigFile Corefile定义了默认配置文件名defaultLoader从当前工作目录读取Corefile文件不存在时返回空输入不报错confLoader负责处理-conf指定的文件随后caddy.LoadCaddyfile→caddy.Start完成配置加载与服务器启动。默认回退配置并非简单启动 whoami而是定义在 core/dnsserver/register.go 的DefaultInput中内容等价于.:53 { whoami log }也就是说找不到 Corefile 时CoreDNS 实际上会在根域.的 53 端口上同时启用whoami与log两个插件。whoami插件见 plugin/whoami/whoami.go会把客户端的 IP 以 A/AAAA 记录、传输方式与端口以 SRV 记录放入响应的附加区Additional Section因此常被用来快速验证 CoreDNS 是否正常响应查询log插件则负责打印查询日志。这一点与手册中以 whoami 插件启动的描述一致也解释了为什么默认模式下可以用dig直接验证服务可用性。Corefile 语法速览-conf指向的 Corefile 语法在 corefile.5.md即手册中的 Corefile(5)中有完整定义核心结构为[SCHEME://]ZONE [[SCHEME://]ZONE]...[:PORT] { [PLUGIN]... }ZONE声明该服务器负责的域名可多个空格分隔反向区可用in-addr.arpa/ip6.arpa域名或 CIDR 记法如10.0.0.0/24书写SCHEME默认为dns://也可为tls://DoT、grpc://、https://DoH等对应的默认端口定义在 plugin/pkg/transport/transport.goTLS/QUIC 为 853、gRPC/HTTPS 为 443PORT默认 53若在 Corefile 中显式写了端口则该值优先于-dns.port命令行参数不同服务器块重复声明相同的 ZONEPORT 组合会在启动时报错。从源码结构看core/dnsserver/register.go 的InspectServerBlocks与validateZonesAndListeningAddressesCorefile 中多个 zone 会先做规范化、反向区展开、端口补齐再按监听地址分组生成服务器实例最后校验 zone 重叠因此配置冲突会在启动阶段被尽早拦截。可用选项详解以下选项均来自手册原文并结合 coremain/run.go 中init()的 flag 注册逻辑逐条展开-conf FILE指定要加载的 Corefile 文件路径。若未给出CoreDNS 会依次回退到当前目录的Corefile与内置默认配置。一个值得注意的隐藏细节-conf还支持特殊值stdin——此时配置将从标准输入读取见confLoader中对conf stdin的分支处理方便通过管道动态注入配置cat Corefile | coredns -conf stdin此外coremain/run_test.go 中的TestConfLoader覆盖了空配置、文件不存在、stdin、合法文件等多种输入场景可用于理解该选项的边界行为。-dns.port PORT或-p PORT覆盖默认监听端口 53。两个 flag 在源码中是同一个变量的两个名字flag.StringVar(dnsserver.Port, serverType.port, dnsserver.DefaultPort, Default port) flag.StringVar(dnsserver.Port, p, dnsserver.DefaultPort, Default port)注意两点约束若 Corefile 的 zone 声明中已显式指定端口则以 Corefile 为准命令行无法覆盖-dns.port只影响默认未显式写端口的服务器块。典型用法如监听 5353 端口调试coredns -dns.port 5353。-pidfile FILE将 CoreDNS 进程的 PID 写入指定文件便于服务管理脚本如 systemd、supervisor跟踪进程。该选项直接映射到caddy.PidFile由 caddy 框架负责写入。-plugins列出当前构建中所有已注册的插件并退出。实现上对应caddy.DescribePlugins()输出内容会随构建时启用的插件集合变化。这在与外部插件external plugin集成、排查某个插件为什么不可用时非常有用。注意此选项与-version一样会在输出后调用os.Exit(0)直接退出不会启动 DNS 服务。-quiet启动时不打印任何版本与端口信息。对应dnsserver.Quiet在 coremain/run.go 的启动流程中只有非 quiet 模式才会调用showVersion()输出版本信息若使用 JSON 日志格式则以结构化日志输出。适合在脚本化启动、日志已由外部系统采集的场景下使用。-version显示版本信息并退出。输出格式由versionString()与releaseString()组成形如CoreDNS-1.14.7 linux/amd64, go1.x.x, commit即依次为应用名-版本号、操作系统/架构、Go 运行时版本、Git 提交号。当前仓库 coremain/version.go 中定义的版本常量为CoreVersion 1.14.7、CoreName CoreDNS。若为开发构建有未提交改动或不在 tag 上还会追加 git shortstat 与修改文件列表见setVersion与showVersion。-windows-service以 Windows 服务方式运行仅在 Windows 构建中可用默认值为false。对应 coremain/service_windows.go 的实现在非 Windows 平台上coremain/service_other.go 仅简单地instance.Wait()阻塞等待服务退出。补充-log-format除手册列出的选项外coremain/run.go 还注册了一个-log-format选项可选值为text或json用于切换启动日志与运行日志的输出格式。这在对接日志采集系统如 ELK时很实用一并收录于此供参考。启动流程从命令行到 DNS 服务结合 coredns.go 与 coremain/run.goCoreDNS 的启动链路可以概括为入口main()通过_ github.com/coredns/coredns/core/plugin导入全部内置插件注册副作用随后调用coremain.Run()初始化init()注册dns服务器类型、定义默认配置文件名Corefile、注册全部命令行 flag解析参数flag.Parse()若存在多余的位置参数直接报extra command line arguments错误退出快捷退出-version输出版本退出-plugins输出插件列表退出运行时调优调用maxprocs.Set来自 go.uber.org/automaxprocs依据容器 CPU 配额自动设置GOMAXPROCS加载配置通过confLoader-conf或defaultLoader当前目录 Corefile / 内置回退配置取得配置输入启动服务器caddy.Start(corefile)解析 Corefile、构建插件链、启动各监听器非 quiet 模式打印版本信息常驻运行runService(instance)阻塞等待同时caddy.TrapSignals()已注册信号处理支持优雅停机。验证与实践快速跑通 CoreDNS以下为基于手册与仓库源码的完整验证路径1. 无配置文件启动验证默认回退配置coredns预期输出显示版本信息后开始监听 53 端口需 root 或 CAP_NET_BIND_SERVICE 权限无权限时可改用-dns.port 5353。2. 验证默认 whoami 行为dig 127.0.0.1 -p 5353 example.org A由于默认回退配置加载了whoami插件响应 Answer 区为空Additional 区会带回你的客户端 IPA/AAAA以及_udp.example.org. 0 IN SRV 0 0 端口 .形式的 SRV 记录——这正是 plugin/whoami/README.md 中描述的行为。3. 使用自定义 Corefilecoredns -conf /path/to/my.CorefileCorefile 示例zone 级配置见 corefile.5.md 的 Examples 一节. { chaos CoreDNS-001 }配置后可用dig CH TXT version.bind 127.0.0.1查询 chaos 插件返回的版本文本。4. 查看插件清单与版本coredns -plugins coredns -version总结CoreDNS 的命令行设计高度精简绝大多数行为由 Corefile 声明命令行仅保留启动入口类选项。理解-conf、-dns.port/-p、-pidfile、-plugins、-quiet、-version的语义与优先级尤其是Corefile 内端口优先于命令行端口再结合无 Corefile 时自动加载 whoamilog的回退机制即可在几秒内把一个可验证、可调试的 DNS 服务跑起来并为后续按需叠加 kubernetes、forward、cache 等插件奠定基础。See AlsoCorefile 配置手册corefile.5.mdCorefile 完整语法、ZONE/SCHEME/PORT 规则与示例whoami 插件手册plugin/whoami/README.md默认回退插件的响应格式详解coremain/run.go命令行 flag 注册与启动流程源码core/dnsserver/register.go服务器类型注册与内置默认配置plugin.cfg插件注册顺序即插件链执行顺序定义man 目录全部内置插件的 man 手册coredns-*.7赞分享后端网络云原生【免费下载链接】corednsCoreDNS is a DNS server that chains plugins项目地址https://gitcode.com/gh_mirrors/co/coredns点击查看免费下载相关推荐btop 命令行使用手册从 manpage 到源码级的全部启动参数解析btop 命令行使用手册从 manpage 到源码级的全部启动参数解析 本篇技术指南围绕 btop 项目的官方手册 manpage.md https://liCLI指标监控运维generate_unconditional_samples.py使用手册从命令行参数到输出解析generate_unconditional_samples.py使用手册从命令行参数到输出解析 引言告别文本生成的参数调整困惑 你是否曾因GPT 2生成文人工智能大模型基础模型NLPCoreDNS插件开发完全指南CoreDNS插件开发完全指南 前言 CoreDNS作为云原生环境下的DNS服务器其插件机制是其强大功能的核心。本文将深入解析如何为CoreDNS开发自定义插后端网络云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考