
You want to host a Minecraft server on your home PC. You follow a port forwarding guide. You add the rule to your router. You give friends your IP. They get "Can't connect to server."
You check your router's WAN IP and see something like 100.64.x.x or 10.x.x.x. That is not a real public IP. Your ISP uses Carrier-Grade NAT (CGNAT), which means hundreds of customers share a single public IP address. Port forwarding does not work because the port forward rule on your router never reaches the internet.
This is extremely common with European ISPs (especially KPN, Ziggo, and T-Mobile in the Netherlands), university dormitory networks, and mobile broadband connections.
The solution is a Fast Reverse Proxy (FRP). Here is how it works and how to set it up.
How FRP Works
You need two things:
- Your home PC running the Minecraft server (this is behind CGNAT)
- A cheap VPS with a public IP address (this is your relay)
The FRP client runs on your home PC and creates an outbound connection to the FRP server on the VPS. Since the connection goes outbound (from your home to the VPS), CGNAT does not block it. Your home PC initiated the connection, so the router allows it.
Once the tunnel is established, the VPS forwards all incoming traffic on the Minecraft port to your home PC through the tunnel. Players connect to the VPS public IP, traffic flows through the tunnel, and reaches your home Minecraft server.
Player -> VPS (public IP:25565) -> FRP tunnel -> Your Home PC (Minecraft Server)
Step 1: Get a VPS
You need the cheapest VPS you can find. The VPS does not run Minecraft. It only relays network traffic. 1 CPU core and 512MB RAM is enough.
Space-Node VPS plans work perfectly as relay servers. Any VPS with a public IP and Linux works.
Step 2: Install FRP Server on the VPS
SSH into your VPS:
ssh root@your-vps-ip
Download the latest FRP release:
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
tar -xzf frp_0.61.1_linux_amd64.tar.gz
cd frp_0.61.1_linux_amd64
Edit the server config file frps.toml:
bindPort = 7000
That is the entire server config. Port 7000 is the control channel between the FRP client and server. Start the server:
./frps -c frps.toml
Open port 7000 and port 25565 (both TCP and UDP) on your VPS firewall:
sudo ufw allow 7000/tcp
sudo ufw allow 25565/tcp
sudo ufw allow 25565/udp
Step 3: Install FRP Client on Your Home PC
Download the same FRP release on your home PC. On Windows, get the windows_amd64 version. On Linux, get the linux_amd64 version.
Edit the client config file frpc.toml:
serverAddr = "your-vps-public-ip"
serverPort = 7000
[[proxies]]
name = "minecraft-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565
remotePort = 25565
[[proxies]]
name = "minecraft-udp"
type = "udp"
localIP = "127.0.0.1"
localPort = 25565
remotePort = 25565
This is where most guides go wrong. They only set up the TCP proxy. Minecraft uses TCP for the main game connection, but features like voice chat (Simple Voice Chat mod), server list ping, and some Bedrock crossplay functionality use UDP. Without the UDP proxy, these features break silently.
Start the client:
./frpc -c frpc.toml
On Windows:
frpc.exe -c frpc.toml
Step 4: Connect
Tell your players to connect to:
your-vps-public-ip:25565
They connect to the VPS. The VPS forwards everything through the FRP tunnel to your home Minecraft server. Ping will be slightly higher than a direct connection (add ~5-15ms for the extra hop), but for most players this is unnoticeable.
Running FRP as a Background Service
On your VPS, create a systemd service:
sudo nano /etc/systemd/system/frps.service
[Unit]
Description=FRP Server
After=network.target
[Service]
ExecStart=/root/frp_0.61.1_linux_amd64/frps -c /root/frp_0.61.1_linux_amd64/frps.toml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl enable frps
sudo systemctl start frps
Do the same on your home PC if it runs Linux. On Windows, use Task Scheduler to run frpc.exe at startup.
Voice Chat and Extra Ports
If you run Simple Voice Chat (default port 24454), add extra proxy entries:
[[proxies]]
name = "voicechat-udp"
type = "udp"
localIP = "127.0.0.1"
localPort = 24454
remotePort = 24454
Open the port on the VPS firewall too:
sudo ufw allow 24454/udp
When FRP Is Not Worth It
FRP is a workaround, not a permanent solution. If your Minecraft server gets popular (20+ regular players), the VPS relay becomes a bottleneck and a single point of failure. At that point, it makes more sense to host the server directly on proper infrastructure.
Space-Node Minecraft plans start at €0.90/month with a public IP, DDoS protection, and a full control panel. No tunnels, no relay servers, no CGNAT headaches. Check the plans here.
