上游策略
上游策略是 DNS-Go 的核心功能之一,用于配置和管理递归查询时使用的上游 DNS 服务器,支持多种负载均衡策略实现高可用。
功能概述
上游策略模块提供:
- 上游 DNS 管理:添加、编辑、删除上游 DNS 服务器
- 健康检查:自动检测上游 DNS 可用性
- 负载均衡策略:轮询、权重、故障转移等
- 策略组管理:将多个上游组合成一个策略
上游 DNS 管理
添加上游 DNS
- 登录 Web 管理界面
- 进入「上游管理」→「上游列表」
- 点击「新增上游」按钮
- 填写上游信息:
| 字段 | 说明 | 示例 |
|---|---|---|
| 名称 | 上游 DNS 标识 | 阿里云 DNS |
| 服务器地址 | DNS 服务器 IP | 223.5.5.5 |
| 端口 | DNS 服务端口 | 53 |
| 协议 | UDP 或 TCP | UDP |
| 权重 | 负载均衡权重 | 100 |
| 描述 | 可选说明 | 阿里云公共 DNS |
- 点击「确定」保存
常用上游 DNS 推荐
| 服务商 | 主 DNS | 备 DNS | 特点 |
|---|---|---|---|
| 阿里云 | 223.5.5.5 | 223.6.6.6 | 国内快速稳定 |
| 腾讯云 | 119.29.29.29 | 182.254.116.116 | 国内优质 |
| 114 DNS | 114.114.114.114 | 114.114.115.115 | 中立安全 |
| 8.8.8.8 | 8.8.4.4 | 全球服务 | |
| Cloudflare | 1.1.1.1 | 1.0.0.1 | 隐私保护 |
编辑和删除上游
- 编辑:在上游列表中点击「编辑」修改上游配置
- 删除:点击「删除」移除上游(注意:被策略引用的上游无法删除)
负载均衡策略
DNS-Go 支持多种负载均衡策略:
轮询(Round Robin)
按顺序轮流使用每个上游 DNS。
适用场景:
- 上游服务器性能相近
- 均匀分配查询负载
示例:
查询1 → 上游 A
查询2 → 上游 B
查询3 → 上游 C
查询4 → 上游 A(循环)权重(Weighted)
按权重比例分配查询到不同上游。
适用场景:
- 上游服务器性能不同
- 需要按能力分配负载
配置示例:
上游 A:权重 100(高性能)
上游 B:权重 50(中性能)
上游 C:权重 25(低性能)流量分配:
- 上游 A:57%(100/175)
- 上游 B:29%(50/175)
- 上游 C:14%(25/175)
故障转移(Failover)
主备模式,主 DNS 故障时自动切换到备用 DNS。
适用场景:
- 高可用性要求
- 关键业务 DNS 解析
工作方式:
- 优先使用主 DNS
- 主 DNS 故障时切换到备 DNS
- 主 DNS 恢复后切回主 DNS
最快响应(Fastest)
选择响应速度最快的上游 DNS。
适用场景:
- 对延迟敏感的应用
- 多地域部署环境
注意:
- 需要定期探测各上游响应时间
- 可能频繁切换上游
随机(Random)
随机选择一个上游 DNS。
适用场景:
- 简单的负载均衡
- 上游性能相近
策略配置
创建策略
- 进入「上游管理」→「策略配置」
- 点击「新增策略」按钮
- 填写策略信息:
| 字段 | 说明 | 示例 |
|---|---|---|
| 策略名称 | 策略标识 | 默认策略 |
| 策略类型 | 轮询/权重/故障转移等 | 轮询 |
| 选择上游 | 参与策略的上游列表 | 勾选多个上游 |
| 默认策略 | 是否设为默认 | 是 |
- 点击「确定」保存
策略优先级
可以配置多个策略,并设置优先级:
- 默认策略:未指定策略的查询使用默认策略
- 域名策略:为特定域名指定专用策略
- 类型策略:为特定查询类型指定策略
策略绑定
全局默认策略
在「策略配置」页面设置默认策略,所有未匹配的查询使用该策略。
域名指定策略
为特定域名指定解析策略:
- 进入「域名管理」→「域名列表」
- 点击域名进入详情
- 选择「策略绑定」标签
- 选择要使用的上游策略
健康检查
自动健康检查
DNS-Go 会自动检测上游 DNS 的健康状态:
- 检查方式:向每个上游发送测试查询
- 检查间隔:可配置(默认 30 秒)
- 故障判定:连续多次检查失败视为故障
- 自动恢复:故障节点恢复后自动加入服务
健康检查配置
- 进入「上游管理」→「健康检查」
- 配置检查参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
| 检查间隔 | 多久检查一次 | 30 秒 |
| 检查域名 | 用于探测的域名 | www.baidu.com |
| 超时时间 | 等待响应时间 | 5 秒 |
| 失败阈值 | 连续失败次数 | 3 次 |
健康状态查看
在上游列表页面可查看每个上游的健康状态:
- 🟢 健康:上游 DNS 正常工作
- 🔴 故障:上游 DNS 无法响应
- 🟡 未知:尚未完成健康检查
API 接口
获取上游列表
bash
GET /api/upstream/list?page=1&pageSize=20响应示例:
json
{
"code": 200,
"data": {
"list": [
{
"id": 1,
"name": "阿里云 DNS",
"server": "223.5.5.5",
"port": 53,
"protocol": "udp",
"weight": 100,
"health_status": "healthy",
"description": "阿里云公共 DNS"
}
],
"total": 5
}
}创建上游
bash
POST /api/upstream/create
Content-Type: application/json
{
"name": "阿里云 DNS",
"server": "223.5.5.5",
"port": 53,
"protocol": "udp",
"weight": 100,
"description": "阿里云公共 DNS"
}获取上游健康状态
bash
GET /api/upstream/list/health执行健康检查
bash
POST /api/UpstreamHealthCheck/check最佳实践
上游配置建议
生产环境推荐配置:
上游列表:
1. 阿里云 DNS (223.5.5.5) - 权重 100
2. 腾讯云 DNS (119.29.29.29) - 权重 100
3. 114 DNS (114.114.114.114) - 权重 50
策略配置:
- 默认策略:轮询(使用以上 3 个上游)
- 健康检查:启用
- 检查间隔:30 秒高可用架构
多地域部署:
地域 A 上游:
- 阿里云 DNS
- 本地运营商 DNS
地域 B 上游:
- 腾讯云 DNS
- 本地运营商 DNS
策略配置:
- 地域 A 使用策略 A
- 地域 B 使用策略 B故障转移配置
关键业务配置:
策略类型:故障转移
上游顺序:
1. 主 DNS:内部 DNS 服务器
2. 备 DNS 1:阿里云 DNS
3. 备 DNS 2:114 DNS
健康检查:启用
自动切换:启用故障排查
上游 DNS 无法访问
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 连接超时 | 网络不通或防火墙 | 检查网络连接和防火墙规则 |
| 拒绝响应 | 上游限制查询 | 更换其他上游或联系服务商 |
| 解析错误 | 上游返回错误 | 检查查询域名是否有效 |
策略不生效
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 使用单上游 | 策略中只有一个可用上游 | 检查其他上游健康状态 |
| 全部故障 | 所有上游都不可用 | 检查网络连接和上游配置 |
| 配置未保存 | 策略修改后未保存 | 确认保存并应用策略 |
性能优化
缓存策略
配合缓存配置优化查询性能:
- 启用查询结果缓存
- 设置合理的 TTL
- 预加载常用域名
超时配置
根据网络环境调整超时时间:
- 内网环境:1-2 秒
- 公网环境:3-5 秒
- 海外上游:5-10 秒