Skip to content

Release v0.82.0

Latest

Choose a tag to compare

@github-actions github-actions released this 12 Jul 19:36

v0.82.0 — 上游同步、DNSCrypt 迁移与 quic-go 0.60 对齐

本版本同步上游至 5235b4c,纳入 AdguardTeam/dnsproxy 的 DNSCrypt 官方库迁移、DoH/DoT 行为修正、FORMERR 与读取限制等更新;工具链升至 Go 1.26.5quic-go v0.60.0(govulncheck 清零)。标签 v0.82.0 指向本 release 提交;核心 DNS 逻辑以 19800a8(quic-go 对齐)为准,README 清理在本 tag 提交。

亮点

  • 上游:DNSCrypt → AdguardTeam/dnscrypt;DoH 请求 ID 置 0(RFC 8484);FORMERR 响应;读取大小限制(AGDNS-4074);DoT ALPN dot;清除上游 AA 位;上游响应校验更严格。
  • 工具链:Go 1.26.5quic-go v0.60.0(修复 GO-2026-5856 / GO-2026-5676)。
  • 本 fork 保留:PPv2、DoH HTTP/3 Mutex+Lock 串行化(9b12982 方案延续)、DoQ streamOpenMu、GHCR 镜像、TCP/TLS 优雅关闭。

行为变更

DNSCrypt 库迁移(上游 AGDNS-4107)

依赖由 ameshkov/dnscrypt/v2 切换为 github.com/AdguardTeam/dnscrypt。协议语义应对齐;若使用 DNSCrypt 上游或服务端,升级后请做一次连通性验证。

DoH 请求 ID(上游 AGDNS-4080)

DoH 出站 pack 后将 DNS header ID 设为 0(缓存友好);响应若为非零 ID 则拒绝,校验通过后恢复为原请求 ID。对不符合 RFC 8484 的 DoH 上游更严格。

FORMERR 与读取限制

  • 非法请求(如 question 数量 ≠ 1)返回 FORMERR;UDP unpack 失败但有有效 header 时也回 FORMERR,而非静默丢弃。
  • DoH POST body 与上游响应体使用 LimitReaderdns.MaxMsgSize),降低超大报文耗尽资源的风险。

DoT ALPN(上游 AGDNS-4210)

DoT TLS 配置增加 NextProtos: ["dot"],与 NextDNS 等非标准端口等场景对齐。

上游响应语义

  • 代理转发时清除 AA(Authoritative) 位。
  • 上游返回 nil 或 question 数量 ≠ 1 时生成 SERVFAIL(fail-closed;不再补构造 question)。

依赖与安全

  • Go 1.26.3 → 1.26.5
  • quic-go 0.59.0 → 0.60.0(与上游一致;降回 0.59.0)

Fork 专属行为(相对上游)

DoH HTTP/3 — 串行化 RoundTrip(延续 v0.81.10)

上游在 RoundTrip 全程使用 sync.RWMutexRLock。本 fork 仍使用 sync.Mutex:整次 RoundTrip(含 OnlyCachedConn 与拨号)在 Lock 下执行;仍使用 quic.DialAddrEarly,0-RTT 语义不变。经同一 DoH upstream 实例的 HTTP/3 查询会串行化。

沿用自更早 fork 版本

  • 监听侧 PPv2(TCP/TLS)。

v0.82.0 — Upstream sync, DNSCrypt migration, quic-go 0.60

Highlights (EN)

  • Upstream sync through 5235b4c: official DNSCrypt lib, DoH ID=0 (RFC 8484), FORMERR, read limits, DoT ALPN, clear AA bit, stricter upstream validation.
  • Toolchain: Go 1.26.5, quic-go v0.60.0 (govulncheck clean).
  • Fork unchanged: PPv2, DoH HTTP/3 full RoundTrip mutex, DoQ streamOpenMu, GHCR.

Behavior changes (EN)

  • DNSCrypt: AdguardTeam/dnscrypt replaces ameshkov/dnscrypt/v2.
  • DoH: outbound ID set to 0; non-zero response IDs rejected then restored after validation.
  • FORMERR / LimitReader: standard errors for bad requests; bounded body reads.
  • DoT ALPN: NextProtos: ["dot"].
  • Responses: AA cleared on forward; nil or bad upstream → SERVFAIL.

Fork-specific (EN)

DoH HTTP/3. Same as v0.81.10: sync.Mutex for full RoundTrip (upstream uses RLock); DialAddrEarly unchanged. Serialize queries on the same upstream instance.
Carried forward: PPv2, DoQ streamOpenMu, GHCR.

Operational notes (EN)

  • DoH3: serialized per upstream instance; H2 DoH / DoT / DoQ / UDP unaffected.
  • DoH upstreams must comply with RFC 8484 ID semantics.
  • DoT: ALPN dot required by some providers.
  • DoQ idle / DNS cache DO / PPv2: same as v0.81.10.
  • Image: ghcr.io/fcchbjm/dnsproxy:v0.82.0.

Upgrade notes (EN)

Drop-in for most users. Validate DNSCrypt and non-standard DoH/DoT if you rely on them. Review DoH3 concurrency only on a single DoH3 upstream object.
Full changelog: v0.81.10...v0.82.0