Skip to content

transport: add vaydns - #36

Open
bloodflow3r wants to merge 1 commit into
GFW-knocker:mainfrom
bloodflow3r:feat/vaydns-transport
Open

transport: add vaydns#36
bloodflow3r wants to merge 1 commit into
GFW-knocker:mainfrom
bloodflow3r:feat/vaydns-transport

Conversation

@bloodflow3r

@bloodflow3r bloodflow3r commented Mar 22, 2026

Copy link
Copy Markdown

Adds VayDNS as a new transport alongside the existing dnstt transport. Client-side only. Can be used with any outbound protocol.

VayDNS is a dnstt fork with additional features: per-query UDP sockets, forged response filtering, rate limiting, QNAME constraints, configurable timeouts, and dnstt wire compatibility mode.

Config

{
  "outbounds": [
    {
      "protocol": "socks",
      "settings": {
        "servers": [{"address": "1.1.1.1", "port": 53}]
      },
      "streamSettings": {
        "network": "vaydns",
        "vaydnsSettings": {
          "serverPublicKey": "hex-encoded-pubkey",
          "serverAddress": "t.example.com",
          "rps": 200,
          "maxNumLabels": 2
        }
      }
    }
  ]
}

Available settings

Field Type Description Default
serverPublicKey string Server public key (hex) required
serverAddress string Tunnel domain required
resolverType string Resolver type (udp) udp
dnsttCompat bool Use original dnstt wire format false
clientidSize int ClientID size in bytes 2
maxQnameLen int Max QNAME wire length 101 (253 with dnsttCompat)
maxNumLabels int Max data labels (sub-domains before tunnel domain) 0 (unlimited)
rps float DNS query rate limit per second 0 (unlimited)
idleTimeout string Session idle timeout 10s (2m with dnsttCompat)
keepalive string Keepalive ping interval 2s (10s with dnsttCompat)
maxStreams int Max concurrent streams 256
udpWorkers int Concurrent UDP workers 100
udpTimeout string Per-query UDP timeout 400ms
udpSharedSocket bool Use single shared UDP socket false
udpAcceptErrors bool Pass through DNS error responses false

Only serverPublicKey and serverAddress are required. All other fields use sensible defaults.

Add VayDNS as a new transport alongside the existing dnstt transport.
VayDNS is a DNS tunnel fork with per-query UDP sockets, forged response
filtering, rate limiting, QNAME constraints, configurable timeouts, and
dnstt wire compatibility mode.

Config fields: serverPublicKey, serverAddress, resolverType, dnsttCompat,
clientidSize, maxQnameLen, maxNumLabels, rps, idleTimeout, keepalive,
maxStreams, udpWorkers, udpTimeout, udpSharedSocket, udpAcceptErrors.
@bloodflow3r
bloodflow3r force-pushed the feat/vaydns-transport branch from 7a51458 to 0ea6875 Compare March 22, 2026 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant