Skip to content

altendorfme/yadnsb

Repository files navigation

YaDNSb - Yet Another DNS Benchmark

Forks Stars Issues

A DNS performance testing IPv4, IPv6, DNS over HTTPS (DoH), DNS over TLS (DoT), and DNS over QUIC (DoQ).

Public Instance:

Get it on Shiper

Installation

1. Docker

docker run -d \
  --name yadnsb \
  -p 3000:3000 \
  --restart unless-stopped \
  ghcr.io/altendorfme/yadnsb:latest
services:
  yadnsb:
    image: ghcr.io/altendorfme/yadnsb:latest
    container_name: yadnsb
    restart: always
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: wget --no-verbose --tries=1 --spider http://localhost:3000/ || exit 1
      interval: 15s
      timeout: 5s
      retries: 3
      start_period: 15s
    ports:
      - 3000:3000

2: Local

Prerequisites

  • Node.js 22 or higher
  • npm or yarn package manager
  1. Clone or download the project files
  2. Install dependencies:
npm install
  1. Start the server:
npm start
  1. Open your browser and navigate to:
http://localhost:3000

Usage

Basic Testing

  1. Select DNS Providers: Choose from the list of pre-configured DNS providers
  2. Configure Protocols: Select which DNS protocols to test (IPv4, IPv6, DoH, DoT, DoQ)
  3. Set Test Domains: Use preset domains or add custom ones
  4. Configure Test Parameters:
    • Interval between requests (seconds)
    • Number of tests per provider
  5. Start Benchmark: Click "Start Benchmark" to begin testing

Advanced Configuration

Custom Domains

Enter custom domains in the text area, one per line:

example.com
mysite.org
test.net

Protocol Filtering

Filter providers by supported protocols:

  • IPv4: Traditional DNS over UDP/TCP
  • IPv6: IPv6 DNS resolution
  • DoH: DNS over HTTPS (RFC 8484)
  • DoT: DNS over TLS (RFC 7858)
  • DoQ: DNS over QUIC (RFC 9250) - Note: Limited implementation

Provider Categories

Filter by provider type:

  • Public: General-purpose DNS servers
  • Security: Security-focused with threat blocking
  • Family: Family-safe with content filtering
  • Privacy: Privacy-focused DNS services

Results Analysis

The results table shows:

  • Rank: Performance ranking
  • Provider: DNS provider name and protocol
  • Min/Median/Average/Max: Response time statistics
  • Success Rate: Percentage of successful queries
  • Tests: Number of successful/total tests

Data Export

Export test results in two formats:

  • JSON: Complete data including raw results and statistics
  • CSV: Tabular format suitable for spreadsheet analysis

API Endpoints

REST API

  • GET / - Main application interface
  • POST /api/test - Perform single DNS test
  • GET /api/providers - Get DNS providers list
  • GET /api/health - Health check endpoint
  • GET /locales/:lang.json - Language files

WebSocket API

  • /ws - Real-time test updates and progress

Development

Adding New DNS Providers

Edit public/data/dns-providers.json:

{
  "name": "Provider Name",
  "servers": [
    {"type": "IPv4", "address": "1.2.3.4", "port": 53},
    {"type": "DoH", "address": "https://dns.example.com/dns-query", "port": 443}
  ]
}

Development Mode

Run with auto-restart on file changes:

npm run dev

Limitations

  • DoQ Support: Limited implementation due to QUIC protocol complexity
  • IPv6 Testing: Requires IPv6 network connectivity

Star History

Star History Chart


Made with ❤️! If you have questions or suggestions, open an issue and we'll help! 😉

About

A DNS performance testing IPv4, IPv6, DNS over HTTPS (DoH), DNS over TLS (DoT), and DNS over QUIC (DoQ).

Topics

Resources

License

Stars

Watchers

Forks

Packages