{"id":1000117179,"date":"2026-06-16T12:36:29","date_gmt":"2026-06-16T07:06:29","guid":{"rendered":"https:\/\/googiehost.com\/blog\/?p=1000117179"},"modified":"2026-06-16T12:36:31","modified_gmt":"2026-06-16T07:06:31","slug":"how-to-build-wireguard-vpn-server-on-vps","status":"publish","type":"post","link":"https:\/\/googiehost.com\/blog\/how-to-build-wireguard-vpn-server-on-vps\/","title":{"rendered":"How to Build your own WireGuard VPN Server on a VPS 2026"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I have personally built and stress-tested WireGuard VPN servers across more than a dozen VPS providers, debugged the errors that trip people up, and refined this process down to under 30 minutes from a fresh server.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Everything in this guide comes from that hands-on experience.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a complete, step-by-step Ubuntu VPN server tutorial that covers the full journey. I will tell you how to connect to your VPS, install WireGuard, generate keys, configure the server, connect Windows, macOS, Android, and iPhone clients and test the tunnel end-to-end.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every command in this guide is placed in a clearly bordered code box so you can copy and paste it directly into your terminal, exactly as shown in the screenshots I have included at each stage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>By the time you complete this guide, you will have a fully working self-hosted VPN server that you own completely. NO subscription, NO shared IPs, NO logging policies from a third party.\u00a0<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Let&#8217;s get into it.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"what-is-wireguard-vpn\">What Is WireGuard VPN?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you are new to VPN protocols, here is what you need to know before you start typing commands. <strong>WireGuard is not just another VPN app.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>It is a protocol built directly into the Linux kernel.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard is a modern, open-source VPN protocol integrated into the Linux kernel since version 5.6.&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-media-text has-media-on-the-right is-stacked-on-mobile\"><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\">It uses ChaCha20 for VPN encryption, Curve25519 for key exchange, and Poly1305 for authentication. With fewer than 4,000 lines of code compared to OpenVPN&#8217;s 100,000+, it is far easier to audit, faster to run, and simpler to use as a Linux VPN server.<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"444\" height=\"333\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/What-Is-WireGuard-VPN.png\" alt=\"What Is WireGuard VPN?\" class=\"wp-image-1000117191 size-full\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/What-Is-WireGuard-VPN.png 444w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/What-Is-WireGuard-VPN-300x225.png 300w\" sizes=\"auto, (max-width: 444px) 100vw, 444px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">You can think of it as a secure tunnel between your device and your VPS. All traffic enters encrypted, travels through your server, and exits from your VPS&#8217;s IP address.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your ISP sees only encrypted packets. Websites see your VPS. <strong>That is the core idea behind private VPN hosting using WireGuard.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"why-use-a-vps-for-wireguard\">Why Use a VPS for WireGuard?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You could run WireGuard at home, but a VPS gives you something a home connection never will:<strong> a static public IP, 24\/7 uptime, and full server control without touching your home router:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>Full server control: <\/strong>You configure every rule, every port, every allowed IP. No third-party middleware between you and your traffic.<\/li>\n\n\n\n<li><strong>Better privacy:<\/strong> No external company processes your data. You are the only admin.<\/li>\n\n\n\n<li><strong>Dedicated IP address: <\/strong>Your VPS gives you a static public IP, not shared with thousands of other VPN users who may be flagged or banned.<\/li>\n\n\n\n<li><strong>No VPN logging: <\/strong>Since you own the server, there is no logging policy to worry about.<\/li>\n\n\n\n<li><strong>Improved streaming access:<\/strong> A dedicated IP is far less likely to be blocked by streaming platforms compared to shared commercial VPN IPs.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">We have tested them. These four providers consistently deliver the kernel compatibility and network performance WireGuard requires.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>If you want a detailed breakdown of pricing, bandwidth limits, and kernel versions across all major options, see our <a href=\"https:\/\/googiehost.com\/blog\/best-vps-hosting-for-wireguard\/\">best VPS hosting for WireGuard<\/a> comparison.<\/em><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list is-style-checked\">\n<li><strong><a href=\"https:\/\/googiehost.com\/blog\/go\/kamatera\" target=\"_blank\" rel=\"noopener sponsored\">Kamatera<\/a>: <\/strong>Hourly billing, global data centers, strong networking performance.<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/googiehost.com\/blog\/go\/vultr\" target=\"_blank\" rel=\"noopener sponsored\">Vultr<\/a>: <\/strong>Simple UI, fast NVMe-backed servers, $5 per month entry plan.<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/googiehost.com\/blog\/go\/digitalocean\" target=\"_blank\" rel=\"noopener sponsored\">DigitalOcean<\/a>: <\/strong>Excellent documentation, reliable uptime, beginner-friendly dashboard.<\/li>\n\n\n\n<li><strong>Linode (Akamai Cloud): <\/strong>Great performance-per-dollar, strong global community.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"prerequisites-before-you-start\">Prerequisites Before You Start<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before you run a single command, take two minutes to confirm you have everything this setup requires. <strong>Missing any one of these will cause the configuration to fail mid-way.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Requirements<\/em><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list is-style-checked\">\n<li>Ubuntu 22.04 VPS (tested on 22.04 LTS; Ubuntu 24.04 also works)<\/li>\n\n\n\n<li>Root or sudo access to the server<\/li>\n\n\n\n<li>SSH client (Terminal on macOS\/Linux, Windows Terminal or PuTTY on Windows)<\/li>\n\n\n\n<li>A static public IP address assigned to your VPS<\/li>\n\n\n\n<li>Basic Linux command-line familiarity<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Recommended VPS Specs<\/em><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Users<\/td><td>CPU<\/td><td>RAM<\/td><td>Storage<\/td><td>Bandwidth<\/td><\/tr><tr><td>1-5<\/td><td>1 vCPU<\/td><td>512 MB<\/td><td>10 GB SSD<\/td><td>500 GB\/mo<\/td><\/tr><tr><td>5-20<\/td><td>1 vCPU<\/td><td>1 GB<\/td><td>20 GB SSD<\/td><td>1 TB\/mo<\/td><\/tr><tr><td>20-50<\/td><td>2 vCPU<\/td><td>2 GB<\/td><td>40 GB SSD<\/td><td>2 TB\/mo<\/td><\/tr><tr><td>50+<\/td><td>4 vCPU<\/td><td>4 GB<\/td><td>80 GB SSD<\/td><td>4 TB\/mo<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\">WireGuard is extremely lightweight. Even a $5 per month VPS with 512 MB RAM handles 5 to 10 concurrent users without strain. Bandwidth is almost always the real bottleneck, not CPU or RAM.<\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<p class=\"wp-block-paragraph\">With your VPS ready and SSH credentials in hand, let&#8217;s go step by step. All commands in this guide are in copyable code boxes. You do not need to type them manually.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Copy directly from the box and paste into your terminal, exactly as shown in the screenshots.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step1-connect-to-your-vps-via-ssh\">Step1: Connect to Your VPS via SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SSH is how you talk to your VPS from your local machine. Every command in this guide runs inside this SSH session, so getting connected is the first thing you do.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>On macOS or Linux, open Terminal and run:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>ssh root@YOUR_VPS_IP<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">On Windows, open Windows Terminal or PowerShell and run the same command. Replace YOUR_VPS_IP with the public IP address from your VPS provider&#8217;s control panel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1516\" height=\"866\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Connect-to-Your-VPS-via-SSH-.jpg\" alt=\"Connect to Your VPS via SSH\" class=\"wp-image-1000117196\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Connect-to-Your-VPS-via-SSH-.jpg 1516w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Connect-to-Your-VPS-via-SSH--300x171.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Connect-to-Your-VPS-via-SSH--1024x585.jpg 1024w\" sizes=\"auto, (max-width: 1516px) 100vw, 1516px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you use PuTTY, enter your VPS IP in the hostname field and connect on port 22. If you set up an SSH key pair, you will connect without a password prompt.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If not, enter the root password your provider gave you.<\/strong><\/p>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\">Always prefer SSH key authentication over passwords. It eliminates brute-force login risk and is significantly more secure for any internet-facing server.<\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step2-update-your-ubuntu-server\">Step2: Update Your Ubuntu Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Running an outdated system before installing new software is the single most common setup mistake. This step patches all existing packages and ensures your kernel is current before WireGuard touches it.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo apt update &amp;&amp; sudo apt upgrade -y<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">apt update refreshes the package list. apt upgrade -y installs all available updates without prompting. If the kernel was upgraded, reboot the server:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo reboot<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>After rebooting, reconnect via SSH using the same command from Step 1.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1512\" height=\"980\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Update-Your-Ubuntu-Server-.jpg\" alt=\"Update Your Ubuntu Server\" class=\"wp-image-1000117201\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Update-Your-Ubuntu-Server-.jpg 1512w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Update-Your-Ubuntu-Server--300x194.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Update-Your-Ubuntu-Server--1024x664.jpg 1024w\" sizes=\"auto, (max-width: 1512px) 100vw, 1512px\" \/><\/figure>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\"><em>Outdated kernels can cause WireGuard to fail loading its kernel module or behave unpredictably. Always update before installing.<\/em><\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step3-install-wireguard-on-ubuntu\">Step3: Install WireGuard on Ubuntu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ubuntu 22.04 includes WireGuard in its official repositories, which means the entire WireGuard Ubuntu setup process takes one command. <strong>No third-party PPAs, no manual compilation needed.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo apt install wireguard -y<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Verify the installation:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>wg &#8211;version<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You should see output similar to:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>wireguard-tools v1.0.20210914 &#8211; https:\/\/git.zx2c4.com\/wireguard-tools\/<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1498\" height=\"994\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Install-WireGuard-on-Ubuntu-.jpg\" alt=\"Install WireGuard on Ubuntu\" class=\"wp-image-1000117193\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Install-WireGuard-on-Ubuntu-.jpg 1498w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Install-WireGuard-on-Ubuntu--300x199.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Install-WireGuard-on-Ubuntu--1024x679.jpg 1024w\" sizes=\"auto, (max-width: 1498px) 100vw, 1498px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ubuntu 22.04 ships with Linux kernel 5.15 by default, so WireGuard runs as a native kernel module. This is why the Ubuntu VPN server tutorial process is so clean compared to older distributions that required DKMS compilation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you are on a <a href=\"https:\/\/googiehost.com\/blog\/best-linux-unmanaged-vps-hosting\/\">best Linux unmanaged VPS hosting plan<\/a>, you have full root access by default, which is exactly what you need for the steps ahead.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Managed VPS plans sometimes restrict kernel-level access that WireGuard requires.<\/p>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\"><em>If you are running Ubuntu 18.04 or earlier, you need wireguard-dkms as well. This guide is optimized for Ubuntu 22.04 LTS.<\/em><\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step4-generate-wireguard-server-keys\">Step4: Generate WireGuard Server Keys<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard&#8217;s entire security model is built on public-key cryptography. Every peer, including your server, gets a unique key pair. The private key never leaves the device it was created on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set correct permissions on the WireGuard directory first:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo chmod 700 \/etc\/wireguard<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Generate the server key pair:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>wg genkey | sudo tee \/etc\/wireguard\/server_private.key | wg pubkey | sudo tee \/etc\/wireguard\/server_public.key<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">View both keys to confirm they were created:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo cat \/etc\/wireguard\/server_private.keysudo cat \/etc\/wireguard\/server_public.key<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Each key is a 44-character Base64 string. For example, a private key looks like:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WAmQnAHDiLMSbO6v3KXrB1OP7ZHdFqzxXBl+n3WjYW4=<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1526\" height=\"1016\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Generate-WireGuard-Server-Keys-.jpg\" alt=\"Generate WireGuard Server Keys\" class=\"wp-image-1000117199\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Generate-WireGuard-Server-Keys-.jpg 1526w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Generate-WireGuard-Server-Keys--300x200.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Generate-WireGuard-Server-Keys--1024x682.jpg 1024w\" sizes=\"auto, (max-width: 1526px) 100vw, 1526px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Copy and save both keys somewhere safe. You will need the server&#8217;s public key when you configure client devices in Steps 9 and 10.<\/p>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\"><em>Never share or expose your private key. If it is compromised, anyone can impersonate your server or decrypt your VPN traffic. Treat it with the same care as a root password.<\/em><\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step5-configure-the-wireguard-vpn-server\">Step5: Configure the WireGuard VPN Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This is where you define your server&#8217;s VPN interface: <\/strong>its internal IP address, the port it listens on and the NAT rules that let client traffic reach the internet through your server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>First, find your server&#8217;s network interface name:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>ip route list default<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The output will look like:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">default via 1.2.3.4 dev eth0 proto static<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The word after <strong>&#8220;dev&#8221; <\/strong>is your interface name.<strong> In this example it is eth0.<\/strong> <strong>Note it down<\/strong>. On some VPS providers it is ens3 or ens18. <strong>Now create the config file:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo nano \/etc\/wireguard\/wg0.conf<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Paste the following:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>[Interface]PrivateKey = YOUR_SERVER_PRIVATE_KEYAddress = 10.0.0.1\/24ListenPort = 51820SaveConfig = truePostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPreDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Replace YOUR_SERVER_PRIVATE_KEY with your actual private key from Step 4. Replace eth0 with your actual interface name.\u00a0<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1522\" height=\"1006\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Configure-the-WireGuard-VPN-Server-.jpg\" alt=\"Configure the WireGuard VPN Server\" class=\"wp-image-1000117195\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Configure-the-WireGuard-VPN-Server-.jpg 1522w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Configure-the-WireGuard-VPN-Server--300x198.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Configure-the-WireGuard-VPN-Server--1024x677.jpg 1024w\" sizes=\"auto, (max-width: 1522px) 100vw, 1522px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Save and exit: Ctrl+X, then Y, then Enter.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Address = <\/strong>10.0.0.1\/24 assigns the server the first IP in the 10.0.0.0\/24 VPN subnet. Client devices will be assigned IPs from 10.0.0.2 to 10.0.0.254 in later steps.<\/p>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\"><em>The PostUp and PreDown lines handle NAT so client traffic can reach the internet through your server&#8217;s public interface. If your interface is not eth0, update both lines or clients will connect to the tunnel but have no internet access.<\/em><\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step6-enable-ip-forwarding\">Step6: Enable IP Forwarding<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ubuntu blocks packet forwarding between interfaces by default. For your Linux VPN server to route client traffic out to the internet, you must explicitly turn this on in the kernel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Open the sysctl config file:<\/em><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo nano \/etc\/sysctl.conf<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Find this line and remove the # at the start to uncomment it:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">net.ipv4.ip_forward=1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Save and exit, then apply immediately:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo sysctl -p<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;Verify it is active:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sysctl net.ipv4.ip_forward<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected output:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">net.ipv4.ip_forward = 1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For IPv6 forwarding (optional), also add this to sysctl.conf:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">net.ipv6.conf.all.forwarding=1<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1512\" height=\"1010\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Enable-IP-Forwarding-.jpg\" alt=\"Enable IP Forwarding\" class=\"wp-image-1000117198\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Enable-IP-Forwarding-.jpg 1512w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Enable-IP-Forwarding--300x200.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Enable-IP-Forwarding--1024x684.jpg 1024w\" sizes=\"auto, (max-width: 1512px) 100vw, 1512px\" \/><\/figure>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\"><em>Without IP forwarding, VPN clients will connect to the tunnel but will not be able to browse the internet. This is the most common reason a WireGuard setup appears to work but has no internet access on clients.<\/em><\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step7-configure-firewall-rules\">Step7: Configure Firewall Rules<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your server needs to accept incoming WireGuard connections on UDP port 51820.<strong> You also need to allow SSH so you do not lock yourself out.\u00a0<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Do both before enabling UFW.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo ufw allow 51820\/udpsudo ufw allow OpenSSHsudo ufw enablesudo ufw status<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1260\" height=\"1000\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Configure-Firewall-Rules-.jpg\" alt=\"Configure Firewall Rules\" class=\"wp-image-1000117194\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Configure-Firewall-Rules-.jpg 1260w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Configure-Firewall-Rules--300x238.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Configure-Firewall-Rules--1024x813.jpg 1024w\" sizes=\"auto, (max-width: 1260px) 100vw, 1260px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If your VPS provider has a cloud-level firewall (DigitalOcean, Vultr, and Kamatera all do), log in and add an inbound rule:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Type<\/td><td>Protocol<\/td><td>Port<\/td><td>Source<\/td><\/tr><tr><td>Custom<\/td><td>UDP<\/td><td>51820<\/td><td>0.0.0.0\/0<\/td><\/tr><tr><td>SSH<\/td><td>TCP<\/td><td>22<\/td><td>Your IP (recommended)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\"><em>WireGuard always uses UDP, never TCP. Setting port 51820 as TCP in your firewall will silently block all client connections.<\/em><\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step8-start-the-wireguard-vpn-server\">Step8: Start the WireGuard VPN Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With the config file in place and firewall rules set, it is time to bring the WireGuard interface up and tell your system to start it automatically on every reboot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start the interface now:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo wg-quick up wg0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Enable it at boot:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo systemctl enable wg-quick@wg0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Check the interface is running:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo wg show<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You should see:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>interface: wg0&nbsp;&nbsp;public key: YOUR_SERVER_PUBLIC_KEY&nbsp;&nbsp;private key: (hidden)&nbsp;&nbsp;listening port: 51820<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If the interface is up with no errors and shows your public key and port, your WireGuard VPN server is live.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1510\" height=\"1000\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Start-the-WireGuard-VPN-Server-.jpg\" alt=\"Start the WireGuard VPN Server\" class=\"wp-image-1000117200\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Start-the-WireGuard-VPN-Server-.jpg 1510w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Start-the-WireGuard-VPN-Server--300x199.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Start-the-WireGuard-VPN-Server--1024x678.jpg 1024w\" sizes=\"auto, (max-width: 1510px) 100vw, 1510px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You are ready to add client devices.<\/p>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step9-create-a-wireguard-vpn-client\">Step9: Create a WireGuard VPN Client<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Each device that connects to your VPN needs its own key pair and its own configuration file. You generate both on the server, then transfer or scan the config onto the client device.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Generate key pair for your first client:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>wg genkey | tee client1_private.key | wg pubkey &gt; client1_public.keycat client1_private.keycat client1_public.key<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Add this client as a peer on the server:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo wg set wg0 peer CLIENT1_PUBLIC_KEY allowed-ips 10.0.0.2\/32<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Replace CLIENT1_PUBLIC_KEY with the public key you just generated. Save the updated state to disk:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">sudo wg-quick save wg0 Now create the client configuration file:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>[Interface]PrivateKey = CLIENT1_PRIVATE_KEYAddress = 10.0.0.2\/32DNS = 1.1.1.1&nbsp;[Peer]PublicKey = YOUR_SERVER_PUBLIC_KEYEndpoint = YOUR_VPS_IP:51820AllowedIPs = 0.0.0.0\/0PersistentKeepalive = 25<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Replace CLIENT1_PRIVATE_KEY with the client private key, YOUR_SERVER_PUBLIC_KEY with the server public key from Step 4, and YOUR_VPS_IP with your VPS&#8217;s public IP address.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1520\" height=\"1016\" src=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Create-a-WireGuard-VPN-Client-.jpg\" alt=\"Create a WireGuard VPN Client\" class=\"wp-image-1000117197\" title=\"\" srcset=\"https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Create-a-WireGuard-VPN-Client-.jpg 1520w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Create-a-WireGuard-VPN-Client--300x201.jpg 300w, https:\/\/googiehost.com\/blog\/wp-content\/uploads\/2026\/06\/Create-a-WireGuard-VPN-Client--1024x684.jpg 1024w\" sizes=\"auto, (max-width: 1520px) 100vw, 1520px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">AllowedIPs = 0.0.0.0\/0 routes all client traffic through the VPN. PersistentKeepalive = 25 keeps the connection alive through NAT firewalls.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Save this file as client1.conf.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step10-configure-wireguard-on-windows-macos-android-and-iphone\">Step10: Configure WireGuard on Windows, macOS, Android &amp; iPhone<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The official WireGuard apps are free on every major platform. Once installed, you load the client1.conf file you created in Step 9 and connect with one click.<\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>Windows<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Download the WireGuard installer from wireguard.com. Open the app, click &#8220;Add Tunnel&#8221;, select client1.conf, and click Activate.<\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>macOS<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Install WireGuard from the Mac App Store. Open the app, click the &#8220;+&#8221; button, choose &#8220;Import tunnel(s) from file&#8221;, select client1.conf, and toggle the connection on.<\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>Android<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Install WireGuard from the Google Play Store. Tap the &#8220;+&#8221; button, choose &#8220;Import from file or archive&#8221;, and select client1.conf. Or scan the QR code from Step 11 for a faster setup.<\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>iPhone \/ iOS<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Install WireGuard from the App Store. Tap &#8220;+&#8221;, choose &#8220;Create from QR code&#8221; or &#8220;Create from file&#8221;. The QR method from Step 11 is the fastest way to get connected on mobile.<\/p>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\">On Android and iOS, using the QR code method (Step 11) avoids the need to transfer the .conf file to your phone over email or file transfer.<\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step11-create-a-qr-code-for-mobile-devices\">Step11: Create a QR Code for Mobile Devices<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of sending the config file to your phone, you can display a QR code in the terminal and scan it directly with the WireGuard mobile app. It takes about 30 seconds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install qrencode on the server:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo apt install qrencode -y<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Generate and display the QR code in your terminal:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>qrencode -t ansiutf8 &lt; client1.conf<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;A scannable QR code will appear. Open the WireGuard app on your phone, tap &#8220;+&#8221;, choose &#8220;Create from QR code&#8221;, and scan it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To save the QR code as a PNG image:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>qrencode -o client1-qr.png &lt; client1.conf<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\">Do not photograph or share the QR code. It contains the client&#8217;s private key. Anyone who scans it gains full access to your VPN connection.<\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"step12-test-your-wireguard-vpn-connection\">Step12: Test Your WireGuard VPN Connection<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Connecting without verifying is a half-done job. Run these three checks to confirm your tunnel is up, traffic is routing correctly, and DNS is not leaking outside the encrypted tunnel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Check your IP address<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Visit whatismyip.com from your client device. Your IP should now show your VPS&#8217;s public IP, not your home or mobile IP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ping the server through the tunnel<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>ping 10.0.0.1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Replies confirm the tunnel is up and packets are routing between client and server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Check active peers on the server<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>sudo wg show<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Look for your client under the peers section. A handshake timestamp within the last few minutes confirms the client is actively connected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Test for DNS leaks<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Visit dnsleaktest.com and run the extended test. All DNS servers shown should be from your VPS&#8217;s location. If your home ISP&#8217;s servers appear, your DNS is leaking outside the tunnel.<\/p>\n\n\n\n<div id=\"callout-block_635be0e7affcb1bfe99d3f645a1371b0\" class=\"acf-callout has-label\" style=\"background-color: #EDF4FF; color: #1a3a5c; border-color: #4A90D9;\">\n        \n            <div class=\"acf-callout-label\">Note<\/div>\n    \n    <div class=\"acf-callout-content\">\n        <div class=\"acf-innerblocks-container\">\n\n<p class=\"wp-block-paragraph\">A successful IP change but failed DNS leak test means DNS traffic is not going through the tunnel. The config in Step 9 already includes DNS = 1.1.1.1 which prevents this.<\/p>\n\n<\/div>\n    <\/div>\n\n    <\/div>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"security-best-practices-for-wireguard-vpn\">Security Best Practices for WireGuard VPN<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Setting up the server correctly is only the first half of the job. Here are the security practices I apply to every self-hosted VPN server I build and maintain. None of them take more than a few minutes to implement.<\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>Restrict SSH access: <\/strong>Change the SSH port from 22 to a non-standard port and disable password login. Set PasswordAuthentication no in \/etc\/ssh\/sshd_config.<\/li>\n\n\n\n<li><strong>Use a non-default WireGuard port:<\/strong> Instead of 51820, use a random high port like 41194. This reduces exposure to automated scanners.<\/li>\n\n\n\n<li><strong>Rotate keys periodically:<\/strong> Generate new key pairs for clients every 90 days. Run wg genkey, update the peer block on the server, and push the new config to clients.<\/li>\n\n\n\n<li><strong>Install fail2ban: <\/strong>Protect SSH from brute-force attacks with sudo apt install fail2ban. It automatically bans IPs with repeated failed login attempts.<\/li>\n\n\n\n<li><strong>Keep your system updated: <\/strong>Run sudo apt update &amp;&amp; sudo apt upgrade -y weekly to stay current on kernel and userspace security patches.<\/li>\n\n\n\n<li><strong>Add a preshared key (PSK): <\/strong>For post-quantum resistance and extra forward secrecy, add PresharedKey = to both the server peer block and the client interface block.<\/li>\n\n\n\n<li><strong>Monitor active peers: <\/strong>Run sudo wg show regularly. Remove any peer you do not recognize immediately.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"performance-optimization-tips\">Performance Optimization Tips<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WireGuard is already the fastest VPN protocol available for VPS networking workloads. These tweaks push it further, especially for high-throughput or long-distance connections.<\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>Use a VPS with a modern kernel:<\/strong> Linux 5.6+ runs WireGuard natively in kernel-space. Anything older uses a slower DKMS module.<\/li>\n\n\n\n<li><strong>Choose a geographically close VPS: <\/strong>Physical distance between you and your server directly affects latency. A same-country VPS typically adds only 5 to 20ms.<\/li>\n\n\n\n<li><strong>For users who demand maximum throughput,<\/strong> pairing WireGuard with a high-speed network backbone makes a significant difference in real-world performance.<\/li>\n\n\n\n<li><strong>For the highest possible network speeds,<\/strong> check out our guide on the <a href=\"https:\/\/googiehost.com\/blog\/best-10gbps-vps-hosting\/\">Best 10 GBPS VPS Hosting<\/a> options that deliver unthrottled, enterprise-grade bandwidth perfect for high-traffic VPN deployments.<\/li>\n\n\n\n<li><strong>Choose a high-bandwidth server: <\/strong>For throughput-heavy VPN use cases like large file transfers or video streaming, bandwidth headroom matters. Providers with 10 Gbps uplinks give you the ceiling you need for high-traffic workloads without bottlenecks.<\/li>\n\n\n\n<li><strong>Tune MTU if you see packet issues: <\/strong>The default MTU for WireGuard is 1420. If you experience slowness or connection drops, reduce it to 1380 in the client Interface section:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>MTU = 1380<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>Enable BBR congestion control: <\/strong>Add these two lines to \/etc\/sysctl.conf for noticeably better throughput over long-distance connections, then run sudo sysctl -p:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>net.core.default_qdisc=fqnet.ipv4.tcp_congestion_control=bbr<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"common-wireguard-errors-and-fixes-table-form\">Common WireGuard Errors &amp; Fixes [table form]<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Even a well-written config occasionally runs into problems. <strong><em>Here are the errors I see most often when setting up WireGuard configuration on a fresh VPS, along with the exact fix for each one.<\/em><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Error<\/td><td>Likely Cause<\/td><td>Fix<\/td><\/tr><tr><td>RTNETLINK: Operation not supported<\/td><td>Kernel module not loaded<\/td><td>sudo modprobe wireguard&nbsp; OR&nbsp; reinstall wireguard-dkms<\/td><\/tr><tr><td>Handshake did not complete<\/td><td>Firewall blocking UDP 51820 or wrong server IP in client config<\/td><td>Check ufw and cloud firewall. Verify Endpoint in client config.<\/td><\/tr><tr><td>Connected but no internet<\/td><td>IP forwarding off or NAT rule missing<\/td><td>Check sysctl net.ipv4.ip_forward and PostUp in wg0.conf<\/td><\/tr><tr><td>DNS leaking<\/td><td>DNS not set in client tunnel config<\/td><td>Add DNS = 1.1.1.1 to [Interface] in client config<\/td><\/tr><tr><td>Peer shows 0 traffic after handshake<\/td><td>AllowedIPs mismatch<\/td><td>AllowedIPs = 0.0.0.0\/0 on client; correct IP in server peer block<\/td><\/tr><tr><td>wg0 already exists<\/td><td>Interface already up<\/td><td>sudo wg-quick down wg0&nbsp; then&nbsp; sudo wg-quick up wg0<\/td><\/tr><tr><td>Permission denied on key files<\/td><td>Wrong file permissions<\/td><td>sudo chmod 600 \/etc\/wireguard\/*.key<\/td><\/tr><tr><td>No route to host<\/td><td>Wrong subnet or missing gateway<\/td><td>Check Address and AllowedIPs in both server and client configs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"wireguard-vpn-use-cases\">WireGuard VPN Use Cases<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019ve been working with VPN for years and believe me, nothing has impressed me quite like WireGuard VPN. <strong>And as stated above, I\u2019ve tested it for months to find how it performs and what better ways I can use it for.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you, a SEO executive, want to analyse competitors&#8217; sites that are unreachable from your location, you can make use of WireGuard to securely access your competitor\u2019s site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Just like this, below, I\u2019ve added some real-world situations where Wireguard VPN is really helpful.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li><strong>Connecting Remote Teams Securely<\/strong>: I see this problem all the time, teams spread across countries, all needing safe access to company tools and files. WireGuard solves this problem. You set it up once, and your team members connect from anywhere as if they&#8217;re sitting in the office.<\/li>\n\n\n\n<li><strong>Securing Your Home Internet: <\/strong>I&#8217;ll tell you one thing, public Wi-Fi is a trap. Never connect it if you do not have a VPN. Coffee shops, airports, your data is out in the open. When you run WireGuard on your own server, you create a private tunnel that wraps everything you do online.<\/li>\n\n\n\n<li><strong>Linking One Office To Another<\/strong>: I&#8217;ve helped businesses that have two or three offices in different cities, all needing the same internal tools. With WireGuard, you can quietly connect all those locations through a secure tunnel. They behave like one single network.<\/li>\n\n\n\n<li><strong>Building a Secure Connection Between 2 Cloud Servers<\/strong>: I work with cloud infrastructure regularly and one thing that keeps coming up is the need to let servers talk to each other privately. WireGuard makes this simple. You spin it up on two or more servers, they shake hands once and everything between them travels through an encrypted pipe.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Now, there remains one more confusion! Is WireGuard good or shall I use some other commercial VPN? Please read further as I\u2019ve tried answering that too!<\/em><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"wireguard-vs-commercial-vpn-services\">WireGuard vs Commercial VPN Services<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Self-hosting is not the right choice for everyone. <strong><em>Here is an honest side-by-side comparison so you can decide whether building your own setup is worth it for your situation.<\/em><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Feature<\/td><td>Self-Hosted WireGuard<\/td><td>Commercial VPN<\/td><\/tr><tr><td>Privacy<\/td><td>You own all logs and data. Nobody else has access.<\/td><td>Depends on the provider&#8217;s logging policy. Often shared infrastructure.<\/td><\/tr><tr><td>Speed<\/td><td>Dedicated server bandwidth. No throttling.<\/td><td>Shared with thousands of users. Speed varies.<\/td><\/tr><tr><td>Cost<\/td><td>$3 to $10\/month for a VPS. One-time setup effort.<\/td><td>$5 to $15\/month recurring. Often requires annual commitment.<\/td><\/tr><tr><td>IP Address<\/td><td>Dedicated static IP, exclusive to you.<\/td><td>Shared IPs used by many users. Often blocked by streaming platforms.<\/td><\/tr><tr><td>Customization<\/td><td>Full control over ports, DNS, routing, and peers.<\/td><td>Limited to what the provider&#8217;s app offers.<\/td><\/tr><tr><td>Setup<\/td><td>30 to 60 minutes, basic Linux knowledge needed.<\/td><td>Download and click connect. No technical knowledge needed.<\/td><\/tr><tr><td>Support<\/td><td>Self-managed. Community forums available.<\/td><td>Customer support included.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you want full ownership and do not mind a one-time setup, self-hosting wins on privacy, cost, and flexibility. If you need a zero-configuration solution for non-technical family members, a commercial VPN is the easier path.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>One more thing worth mentioning for privacy-conscious users:<\/strong> if you want to pay for your VPS without linking a credit card or bank account to it, some providers accept alternative payment methods.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are some VPS providers who also accept alternative payment methods that don&#8217;t require a credit card. It is really useful if you want to keep your VPS purchase itself private. See our guide on buying <a href=\"https:\/\/googiehost.com\/blog\/buy-vps-with-webmoney\/\">VPS with WebMoney<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"faqs-how-to-build-your-own-wireguard-vpn-server-on-a-vps\">FAQ&#8217;s: How to Build your own WireGuard VPN server on a VPS <\/h2>\n\n\n\n<div id=\"acf-accordion-block_bac112a168b48f6540e92f25fdde879e\" class=\"acf-accordion\">\n                <details class=\"acf-accordion-item\" open>\n                <summary class=\"acf-accordion-title\">\n                    Is WireGuard free?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>Yes. WireGuard is fully open-source under the GPL license. The server software, all client apps for Windows, macOS, Android, and iOS, and every configuration tool cost nothing. Your only cost is the VPS itself, which starts at around $3 to $5 per month. For the cheapest options that still deliver solid VPN performance, see our guide to the\u00a0<a href=\"https:\/\/googiehost.com\/blog\/best-low-cost-vps-server\/\">best low cost VPS server<\/a>\u00a0choices available today.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    Is WireGuard better than OpenVPN?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>Yes. WireGuard uses fewer than 4,000 lines of code compared to OpenVPN\u2019s 100,000+, connects faster, uses less CPU and achieves higher throughput. The one advantage OpenVPN still holds is that it can run over TCP port 443, making it harder to block on restrictive networks.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    Can I use WireGuard for streaming?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>Yes. Because your self-hosted VPN server gives you a dedicated IP address exclusive to you, streaming platforms are far less likely to block it compared to shared commercial VPN IPs. Set up your VPS in a datacenter located in the country whose streaming content you want to access.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    Does WireGuard hide my IP?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>Yes. When connected, all outbound traffic exits through your VPS\u2019s public IP. Websites see your server\u2019s IP, not your real one. Your ISP can see you are sending encrypted UDP packets to a VPS, but cannot read the content of the VPN encryption tunnel.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    Can I install WireGuard on Debian?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>Yes. On Debian 11 and Debian 12, run: sudo apt install wireguard -y. The steps in this guide work on Debian with nearly identical commands. The WireGuard Ubuntu setup and Debian setup share the same package name and config structure on modern kernel versions.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    Is self-hosting a VPN safe?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>Yes, if you follow basic security hygiene. The risks of self-hosting are different from using a commercial VPN: you are responsible for updates, firewall rules, and key rotation. Follow the security best practices section of this guide and your Linux VPN server will be as secure as any well-managed commercial service.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    How many users can connect?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>A 1 vCPU or 1 GB RAM VPS comfortably handles 20 to 30 clients for browsing and streaming. For 50 or more users, use a 2 vCPU or 2 GB server. WireGuard\u2019s kernel-space implementation keeps CPU usage very low. Bandwidth is almost always the real bottleneck. Our guide on the <a href=\"https:\/\/googiehost.com\/blog\/best-unlimited-bandwidth-vps-hosting\/\">best unlimited bandwidth VPS hosting<\/a> options is worth checking if you plan to run a multi-user VPN.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    Can WireGuard be detected and blocked by firewalls?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>WireGuard\u2019s UDP traffic can be identified by deep packet inspection (DPI) systems used by corporate firewalls and some national-level blocks. Unlike OpenVPN over TCP 443, standard WireGuard has no built-in obfuscation. If you face blocking, consider wrapping the tunnel in a stunnel or switching to a non-standard port.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    Do I need a static IP for my WireGuard server?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>Yes. All major VPS providers assign a static public IP to every VPS by default. Your clients need a fixed server address in their Endpoint field. A dynamic IP on the server side would break every client connection each time it changes.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    How do I remove a client from my WireGuard server?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>To remove a peer without restarting WireGuard: sudo wg set wg0 peer CLIENT_PUBLIC_KEY remove &gt;&gt; Then save the config: sudo wg-quick save wg0 &gt;&gt; Replace CLIENT_PUBLIC_KEY with the peer\u2019s public key. Run sudo wg show to see all active peers and their keys.<\/p>\n                <\/div>\n            <\/details>\n                        <details class=\"acf-accordion-item\">\n                <summary class=\"acf-accordion-title\">\n                    What\u2019s the cheapest VPS to run WireGuard on?                <\/summary>\n                <div class=\"acf-accordion-content\">\n                    <p>WireGuard runs on the smallest available VPS plans. A 512 MB RAM, 1 vCPU plan at $3 to $5 per month is enough for 1 to 10 personal users. If you are looking at options specifically optimized for VPN workloads, our roundup of the best VPS hosting for WireGuard compares the key providers on price, kernel version, and network quality side by side.<\/p>\n                <\/div>\n            <\/details>\n            <\/div>\n\n\n\n\n<h2 class=\"wp-block-heading is-style-box-heading\" class=\"wp-block-heading is-style-box-heading\" id=\"my-final-verdict-on-this\">My Final Verdict On This<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After years of building and maintaining WireGuard VPN servers across dozens of VPS providers and client platforms, this guide captures everything that actually matters in a working setup.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have walked you through SSH access, system prep, installation, WireGuard configuration, key generation, firewall rules, client setup on all four major platforms, QR code generation for mobile, and thorough connection testing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You now have a fully working self-hosted VPN server running on your own VPS, with zero dependence on any third-party VPN company.\u00a0<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list is-style-arrow-circle\">\n<li>The entire process takes under 30 minutes on a fresh Ubuntu 22.04 VPS, and once it is running, it needs almost no maintenance.&nbsp;<\/li>\n\n\n\n<li>Keep the system updated, rotate client keys every 90 days, and check sudo wg show periodically to confirm everything looks as expected.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If you want to go further with your VPS, <\/strong>the same machine can run a full web stack, automation workflows, or trading software alongside WireGuard without any conflict.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The links scattered through this guide point you to the right next step depending on what you are building.\u00a0<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have personally built and stress-tested WireGuard VPN servers across more than a dozen VPS providers, debugged the errors that&#8230;<\/p>\n","protected":false},"author":46,"featured_media":1000117190,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"iawp_total_views":1,"footnotes":""},"categories":[7],"tags":[10516,10517],"class_list":["post-1000117179","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to","tag-how-to-build-your-own-wireguard-vpn-server-on-a-vps","tag-wireguard-vpn-server"],"acf":[],"_links":{"self":[{"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/posts\/1000117179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/users\/46"}],"replies":[{"embeddable":true,"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/comments?post=1000117179"}],"version-history":[{"count":4,"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/posts\/1000117179\/revisions"}],"predecessor-version":[{"id":1000117268,"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/posts\/1000117179\/revisions\/1000117268"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/media\/1000117190"}],"wp:attachment":[{"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/media?parent=1000117179"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/categories?post=1000117179"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/googiehost.com\/blog\/wp-json\/wp\/v2\/tags?post=1000117179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}