
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://github.com/0xERR0R/blocky
Blocky 是一款基于 Go 语言开发的轻量级 DNS 代理与广告拦截工具,专为本地网络设计。它整合 DNS 代理、广告/软件拦截、自定义 DNS 解析与隐私保护功能,通过优化 DNS 查询流程提升网络性能,同时支持多种现代 DNS 协议以增强网络安全性与隐私性。主要用途包括:本地网络广告与内容过滤、DNS 解析加速、自定义域名解析规则管理、以及通过加密 DNS 协议(如 DoH/DoT)保护用户隐私。
适用于家庭网络环境,拦截各类广告、跟踪器域名,提升浏览体验,减少带宽消耗。
可作为企业内网 DNS 服务器,实现基于客户端分组的域名访问控制(如限制特定设备访问娱乐网站)、***软件域名拦截及自定义域名解析。
为智能家居、物联网设备提供 DNS 级安全防护,阻止设备连接***服务器,保护设备与家庭网络安全。
适合对 DNS 隐私有较高要求的场景,通过 DoH/DoT 协议加密 DNS 流量,结合上游 resolver 随机化,减少 DNS 数据泄露风险。
轻量设计使其可部署于树莓派、NAS 等资源受限设备,作为家庭网关的 DNS 服务组件。
Blocky 采用 YAML 格式配置文件,默认路径为 /app/config.yml。以下为基础配置示例:
yaml# 基础设置 port: 53 # DNS 服务端口(UDP/TCP) httpPort: 4000 # HTTP 服务端口(API、Prometheus 指标等) logLevel: info # 日志级别:debug, info, warn, error # 上游 DNS 服务器配置 upstream: default: - https://dns.cloudflare.com/dns-query # DoH 上游 - tls://1.1.1.1 # DoT 上游 - 8.8.8.8:53 # UDP 上游 # 条件转发示例(可选) conditional: - domain: "home.arpa" upstream: - 192.168.1.1:53 # 本地路由器 DNS # 阻止规则配置 blocking: # 阻止列表(广告、恶意软件等) lists: - https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts - https://mirror1.malwaredomains.com/files/justdomains # 白名单(覆盖阻止列表) whitelist: - "example.com" - "*.trusted.com" # 阻止模式:null(返回 NXDOMAIN)、zeroIP(返回 0.0.0.0)、customIP(返回自定义 IP) blockType: "zeroIP" # 定期更新阻止列表(单位:分钟) updateInterval: 4320 # 72 小时 # 客户端分组配置(可选) clients: # 分组定义 groups: kids: # 仅对 kids 组应用的额外阻止列表 blockLists: - https://raw.githubusercontent.com/rentec/pihole-blocklists/master/blocklists/youtube iot: # iot 组的白名单 whitelist: - "*.iot-service.com" # 客户端匹配规则(IP 或 CIDR) clientGroups: - clients: ["192.168.1.100", "192.168.1.101/30"] groups: ["kids"] - clients: ["192.168.1.200-205"] groups: ["iot"] # 缓存配置 cache: # 缓存大小(条目数) size: 10000 # 默认 TTL(秒),优先级低于 DNS 响应 TTL ttl: 300 # 最小 TTL(秒),覆盖响应中过小的 TTL minTTL: 60 # 最大 TTL(秒),覆盖响应中过大的 TTL maxTTL: 86400 # 日志配置 logging: # 启用查询日志 queryLog: true # 查询日志路径(Docker 部署时需挂载对应目录) queryLogPath: "/logs/query.log" # CSV 日志字段:timestamp, client, query, type, responseCode, duration, upstream, answer queryLogFormat: "csv"
1. 使用 docker run 部署
bashdocker run -d \ --name blocky \ --restart unless-stopped \ -p 53:53/udp \ -p 53:53/tcp \ -p 4000:4000/tcp \ -v /path/to/blocky/config.yml:/app/config.yml \ -v /path/to/blocky/logs:/logs \ --env TZ=Asia/Shanghai \ 0xerr0r/blocky:latest
参数说明:
-p 53:53/udp/-p 53:53/tcp:映射 DNS 服务端口(UDP/TCP 均需映射)-p 4000:4000/tcp:映射 HTTP 服务端口(API、Prometheus 指标)-v /path/to/blocky/config.yml:/app/config.yml:挂载自定义配置文件-v /path/to/blocky/logs:/logs:挂载日志目录(如启用 queryLog)--env TZ=Asia/Shanghai:设置时区,确保日志时间正确2. 使用 docker-compose 部署
创建 docker-compose.yml 文件:
yamlversion: "3.8" services: blocky: image: 0xerr0r/blocky:latest container_name: blocky restart: unless-stopped ports: - "53:53/udp" - "53:53/tcp" - "4000:4000/tcp" volumes: - ./config.yml:/app/config.yml:ro - ./logs:/logs environment: - TZ=Asia/Shanghai # 可选:限制资源使用(适用于树莓派等设备) deploy: resources: limits: cpus: '0.5' memory: 256M
启动服务:
bashdocker-compose up -d
检查服务状态:
bashdocker logs blocky # 查看启动日志,确认无错误 docker ps | grep blocky # 确认容器运行中
测试 DNS 解析:
使用 dig 或 nslookup 测试 DNS 解析(替换 127.0.0.1 为 Blocky 服务器 IP):
bashdig @127.0.0.1 example.com # 测试正常域名解析 dig @127.0.0.1 ads.example.com # 测试被阻止域名(应返回 0.0.0.0 或 NXDOMAIN)
访问 API 与监控:
http://<blocky-ip>:4000/api/v1/health(健康检查)http://<blocky-ip>:4000/metricsconfig.yml 核心参数)| 参数路径 | 类型 | 默认值 | 说明 |
|---|---|---|---|
port | int | 53 | DNS 服务监听端口(UDP/TCP) |
httpPort | int | 4000 | HTTP 服务监听端口(API、Prometheus、DoH 端点) |
listenAddress | string | "0.0.0.0" | 监听地址(默认监听所有网络接口) |
logLevel | string | "info" | 日志级别:debug/info/warn/error |
timezone | string | "UTC" | 时区(如 "Asia/Shanghai"),影响日志时间戳 |
upstream)| 参数路径 | 类型 | 默认值 | 说明 |
|---|---|---|---|
upstream.default | []string | ["8.8.8.8:53", "8.8.4.4:53"] | 默认上游 DNS 服务器列表,支持 udp:///tcp:///tls:///https:// 前缀 |
upstream.conditional | []object | - | 条件转发规则列表,每个规则包含 domain(匹配域名)和 upstream(目标 DNS 列表) |
upstream.timeout | duration | "2s" | 上游查询超时时间(如 "1s"、"500ms") |
upstream.maxTries | int | 3 | 上游查询失败重试次数 |
blocking)| 参数路径 | 类型 | 默认值 | 说明 |
|---|---|---|---|
blocking.lists | []string | - | 阻止列表 URL 或本地文件路径(每行一个域名/IP) |
blocking.whitelist | []string | - | 白名单(支持通配符,如 "*.example.com"),覆盖阻止列表 |
blocking.blockType | string | "null" | 阻止模式:null(NXDOMAIN)、zeroIP(0.0.0.0/::)、customIP(需配置 customIP) |
blocking.customIP | string | "127.0.0.1" | blockType: customIP 时返回的 IP |
blocking.updateInterval | duration | "4320m" (72h) | 阻止列表更新间隔(单位:分钟) |
blocking.refreshPeriod | duration | "10m" | 检查阻止列表更新的周期(单位:分钟) |
clients)| 参数路径 | 类型 | 默认值 | 说明 |
|---|---|---|---|
clients.groups | map | - | 客户端分组定义(键为组名,值为组配置) |
clients.groups.<name>.blockLists | []string | - | 仅对该组应用的额外阻止列表 |
clients.groups.<name>.whitelist | []string | - | 仅对该组应用的额外白名单 |
clients.clientGroups | []object | - | 客户端-组映射规则,每个规则含 clients(IP/CIDR/IP 范围)和 groups(组名列表) |
cache)| 参数路径 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cache.size | int | *** | 缓存条目数上限 |
cache.ttl | duration | "300s" (5m) | 默认缓存 TTL(优先级低于 DNS 响应 TTL) |
cache.minTTL | duration | "60s" (1m) | 最小缓存 TTL(覆盖响应中过小的 TTL) |
cache.maxTTL | duration | "86400s" (24h) | 最大缓存 TTL(覆盖响应中过大的 TTL) |
cache.prefetching | bool | true | 是否启用预取(缓存即将过期的热门条目) |
logging)| 参数路径 | 类型 | 默认值 | 说明 |
|---|---|---|---|
logging.queryLog | bool | false | 是否启用查询日志 |
logging.queryLogPath | string | "/logs/query.log" | 查询日志文件路径(需挂载日志目录) |
logging.queryLogFormat | string | "csv" | 日志格式:csv 或 json |
logging.queryLogRotate | bool | true | 是否按日轮转日志文件 |
Blocky 支持通过环境变量覆盖部分配置参数(优先级:环境变量 > 配置文件 > 默认值):
| 环境变量名 | 对应配置路径 | 说明 |
|---|---|---|
BLOCKY_PORT | port | DNS 服务端口 |
BLOCKY_HTTP_PORT | httpPort | HTTP 服务端口 |
BLOCKY_LOG_LEVEL | logLevel | 日志级别 |
BLOCKY_UPSTREAM_DEFAULT | upstream.default | 上游 DNS 服务器(逗号分隔,如 "8.8.8.8,8.8.4.4") |
BLOCKY_TZ | timezone | 时区(同 TZ 环境变量) |
BLOCKY_CONFIG | - | 配置文件路径(默认:`/app/config |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务