mrkeyoor.com_
Tue 01 Sept 17:44 UTC
Self-Hostedevaluationupdated 31 Aug 2026

MasterDnsVPN review

MasterDnsVPN is a client and server pair that carries proxy traffic inside DNS queries and replies when ordinary network paths are restricted. Despite the name, it is not a conventional device-wide VPN: users point applications at its local SOCKS or TCP proxy, while a remote server answers on a delegated DNS subdomain.

+5 / 1dstars / 7d
Verdict

Our MasterDnsVPN run installed 9 packages in 22 seconds, built in 20 seconds, and passed all 36 tests in 14 seconds. That makes the Go source easy to trial, but the XOR default and invasive root installer keep it in the network-research category. Use it on a dedicated server with AES-GCM, pinned matching releases, and a tested rollback for every DNS change.

We ran it

Lab card: what happened when we ran MasterDnsVPNScreenshot of MasterDnsVPN (t.me/masterdnsvpn)
Install✓ · 22s9 packages
Build✓ · 20s
Tests✓ · 14s36 passed · 0 failed of 36 (go test)
Repo164 files~45,009 lines of source · 2.2 MB · 3 CI workflows

Answers from our run

Does MasterDnsVPN build from source?

Dependencies installed in 22 seconds (9 packages), and the build succeeded in 20 seconds. We cloned commit acbf1c6 into a clean Debian container with 3 CPUs and no project-specific setup.

Do MasterDnsVPN's tests pass?

Yes: 36 of 36 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use MasterDnsVPN?

Production users following sample security settings unchanged: both sample configs default to method 1, which the code identifies as XOR.

What are the alternatives to MasterDnsVPN?

dnstt, iodine. Our MasterDnsVPN run installed 9 packages in 22 seconds, built in 20 seconds, and passed all 36 tests in 14 seconds.

Setup2/5Fast Go build; real setup takes over DNS and port 53
Docs4/5Detailed multilingual setup and configuration tables
Community4/56,943 stars, 23 open items, and an active 2026-08-29 push
Maturity3/536 tests passed, but security defaults and session reports worry

Who it’s for

Network researchers testing DNS tunnels in controlled or heavily filtered environments.
Operators who own a domain, a public server, and the DNS records for both.
Users able to inspect systemd, firewall, resolver, and port 53 changes before installation.
Developers who can choose authenticated encryption and run their own connection burn-in tests.

Who it’s NOT for

Production users following sample security settings unchanged: both sample configs default to method 1, which the code identifies as XOR.
Shared servers whose existing DNS stack must remain untouched: the root installer may disable resolver services, kill the process holding port 53, and remove port 53 redirect rules.
People expecting a first-party Android or iOS VPN app: the README says neither exists and points to independent community clients.
Users who need all device traffic tunneled automatically: the documented client exposes SOCKS or TCP forwarding and requires each application or another panel to use that proxy.
Operators who cannot tolerate unresolved session drops: issue #202 reports a tunnel going silent after initial connections, although it used different client and server releases and has no confirmed cause.
Anyone using it without checking local law and network policy: the project describes itself as educational and research-oriented and warns that use outside tests may disrupt networking.

Setup reality

Our sandbox installed 9 Go packages in 22 seconds. The build succeeded in 20 seconds, and go test passed all 36 tests in 14 seconds with 0 failures. The commit acbf1c6 checkout had 164 files, about 45,009 source lines, and used 2.2 MB before installation.

A real deployment needs a public server, a short delegated subdomain, matching A and NS records, reachable TCP and UDP port 53, the generated key on both ends, and a usable resolver list. The local client listens on 127.0.0.1:18000 by default. Exposing it on 0.0.0.0 requires SOCKS authentication and a trusted firewall.

The automatic Linux installer must run as root. It installs system packages, claims port 53, changes systemd-resolved, may stop other DNS services, edits firewall rules, writes sysctl and file-limit settings, and installs a systemd unit. Review and pin the script before running it, preferably on a dedicated server.

Port 53 carries proxy traffic, not a device VPN

MasterDnsVPN sends application traffic through DNS queries to a server listening on port 53. The client exposes a local SOCKS4, SOCKS5, or TCP-forwarding endpoint, splits streams into protocol packets, and sends them through one or more DNS resolvers. The server reconstructs each stream and connects to its destination directly or through another SOCKS5 proxy. Applications must use the local proxy; the project does not install a general system tunnel.

The server also needs authoritative DNS delegation. The README tells operators to point an A record at the server, then delegate a short tunnel subdomain with an NS record. The client and server must use that same domain. Resolver behavior, packet loss, MTU, and filtering can differ by network, so the client tests candidates and can shift traffic among them. Our lab did not measure tunnel speed, loss recovery, or censorship bypass.

The root installer can terminate the port 53 owner

The automatic Linux script refuses to run without root. It installs networking tools, checks TCP and UDP port 53, disables known DNS services, edits systemd-resolved, and can send SIGKILL to a process that keeps the port. It also removes matching iptables, ip6tables, or nftables redirect rules before installing the MasterDnsVPN service. Those actions are visible in the script, but a one-line curl command makes them easy to overlook.

System changes continue after the port is free. The installer opens port 53 in UFW, firewalld, iptables, or nftables, writes /etc/sysctl.d/99-masterdnsvpn.conf, adds file-descriptor limits, enables a systemd unit, and prints the generated key. Its uninstaller restores a saved systemd-resolved file and removes its own tuning files, but deliberately leaves firewall rules in place. Run it on a dedicated host or reproduce the steps manually after review.

What happened when we ran it

Our sandbox installed commit acbf1c6 in 22 seconds, adding 9 Go packages. The build completed in 20 seconds. go test then passed all 36 tests in 14 seconds with 0 failures. We used an unprivileged Debian container with 3 CPUs, 8 GB of RAM, the golang:1.24-bookworm image, and no secrets.

The checkout had 164 files, about 45,009 source lines, and occupied 2.2 MB. Our scan found 3 CI workflows, no root Dockerfile, and no dedicated tests directory. The repository does contain many _test.go files and a nested docker/Dockerfile, which explains how the Go suite can pass while those top-level signals remain absent. None of these results tests a delegated domain, public resolver, SOCKS application, or long-running session.

The 36 passing tests cover source behavior under the project's fixtures, not the benchmark claims in its README. We did not download 10 MB through the tunnel, compare another DNS tunnel, or measure performance during packet loss. A buyer should test the actual resolver set, destination mix, and network restrictions that matter, using the same client and server commit on both ends.

Six encryption modes include an XOR default

The source defines 6 methods: none, XOR, ChaCha20, and AES-128-GCM, AES-192-GCM, or AES-256-GCM. Both sample configurations set DATA_ENCRYPTION_METHOD = 1, which selects XOR. Invalid server values are also normalized to method 1. XOR is obfuscation rather than suitable confidentiality, and method 0 sends decoded payloads without encryption.

Method 2 uses the Go package's unauthenticated ChaCha20 stream cipher, so it does not provide the tamper detection of an AEAD mode. Methods 3 through 5 use AES-GCM and reject changed ciphertext during authentication. Client and server settings must match, and the client requires the shared key. The server creates encrypt_key.txt with mode 0600, but operators still need a safe channel to copy and rotate it.

One open report describes a silent session cutoff

Issue #202 reports that initial SOCKS connections worked before every stream went quiet and later hit a terminal ACK timeout. The reporter reproduced it with several resolver choices and two encryption modes. The server used the 2026-06-13 release while the Windows client used a 2026-05-10 build, and the issue offers a network-filtering suspicion rather than a confirmed project defect. It remains open without a maintainer diagnosis.

That report is enough to justify a burn-in test, not enough to declare current sessions broken. Keep client and server on the same pinned release, record logs on both sides, and test longer than a quick page load. The README also says there is no official Android or iOS application. Its mobile methods expose the proxy from a computer or intermediate server, which adds another network boundary and must use authentication when listening beyond localhost.

Twenty-three open items accompany current source work

GitHub reported 6,943 stars and 23 combined open issues and pull requests. The latest tagged release was published on 2026-06-13, while source work continued with a push on 2026-08-29 that added handling for non-DNS UDP traffic. Recent reports and pull requests cover resolver selection, startup, Docker use, mobile integration, and session behavior. The later push matters more for health than the older tag alone.

dnstt is the closer comparison for a smaller SOCKS-oriented DNS tunnel, while iodine offers an older IP-over-DNS design. MasterDnsVPN earns a lab trial because its 22-second install and passing 36-test suite lower the source barrier. The deployment barrier is much higher: port 53 ownership, DNS delegation, resolver behavior, key selection, and system-wide installer changes all need an operator who can reverse them without losing the server's normal name resolution.

Alternatives

ProjectWhat it isPick it when
dnsttA GitHub mirror of a smaller DNS tunnel built around KCP, Noise, and a SOCKS interface.pick this instead when a narrower, older protocol is easier to audit than MasterDnsVPN's many tuning controls.
iodineA long-running IP-over-DNS tunnel with a smaller set of moving parts.pick this instead when interoperability and a conventional tun interface matter more than adaptive resolver routing.

What people are saying

  1. [github-trending] masterking32/MasterDnsVPN

Sources

  1. MasterDnsVPN README
  2. MasterDnsVPN repository metadata
  3. MasterDnsVPN latest release
  4. Linux server installer
  5. Sample server configuration
  6. Encryption codec implementation
  7. Encryption key handling
  8. Issue 202: silent session cutoff

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →