Sanite_Ava 发表于 2025-11-27 18:17:54

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

本帖最后由 Sanite_Ava 于 2025-11-29 20:00 编辑

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

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

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

# 测试服务器:
**面板地址: [点击进入 WebUI](https://dns-test.11451453.xyz:8080)**
DoH: `https://dns-test.11451453.xyz/dns-query`
DoT/DoQ: `dns-test.11451453.xyz`
## ***注: 测试服务器位于德国法兰克福,国内ECS为上海电信IP,国外ECS为日本东京IP,速度一定不理想,仅供测试解析IP是否正确以及效果,如需体验高速解析请自行搭建配置***

---

### ✨ **项目亮点**

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

---

# 📝 更新日志

### ✨ **新增功能**
- **WebUI调整**: 全新风格,支持深色/浅色模式切换。
!(https://img.erpweb.eu.org/imgs/2025/11/0129957156a63dca.png)
!(https://img.erpweb.eu.org/imgs/2025/11/df04eec345db396c.png)
- **移动端支持**: WebUI 适配移动端。
- **仪表板增强版**:
    - 仪表盘卡片新增 CN/Overseas 查询统计、Goroutines 监控、启动时间显示。
    - 监听端口卡片重构为 Grid 布局,未监听端口自动淡化显示。
- **上游DNS服务器管理**: 支持通过拖拽 (Drag-and-Drop) 自定义上游服务器排序。
!(https://img.erpweb.eu.org/imgs/2025/11/f66cd63c88393497.gif)
- **日志系统**:
    - 查询日志支持分页加载 (Pagination),大幅提升大数据量下的加载性能。
    - 日志轮转策略从“条数限制”更改为“文件大小限制 (MB)”,默认 1MB 自动轮转。
- **优化**: 登录按钮与刷新按钮样式优化,提升交互体验。

### 🐛 修复问题
- **Pipeline 高并发问题**: 重构 DoT/TCP 客户端,使用连接池 (Connection Pool) 替代单一连接锁,彻底修复开启 Pipeline 后高并发下的延迟暴增与连接失败问题。

---

**💡 提示**: 本次更新包含多项核心功能升级与体验改进,建议所有用户更新到最新版本以获得最佳体验!

---

### 🚀 **快速部署**

部署只需两步:

**1. 创建配置文件 `config.yaml`**

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

```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: "your-email@example.com" # 用于接收证书过期通知
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. 一行命令启动**

```bash
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。
    ```text
    192.168.1.1 myrouter.lan
    0.0.0.0   ads.badsite.com
    ```

2.**`rule.txt`**: 自定义域名的分流策略(强制走 `cn` 或 `overseas` 组)。
    ```text
    google.com overseas
    baidu.com cn
    ```

### 🔗 **项目链接**

*   **GitHub 仓库 (欢迎 Star ⭐):** (https://github.com/Hamster-Prime/DNS_automatic_traffic_splitting)
*   **Docker Hub 镜像:** (https://hub.docker.com/r/weijiaqaq/dns_automatic_traffic_splitting)

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

oicq 发表于 2025-11-27 18:22:31

star 1 膜拜大佬

mover 发表于 2025-11-28 09:28:05

您好,您是作者吗?

直接用大厂的doh和自建的什么区别?

VuV 发表于 2025-11-28 09:58:17

star

Sanite_Ava 发表于 2025-11-28 13:05:35

mover 发表于 2025-11-28 09:28
您好,您是作者吗?

直接用大厂的doh和自建的什么区别?

大厂的没分流哦,比如直接用cf的bilibili有海外cdn的服务就会解析到akamai

yczxknp 发表于 2025-11-29 08:59:00

学习!!{:guzhang:}

CTM 发表于 2025-11-29 09:47:11

感谢分享!

hexy 发表于 2025-11-29 19:54:26

xmsl

Sanite_Ava 发表于 2025-11-29 19:58:43

hexy 发表于 2025-11-29 19:54
xmsl

{tieba28}

hexy 发表于 2025-11-29 20:00:20

Sanite_Ava 发表于 2025-11-29 19:58


快点同意加我好友

Sanite_Ava 发表于 2025-11-29 20:01:18

hexy 发表于 2025-11-29 20:00
快点同意加我好友

同意啦

Outsider 发表于 3 天前

star +1 要是可以类似mosdns实现黑白名单就更好了
页: [1]
查看完整版本: DNS 自动分流网关 - 高性能 & 全协议支持 (DoH/DoT/DoQ)