No operator needs a session key to stop a tunnel: discard the packets on the path and it fails, while the cryptography stays exactly as strong as its design promised. Encryption protects what a conversation carries, not the willingness of any network to carry it. Separating those two properties turns an argument about unblockability into a question about which policy is in force and how far it reaches. The comparison below keeps availability and confidentiality apart, because most confident claims about VPN blocking quietly merge them.

Reachability is a decision the path makes

Every transport depends on a path that forwards packets, and every policy question here reduces to that forwarding decision. A rule that drops packets changes availability without touching confidentiality, which is how a tunnel can be flawlessly encrypted and completely unusable at the same moment. Nothing about that outcome requires breaking a cipher or recovering a key. It only requires control over the path.

Confusion usually starts with two properties sharing one word. Strong cryptography speaks to who can read a flow; it says nothing about whether a middlebox will pass it. A claim that a VPN cannot be blocked therefore needs a second claim underneath it, namely that nobody on the path is willing to drop the packets.

Enforcement styles, and the price of each

Three styles cover most real policies, and they differ in what they must know, what they cost to run and who else suffers. Each one can deny a tunnel without decrypting anything. The differences matter because the same word, blocking, is used for all three.

StyleDefaultWhat it must knowWho else is affected
BlocklistAllow, minus listed destinationsAddresses and ports of known endpointsUnrelated tenants on a listed address
AllowlistDeny, plus approved destinationsA maintained definition of permitted trafficAnything outside the approved set
ShutdownDeny broadly for a periodNothing about the protocolOrdinary services along the same path

That table is a cost map rather than a ranking. A blocklist is cheap to start and expensive to keep accurate, an allowlist trades discovery for maintenance of the allowed set, and a shutdown needs no classification at all. What separates them is not technical sophistication but where each one puts the ongoing effort. A policy that looks simple on paper usually has a maintenance line hidden somewhere else.

A blocklist is bounded by how well an address names a service

A blocklist denies destinations that have already been identified and leaves the rest generally available. Enforcing it needs addresses and ports, not plaintext, which is what makes it cheap to operate at first. The cost arrives later, because a range that once identified one provider can end up hosting a dozen unrelated tenants. Every address change forces a list edit, and every stale entry takes innocent traffic with it.

Precision on this model is limited by how well a destination identifies a service, and a busy shared endpoint is a poor identifier. That is a structural limit rather than an implementation defect, so better tooling does not remove it. It also explains why blocklists tend to grow: each new endpoint looks like a small addition, and the collateral grows with the list.

An allowlist moves the maintenance burden

An allowlist inverts the default so that only the destinations or traffic types chosen in advance can pass. It does not have to enumerate every prohibited endpoint, which helps when the prohibited set is large or changes quickly. What it needs instead is a maintained definition of what is permitted, plus enforcement that matches that definition.

Port numbers are the usual weak point in such a definition. Allowing a port is not the same as identifying every application that can use it, so a port-based allowlist often admits more than its author intended. Protocol fingerprints have the same problem from another angle, because they identify a shape of traffic rather than an intent. An allowlist is therefore not automatically more precise than a blocklist, it is precise about a different thing.

What one observation can and cannot support

Any claim about blocking should be read with four questions in hand: which access networks, which destinations, which protocols and which observation period. A failure seen on one mobile network today says nothing about the same endpoint from a different network tomorrow. A tunnel that worked once says nothing about sustained availability either.

The shape of a failure can be observed before you theorise about its cause. A silent hang, an immediate refusal and a reset after connecting point at different enforcement styles, and two commands separate them:

curl -sS -m 8 https://vpn.example.com/ -o /dev/null -w "%{http_code}\n"
traceroute -n -m 8 vpn.example.com

A hang that ends in a timeout suggests silent discard, a fast refusal suggests a rejecting device on the path, and a reset after connecting suggests stateful interference rather than a missing route. The RFC 9505 survey of censorship techniques describes the control points and interference patterns behind those shapes. None of them tells you how widely the policy applies, though. Permanence is a stronger claim than reachability: endpoints, software, policies and permitted services all change, so indefinite effectiveness needs assumptions about continuing enforcement rather than a list of addresses seen at one moment.

Ngaahi tokoni fekau'aki