{"id":48987536,"url":"https://github.com/anonvector/dns-multiplexer","last_synced_at":"2026-04-18T13:11:31.411Z","repository":{"id":343288844,"uuid":"1177092960","full_name":"anonvector/DNS-Multiplexer","owner":"anonvector","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-09T22:32:29.000Z","size":13083,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-09T22:56:15.590Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anonvector.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-09T17:28:02.000Z","updated_at":"2026-03-09T22:40:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/anonvector/DNS-Multiplexer","commit_stats":null,"previous_names":["anonvector/dns-multiplexer"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/anonvector/DNS-Multiplexer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonvector%2FDNS-Multiplexer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonvector%2FDNS-Multiplexer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonvector%2FDNS-Multiplexer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonvector%2FDNS-Multiplexer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anonvector","download_url":"https://codeload.github.com/anonvector/DNS-Multiplexer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anonvector%2FDNS-Multiplexer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31970020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-18T13:11:28.070Z","updated_at":"2026-04-18T13:11:31.401Z","avatar_url":"https://github.com/anonvector.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DNS Multiplexer\n\nDNS proxy + tunnel manager for dnstt/noizdns. Scans resolvers for tunnel compatibility, picks the best ones, and keeps your tunnel running through them.\n\n## Install\n\n```bash\nbash \u003c(curl -Ls https://raw.githubusercontent.com/anonvector/DNS-Multiplexer/main/deploy.sh)\n```\n\nInteractive menu lets you pick:\n\n```\n  1) Proxy only    — DNS proxy for your own dnstt/slipnet client\n  2) Tunnel mode   — Full tunnel: users connect via SOCKS5 proxy\n```\n\n### Non-interactive\n\nTunnel mode:\n\n```bash\nbash \u003c(curl -Ls https://raw.githubusercontent.com/anonvector/DNS-Multiplexer/main/deploy.sh) \\\n  --auto --tunnel --profile \"slipnet://BASE64...\"\n```\n\nProxy only:\n\n```bash\nbash \u003c(curl -Ls https://raw.githubusercontent.com/anonvector/DNS-Multiplexer/main/deploy.sh) --auto\n```\n\n### Manual deploy (when GitHub is blocked)\n\n```bash\nscp -r dns-multiplexer/ root@SERVER:/opt/dns-multiplexer/\nssh root@SERVER\ncd /opt/dns-multiplexer\nbash deploy.sh\n```\n\n## How it works\n\n### Tunnel mode\n\n```\n[Users] --\u003e SOCKS5 :1080 --\u003e [slipnet] --\u003e DNS --\u003e [multiplexer 127.0.0.1:53] --\u003e [best resolver] --\u003e [dnstt-server]\n```\n\n1. Scans all resolvers for tunnel compatibility (score 0-6)\n2. Picks the top 20 and routes tunnel DNS through them\n3. Runs `slipnet` client as SOCKS5 proxy for users\n4. Re-scans periodically and swaps in better resolvers — no restart needed\n\n### Proxy mode\n\n```\n[dnstt-client] --\u003e DNS --\u003e [multiplexer :53] --\u003e [resolvers] --\u003e [dnstt-server]\n```\n\nLoad-balances DNS queries across upstream resolvers with health tracking.\n\n## Management\n\n```bash\ndns-mux --status      # Show status and logs\ndns-mux --restart     # Restart\ndns-mux --stop        # Stop\ndns-mux --logs        # Live logs\ndns-mux --uninstall   # Remove everything\n```\n\n## Run without installing\n\n```bash\n# Tunnel mode (auto-loads resolvers.txt from same directory)\n./dns-multiplexer -tunnel -tunnel-profile \"slipnet://...\"\n\n# Proxy mode\n./dns-multiplexer -f resolvers.txt\n\n# One-shot scan\n./dns-multiplexer -scan -scan-domain t.example.com -f resolvers.txt\n```\n\n## Resolver scanning\n\nEach resolver is tested for tunnel compatibility and scored 0-6:\n\n| Test | What it checks |\n|------|----------------|\n| NS   | NS delegation + glue records |\n| TXT  | TXT record support |\n| RND  | Random subdomain resolution |\n| DPI  | Encoded payload queries (tunnel realism) |\n| EDNS | EDNS0 buffer size (512/900/1232) |\n| NXD  | NXDOMAIN correctness |\n\n## Flags\n\n### Tunnel mode\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `-tunnel` | | Enable tunnel mode |\n| `-tunnel-profile` | | `slipnet://` URI or file path |\n| `-tunnel-listen` | `0.0.0.0:1080` | SOCKS5 address for users |\n| `-tunnel-type` | `dnstt` | `dnstt` or `noizdns` (auto-detected from profile) |\n| `-tunnel-domain` | | Tunnel domain (auto-detected from profile) |\n| `-tunnel-pubkey` | | Server public key (auto-detected from profile) |\n| `-tunnel-binary` | `slipnet` | Path to slipnet binary |\n| `-scan-interval` | `5m` | Re-scan interval |\n| `-scan-min-score` | `3` | Min score (0-6) to use a resolver |\n| `-scan-top` | `20` | Keep top N resolvers |\n| `-scan-workers` | `200` | Concurrent scan workers |\n\n### General\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `-listen`, `-l` | `0.0.0.0:53` | DNS proxy listen address (auto `127.0.0.1` in tunnel mode) |\n| `-resolver`, `-r` | | Upstream resolver (repeatable) |\n| `-resolvers-file`, `-f` | | Resolver list file |\n| `-doh` | | Use DoH upstream |\n| `-mode`, `-m` | `round-robin` | `round-robin` or `random` |\n| `-tcp` | | Also listen TCP |\n| `-cache` | | Enable DNS cache |\n| `-health-check` | | Periodic health checks |\n| `-stats` | | Log statistics |\n| `-cover` | | Cover traffic |\n| `-scan` | | One-shot scan mode |\n| `-scan-domain` | | Domain for scanning |\n\n## Build\n\n```bash\ngo build -o dns-multiplexer .\n\n# Cross-compile for Linux\nGOOS=linux GOARCH=amd64 go build -o bin/dns-multiplexer-linux-amd64 .\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanonvector%2Fdns-multiplexer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanonvector%2Fdns-multiplexer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanonvector%2Fdns-multiplexer/lists"}