MultiOBX

How it works

What MultiOBX is built from

What this runs on and why it was built this way. Only what is in the code.

The base

The WireGuard protocol

The tunnel runs on WireGuard. Its cipher suite is fixed — ChaCha20-Poly1305 for traffic, Curve25519 for the key exchange — and there are no settings you could weaken by accident. The protocol is small, and its handshake has been formally verified.

The handshake fits into a single exchange of packets. So the connection comes up in a fraction of a second and survives a change of network: switch from Wi-Fi to mobile data and the tunnel carries on from where it was.

A service written in Rust

The service holds the tunnel and the firewall rules, and it is written in Rust. Not for fashion: it parses packets from strangers and runs with administrator rights, and in a program like that a memory bug is not a crash — it is somebody else's code inside your system. Most vulnerabilities in network software come from exactly those bugs, and Rust does not let you write them.

The app window lives separately and without administrator rights. It talks to the service over a Windows named pipe rather than a port on localhost, which a page open in your browser could have reached.

The gate goes up before the tunnel

Firewall rules are in place before a network adapter even exists.

Everything described in this section works with the firewall on. It is off by default, and deliberately so: until you know the program, a mistake of ours should not leave you without a network. Turn it on in the app: Settings, Protection.

The order of connecting Five steps in order: rules, adapter, handshake, DNS, then traffic allowed through the adapter. With the firewall on, the direct route out is closed from the first step and stays closed. 01 02 03 04 05 RULES ADAPTER HANDSHAKE DNS TRAFFIC THE DIRECT ROUTE OUT IS CLOSED, AND STAYS CLOSED TRAFFIC ENTERS THE TUNNEL
Between the first step and the last, not a single packet leaves the machine. The order is pinned by a test: change it and the build fails.

With the firewall on, a dropped link, an unreachable server or a tunnel restart do not open the network — only the "Disconnect" button does. With it off, a drop sends traffic out directly, and the app says so with a red mark.

There is also a lock mode: with it on, the internet does not work without the tunnel at all, even after you disconnect by hand. Useful on a laptop that wakes up in a café or a hotel.

Layers of rules

The layers traffic passes through Four plates stacked and numbered top to bottom: programs, the DNS layer, the tunnel layer, the Windows Filtering Platform rules. Traffic goes top to bottom; an attempt to leave around them runs into the bottom plate. 4 3 2 1 TRAFFIC AROUND
1Programs
Browser, mail, games. None of them knows what sits below, and none of them needs configuring.
2DNS layer
Name queries are handled apart from everything else. Only the resolver inside the tunnel and 127.0.0.1 are let out — even if you allowed the local network. There is a test for this.
3Tunnel
Everything that is not DNS goes inside WireGuard.
4WFP rules
In place before a network adapter exists. Only the Disconnect button takes them down — not a fault, not a dropped tunnel, not a restart.
DNS queries leave the machine separately from the rest of the traffic — they are the most common leak. The case that comes up more than any other: someone allows "local network" so the printer will work, the home router is also the local network, and the queries go through it to the ISP. The separate layer of rules closes that case.

The rule that permits the connection to our server is bound to the service's executable. No other program can send a packet to the server's address outside the tunnel.

All the rules live in the Windows Filtering Platform. Any program that can read WFP can see them, and they do not depend on whether the app window is open.

When the network throttles traffic

Office, hotel and mobile networks often restrict or slow UDP: the internet works, the tunnel does not come up. So there is more than one way to connect, and the app tries them in turn.

Plain UDP
WireGuard as it is meant to run, and the fastest. Works at home and on almost every mobile network.
Over TCP, port 443
The same tunnel inside a TCP connection on port 443. That port is open nearly everywhere, because ordinary websites use it.
Through two servers
Traffic enters one server and leaves through another. The first sees your address but not where you are going; the second, the other way round. Available when there is more than one server.
Through a network of anonymous relays
The connection passes three relays, and none of them knows both the sender and the destination. Slower than the rest, but no server of ours is in the path. Nothing separate to install.

Which method got through is shown under "Diagnostics". We cannot guarantee a connection on every network.

Where the app gets server addresses

The app has to get the server list from somewhere. If the source disappears, you cannot connect even when the servers themselves are fine. This is the weak spot of any service like ours.

So the list is signed (Ed25519), and the public key that checks the signature is compiled into the app. That key is not on the server. A substituted list is thrown away. The list itself can be fetched by several independent routes: the main address, the spares, encrypted DNS queries to public resolvers. One working route is enough.

App updates are signed the same way. The private signing key is not kept on the servers: breaking into a server does not let anyone hand you someone else's program as an update.

What sits on the server

The key
24 characters from a 31-character alphabet — no 0, O, 1, I or L, so nothing gets confused when copying by hand. The last character is a check digit: a typo is caught before anything is sent. The server holds an HMAC-SHA256 of the key; the key itself is written down nowhere.
Devices
A WireGuard public key, an address inside the tunnel, a name from a word list. The computer's real name is never asked for.
The term
The date your paid time ends. Nothing else.
Logs
The servers keep no connection logs: who, when, where to. There is nothing to keep.
Key rotation
Once every 30 days the key can be replaced from your account. Devices, addresses and paid days stay; the old key stops working immediately.

How to check

The list of installed rules is readable with Windows itself; the state of the service is shown by "Diagnostics" in the app. The commands, and what to look for in them, are on the Protection page.

If any point above turns out to be uncheckable, that is our failing. Tell us.

A two-minute check

Connect. Pull the cable or switch off Wi-Fi for a couple of seconds, then put it back. The internet returns only together with the tunnel — not before.

What is closed and what is not