OpenVPN really does use TLS, and people routinely extend that into a claim it cannot carry: that a tunnel therefore looks like a browser visiting a site. The first part is true. The second is not. TLS here belongs to a control channel that travels inside OpenVPN's own container, alongside a payload channel with entirely different cryptography, so whoever inspects the opening bytes sees OpenVPN.

Two conversations in one envelope

Think of a session as two conversations sharing one envelope. One validates certificates and derives key material. The other encrypts what you are actually sending, using what the first one produced.

The envelope is the protocol. Every packet starts with a small header naming its type, and that header arrives before anything else.

What actually arrives first

Because of that ordering, the first thing on the wire is not a TLS record. It is OpenVPN's header, followed by whichever channel's content the header announces. A ClientHello exists in there, just not at byte zero. No decryption is needed to notice the difference, because the shape alone gives it away.

Defaults matter here too. The flow is UDP to 1194 unless the profile selects TCP. Either way the outer appearance is a tunnel rather than a web request.

Three honest ways to change the shape

A TLS terminator such as stunnel accepts TLS on a port at each end and hands the decrypted stream to OpenVPN locally, so the network sees TLS to that port. A protocol that is TLS from the first byte behaves differently again: the AnyConnect-compatible exchange that ocserv implements resembles the corporate remote access many networks already expect. SSTP, which ships with Windows, has the same property in a different product.

On Linux, SSH's -w option carries a point-to-point link inside an SSH session, which is useful when SSH is the only permitted protocol. It is the cheapest of the four if SSH already works from that network, and the least useful if it does not.

What none of them changes

None of these changes what the tunnel can reach. They do not make a blocked address reachable, they do not authenticate anyone, and they do not decide routes.

A wrapper also costs you a component. Two listeners and two configuration files mean two places for a failure, and both look identical from the user's seat. Budget for that before adopting one. The session remains a single long-lived encrypted flow to one destination, and its volume and timing stay visible.

Diagnose first, then choose

So diagnose first. Dropped UDP is answered by TCP mode, and a recognised signature is answered by a different protocol or a wrapper. Picking a tool before you know the block is how people end up maintaining three layers that all fail for the same reason.

A network that permits only web ports narrows the choice to a TLS-based protocol on 443. Applying all three at once gives you a stack nobody can debug, so change one thing and retest the same flow.

If none of them applies, the accurate answer is that this network will not carry a tunnel for you. That is a finding rather than a failure of effort. Cycling through more options does not reverse a policy decision made upstream.

One boundary sits in front of all of it. Permission to run a tunnel on somebody else's network is a policy matter, decided separately from whether the mechanism functions. These facts explain what an observer sees, and they do not grant permission.

ተዛመድቲ ጽሑፋት