VXVX Docs

DNS

DnsConfig、服务器与劫持

DNS 在 ServerConfig.dnsDnsConfig)中配置。模式定义:protos/proto/vx/dns/dns.proto

dnsServers 定义具名上游;concurrentDnsServers / serialDnsServers 可将多个上游组合为新的具名服务器;internalResolverrequestDomainResolver 通过名称引用这些服务器。dnsHijack 为被劫持的 DNS 查询选择上游。

DnsConfig

records

静态域名记录,在查询其他上游之前由本地静态服务器应答。

recordStrings
string[]

以标准 DNS RR 文本格式编写的静态记录(如 www.example.com. 3600 IN A 192.0.2.1),与 records 等效,便于粘贴整行记录。

dnsServers

具名 DNS 上游定义。每条须设置唯一的 name 及一种服务器类型(type oneof)。

internalResolver

出站拨号时解析域名所用的解析器。

requestDomainResolver

路由调度器解析请求域名时使用的解析器。

concurrentDnsServers

将多个已定义的 DNS 服务器并行查询,组合为新的具名服务器。

serialDnsServers

按顺序尝试多个已定义的 DNS 服务器,组合为新的具名服务器。

dnsHijack

DNS 劫持。

Record

domain
string

主机名

ip
string[]

静态 IP 应答。IPv4 生成 A 记录,IPv6 生成 AAAA 记录。

proxiedDomain
string

非空时为本域生成指向 proxiedDomain 的 CNAME,而非直接返回 ip

Resolver

解析器通过 dnsServers 中的名称引用 DnsServerConfigConcurrentDnsServerSerialDnsServer。多个名称时按串行方式依次尝试。

dnsServers
string[]

要使用的具名 DNS 服务器列表

interval
uint32

串行尝试时,两次查询之间的等待时间(

name
string

解析器名称

ConcurrentDnsServer

dnsServers
string[]

并行查询的具名 DNS 服务器名称

name
string

组合服务器的名称,供 Resolver.dnsServersDnsRuleConfig.dnsServerName 引用

SerialDnsServer

dnsServers
string[]

按顺序尝试的具名 DNS 服务器名称

interval
uint32

当前服务器失败后,等待多久再尝试下一个(

name
string

组合服务器的名称

DnsServerConfig

每条服务器有唯一的 name

plainDnsServertlsDnsServerdohDnsServerquicDnsServerfakeDnsServergoDnsServeremptyDnsServer 只能指定其中一项。

name
string

服务器名称;被解析器、组合服务器与 DNS 规则引用

不可以使用hijack作为名称

plainDnsServer

传统 UDP DNS(可选 TCP)

tlsDnsServer

DNS over TLS (DoT)

dohDnsServer

DNS over HTTPS (DoH)

quicDnsServer

DNS over QUIC (DoQ)

fakeDnsServer

Fake IP 池,为匹配域名分配假地址

goDnsServer

Go 标准库系统解析器

emptyDnsServer

空解析器,不返回上游结果

clientIp
string

EDNS 客户端子网(ECS)中发送的客户端 IP

cacheDuration
uint32

应答缓存时长()。0 时使用应答中的最小 TTL。

ipTags
string[]

仅保留落在这些 geo IP 集合内的应答地址;其余 IP 会被丢弃

PlainDnsServer

addresses
string[]

上游地址,格式 host:port(通常端口 53

useDefaultDns
bool

true 时使用系统默认网卡的 DNS 服务器;网卡 DNS 变化时自动更新。无可用系统 DNS 时回退到 addresses

TlsDnsServer

addresses
string[]

DoT 上游地址,格式 host:port(通常端口 853

DohDnsServer

url
string

DoH 端点 URL(如 https://dns.google/dns-query

QuicDnsServer

address
string

DoQ 上游地址(host:port

FakeDnsServer

poolConfigs

Fake IP 地址池配置。同一 IP 版本(IPv4 / IPv6)不宜配置多个重叠池。

PoolConfig

cidr
string

假 IP 地址池的 CIDR(如 198.18.0.0/15

lruSize
uint32

池内域名 → 假 IP 映射的 LRU 容量

GoDnsServer

使用操作系统 / Go 默认解析路径。它的流量不经过调度器,直接发出。本类型通常用于服务端

EmptyDnsServer

永远返回空解析。

DnsHijackConfig

dnsRules

按域名、集合与查询类型将劫持的 DNS 请求路由到指定 dnsServerName。规则按顺序匹配。

若有此配置,那么一个叫 hijack 的DNS Server将被添加。同时,一个名为 dns 的出站将被添加,这样就可以在 路由规则中指定 dns 出站来劫持DNS流量

DnsRuleConfig

dnsServerName
string

目标 DnsServerConfig.name(或组合服务器名称)

geoDomains

匹配查询名

domainTags
string[]

匹配属于这些 geo 域名集合的查询名

includedTypes

限制的查询类型。

ruleName
string

调试与展示用标签

DnsType

proto 定义的 DNS 查询类型枚举,包括 DnsType_ADnsType_AAAADnsType_CNAMEDnsType_HTTPSDnsType_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"
        }
      ]
    }
  }
}

相关

  • Geo — 规则与服务器上的 domainTagsipTags
  • 路由fakeIp 与域名解析规则
  • 拨号器工厂useInternalResolver

评论