
qmcgaw/dns本镜像作为 DNS over TLS (DoT) 上游服务器,可连接至支持 IPv4 和 IPv6 的 DNS over TLS 服务器,提供安全的 DNS 解析服务。集成 DNSSEC 验证、DNS 重绑定保护、Docker 健康检查以及细粒度的 IP/主机名阻止功能,适用于需要加密 DNS 解析、内容过滤和隐私保护的场景。
注意:可尝试
:v2.0.0-beta版本,相关文档见 此处。:latest标签镜像在未来数天/数周内可能存在兼容性变更。
bashdocker run -d -p 53:53/udp --name dns-over-tls qmcgaw/dns
创建 docker-compose.yml 文件:
yamlversion: '3' services: dns-over-tls: image: qmcgaw/dns container_name: dns-over-tls ports: - "53:53/udp" # DNS 服务端口 environment: - PROVIDERS=cloudflare,google # 同时使用 Cloudflare 和 Google DNS - BLOCK_MALICIOUS=on # 启用***内容阻止 - BLOCK_ADS=on # 启用广告阻止 - IPV6=off # 禁用 IPv6(若网络不支持) - UPDATE_PERIOD=12h # 每 12 小时更新阻止列表 restart: unless-stopped
启动服务:
bashdocker-compose up -d
--user="0" 以 root 权限运行(详见 issue #79)| 环境变量 | 默认值 | 描述 |
|---|---|---|
PROVIDERS | cloudflare | 逗号分隔的 DoT 提供商列表,可选值见 核心功能 |
VERBOSITY | 1 | 日志详细级别(0=无日志,5=全 debug 日志) |
VERBOSITY_DETAILS | 0 | 细节日志级别(0-4,越高细节越多) |
BLOCK_MALICIOUS | on | 是否阻止*** IP/主机名(on/off) |
BLOCK_SURVEILLANCE | off | 是否阻止监控服务 IP/主机名(on/off) |
BLOCK_ADS | off | 是否阻止广告 IP/主机名(on/off) |
BLOCK_HOSTNAMES | 自定义阻止主机名(逗号分隔,如 example.com,ads.example.org) | |
BLOCK_IPS | 自定义阻止 IP(逗号分隔,如 192.168.1.1,2001:db8::1) | |
UNBLOCK | 例外主机名(逗号分隔,即使在阻止列表中也解除阻止) | |
LISTENINGPORT | 53 | 容器内 Unbound 监听端口(需与 -p 映射一致) |
CACHING | on | 是否启用 DNS 缓存(on/off,若上层有其他 DNS 缓存可禁用) |
PRIVATE_ADDRESS | 所有 IPv4/IPv6 私有 CIDR 范围 | 私有地址范围(逗号分隔 CIDR 或单 IP,用于 DNS 重绑定保护) |
CHECK_DNS | on | 启动时检查 DNS 解析(通过 127.0.0.1:53 解析 github.com) |
IPV4 | on | 是否启用 IPv4 解析(on/off) |
IPV6 | off | 是否启用 IPv6 解析(on/off,无 IPv6 网络时请勿启用) |
UPDATE_PERIOD | 24h | 阻止列表更新周期(如 12h,设为 0 禁用自动更新) |
可通过挂载 Unbound 配置文件扩展默认配置。创建 include.conf 文件(遵循 Unbound 配置文档),并挂载至容器:
bashdocker run -d -p 53:53/udp -v $(pwd)/include.conf:/unbound/include.conf:ro qmcgaw/dns
include.conf 将被包含在 Unbound 主配置的 server 区块中,用于自定义高级参数(如 TTL 调整、转发规则等)。
所有连接至路由器的设备自动使用本 DNS 服务:
[***])192.168.1.100)192.168.1.1)以强制流量通过本服务手动为每个设备配置 DNS 服务器为 Docker 主机 IP。
bashdocker run -it --rm --dns=DOCKER_HOST_IP alpine # 替换 DOCKER_HOST_IP 为实际 IP
docker-compose.yml 示例:
yamlservices: app: image: alpine dns: - DOCKER_HOST_IP # 如 192.168.1.100
/etc/resolv.conf,设置 nameserver DOCKER_HOST_IP注意:[***] 无法检测本服务(因本服务为转发 intermediary,非直接客户端)。
| Docker 镜像 | GitHub 版本 | 说明 |
|---|---|---|
qmcgaw/dns:latest | master 分支 | 最新开发版本 |
qmcgaw/dns:v1.5.1 | v1.5.1 | 稳定版本 |
qmcgaw/dns:v1.4.1 | v1.4.1 | 历史稳定版本 |
qmcgaw/cloudflare-dns-server:latest | master 分支 | qmcgaw/dns:latest 的镜像 |
bashgit clone [***] cd dns go mod download
bashgo build cmd/main.go # 构建二进制 go test ./... # 运行测试 docker build -t qmcgaw/dns . # 构建镜像
详见 CONTRIBUTING.md。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务