ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Technitium DNS Server Docker 环境变量完全指南:一次性初始化你的容器化 DNS 服务

Technitium DNS Server Docker 环境变量完全指南:一次性初始化你的容器化 DNS 服务 网络后端【免费下载链接】DnsServerTechnitium DNS Server项目地址https://gitcode.com/GitHub_Trending/dn/DnsServer点击查看免费下载Technitium DNS Server 支持通过一组DNS_SERVER_*环境变量在容器首次启动时自动初始化配置让你无需进入 Web 控制台即可完成域名、管理员密码、递归策略、转发器、拦截列表等核心设置。本文以仓库中的 DockerEnvironmentVariables.md 为主体逐项解读全部 55 个环境变量的含义、默认行为与取值边界并结合 docker-compose.yml、Dockerfile 及 DnsServerCore 下的源码实现说明这些变量在底层是如何被读取、解析和写入配置文件的帮助你写出可复现、可审计的容器化 DNS 部署。一、核心机制环境变量仅在“首次启动”生效在开始逐项使用这些变量之前必须先理解它们与普通配置的本质区别。Technitium DNS Server 把配置持久化在/etc/dns目录下的dns.config、webService.config、auth.config、log.config等 XML 配置文件中。这些环境变量只有在配置文件不存在时即 DNS 服务器第一次启动时才会被读取用来生成初始配置一旦配置文件被创建后续启动都将直接读取文件内容忽略环境变量。这一点在源码中体现得非常直接DnsServerCore/Dns/DnsServer.cs 的LoadConfigFile()中dns.config不存在抛出FileNotFoundException时才读取DNS_SERVER_DOMAIN、DNS_SERVER_PREFER_IPV6、DNS_SERVER_RECURSION等变量并在最后通过SaveConfigFileInternal()落盘生成配置文件DnsServerCore/DnsWebService.cs 在webService.config缺失时读取DNS_SERVER_WEB_SERVICE_*系列变量DnsServerCore/Auth/AuthManager.cs 在auth.config缺失时读取DNS_SERVER_SSO_*与DNS_SERVER_LDAP_*系列变量DnsServerCore/LogManager.cs 在log.config缺失时读取DNS_SERVER_LOG_*系列变量。注意这与 EnvironmentVariables.md 中描述的运行时环境变量如DNS_SERVER_WEB_SERVICE_WWW_FOLDER_PATH、DNS_SERVER_AUTH_STATIC_SESSIONS不同——后者每次启动都会直接从环境读取而本文讨论的 Docker 环境变量只负责“首次初始化”。凡是修改这些变量后想重新生效需要删除或更换挂载卷中的对应配置文件。在 Docker 场景下配置目录与日志目录通常通过命名卷持久化volumes: - config:/etc/dns - logs:/var/log/technitium/dns一旦卷中已有配置文件容器重建后环境变量不会再次生效。因此如果你想改变某条环境变量除了重建容器还需要在卷中清掉对应的.config文件——当然这会一并丢失 Web 控制台里后来做的其他设置属于“以初始化为代价”的重置手段。二、docker-compose 实战模板端口与卷的正确姿势仓库根目录的 docker-compose.yml 给出了官方参考编排。核心要点如下镜像docker.io/technitium/dns-server:latest容器名与主机名container_name: dns-server、hostname: dns-server其中 hostname 会直接影响默认的DNS_SERVER_DOMAIN语义端口映射默认只暴露 DNS 服务53/udp、53/tcp与 HTTP Web 控制台5380/tcp其余按需取消注释53443/tcpHTTPS Web 控制台853/udp|tcpDNS-over-QUIC / DNS-over-TLS443/udp|tcpDNS-over-HTTPSHTTP/3 与 HTTP/1.1、HTTP/280/tcp、8053/tcpDNS-over-HTTP配合反向代理或 certbot 证书续期67/udpDHCP 服务网络模式注释中提示若要部署 DHCP应改用network_mode: host并移除所有端口映射含整个 ports 数组同时删掉sysctls中的端口范围调整健康检查通过curl -f http://127.0.0.1:5380/api/dnsClient/healthCheck探测status:okstart_period: 10s给予首次初始化宽限时间sysctlsnet.ipv4.ip_local_port_range1024 65535用于扩大容器可用端口范围host 网络模式下应移除。镜像自身的能力边界可以对照 Dockerfile 查看基础镜像为mcr.microsoft.com/dotnet/aspnet:10.0额外安装了libmsquic支持 DNS-over-QUIC、dnsutils提供dig排障工具、iputils-ping与curlEXPOSE声明了 53、853、443、80、8053、5380、53443、67 等端口。镜像基于 .NET 10入口为DnsServerApp.dll默认配置目录参数为/etc/dns。三、基础身份与管理员凭据3.1 DNS_SERVER_DOMAINString服务器自身的主完全限定域名FQDN用于在 Web 控制台界面、部分内部行为如生成自签名证书、识别自身权威区域中标识该 DNS 服务器。- DNS_SERVER_DOMAINdns-server对应源码逻辑位于 DnsServerCore/Dns/DnsServer.cs读取后直接赋给ServerDomain。注意 DnsWebService.cs 在启用自签名证书初始化时也会复用该域名来生成证书因此想让自签名证书 CN 正确务必在此设置真实域名。3.2 DNS_SERVER_ADMIN_PASSWORD / DNS_SERVER_ADMIN_PASSWORD_FILEString设置 Web 控制台管理员用户名固定为admin的密码。两条变量二选一DNS_SERVER_ADMIN_PASSWORD直接以明文写入环境变量DNS_SERVER_ADMIN_PASSWORD_FILE指向一个包含明文密码的文件路径适合配合 Docker Secrets 等机制避免密码直接出现在 compose 文件或容器环境里。对应实现见 DnsServerCore/Auth/AuthManager.cs。源码细节值得注意两者都未设置时默认创建密码为admin的默认账户文件方式读取失败时例如文件不存在同样回退到默认密码admin因此务必确保 secrets 文件已正确挂载且可读密码优先读取DNS_SERVER_ADMIN_PASSWORD再回退到文件变量创建的用户归属Administrators管理员组且CreateUser会完成密码哈希处理最终以哈希形式存入auth.config。四、网络与 IPv6 策略4.1 DNS_SERVER_PREFER_IPV6Boolean启用后DNS 服务器在发起上游查询时优先使用 IPv6。源码实现DnsServerCore/Dns/DnsServer.cs置true时IPv6Mode设为Preferred否则为DisabledIPv6 查询完全关闭。在源码中还存在一个额外的运行时变量DNS_SERVER_IPV6_MODE同一文件 L489-L491它直接接受IPv6Mode枚举值如Preferred、Disabled比布尔型DNS_SERVER_PREFER_IPV6更细粒度不过该变量并未收录在 DockerEnvironmentVariables.md 表格中属于源码支持但文档未承诺的扩展点可酌情参考使用。五、Web 控制台监听与 TLS 配置这组变量控制 Web 服务HTTP/HTTPS 控制台与 API的监听行为解析逻辑集中在 DnsServerCore/DnsWebService.cs。变量类型说明DNS_SERVER_WEB_SERVICE_LOCAL_ADDRESSESString逗号分隔的监听 IP 列表。默认[::]监听所有地址。compose 示例给出172.17.0.1,127.0.0.1并注明仅在 host 网络模式下使用DNS_SERVER_WEB_SERVICE_HTTP_PORTIntegerHTTP 控制台端口默认5380DNS_SERVER_WEB_SERVICE_HTTPS_PORTIntegerHTTPS 控制台端口默认53443DNS_SERVER_WEB_SERVICE_ENABLE_HTTPSBoolean是否启用 HTTPSDNS_SERVER_WEB_SERVICE_USE_SELF_SIGNED_CERTBoolean是否生成并使用自签名 TLS 证书DNS_SERVER_WEB_SERVICE_TLS_CERTIFICATE_PATHString指定 PFX 格式 TLS 证书文件路径如/etc/dns/tls/cert.pfxDNS_SERVER_WEB_SERVICE_TLS_CERTIFICATE_PASSWORDString上述证书的密码DNS_SERVER_WEB_SERVICE_HTTP_TO_TLS_REDIRECTBoolean是否把 HTTP 请求重定向到 HTTPSDNS_SERVER_WEB_SERVICE_REVERSE_PROXY_ADDRESSESString允许的反向代理 IP/网段 ACL 列表两个需要重点说明的点TLS 证书的加载时机设置DNS_SERVER_WEB_SERVICE_TLS_CERTIFICATE_PATH后源码会立即调用LoadWebServiceTlsCertificate()加载证书DnsServerCore/DnsWebService.cs并启动证书更新定时器StartTlsCertificateUpdateTimer()——也就是说证书到期可以自动续期重载无需重启容器。注意这里的路径会通过ConvertToAbsolutePath()转换为绝对路径。自签名证书的生成前提DNS_SERVER_WEB_SERVICE_USE_SELF_SIGNED_CERTtrue时源码在dns.config尚不存在的情况下会先读取DNS_SERVER_DOMAIN作为证书主体名再调用CheckAndLoadSelfSignedCertificate(false, false)生成证书DnsServerCore/DnsWebService.cs。因此务必同时设置正确的DNS_SERVER_DOMAIN否则自签名证书的 CN 可能不符合预期。反向代理 ACL 语法DNS_SERVER_WEB_SERVICE_REVERSE_PROXY_ADDRESSES采用 NetworkAccessControl 解析支持!前缀否定、按顺序匹配、默认全部拒绝。例如- DNS_SERVER_WEB_SERVICE_REVERSE_PROXY_ADDRESSES192.168.10.0/24, !192.168.10.2六、可选协议DNS-over-HTTPDNS_SERVER_OPTIONAL_PROTOCOL_DNS_OVER_HTTPBoolean用于在 TCP 8053 端口启用 DNS-over-HTTP 可选协议。该场景的典型用途是配合 TLS 终止反向代理如 nginx由代理承担 TLS 加密Technitium 只在本机 80/8053 端口提供明文 DoH 上行从而省去在 DNS 服务器上管理证书的负担。对应源码DnsServerCore/Dns/DnsServer.cs读取后赋值给EnableDnsOverHttp端口规划见 docker-compose.yml80/tcp用于配合反向代理或 certbot 证书续期8053/tcp用于纯反向代理场景默认值false。启用时还需在 Web 控制台或后续配置中为 DoH 配置 TLS 证书若直接对外提供 HTTPS DoH。七、递归解析策略与访问控制 ACL递归Recursion决定 DNS 服务器是否为客户端代查上游权威服务器。这是容器部署中最常需要按安全要求收紧的配置项。DNS_SERVER_RECURSIONString支持四个取值解析代码见 DnsServerCore/Dns/DnsServer.cs大小写不敏感取值含义Allow允许所有客户端递归Deny完全禁止递归AllowOnlyForPrivateNetworks仅允许私有网络递归默认值出于安全考虑UseSpecifiedNetworkACL使用下方 ACL 变量精确控制源码在变量未设置时显式回退到AllowOnlyForPrivateNetworks并注释说明这是“for security reasons”容器默认行为因此是安全的。DNS_SERVER_RECURSION_NETWORK_ACLString仅在UseSpecifiedNetworkACL时生效是当前推荐的 ACL 配置方式- DNS_SERVER_RECURSIONUseSpecifiedNetworkACL - DNS_SERVER_RECURSION_NETWORK_ACL192.168.10.0/24, !192.168.10.2语法规则逗号分隔的 IP 地址或网络地址CIDR以!开头的条目表示拒绝例如!192.168.10.0/24拒绝整个子网ACL 按列表书写顺序依次匹配若没有任何条目匹配默认策略为拒绝所有回环地址除外。源码实现见 DnsServerCore/Dns/DnsServer.cs优先解析DNS_SERVER_RECURSION_NETWORK_ACL若未设置则回退读取两个已废弃的旧变量——DNS_SERVER_RECURSION_DENIED_NETWORKS拒绝列表与DNS_SERVER_RECURSION_ALLOWED_NETWORKS允许列表再通过AuthZoneInfo.ConvertDenyAllowToACL()合并转换为 ACL。兼容性提醒DNS_SERVER_RECURSION_DENIED_NETWORKS与DNS_SERVER_RECURSION_ALLOWED_NETWORKS在文档中明确标注为obsolete已废弃新部署应统一改用DNS_SERVER_RECURSION_NETWORK_ACL。保留旧变量仅为兼容既有编排。八、广告拦截与 Block List 配置Technitium 内置基于 Blocked Zone阻止区域与 Block List Zone阻止列表区域的域名拦截能力环境变量可实现开箱即用的广告/恶意域名过滤变量类型说明DNS_SERVER_ENABLE_BLOCKINGBoolean启用域名拦截Blocked Zone Block List ZoneDNS_SERVER_ALLOW_TXT_BLOCKING_REPORTBoolean是否对 TXT 类型请求返回包含拦截报告内容的 TXT 记录DNS_SERVER_BLOCK_LIST_URLSString逗号分隔的拦截列表 URL 列表对应解析见 DnsServerCore/Dns/DnsServer.cs拦截 URL 列表会被分割后直接写入_blockListZoneManager.BlockListUrls作为 Block List Zone 的数据源。仓库 Apps/DnsBlockListApp 展示了这类基于 blocklist 应用的参考形态其 domain-blocklist.txt 与 ip-blocklist.txt 可作为理解列表驱动拦截的内部数据样例。- DNS_SERVER_ENABLE_BLOCKINGtrue - DNS_SERVER_ALLOW_TXT_BLOCKING_REPORTtrue - DNS_SERVER_BLOCK_LIST_URLShttps://example.com/hosts.txt, https://example2.com/adblock.txt九、上游转发器Forwarders与传输协议DNS_SERVER_FORWARDERSString与DNS_SERVER_FORWARDER_PROTOCOLString允许把本服务器配置为转发模式把查询转发给指定上游。这是在企业内网环境中替代递归的常用方案。- DNS_SERVER_FORWARDERS1.1.1.1, 8.8.8.8 - DNS_SERVER_FORWARDER_PROTOCOLTlsDNS_SERVER_FORWARDER_PROTOCOL支持五个取值Udp、Tcp、Tls、Https、HttpsJson。源码实现DnsServerCore/Dns/DnsServer.cs有两个细节值得注意未设置协议时默认Udp设置了HttpsJson时会被映射为Https——也就是说HttpsJson与Https在初始化路径上等价这是为了兼容历史语义。每个转发器地址会被解析为NameServerAddress若其协议与目标协议不一致则通过Clone(forwarderProtocol)强制转换为目标协议后统一写入Forwarders。十、日志与 Dashboard 统计10.1 日志相关变量类型说明DNS_SERVER_LOG_USING_LOCAL_TIMEBoolean日志时间戳使用本地时间而非 UTCDNS_SERVER_LOG_FOLDER_PATHString日志目录路径可以是绝对路径或相对 DNS 配置目录的路径DNS_SERVER_LOG_MAX_LOG_FILE_DAYSInteger日志保留天数超期自动删除0表示禁用自动删除源码解析位于 DnsServerCore/LogManager.cs。相关默认值日志目录未设置时Linux 下默认/var/log/technitium/dnsWindows 下默认%ProgramData%\Technitium DNS Server\logs便携模式下默认相对路径logsDNS_SERVER_LOG_MAX_LOG_FILE_DAYS未设置时默认365天时间戳默认 UTC设置DNS_SERVER_LOG_USING_LOCAL_TIMEtrue后改用本地时间。compose 参考配置- DNS_SERVER_LOG_FOLDER_PATH/var/log/technitium/dns - DNS_SERVER_LOG_MAX_LOG_FILE_DAYS36510.2 Dashboard 统计相关变量类型说明DNS_SERVER_STATS_ENABLE_IN_MEMORY_STATSBoolean启用内存统计Dashboard 仅保留最近一小时数据且不落盘DNS_SERVER_STATS_MAX_STAT_FILE_DAYSInteger统计文件保留天数超期自动删除0禁用自动删除源码解析见 DnsServerCore/Dns/DnsServer.csDNS_SERVER_STATS_MAX_STAT_FILE_DAYS未设置时默认365。适用场景如果容器运行在无持久化存储或磁盘空间敏感的环境中可以开启DNS_SERVER_STATS_ENABLE_IN_MEMORY_STATStrue换取零磁盘占用代价是 Dashboard 只展示最近一小时的数据。十一、企业身份认证OIDC 单点登录SSOTechnitium 支持通过 OpenID ConnectOIDC实现单点登录让用户使用企业 IdP如 Azure AD、Okta 等的账号登录 Web 控制台。这组变量由 DnsServerCore/Auth/AuthManager.cs 解析。变量类型说明DNS_SERVER_SSO_ENABLEDBoolean启用 SSOOIDCDNS_SERVER_SSO_AUTHORITYStringOIDC AuthorityIssuerURLDNS_SERVER_SSO_CLIENT_IDStringOIDC Client IDDNS_SERVER_SSO_CLIENT_SECRETStringOIDC Client Secret明文DNS_SERVER_SSO_CLIENT_SECRET_FILEString存放 Client Secret 明文文本的文件路径DNS_SERVER_SSO_METADATA_ADDRESSString自定义 OIDC 元数据发现 URL仅当 IdP 使用非默认发现地址时配置DNS_SERVER_SSO_SCOPESString逗号分隔的 OIDC Scopes如openid,profile,emailopenid与profile为强制项缺失会自动补齐加入email可让邮箱地址作为 SSO 用户注册后的用户名DNS_SERVER_SSO_ALLOW_SIGNUPBoolean允许新 SSO 用户首次登录时自动开户DNS_SERVER_SSO_ALLOW_SIGNUP_ONLY_FOR_MAPPED_USERSBoolean仅允许远程组已映射到本地组的用户开户用于限制谁可以自助获得访问权限DNS_SERVER_SSO_GROUP_MAPString逗号分隔的映射条目每条为远程组:本地组例如Admins:Administrators,DNS Admins:DNS AdministratorsSSO 用户每次登录时其远程组成员关系会自动同步到映射的本地组源码行为细节Secret 二选一DNS_SERVER_SSO_CLIENT_SECRET优先其次读DNS_SERVER_SSO_CLIENT_SECRET_FILE文件的首行文本DnsServerCore/Auth/AuthManager.csScopes 解析支持逗号或空格分隔自动 trim 并去空openid、profile强制补齐逻辑发生在写入配置的后续流程L293-L299Group Map 解析先按逗号切分条目再按冒号切分键值对格式不合法不是恰好两部分的条目会被静默忽略L309-L323。一个开启 SSO 且限制开户的完整示例- DNS_SERVER_SSO_ENABLEDtrue - DNS_SERVER_SSO_AUTHORITYhttps://login.example.com/realms/dns - DNS_SERVER_SSO_CLIENT_IDdns-console - DNS_SERVER_SSO_CLIENT_SECRET_FILE/run/secrets/sso_client_secret - DNS_SERVER_SSO_SCOPESopenid,profile,email - DNS_SERVER_SSO_ALLOW_SIGNUPtrue - DNS_SERVER_SSO_ALLOW_SIGNUP_ONLY_FOR_MAPPED_USERStrue - DNS_SERVER_SSO_GROUP_MAPDNS Admins:DNS Administrators十二、企业身份认证LDAP 目录登录除 OIDC 外还支持让 Active Directory、OpenLDAP 等目录服务的用户直接使用目录凭据登录 Web 控制台。该组变量由 DnsServerCore/Auth/AuthManager.cs 解析。变量类型说明DNS_SERVER_LDAP_ENABLEDBoolean启用 LDAP 登录DNS_SERVER_LDAP_SERVERStringLDAP 服务器域名或 IPDNS_SERVER_LDAP_PORTIntegerLDAP 服务端口明文 LDAP/StartTLS 用389LDAPS 用636DNS_SERVER_LDAP_SSL_OPTIONString连接加密选项None、StartTLS、LDAPSDNS_SERVER_LDAP_IGNORE_SSL_ERRORSBoolean忽略 SSL/TLS 证书错误仅限测试环境不安全DNS_SERVER_LDAP_BIND_USERNAMEString用于搜索目录的服务账号 DN 或 UPN留空表示匿名绑定DNS_SERVER_LDAP_BIND_PASSWORDString上述服务账号密码DNS_SERVER_LDAP_BIND_PASSWORD_FILEString存放服务账号密码明文文本的文件路径DNS_SERVER_LDAP_SEARCH_BASEString搜索用户条目的基准 DNDNS_SERVER_LDAP_USER_SEARCH_FILTERString查找用户的 LDAP 搜索过滤器{0}为用户名占位符DNS_SERVER_LDAP_GROUP_ATTRIBUTEString记录用户组成员关系的属性名AD 默认memberOfDNS_SERVER_LDAP_ALLOW_SIGNUPBoolean允许新 LDAP 用户首次登录自动开户DNS_SERVER_LDAP_ALLOW_SIGNUP_ONLY_FOR_MAPPED_USERSString仅允许远程组已映射到本地组的用户开户DNS_SERVER_LDAP_GROUP_MAPString逗号分隔的远程组:本地组映射如Administrators:Administrators,DNS Admins:DNS Administrators过滤器与端口选型建议来自文档说明Active Directory默认过滤器(sAMAccountName{0})组属性默认memberOf端口通常636LDAPS或389StartTLSOpenLDAP默认过滤器(uid{0})若目录中用户名存放在userPrincipalName属性则使用(userPrincipalName{0})。示例配置- DNS_SERVER_LDAP_ENABLEDtrue - DNS_SERVER_LDAP_SERVERdc.example.com - DNS_SERVER_LDAP_PORT636 - DNS_SERVER_LDAP_SSL_OPTIONLDAPS - DNS_SERVER_LDAP_BIND_USERNAMECNsvc-dns,OUService Accounts,DCexample,DCcom - DNS_SERVER_LDAP_BIND_PASSWORD_FILE/run/secrets/ldap_bind_password - DNS_SERVER_LDAP_SEARCH_BASEDCexample,DCcom - DNS_SERVER_LDAP_USER_SEARCH_FILTER(sAMAccountName{0}) - DNS_SERVER_LDAP_GROUP_ATTRIBUTEmemberOf - DNS_SERVER_LDAP_ALLOW_SIGNUPtrue源码解析与 OIDC 类似密码优先读DNS_SERVER_LDAP_BIND_PASSWORD其次读DNS_SERVER_LDAP_BIND_PASSWORD_FILE首行DnsServerCore/Auth/AuthManager.csSSL_OPTION通过Enum.ParseLdapAuthSslOption大小写不敏感解析L337-L339Group Map 的冒号/逗号解析规则与 SSO 完全一致L384-L398。十三、完整可运行示例与最佳实践13.1 一个功能完整的 compose 部署示例把上述要点整合成一个生产可参考的编排按需取消注释services: dns-server: container_name: dns-server hostname: dns-server image: docker.io/technitium/dns-server:latest ports: - 5380:5380/tcp # DNS web console (HTTP) - 53:53/udp # DNS service - 53:53/tcp # DNS service # - 853:853/tcp # DNS-over-TLS # - 443:443/tcp # DNS-over-HTTPS environment: - DNS_SERVER_DOMAINdns-server - DNS_SERVER_ADMIN_PASSWORD_FILE/run/secrets/admin_password - DNS_SERVER_PREFER_IPV6false - DNS_SERVER_RECURSIONAllowOnlyForPrivateNetworks - DNS_SERVER_ENABLE_BLOCKINGtrue - DNS_SERVER_BLOCK_LIST_URLShttps://example.com/adblock.txt - DNS_SERVER_FORWARDERS1.1.1.1, 8.8.8.8 - DNS_SERVER_FORWARDER_PROTOCOLHttps - DNS_SERVER_LOG_FOLDER_PATH/var/log/technitium/dns - DNS_SERVER_LOG_MAX_LOG_FILE_DAYS365 - DNS_SERVER_STATS_MAX_STAT_FILE_DAYS365 secrets: - admin_password volumes: - config:/etc/dns - logs:/var/log/technitium/dns healthcheck: test: [CMD-SHELL, curl -f http://127.0.0.1:5380/api/dnsClient/healthCheck | grep \status\:\ok\] interval: 30s timeout: 10s retries: 3 start_period: 10s restart: unless-stopped sysctls: - net.ipv4.ip_local_port_range1024 65535 secrets: admin_password: file: ./secrets/admin_password.txt volumes: config: logs:13.2 六条最佳实践首次启动即完成初始化所有环境变量只在配置文件缺失时读取务必在第一次docker compose up前把编排写好后续变更需要清除卷中的dns.config、webService.config、auth.config、log.config之一代价是丢失对应模块的后续手工设置。敏感信息走 Secrets管理员密码、OIDC Client Secret、LDAP 绑定密码都提供了*_FILE变体应优先配合 Docker Secrets 或挂载文件使用避免明文出现在 compose 与容器环境变量中。默认递归策略是安全的未设置DNS_SERVER_RECURSION时默认AllowOnlyForPrivateNetworks若容器暴露到公网务必显式使用UseSpecifiedNetworkACL配合DNS_SERVER_RECURSION_NETWORK_ACL收紧。自签名证书依赖域名启用DNS_SERVER_WEB_SERVICE_USE_SELF_SIGNED_CERT时必须同时正确设置DNS_SERVER_DOMAIN否则生成的证书主体名不正确。日志与统计按需收敛磁盘敏感环境开启DNS_SERVER_STATS_ENABLE_IN_MEMORY_STATStrueDashboard 仅剩最近一小时数据并用DNS_SERVER_LOG_MAX_LOG_FILE_DAYS控制日志留存。废弃变量尽快迁移DNS_SERVER_RECURSION_ALLOWED_NETWORKS与DNS_SERVER_RECURSION_DENIED_NETWORKS已废弃统一改用DNS_SERVER_RECURSION_NETWORK_ACL。十四、与运行时环境变量的边界为避免混淆这里把两类机制放在一起对比维度Docker 初始化变量本文主体运行时变量读取时机仅当对应.config文件不存在时每次启动都从环境读取生效方式生成/初始化配置文件后固化修改后需重启服务生效典型变量DNS_SERVER_ADMIN_PASSWORD、DNS_SERVER_FORWARDERS等DNS_SERVER_WEB_SERVICE_WWW_FOLDER_PATH、DNS_SERVER_AUTH_STATIC_SESSIONS官方文档DockerEnvironmentVariables.mdEnvironmentVariables.md其中DNS_SERVER_AUTH_STATIC_SESSIONS允许通过环境变量预置静态 API 会话令牌格式为逗号分隔的用户名:64字节十六进制token键值对如admin:bc847a5f...且这些会话不会通过 API 暴露DNS_SERVER_WEB_SERVICE_WWW_FOLDER_PATH则允许替换 Web 控制台的静态资源根目录配置的目录不存在时自动回退到默认目录见 DnsServerCore/DnsWebService.cs。容器化部署中通常将这两类变量组合使用初始化变量负责从零生成配置运行时变量负责每次覆盖特定行为。十五、参考路径速查官方文档DockerEnvironmentVariables.md、EnvironmentVariables.md编排与镜像docker-compose.yml、DockerfileDNS 配置初始化源码DnsServerCore/Dns/DnsServer.csWeb 服务配置初始化源码DnsServerCore/DnsWebService.cs认证SSO/LDAP/管理员密码初始化源码DnsServerCore/Auth/AuthManager.cs日志配置初始化源码DnsServerCore/LogManager.cs拦截列表应用参考Apps/DnsBlockListApp借助环境变量你可以在一条docker compose up命令内完成一台具备域名身份、安全递归策略、广告拦截、加密转发与企业身份认证的完整 DNS 服务器初始化——理解“仅首次生效”这一核心机制以及每个变量的默认值与解析细节是让这套编排可复现、可审计、可演进的关键。赞分享网络后端【免费下载链接】DnsServerTechnitium DNS Server项目地址https://gitcode.com/GitHub_Trending/dn/DnsServer点击查看免费下载相关推荐Technitium DNS Server主DNS服务器迁移方案详解Technitium DNS Server主DNS服务器迁移方案详解 概述 在企业DNS架构中主从DNS服务器的配置是常见的部署模式。随着业务发展或硬件更新网络后端Technitium DNS服务器统计监控完整指南掌握DNS性能数据Technitium DNS服务器统计监控完整指南掌握DNS性能数据 Technitium DNS服务器是一款功能强大的开源DNS服务器软件它提供了 全面的网络后端初识FocalNet Large模型focalnet_large_fl3.ms_in22k如何成为图像分类新标杆初识FocalNet Large模型focalnet_large_fl3.ms_in22k如何成为图像分类新标杆 focalnet_large_fl3.ms上一篇Kubernetes SIG Node 2018 年度会议纪要解析CRI 演进、RuntimeClass 与节点可靠性实践下一篇Claude StarRocks MCP在共享数据集群上通过自然语言驱动 SQL 分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表