How to Set Up a VPN Server on a VPS (Step-by-Step Guide)

Running your own VPN server gives you privacy, security, and control over your internet traffic without relying on third-party providers. If you already rent a Virtual Private Server (VPS), you can turn it into a VPN and securely tunnel your traffic from anywhere. In this guide, we’ll walk you through the step-by-step process of setting up a VPN server on a VPS.

How to Set Up a VPN Server on a VPS (Step-by-Step Guide)

Why Host Your Own VPN?

Before diving into the technical part, here are some reasons why you might want to host your own VPN:

  • Cost-effective – If you already pay for a VPS, adding a VPN is practically free.
  • Privacy & Encryption – Protect your internet traffic from eavesdroppers, ISPs, and insecure networks.
  • Bypass Restrictions – Access geo-restricted content when traveling abroad.
  • Remote Access – Safely connect to your home or business network.
  • Control – You decide how logs are handled, unlike commercial VPNs.

What You’ll Need

  1. A VPS (Ubuntu 22.04/24.04 LTS recommended).
    Providers: DigitalOcean, Vultr, Linode, OVH, Hetzner`
  2. Root or sudo access to the server.
  3. Basic command-line knowledge.
  4. A domain name (optional, but useful for easy access).

Step 1: Update Your VPS

Log into your VPS via SSH:

ssh root@your_server_ip

Then update your system:

apt update && apt upgrade -y

Step 2: Choose Your VPN Software

There are multiple VPN protocols, but the most popular and reliable are:

  • WireGuard – Fast, lightweight, modern (recommended).
  • OpenVPN – Battle-tested, widely supported.

We’ll cover WireGuard here since it’s simpler and faster.

Step 3: Install WireGuard

Run:

apt install wireguard -y

Step 4: Generate Keys

Each VPN server and client needs a key pair.

wg genkey | tee server_private.key | wg pubkey > server_public.key

Do the same for clients later (on your local device or VPS).

Step 5: Configure WireGuard Server

Create a configuration file:

nano /etc/wireguard/wg0.conf

Paste this (replace with your actual keys):

[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.0.0.1/24
ListenPort = 51820
SaveConfig = true

# NAT to route traffic
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Enable IP forwarding:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Step 6: Add a Client Configuration

On the server, generate a client key pair:

wg genkey | tee client_private.key | wg pubkey > client_public.key

Then add this to /etc/wireguard/wg0.conf under [Peer]:

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32

Step 7: Start WireGuard

Enable and start the VPN:

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

Check status:

wg show

Step 8: Configure Client

On your laptop/phone, install WireGuard (apps available for Windows, macOS, Linux, iOS, Android).

Create a client config:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = your_server_ip:51820
AllowedIPs = 0.0.0.0/0

Import this into your WireGuard app and connect.

Step 9: Secure Your Server

  • Allow UDP 51820 through firewall:
ufw allow 51820/udp
  • Disable password login (use SSH keys only).
  • Keep system updated with:
apt update && apt upgrade -y

Step 10: Test Your VPN

  • Connect from your device.
  • Visit whatismyip.com. Your IP should match your VPS.
  • Try accessing restricted content.

Optional: Add a Domain & TLS

Instead of remembering your server’s IP, point a domain to it. For example:

vpn.example.com → your_server_ip

This makes connecting easier.

Final Thoughts

Hosting your own VPN server on a VPS gives you privacy, control, and flexibility at a fraction of the cost of commercial VPNs. With WireGuard, setup is fast and performance is excellent.

If you want to scale further, you can also:

  • Add multiple client configs.
  • Set up a kill switch on your device.
  • Deploy OpenVPN if you need maximum compatibility.

With this setup, you now own a secure, private VPN server you can use from anywhere in the world.

Ihar Valianski
Ihar Valianski
Articles: 20

Leave a Reply

Your email address will not be published. Required fields are marked *