VPN over DNS describes a transport idea, and it is not a synonym for pointing a device at a custom resolver. The question that settles the confusion is simple: what do the DNS messages actually carry? An ordinary VPN may install a resolver so covered applications can find private names, and changing that resolver changes name resolution only. Run the checks below in order, because the three arrangements share vocabulary and almost nothing else.

Separate the three arrangements

In the first arrangement, the VPN supplies a resolver or a name-policy setting. Application data still travels over its own network connections, and the tunnel only influences which server answers the lookup.

In the second, encrypted DNS protects the DNS exchange itself. DNS over HTTPS and DNS over TLS wrap queries to the chosen resolver, and they do not carry any other application's packets. They also do not hide the query names from the resolver you chose, which is a different trust boundary from hiding them from the local network.

In the third, a cooperating client encodes other data into DNS messages and a cooperating endpoint reconstructs it. The ordinary resolver path becomes the transport, and the resolver is now a component of the data path rather than a name service.

Check what the DNS messages carry

Change the resolver and observe whether the application's traffic path changes. If the application still connects to the same addresses over the same sockets, you changed name resolution and nothing more.

A DNS-carried tunnel needs a matching server-side arrangement. Iodine is a documented example: its project documentation describes an IP tunnel through DNS, and it requires a server component that understands the encoding. Entering a public resolver address in Android does not supply that endpoint, and a marketing term shared by two products is not a protocol specification.

A capture is the decisive check. If you see ordinary queries to the resolver and nothing else, there is no tunnel. If you see payload encoded into query names and responses, you have found the carrier, and the next question is how much it can move.

Check the capacity before you commit

DNS was designed for queries and answers, not bulk delivery. Encoding overhead, message-size limits, and resolver behavior all take a share of the nominal path, so useful capacity is lower than the underlying link suggests. Treat any throughput figure you have not measured on your own path as a hypothesis rather than a budget. Measure both directions, because upload and download can hit different limits on a request-response carrier.

The client also has to decide which traffic enters the tunnel. A local VPN-service interface can collect packets, but the interface says nothing about how the remote transport protects or forwards them. Fragmentation and retransmission behave differently when the carrier is a request-response protocol rather than a stream, and a connection that stays open says little about interactive latency.

Measure with the traffic you intend to carry. A tunnel that feels fine for a periodic heartbeat can be unusable for an interactive session, and the reverse is also true.

Check the security of the carrier

Do not assume that DNS encapsulation supplies confidentiality or strong authentication. The resolver path and the tunnel endpoint can see what the implementation exposes, and that exposure varies by design.

Encryption and the choice of carrier are separate properties. A tunnel can be encrypted over a plain IP path, and a DNS-carried tunnel can be built with or without protection for its payload. Keep application HTTPS in place regardless, and evaluate the tunnel's actual security design rather than its name.

If the requirement is privacy from the local network, encrypted DNS and a data tunnel answer different parts of it. Write down which observer you are defending against before you pick one.

Match the fix to the actual failure

For an ordinary slow VPN, substituting a DNS-carried tunnel adds a constrained transport on top of the problem. It does not repair radio quality, congestion, or server load, and it usually makes them more visible.

For private-name failures, inspect the intended resolver policy first: which server should answer, which names are in scope, and whether the client is allowed to use it. Then choose an authorized transport that matches the requirement, and keep the resolver configuration in the change record so the next incident does not restart the same search.

The checklist is short: identify the arrangement, confirm what the messages carry, measure capacity, then review trust. Any step that does not match the symptom means the other two arrangements are still in play.

Amanqephe ahlobene