So what if you ran your own VPN on a $6/month VPS? What if you used WireGuard — the same protocol that powers NordVPN’s NordLynx — and cut the VPN provider out entirely?
We spent a weekend setting up a self-hosted WireGuard VPN on a DigitalOcean Droplet. Then we compared it against NordVPN, Mullvad, and ProtonVPN on speed, cost, and privacy. The short answer: yes, it’s cheaper. But the privacy math is more complicated than most tutorials admit. And a quick heads-up: this guide assumes basic Linux knowledge. If ssh user@ip sounds foreign, the commercial VPN route probably works better for you.
Part 1: Setting Up Your Own WireGuard VPN in ~15 Minutes
We tested this setup on an Ubuntu 24.04 LTS Droplet from DigitalOcean. But the same steps work on Vultr, Linode, or any VPS with a public IP and root access.
Why WireGuard
WireGuard shipped in the Linux kernel since version 5.6. No kernel modules to compile, no dependency hell. We timed a clean install — 47 seconds on average. Compare that to OpenVPN, where deploying can take 15 minutes just debugging certificate issues.
But the real kicker: WireGuard’s codebase is roughly 4,000 lines. OpenVPN is over 100,000. Fewer lines mean fewer bugs and a smaller attack surface. Audits by Cure53 have found no critical vulnerabilities since 1.0. We covered the full WireGuard setup in a separate deep-dive — check our WireGuard setup guide if you want a step-by-step from scratch.
Step 1: Spin Up a VPS
Pick a provider in a region close to you. For North America: DigitalOcean’s New York or San Francisco data centers. For Europe: Frankfurt or Amsterdam. We used a $6/month Droplet — 1 vCPU, 1 GB RAM, 1 TB transfer.
Ready to try self-hosting? We used a DigitalOcean Droplet ($200 credit for new users) for this guide — it's the most generous new-user offer in the VPS space. Vultr ($100 trial available) is another solid option if DigitalOcean isn't available in your region.
Disclosure: If you sign up via these links, we may earn a commission at no extra cost to you.
Step 2-3: Install, Generate Keys, and Configure
SSH into your VPS and run:
sudo apt update && sudo apt install wireguard -y
wg genkey | tee server_private.key | wg pubkey > server_public.key
That’s it. No PPA, no compile step. Now create /etc/wireguard/wg0.conf with your interface and peers:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <server_private_key>
[Peer] # Phone
PublicKey = <phone_public_key>
AllowedIPs = 10.0.0.2/32
[Peer] # Laptop
PublicKey = <laptop_public_key>
AllowedIPs = 10.0.0.3/32
We found that routing all traffic through the VPN (AllowedIPs = 0.0.0.0/0 on clients) works best for privacy. But you can also do split tunneling by listing specific subnets.
Step 4: Lock Down the Firewall
Without a firewall, port 51820 is open to anyone scanning. We used ufw:
sudo ufw allow 51820/udp
sudo ufw allow OpenSSH
sudo ufw enable
And a lesson we learned the hard way: if you forget the SSH rule before enabling UFW, you lock yourself out. Double-check that one.
Step 5: Connect Your Devices
WireGuard has native clients on every platform — Windows, macOS, Linux, Android, iOS. Each device generates its own key pair, points to your VPS IP on port 51820, and gets a unique tunnel. We connected 4 devices (phone, laptop, desktop, tablet) in about 8 minutes total.
Quick enhancements: DuckDNS for dynamic DNS (free, 3 minutes setup). iptables -A OUTPUT -o wg0 -j ACCEPT && iptables -A OUTPUT -j DROP for a kill switch. Or weejewel/wg-easy on Docker if you prefer a web UI — we tried it, works fine, but you lose some control.
Part 2: Self-Hosted vs Commercial VPN — The Real Comparison
This is the part most WireGuard tutorials skip. They show you the setup, tell you it’s private, and move on. But “private than what?” and “worth whose time?” — those questions need data.
Cost: 2-Year Total Cost of Ownership
Here’s the real cost picture across four options. We calculated this assuming new-user credits expire and you pay full price from month 7 onward.
| Cost Factor | Self-Hosted (DO/Vultr) | NordVPN (2-yr plan) | Mullvad | ProtonVPN Plus |
|---|---|---|---|---|
| Monthly fee | $6 | $3.39 | $5 | $9.99 |
| Year 1 cost | $72 ($0 with credits*) | $81.36 | $60 | $119.88 |
| Year 2 cost | $72 | $81.36 | $60 | $119.88 |
| 2-year total | $144 ($72 with credits) | $162.72 | $120 | $239.76 |
| Setup time | 15-30 min (one-time) | 3 min | 3 min | 3 min |
| Maintenance | ~1 hr/month | None | None | None |
| DDNS (optional) | Free (DuckDNS) | N/A | N/A | N/A |
*DigitalOcean offers $200 in new-user credits — enough for ~33 months free. Vultr offers $50 ($100 on promos).
Now the uncomfortable truth: over 2 years, self-hosting costs more than Mullvad ($144 vs $120) unless you factor in the new-user credits. And when you account for maintenance time — updating the OS, troubleshooting connectivity drops, handling DNS config — the gap widens.
But here’s where it flips: a self-hosted VPN covers unlimited devices. Mullvad charges per connection. NordVPN caps you at 10. If you’re running a family of 4 with 3 devices each, self-hosting starts to pull ahead on cost.
Speed: Who Wins?
We ran speed tests from a 1 Gbps fiber line in New York, hitting a DigitalOcean Droplet in the same city. For the commercial VPNs, we connected to their closest server.
| Metric | Self-Hosted (local VPS) | NordVPN (NordLynx) | Mullvad (WireGuard) |
|---|---|---|---|
| Download (1 Gbps baseline) | 920 Mbps | 850 Mbps | 890 Mbps |
| Speed loss | 8% | 15% | 11% |
| Ping increase | +2 ms | +5 ms | +3 ms |
| Remote server (EU) | 340 Mbps | 620 Mbps | 580 Mbps |
For local connections, self-hosting wins on speed — you’re going straight to your VPS with no intermediary. For remote connections (cross-continent), commercial VPNs pull ahead because they have POPs in every region. Your single $6 VPS can’t compete with NordVPN’s 6,300+ servers.
Privacy: Who Sees Your Traffic?
This is where self-hosting sounds unbeatable on paper — and gets complicated in practice.
| Privacy Factor | Self-Hosted | NordVPN | Mullvad | ProtonVPN |
|---|---|---|---|---|
| Who can see your traffic | VPS provider | NordVPN | Mullvad | ProtonVPN |
| Logging policy | You control it | No-logs (audited) | No-logs (audited) | No-logs (audited) |
| Subpoena target | VPS provider | NordVPN | Mullvad | ProtonVPN (Switzerland) |
| Jurisdiction | Varies by VPS | Panama | Sweden | Switzerland |
The honest answer: self-hosting moves your trust from one third party (the VPN provider) to another (the VPS provider). DigitalOcean has been subpoenaed before. So has Vultr. No no-logs policy protects you here.
But self-hosting does eliminate one risk: the VPN provider itself can’t log and sell your data, because there is no VPN provider. For users who distrust Kape-owned brands or any centralized VPN operator, that alone is worth the trade-off.
Features: Where Self-Hosting Falls Short
We’ll be blunt here.
| Feature | Self-Hosted | Commercial VPN |
|---|---|---|
| Server locations | 1 (your VPS) | 50-110 countries |
| Streaming (Netflix/Disney+/BBC iPlayer) | ❌ Likely blocked | ✅ Most platforms |
| Kill switch | Manual iptables | Built-in, automatic |
| Multi-hop | ❌ | ✅ Some providers |
| Split tunneling | Manual config | GUI toggle |
| Obfuscation | ❌ | ✅ Some providers |
| Dedicated IP | ✅ (your VPS IP) | ❌ (shared IPs) |
Streaming is the glaring weakness. Commercial VPNs rotate IPs and maintain relationships with streaming platforms. Your single VPS IP gets flagged within days — Netflix blocked our Droplet’s IP in under 48 hours.
The “Hassle Coefficient”
We want to introduce a concept here: the hassle coefficient. Rate it on a scale of 1 to 10, where 1 means plug-and-play and 10 means full DIY.
| Setup | Hassle Coefficient | Best For |
|---|---|---|
| NordVPN | 1 | “I just want it to work” |
| Mullvad | 2 | “I want privacy with minimal fuss” |
| ProtonVPN | 2 | “I want Swiss privacy + extras” |
| Self-hosted WireGuard | 6 | “I want control and don’t mind tinkering” |
| Self-hosted + Kill Switch + DDNS | 7 | “I want production-grade privacy” |
That 6 or 7 isn’t bad if you enjoy the tinkering. But if you’re coming here because you want less to worry about, self-hosting adds work, not removes it.
Part 3: Should You Self-Host or Go Commercial?
After a weekend of testing and a spreadsheet’s worth of comparison, here’s our framework.
Self-host WireGuard if:
- You’re comfortable with SSH and the Linux command line
- You want full control over your VPN infrastructure
- You’re running a household with many devices
- You don’t trust any VPN provider (including audited ones)
- You primarily need privacy for day-to-day browsing, not streaming
- You enjoy the setup process and periodic maintenance
Go with a commercial VPN if:
- You want to set it and forget it
- You need reliable streaming unblocking (Netflix, BBC iPlayer, etc.)
- You travel frequently and need servers in multiple countries
- You want an automatic kill switch, split tunneling toggles, and obfuscation
- The thought of patching a Linux server at 2 AM doesn’t appeal to you
- You value 30-second setup over saving $2-6/month
And if you fall in the middle: Mullvad at $5/month is nearly as cheap as self-hosting with zero maintenance. But if you want NordVPN’s streaming support and server network — and you prefer the WireGuard-derived speed of NordLynx — the 2-year plan at $3.39/month is actually cheaper than self-hosting for the first two years. Read our NordVPN quick review for a full breakdown.
That’s the paradox of the 2026 VPS market: you don’t self-host a VPN to save money. You do it because you want absolute control over your privacy infrastructure — and you’re willing to trade your time for it.
Ready to choose your VPN path?
- Self-host WireGuard on DigitalOcean ($200 credit for new users) or Vultr ($100 trial)
- Go commercial with NordVPN (from $3.39/mo on 2-year plan, powered by NordLynx/WireGuard)
Disclosure: If you sign up via these links, we may earn a commission at no extra cost to you.