DNS
DnsConfig、服务器与劫持
DNS 在 ServerConfig.dns(DnsConfig)中配置。模式定义:protos/proto/vx/dns/dns.proto。
dnsServers 定义具名上游;concurrentDnsServers / serialDnsServers 可将多个上游组合为新的具名服务器;internalResolver 与 requestDomainResolver 通过名称引用这些服务器。dnsHijack 为被劫持的 DNS 查询选择上游。
DnsConfig
recordStrings以标准 DNS RR 文本格式编写的静态记录(如 www.example.com. 3600 IN A 192.0.2.1),与 records 等效,便于粘贴整行记录。
Record
domain主机名
ip静态 IP 应答。IPv4 生成 A 记录,IPv6 生成 AAAA 记录。
proxiedDomain非空时为本域生成指向 proxiedDomain 的 CNAME,而非直接返回 ip。
Resolver
解析器通过 dnsServers 中的名称引用 DnsServerConfig、ConcurrentDnsServer 或 SerialDnsServer。多个名称时按串行方式依次尝试。
dnsServers要使用的具名 DNS 服务器列表
interval串行尝试时,两次查询之间的等待时间(秒)
name解析器名称
ConcurrentDnsServer
dnsServers并行查询的具名 DNS 服务器名称
name组合服务器的名称,供 Resolver.dnsServers 与 DnsRuleConfig.dnsServerName 引用
SerialDnsServer
dnsServers按顺序尝试的具名 DNS 服务器名称
interval当前服务器失败后,等待多久再尝试下一个(秒)
name组合服务器的名称
DnsServerConfig
每条服务器有唯一的 name。
plainDnsServer、tlsDnsServer、dohDnsServer、quicDnsServer、fakeDnsServer、
goDnsServer、emptyDnsServer 只能指定其中一项。
name服务器名称;被解析器、组合服务器与 DNS 规则引用
不可以使用hijack作为名称
clientIpEDNS 客户端子网(ECS)中发送的客户端 IP
cacheDuration应答缓存时长(秒)。0 时使用应答中的最小 TTL。
PlainDnsServer
addresses上游地址,格式 host:port(通常端口 53)
useDefaultDnstrue 时使用系统默认网卡的 DNS 服务器;网卡 DNS 变化时自动更新。无可用系统 DNS 时回退到 addresses。
TlsDnsServer
addressesDoT 上游地址,格式 host:port(通常端口 853)
DohDnsServer
urlDoH 端点 URL(如 https://dns.google/dns-query)
QuicDnsServer
addressDoQ 上游地址(host:port)
FakeDnsServer
PoolConfig
cidr假 IP 地址池的 CIDR(如 198.18.0.0/15)
lruSize池内域名 → 假 IP 映射的 LRU 容量
GoDnsServer
使用操作系统 / Go 默认解析路径。它的流量不经过调度器,直接发出。本类型通常用于服务端
EmptyDnsServer
永远返回空解析。
DnsHijackConfig
若有此配置,那么一个叫 hijack 的DNS Server将被添加。同时,一个名为 dns 的出站将被添加,这样就可以在
路由规则中指定 dns 出站来劫持DNS流量
DnsRuleConfig
dnsServerName目标 DnsServerConfig.name(或组合服务器名称)
ruleName调试与展示用标签
DnsType
proto 定义的 DNS 查询类型枚举,包括 DnsType_A、DnsType_AAAA、DnsType_CNAME、DnsType_HTTPS、DnsType_ANY 等。
示例
静态记录 + 直连 DoH + 劫持规则:
{
"dns": {
"records": [
{ "domain": "internal.example", "ip": ["10.0.0.1"] }
],
"dnsServers": [
{
"name": "doh",
"dohDnsServer": { "url": "https://dns.google/dns-query" }
}
],
"internalResolver": {
"dnsServers": ["doh"]
},
"requestDomainResolver": {
"dnsServers": ["doh"]
},
"dnsHijack": {
"enableFakeDns": true,
"dnsRules": [
{
"dnsServerName": "doh",
"domainTags": ["gfw"],
"includedTypes": ["DnsType_A", "DnsType_AAAA"],
"ruleName": "proxy-dns"
}
]
}
}
}