上游服务器管理¶
上游 (Upstream) 是你的 DNS 查询在经过 Load Ants 加密和路由决策后的最终目的地。合理地配置上游,是保证 DNS 解析服务高可用和高性能的关键。
一个类比:分配任务的"工作小组"¶
你可以将 Load Ants 的上游管理机制想象成一个办公室里的项目管理场景:
- DoH 服务器 (
servers
): 就像是办公室里的一个个"组员"。每个组员都有自己的工作地址(URL)。 - 上游组 (
upstream_groups
): 就像是为了完成特定目标而建立的"工作小组"。你可以创建多个小组,例如"谷歌组"、"阿里组"、"抗污染专用组"等。 - 负载均衡策略 (
strategy
): 就像是"小组组长"分配任务的方式。组长需要决定下一个进来的任务(DNS 查询)应该交给哪个组员来处理。
Load Ants 就是这位高效的"管理者",它根据你设定的策略,智能地将查询分发给组内的各个服务器。
负载均衡策略 (strategy
)¶
为每个上游组选择合适的策略,可以帮助你实现不同的目标,如性能、隐私或故障转移。
策略名称 | 工作方式 | 最佳适用场景 |
---|---|---|
roundrobin |
轮询:像发牌一样,按顺序将请求依次分配给组里的每个服务器。1 号发完发 2 号,2 号发完发 3 号,一轮结束后再从 1 号开始。 | 当组内所有服务器性能相近时,用它来平均分配负载是最公平、最简单的。 |
weighted |
加权轮询:根据你为每个服务器设定的"权重"(weight )来分配请求。权重越高的服务器,接到的请求就越多。 |
当组内服务器性能或可靠性不同时。例如,你可以让一台高性能的主服务器承担 80% 的流量,另一台备用服务器承担 20%。 |
random |
随机:完全随机地从组里挑选一个服务器来处理请求,没有任何固定顺序。 | 当你希望增强隐私性时。随机选择可以打乱查询模式,让外部更难追踪你的 DNS 行为。 |
连接到私有服务:认证支持¶
除了连接到公共 DoH 服务器,Load Ants 还支持与需要认证的私有 DoH 提供商安全通信。这对于企业内部或个人搭建的私有 DNS 服务非常有用。
- 支持的认证方式:
- HTTP 基本认证 (
Basic Auth
): 使用用户名和密码进行验证。 - Bearer 令牌认证 (
Bearer Token
): 使用一个访问令牌进行验证。
- HTTP 基本认证 (
你可以在上游组配置中为特定的服务器组轻松添加认证信息。
资源优化:共享的连接池¶
为了最大化性能并减少资源消耗,Load Ants 在内部为所有上游组维护一个共享的 HTTP 客户端连接池。
这意味着,即使你配置了数十个不同的上游服务器,Load Ants 也会智能地复用与这些服务器的底层 TCP/TLS 连接。这带来了几个好处:
- 减少延迟:避免了为每个新请求都重新进行 TCP 和 TLS 握手的开销。
- 降低 CPU 和内存使用:更少的连接数意味着更少的系统资源占用。
- 提升吞吐量:连接复用是实现高并发 DoH 请求的关键。
这个优化过程是自动且透明的,无需任何额外配置。
配置示例¶
让我们看一个包含多个上游组和不同策略的配置:
upstream_groups:
# 上游组 1: 公共 DNS,用于日常使用
- name: "public_dns"
# 策略: 轮询,平均分配请求
strategy: "roundrobin"
servers:
- url: "https://223.5.5.5/dns-query" # 阿里 DNS
- url: "https://1.12.12.12/dns-query" # 腾讯 DNS
# 上游组 2: 高性能服务器组,主备模式
- name: "high_performance"
# 策略: 加权,让 server_1 处理大部分请求
strategy: "weighted"
servers:
- url: "https://main-server.com/dns-query"
weight: 80 # 主服务器,权重 80
- url: "https://backup-server.com/dns-query"
weight: 20 # 备用服务器,权重 20
# 上游组 3: 注重隐私的服务器组
- name: "private_dns"
# 策略: 随机选择,打乱查询模式
strategy: "random"
servers:
- url: "https://dns.google/dns-query"
- url: "https://cloudflare-dns.com/dns-query"
# 在路由规则中,你可以根据需要将不同的域名指向这些不同的上游组
static_rules:
- match: "wildcard"
patterns: ["*.internal.corp"]
action: "forward"
target: "high_performance" # 内部服务使用高性能组
- match: "wildcard"
patterns: ["*"]
action: "forward"
target: "public_dns" # 其他所有查询使用公共 DNS 组
通过将服务器分组并应用不同策略,你可以构建一个高度定制化、既可靠又高效的 DNS 解析系统。