🌐 DNS 自动分流网关 - 高性能 & 全协议支持 (DoH/DoT/DoQ)

一个基于 Go 语言开发的轻量级、高性能 DNS 代理服务器。

如果你受够了 DNS 污染、想要更精准的国内外流量分流,或者想自建支持 DoH/DoT/DoQ 的安全 DNS 服务,这个项目绝对值得一试!


项目亮点

  • 🌍 智能分流: 内置 GeoIP 和 GeoSite,自动将国内域名解析到国内 DNS,海外域名解析到海外 DNS,速度与准确性兼得。
  • 🚀 全协议支持: 不仅支持传统 UDP/TCP,更完美支持 DoH (HTTP/2 & HTTP/3)DoTDoQ (QUIC) 等加密协议。
  • 🔒 自动 HTTPS: 集成 Let's Encrypt,只需配置域名,自动申请和续期 TLS 证书,轻松搭建私有 DoH/DoT 服务器。
  • 极速体验: 海外查询支持并发竞速(最快者胜),支持 TCP/DoT 连接复用 (Pipelining),告别解析延迟。
  • 🛠️ 高度定制: 支持自定义 hosts.txtrule.txt 分流规则,支持自定义 ECS IP 以优化 CDN 解析。
  • 📦 开箱即用: 启动时自动更新 Geo 数据库,支持 Docker 一键部署。

🚀 快速部署

部署只需两步:

1. 创建配置文件 config.yaml

在一个空目录中创建一个 config.yaml 文件,填入以下内容:

# 服务监听配置(注释或未配置则不开启相应服务)listen:  dns_udp: ":53"  dns_tcp: ":53"  doh: ":443"  dot: ":853"  doq: ":853"# 自动证书申请 (Let's Encrypt)# 如果启用,server.crt 和 server.key 将被忽略,证书将自动管理。# 注意:需要公网 80 和 443 端口可访问。auto_cert:  enabled: false  email: "[email protected]" # 用于接收证书过期通知  domains:    - "dns.example.com"  cert_dir: "certs" # 证书缓存目录# Bootstrap DNS (用于解析上游服务器域名)bootstrap_dns:  - "223.5.5.5:53"  - "8.8.8.8:53"# 上游服务器配置upstreams:  cn:    # 示例:国内UDP DNS    - address: "223.5.5.5:53"      protocol: "udp"      ecs_ip: "114.114.114.114"    # 示例:国内DoT DNS (开启Pipelining)    - address: "tls://223.6.6.6:853"      protocol: "dot"      ecs_ip: "114.114.114.114"      pipeline: true      insecure_skip_verify: false  overseas:    # 示例:海外DoH DNS (支持H3, 验证证书)    - address: "https://8.8.8.8/dns-query"      protocol: "doh"      ecs_ip: "8.8.8.8"  # Cloudflare DNS 不支持ecs      http3: true      insecure_skip_verify: false    # 示例:海外DoT DNS (开启Pipelining)    - address: "tls://8.8.8.8:853"      protocol: "dot"      ecs_ip: "8.8.8.8"      pipeline: true    # 示例:海外DoQ DNS    - address: "quic://dns.nextdns.io:853"       protocol: "doq"      ecs_ip: "8.8.8.8"# GeoIP/GeoSite数据文件路径及下载地址geo_data:  geoip_dat: "GeoIP.dat"  geosite_dat: "GeoSite.dat"  geoip_download_url: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"  geosite_download_url: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"

2. 一行命令启动

docker run -d \  --name dns-proxy \  --restart unless-stopped \  --network host \  -v $(pwd)/config.yaml:/app/config.yaml \  -v $(pwd)/certs:/app/certs \  -v $(pwd)/hosts.txt:/app/hosts.txt \  -v $(pwd)/rule.txt:/app/rule.txt \  weijiaqaq/dns_automatic_traffic_splitting:latest

注意:推荐使用 --network host 模式以获得最佳网络性能。


📖 使用指南

📂 文件说明

除了 config.yaml,你还可以在运行目录下创建以下文件进行自定义(可选,若无文件会自动忽略):

  1. hosts.txt: 类似于系统的 hosts 文件,强制指定域名 IP。

    192.168.1.1 myrouter.lan0.0.0.0     ads.badsite.com
  2. rule.txt: 自定义域名的分流策略(强制走 cnoverseas 组)。

    google.com overseasbaidu.com cn

🔗 项目链接

项目完全开源,欢迎大家试用、提建议或者贡献代码!