Put Your Localhost on the Internet
Running something on 127.0.0.1 that you want other people to access? This guide will give your local machine a real public IP address so anything running locally is reachable from the internet.
Before: only you can access 127.0.0.1:4321
After: anyone can access 134.49.x.x:4321 (your dedicated public IP)
No cloud deployment, no Nginx, no Docker, no DNS — just a public IP pointed at your machine.
What you need
Section titled “What you need”- A computer running your app (Linux, macOS, or Windows)
- About 5 minutes
- A Get Real IP account (sign up here)
Step 1: Sign up and get your config
Section titled “Step 1: Sign up and get your config”- Go to account.getrealip.net and create an account
- Start your free trial (7 days free, cancel anytime)
- Download your WireGuard config file (
.conffile)
Your config contains everything needed to connect — no manual setup required.
Step 2: Install WireGuard
Section titled “Step 2: Install WireGuard”macOS: Install WireGuard from the Mac App Store.
Windows: Download WireGuard for Windows.
Linux (Ubuntu/Debian):
sudo apt install wireguardLinux (Fedora):
sudo dnf install wireguard-toolsStep 3: Import and connect
Section titled “Step 3: Import and connect”macOS / Windows:
- Open the WireGuard app
- Click “Import Tunnel(s) from File” (or drag the
.conffile in) - Click “Activate”
Linux:
sudo cp ~/Downloads/getrealip.conf /etc/wireguard/wg0.confsudo wg-quick up wg0That’s it. Your machine now has a public IP.
Step 4: Access your app from anywhere
Section titled “Step 4: Access your app from anywhere”Whatever you’re running locally is now accessible at your public IP on the same port:
| You see locally | The world sees |
|---|---|
127.0.0.1:3000 |
134.49.x.x:3000 |
127.0.0.1:4321 |
134.49.x.x:4321 |
127.0.0.1:8080 |
134.49.x.x:8080 |
127.0.0.1:11434 |
134.49.x.x:11434 |
Your public IP is shown in your dashboard. Share it with anyone — they can access your app directly.
Common examples
Section titled “Common examples”Sharing a dev server (Vite, Next.js, Astro, Flask):
Most dev servers bind to localhost by default. You may need to tell them to listen on all interfaces:
# Vite / Astronpm run dev -- --host 0.0.0.0
# Next.jsnext dev -H 0.0.0.0
# Flaskflask run --host=0.0.0.0
# Python http.serverpython3 -m http.server 8000 --bind 0.0.0.0Then it’s accessible at 134.49.x.x:<port>.
Important: binding to 0.0.0.0
Section titled “Important: binding to 0.0.0.0”If your app only listens on 127.0.0.1 (localhost), it will reject connections from the tunnel even though you have a public IP. You need to tell it to listen on 0.0.0.0 (all interfaces) so it accepts connections arriving via the WireGuard tunnel.
Most frameworks have a --host 0.0.0.0 flag. Check your framework’s docs if the ones above don’t apply.
Security note
Section titled “Security note”Once connected, your public IP is reachable by anyone on the internet — not just the people you share it with. Make sure you’re comfortable with whatever is running being publicly accessible, or add authentication to your app.
If you only want specific ports exposed, use your OS firewall to block everything else:
Linux (ufw):
sudo ufw allow 4321/tcpsudo ufw enablemacOS: System Settings → Network → Firewall
Your local project now has a real public IP. Share 134.49.x.x:<port> with anyone and they can access it directly — no deploy, no cloud, no configuration beyond what you just did.
When you’re done sharing, just deactivate the tunnel in the WireGuard app (or sudo wg-quick down wg0 on Linux).