You have an address, the port answers, and a client accepts it without complaint. None of that makes a Tor relay a VPN endpoint, and the mistake is expensive because the profile imports cleanly and fails later at the handshake. I use the four checks below in order; each one has a stop condition, and stopping early is the point. If the first check fails, the rest cannot help you.

Check what the port actually serves

An open port proves a listener, nothing more. A relay's ORPort speaks Tor's own cells after a TLS handshake, so a TLS probe that succeeds tells you almost nothing about whether a VPN protocol is accepted there:

nc -vz 203.0.113.20 443
openssl s_client -connect 203.0.113.20:443 -brief < /dev/null

Read the certificate rather than the fact that one exists. Relays present a self-signed certificate with a deliberately unremarkable name, because relay traffic is meant to resemble ordinary HTTPS; a VPN server certificate carries the name your profile expects. If the peer never answers the VPN protocol's first packet, no amount of profile editing will change the outcome.

Stop here if the address does not complete the handshake your client sends. That is a protocol answer, not a configuration problem, and it is the single most common reason an imported profile sits at connecting forever.

Check the relay role, not the size of the network

Relay roles do different jobs. A guard is the first hop for clients, a middle relay forwards circuits between other relays, an exit is the one that touches destinations, and a bridge is a non-public entry point handed out through BridgeDB. Tor's glossary keeps those definitions separate, and being reachable is part of every role while permission to serve arbitrary clients is part of none of them.

The exit policy is worth reading because it is the only part that resembles a forwarding rule, and it governs destinations the exit will allow out, not clients allowed in. A restrictive exit policy that blocks port 25 says something about outbound abuse control, not about whether you may point an OpenVPN client at the machine.

Stop if you are reasoning from reputation: because relays forward traffic, the address must accept yours. Tor selects paths through consensus and its own protocol; a VPN client is not a participant and has no circuit to join.

Check whether the SOCKS listener is local or public

Tor's client exposes a SOCKS interface for applications on the same machine, on loopback by default. That listener is a local convenience, not a service a relay offers to the internet, and treating it as a public proxy is how people end up running an open relay they did not intend:

ss -ltnp | grep 9050
curl --socks5-hostname 127.0.0.1:9050 https://check.torproject.org

The bind address is the tell. A SocksPort on 127.0.0.1:9050 is doing its job; one listening on 0.0.0.0 and reachable from outside is an open proxy, and Tor's own access policy controls exist precisely because that exposure is a problem rather than a feature.

For an application that needs Tor, point it at the loopback port and let Tor resolve names, which is what the socks5h form above does. Do not substitute a relay address for that port; the relay does not offer the interface your application is asking for.

Check that the VPN profile matches a real endpoint

A VPN profile is a bundle of expectations: OpenVPN needs the server certificate or CA, a client certificate and key, and usually a TLS key, while WireGuard needs the peer public key, an endpoint and allowed IPs. None of those can be derived from an address and an open port, which is why a profile built that way fails at the first exchange rather than at connect.

When you are handed a profile, verify it against an endpoint you control or a provider you can identify:

wg show
openvpn --config client.ovpn --verb 4

In the OpenVPN log, a TLS negotiation error names the mismatch directly; in wg show, a peer with no handshake line has never completed one. Both are more informative than the client's spinner, and both point at key material or protocol rather than at Tor.

Check which protection you actually need

This is the check that decides the architecture. Tor Browser gives you circuit isolation and fingerprinting defenses that a VPN does not; a VPN changes the address a destination sees and authenticates you to a provider. Choosing between them is a threat-model question, not a compatibility question, and mixing them up produces a setup that looks private and is not.

Chaining has an order. A VPN carrying Tor traffic is a supported arrangement, because Tor's client only needs outbound TCP. A VPN client tunneled inside Tor is not the same thing and is not what the Tor client implements, so do not plan around it.

Before you import anything, confirm all four:

  • The port completes your protocol's handshake, not just a TCP connect.
  • You know the role of the host and are not treating forwarding as permission.
  • The SOCKS listener you use is loopback and yours, not a public port on someone else's relay.
  • The profile's keys or certificates belong to the endpoint you are connecting to.

Qillqakuna t'inkisqa