madnuttah/unbound-docker
GitHub: madnuttah/unbound-docker
基于 Alpine Linux 的高安全、轻量级 Unbound 递归 DNS 解析器 Docker 镜像,支持 DNSSEC 验证与多种加密 DNS 协议,适合与 Pi-hole 配合搭建私有 DNS 服务。
Stars: 362 | Forks: 31
# 基于 Alpine Linux 的支持 DNSSEC 验证的递归 Unbound DNS 解析器 Docker 镜像
[](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-build-unbound.yaml) [](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-build-unbound-quic.yaml) [](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-build-canary-unbound.yaml) [](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-build-canary-unbound-quic.yaml)
[](https://github.com/madnuttah/unbound-docker/releases)
[](https://github.com/madnuttah/openssl-buildenv/releases)
[](https://github.com/madnuttah/unbound-docker/actions/workflows/cd-gh-action-zizmor-scan.yaml)
[](https://github.com/madnuttah/unbound-docker/actions/workflows/codeql.yml)
[](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-security-scan.yaml)
[](https://github.com/madnuttah/unbound-docker/actions/workflows/cd-github-actions-linting.yaml)
[](https://github.com/madnuttah/unbound-docker/actions/workflows/cd-dockerfiles-linting.yaml)
[](https://github.com/step-security/harden-runner)
本仓库提供了一个轻量级的基于 Alpine Linux 的 Docker 镜像,运行着由 [NLnet Labs](https://nlnetlabs.nl) 团队开发的开源高性能 DNS 解析器 [Unbound](https://unbound.net)。该镜像是一个安全的单层 distroless scratch 构建,遵循最佳实践原则,既适合专业用途也适合个人使用。
| 功能 | 支持 | 说明 | | ---------------------------------------- | --------- | ----------- | | 非特权用户 | 是 | 以非 root 用户运行 Unbound 以减少攻击面。 | | 非特权端口(也可使用特权端口) | 是 | 默认允许绑定到高端口,或在需要时绑定到低端口号。 | | 自定义 UID 和 GID 构建及环境变量 | 是 | 允许您将容器权限与宿主机要求相匹配。 | | 可选的完全 rootless 模式 | 是 | 允许在没有任何 root 权限的情况下运行容器。 | | CD 构建的运行 Alpine Linux 的单层 distroless scratch 镜像 | 是 | 生成没有包管理器或 shell 的最小且安全的 runtime。 | | 针对不同硬件架构优化并通过 CD 构建的 [OpenSSL&OpenSSL+QUIC](https://github.com/madnuttah/openssl-buildenv) | 是 | 确保每种架构都能获得最佳的加密性能和 QUIC 支持。 | | Libevent | 是 | 为高性能 DNS 解析提供高效的事件处理。 | | 默认递归 DNS | 是 | 配置为在不依赖上游解析器的情况下执行完全递归。 | | DNSSEC | 是 | 通过加密方式验证 DNS 响应的真实性。 | | DNSCrypt | 是 | 支持使用 DNSCrypt 协议进行加密 DNS 查询。 | | DNSTap | 是 | 允许对 DNS 查询进行结构化日志记录,以便进行分析和调试。 | | DNS64 | 是 | 为仅支持 IPv4 的目标地址合成 IPv6 地址。 | | DNS over HTTPS | 是 | 接收并通过 HTTPS 提供 DNS 查询服务。 | | DNS over TLS | 是 | 接收并通过 TLS 提供 DNS 查询服务。 | | DNS over Quic(独立的 [-quic] 构建) | 是 | 在专用的启用了 QUIC 的镜像中提供 DNS over QUIC 支持。 | | 通过 UNIX socket 或网络连接的 Redis | 是 | 支持通过 Redis 进行缓存或持久化存储。 | | EDNS Client Subnet | 是 | 支持在需要时转发客户端子网信息。 | | 可选的尊重隐私且有意义的健康检查 | 是 | 提供不会泄露 DNS 查询的健康检查。 | | 无需第三方工具,可选通过 Zabbix 为 Grafana 提供 Unbound 统计信息 | 是 | 直接暴露指标以供监控,无需额外的 exporter。 | | Python | 否 | 有意排除了 Python 以保持镜像的最小化。 |
此镜像为多种硬件架构进行了构建。所有构建版本均使用 Docker Buildx 并在需要时结合 QEMU 模拟,以及优化过的 OpenSSL 或 OpenSSL QUIC 构建环境。 | 架构 | 支持 | 备注 | |-------------|-----------|-------| | linux/amd64 | 是 | 完全支持并已优化 | | linux/arm64 | 是 | 完全支持并已优化 | | linux/386 | 是 | 旧版兼容性 | | linux/arm/v6 | 是 | 适用于较旧的 ARM 设备 | | linux/arm/v7 | 是 | 常见于 Raspberry Pi 2 和 3 等 SBC | | linux/ppc64le | 是 | Little endian PowerPC | | linux/s390x | 是 | IBM Z 和 LinuxONE | | linux/riscv64 | 是 | 实验性但受支持 | 所有架构均通过持续交付流水线自动构建并发布。
## 新手上路
Docker 容器最容易与 Docker Compose 结合使用。
## 可用的 Docker 标签
此镜像发布了四个变体:标准版、QUIC版、Canary版和 Canary QUIC版。
所有标签均遵循基于上游 Unbound 版本发布的一致版本控制方案。
### 标准镜像 (DNS over TLS/DoT, UDP, TCP)
可以使用 latest 标签或特定版本拉取标准的 Unbound 镜像:
```
docker pull madnuttah/unbound:latest
docker pull madnuttah/unbound:1.1.0-0
```
版本控制方案:
```
-
e.g. 1.1.0-0
```
### QUIC 镜像 (DNS over QUIC/DoQ)
启用了 QUIC 的镜像遵循与标准镜像相同的版本控制方案,但附加了 -quic 后缀:
```
docker pull madnuttah/unbound:latest-quic
docker pull madnuttah/unbound:1.1.0-0-quic
```
版本控制方案:
```
--quic
e.g. 1.1.0-0-quic
```
### Canary 镜像(每日构建)
标准镜像的每日构建版本发布在 canary 标签下:
```
docker pull madnuttah/unbound:canary
```
这些构建版本追踪上游最新的 Unbound master 分支。
### Canary QUIC 镜像(每日 QUIC 构建)
启用了 QUIC 的每日构建版本可通过 canary-quic 标签获取:
```
docker pull madnuttah/unbound:canary-quic
```
这些构建版本结合了最新的 Unbound master 分支以及启用 QUIC 的 OpenSSL 和 NGTCP2 协议栈。
## 更改日志
您可以在 [Releases](https://github.com/madnuttah/unbound-docker/releases) 部分查看更改内容。
## 反馈
如果您有任何问题或遇到任何情况,请提交一个 [GitHub Issue](https://github.com/madnuttah/unbound-docker/issues)。
欢迎在仓库的 [Discussions](https://github.com/madnuttah/unbound-docker/discussions) 标签页提出功能请求和进行一般性讨论。
您也可以通过 Fosstodon 联系我们:
## 致谢
- [Alpine Linux](https://www.alpinelinux.org/)
- [Docker](https://www.docker.com/)
- [Unbound](https://unbound.net/)
- [OpenSSL](https://www.openssl.org/)
- [Redis](https://redis.io/)
- [Pi-hole](https://pi-hole.net/)
- [Aqua Security](https://trivy.dev/)
- [zizmor](https://github.com/zizmorcore/zizmor)
- 启发了本项目的众多 Docker 镜像
## 许可证
### 许可证
除非另有说明,所有代码均在 MIT 许可证下发布。
详情请参阅 [LICENSE](https://github.com/madnuttah/unbound-docker/blob/main/LICENSE)。
### 其他组件的许可证
- Docker: [Apache 2.0](https://github.com/docker/docker/blob/master/LICENSE)
- Unbound: [BSD License](https://unbound.nlnetlabs.nl/svn/trunk/LICENSE)
- OpenSSL: [Apache style license](https://www.openssl.org/source/license.html)
## 法律声明
请注意,这是私人贡献者的作品,我们既不隶属于 NLnet Labs、Pi-hole 或 AdGuard,NLnet Labs、Pi-hole 或 AdGuard 也未参与该镜像的开发。“Unbound”、“Pi-hole”和“AdGuard Home”的商标和产权分别属于 NLnet Labs、Pi-hole 和 AdGuard。源代码中的所有权利,包括与上述商标和产权相关的标志,均归其各自所有者所有。
## 支持我们的使命
如果您想捐款,请将这笔钱捐给该镜像所依赖的上游项目。
如果您喜欢我们所做的工作,并且觉得这个镜像在保护您的隐私并恢复您的 DNS 自由方面很有用——请帮忙宣传、Fork 我们的仓库、提交 Issue、发起 Pull Request,并且别忘了在 Docker Hub 和 GitHub 上给我们点个 Star。非常感谢您的支持!
构建状态(点击展开)
[](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-build-unbound.yaml) [](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-build-unbound-quic.yaml) [](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-build-canary-unbound.yaml) [](https://github.com/madnuttah/unbound-docker/blob/main/.github/workflows/cd-build-canary-unbound-quic.yaml)
功能(点击展开)
| 功能 | 支持 | 说明 | | ---------------------------------------- | --------- | ----------- | | 非特权用户 | 是 | 以非 root 用户运行 Unbound 以减少攻击面。 | | 非特权端口(也可使用特权端口) | 是 | 默认允许绑定到高端口,或在需要时绑定到低端口号。 | | 自定义 UID 和 GID 构建及环境变量 | 是 | 允许您将容器权限与宿主机要求相匹配。 | | 可选的完全 rootless 模式 | 是 | 允许在没有任何 root 权限的情况下运行容器。 | | CD 构建的运行 Alpine Linux 的单层 distroless scratch 镜像 | 是 | 生成没有包管理器或 shell 的最小且安全的 runtime。 | | 针对不同硬件架构优化并通过 CD 构建的 [OpenSSL&OpenSSL+QUIC](https://github.com/madnuttah/openssl-buildenv) | 是 | 确保每种架构都能获得最佳的加密性能和 QUIC 支持。 | | Libevent | 是 | 为高性能 DNS 解析提供高效的事件处理。 | | 默认递归 DNS | 是 | 配置为在不依赖上游解析器的情况下执行完全递归。 | | DNSSEC | 是 | 通过加密方式验证 DNS 响应的真实性。 | | DNSCrypt | 是 | 支持使用 DNSCrypt 协议进行加密 DNS 查询。 | | DNSTap | 是 | 允许对 DNS 查询进行结构化日志记录,以便进行分析和调试。 | | DNS64 | 是 | 为仅支持 IPv4 的目标地址合成 IPv6 地址。 | | DNS over HTTPS | 是 | 接收并通过 HTTPS 提供 DNS 查询服务。 | | DNS over TLS | 是 | 接收并通过 TLS 提供 DNS 查询服务。 | | DNS over Quic(独立的 [-quic] 构建) | 是 | 在专用的启用了 QUIC 的镜像中提供 DNS over QUIC 支持。 | | 通过 UNIX socket 或网络连接的 Redis | 是 | 支持通过 Redis 进行缓存或持久化存储。 | | EDNS Client Subnet | 是 | 支持在需要时转发客户端子网信息。 | | 可选的尊重隐私且有意义的健康检查 | 是 | 提供不会泄露 DNS 查询的健康检查。 | | 无需第三方工具,可选通过 Zabbix 为 Grafana 提供 Unbound 统计信息 | 是 | 直接暴露指标以供监控,无需额外的 exporter。 | | Python | 否 | 有意排除了 Python 以保持镜像的最小化。 |
支持的架构(点击展开)
此镜像为多种硬件架构进行了构建。所有构建版本均使用 Docker Buildx 并在需要时结合 QEMU 模拟,以及优化过的 OpenSSL 或 OpenSSL QUIC 构建环境。 | 架构 | 支持 | 备注 | |-------------|-----------|-------| | linux/amd64 | 是 | 完全支持并已优化 | | linux/arm64 | 是 | 完全支持并已优化 | | linux/386 | 是 | 旧版兼容性 | | linux/arm/v6 | 是 | 适用于较旧的 ARM 设备 | | linux/arm/v7 | 是 | 常见于 Raspberry Pi 2 和 3 等 SBC | | linux/ppc64le | 是 | Little endian PowerPC | | linux/s390x | 是 | IBM Z 和 LinuxONE | | linux/riscv64 | 是 | 实验性但受支持 | 所有架构均通过持续交付流水线自动构建并发布。
标签:Alpine Linux, DNS解析器, Hakrawler, Pi-hole, Unbound, 安全测试工具, 搜索引擎查询, 网络隐私, 请求拦截