七千二百袋水泥
七千二百袋水泥
Published on 2025-10-25 / 4 Visits

全面指南:在NAS上部署blocky DNS代理实现广告拦截、自定义域名解析和网络优化,打造纯净安全的上网环境

  • 项目GitHub源码地址https://github.com/0xERR0R/blocky
  • 常用广告域名黑名单来源https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
  • 配置文件设置步骤
upstreams:  
  groups:  
    default:  ## 配置默认的DNS服务器  
      - 223.5.5.5  
      - 114.114.114.114  
blocking:  
  denylists:  
    ads:  ## 配置广告黑名单,可选择将文件下载到NAS本地并指定路径  
      - https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts  
  clientGroupsBlock:  
    default:  
      - ads  
customDNS:  
  customTTL: 1h  
  mapping:  # 配置自定义域名,将其解析到NAS的IP地址  
    n100.com: 192.168.31.30  
    j1900.cn: 192.168.31.20  
ports:  
  dns: 53  
  http: 4000
  • 快速启动命令示例
docker run --name blocky \  
    -v /path/to/config.yml:/app/config.yml \  
    -p 4000:4000 -p 53:53/udp \  
    spx01/blocky

完成上述安装和启动流程后,将电脑或移动设备的DNS服务器地址修改为NAS的IP,即可体验到无广告干扰的纯净DNS解析服务。


Blocky DNS代理功能详解

Blocky 是一款采用 Go 语言编写的本地网络 DNS 代理与广告拦截工具,具备以下核心特性:

  • 高效拦截功能 - 支持使用外部列表(如广告和恶意软件黑名单)以及自定义允许列表来阻止不良DNS查询

    • 可根据不同客户端组(例如儿童设备或智能家居设备)定义独立的允许和拒绝列表
    • 自动定期更新外部允许和拒绝列表内容
    • 提供正则表达式支持,增强匹配灵活性
    • 支持拦截请求域名、响应中的CNAME记录(深度CNAME检测)以及响应IP地址(基于IP列表过滤)
  • 高级DNS配置选项 - 不仅仅局限于广告拦截

    • 为特定域名设置自定义DNS解析规则
    • 支持条件式转发到外部DNS服务器
    • 可按客户端组别定义上游DNS解析器
  • 性能优化机制 - 显著提升网络速度和响应效率

    • 可自定义DNS查询结果的缓存时间,加速解析过程并减少外部查询次数
    • 支持预取和缓存常用查询结果
    • 允许同时使用多个外部DNS解析器
    • 占用内存资源极少,运行轻量高效
  • 多协议支持能力 - 兼容现代DNS通信协议

    • 支持通过UDP和TCP进行标准DNS查询
    • 集成DNS over HTTPS(DoH)功能
    • 提供DNS over TLS(DoT)加密传输
  • 安全与隐私保护 - 确保通信过程安全可靠

    • 支持现代DNS扩展功能,如DNSSEC和eDNS
    • 完全自由配置阻止列表,无隐藏过滤行为
    • 可作为DoH端点提供服务
    • 在配置中使用随机上游解析器,分散DNS流量以增强用户隐私
    • Blocky 不收集任何用户数据、遥测信息或统计资料
  • 系统集成特性 - 提供丰富的监控和分析工具

    • 输出Prometheus格式的指标数据
    • 提供预配置的Grafana仪表板(支持Prometheus和多种数据库)
    • 支持以CSV格式或MySQL/MariaDB/PostgreSQL/Timescale数据库记录每日及每客户端的DNS查询,便于深度分析
    • 提供多种REST API接口
    • 包含命令行工具(CLI)
  • 简易配置管理 - 基于YAML格式的单一或多配置文件

    • 维护操作简单直观
    • 备份和恢复配置便捷
  • 简单安装与部署 - blocky 设计注重易用性

    • 无状态运行(无需数据库或临时文件)
    • 提供支持多架构的Docker镜像
    • 单二进制文件部署
    • 兼容x86-64和ARM架构,适合在Raspberry PI等设备上运行
    • 社区提供Helm chart用于Kubernetes环境部署

Blocky在实际网络环境中的应用案例

  • 创建清爽无干扰的上网环境

许多用户经常受到类似“是兄弟就来砍我”或“澳门新葡京”等弹窗广告的骚扰。通过配置blocky并使用上述denylists黑名单,可以有效减少这类广告的显示。该黑名单会持续更新,具备抓包分析能力的用户还可以自行添加本地记录,进一步定制广告过滤规则。

  • 结合nginx实现应用流量分发

在NAS上部署多个服务时,往往需要记忆不同端口号,这给访问带来不便。通过在blocky中配置自定义域名(例如 n100.com),并将其指向NAS的IP地址(注意:n100.com 并非实际购买的域名,仅用于内部记忆,用户可随意定义类似域名),可以简化访问流程。

配合nginx配置示例如下:

## 游戏应用2048
server {  
    listen   80;  
    server_name  2048.n100.com;  # 使用易于记忆的二级域名  
                                 # 通过该域名可直接访问部署的2048游戏  
    root   /usr/local/games/2048-master;  
    index index.html index.htm;  
}  
# Transmission下载工具
server {  
    listen   80 ;  
    server_name tr.n100.com;  # 配置域名直接指向Transmission服务  
  
    location /{  
        proxy_pass http://127.0.0.1:9091;  
    }  
}  
# van-nav导航服务
server {  
    listen   80 ;  
    server_name nav.n100.com;  
  
    location /{  
        proxy_pass http://127.0.0.1:6412;  
    }  
}  
...  # 其他服务配置类似,不再重复列举

尽管这些域名并非实际注册,但在blocky系统中,用户可以自由定义并使用任何域名来指向内部服务,实现便捷的本地网络管理。

部署建议与总结

部署DNS代理最便捷的方式是在路由器中安装相应插件。如果路由器不支持外部插件安装,建议将主DNS服务器地址设置为NAS的IP,次要DNS地址配置为公共DNS(如114.114.114.114),这样即使NAS出现故障,也不会影响基本的上网功能。这种方法在保证功能性的同时,提供了冗余备份,确保网络服务的稳定性。