VPNonly how it works guides faq install github

Why does my whole Mac go through the VPN?

Because that's what connecting a VPN does, by design. It's not a setting you've missed.

What's actually happening

Your Mac has a routing table with a default route: where packets go when nothing more specific matches. Normally that's your router. When a VPN client connects, it creates a tunnel interface and points the default route at it. From that moment, every process on the machine that opens a connection follows the new default. Nothing needs to know a VPN exists.

You can watch it happen. Before connecting:

$ netstat -rn -f inet | head -4
default            192.168.1.1        UGScg    en0

After a normal VPN client connects, that line points at a utun interface instead. That single line is the whole story.

Why it's often not what you want

How to route only some apps

Two different models exist, and the difference matters:

Exclude from a full tunnel. Your Mac still joins the VPN, and specific apps are punched out of it. This is what "split tunneling" usually means in Windows VPN clients, and what SplitTunnel.app does on macOS.

Opt in from a normal connection. Your Mac never joins the VPN at all; individual apps are moved into a tunnel that nothing else uses. This is what VPNonly does. The default route is never touched, so the worst case is one app losing connectivity rather than your whole machine.

Which is better depends on your goal. If you want privacy by default and exceptions for convenience, exclude from a full tunnel. If your Mac is fine as it is and one app needs to be somewhere else, opt in.

A note on DNS

Routing and name resolution are separate. An app can have its traffic tunneled while its DNS lookups still go through your normal resolver, which is the case with VPNonly today. For changing an app's exit IP that's fine. For hiding which sites you visit from your ISP, it isn't — use a tool designed for that.

Get VPNonly for Mac — $19

The app’s exact privileged engine source is public and MIT licensed.