Skip to content

上游策略

上游策略是 DNS-Go 的核心功能之一,用于配置和管理递归查询时使用的上游 DNS 服务器,支持多种负载均衡策略实现高可用。

功能概述

上游策略模块提供:

  • 上游 DNS 管理:添加、编辑、删除上游 DNS 服务器
  • 健康检查:自动检测上游 DNS 可用性
  • 负载均衡策略:轮询、权重、故障转移等
  • 策略组管理:将多个上游组合成一个策略

上游 DNS 管理

添加上游 DNS

  1. 登录 Web 管理界面
  2. 进入「上游管理」→「上游列表」
  3. 点击「新增上游」按钮
  4. 填写上游信息:
字段说明示例
名称上游 DNS 标识阿里云 DNS
服务器地址DNS 服务器 IP223.5.5.5
端口DNS 服务端口53
协议UDP 或 TCPUDP
权重负载均衡权重100
描述可选说明阿里云公共 DNS
  1. 点击「确定」保存

常用上游 DNS 推荐

服务商主 DNS备 DNS特点
阿里云223.5.5.5223.6.6.6国内快速稳定
腾讯云119.29.29.29182.254.116.116国内优质
114 DNS114.114.114.114114.114.115.115中立安全
Google8.8.8.88.8.4.4全球服务
Cloudflare1.1.1.11.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 解析

工作方式:

  1. 优先使用主 DNS
  2. 主 DNS 故障时切换到备 DNS
  3. 主 DNS 恢复后切回主 DNS

最快响应(Fastest)

选择响应速度最快的上游 DNS。

适用场景:

  • 对延迟敏感的应用
  • 多地域部署环境

注意:

  • 需要定期探测各上游响应时间
  • 可能频繁切换上游

随机(Random)

随机选择一个上游 DNS。

适用场景:

  • 简单的负载均衡
  • 上游性能相近

策略配置

创建策略

  1. 进入「上游管理」→「策略配置」
  2. 点击「新增策略」按钮
  3. 填写策略信息:
字段说明示例
策略名称策略标识默认策略
策略类型轮询/权重/故障转移等轮询
选择上游参与策略的上游列表勾选多个上游
默认策略是否设为默认
  1. 点击「确定」保存

策略优先级

可以配置多个策略,并设置优先级:

  1. 默认策略:未指定策略的查询使用默认策略
  2. 域名策略:为特定域名指定专用策略
  3. 类型策略:为特定查询类型指定策略

策略绑定

全局默认策略

在「策略配置」页面设置默认策略,所有未匹配的查询使用该策略。

域名指定策略

为特定域名指定解析策略:

  1. 进入「域名管理」→「域名列表」
  2. 点击域名进入详情
  3. 选择「策略绑定」标签
  4. 选择要使用的上游策略

健康检查

自动健康检查

DNS-Go 会自动检测上游 DNS 的健康状态:

  • 检查方式:向每个上游发送测试查询
  • 检查间隔:可配置(默认 30 秒)
  • 故障判定:连续多次检查失败视为故障
  • 自动恢复:故障节点恢复后自动加入服务

健康检查配置

  1. 进入「上游管理」→「健康检查」
  2. 配置检查参数:
参数说明默认值
检查间隔多久检查一次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 秒

相关文档

基于 MIT 许可发布