Play games over the internet even with CGNAT connections by using Goldberg Steam emulator combined with ZeroTier's virtual LAN technology.
1.1 Understanding CGNAT (Why Port Forwarding Fails)
What is CGNAT?
CGNAT = Carrier-Grade Network Address Translation
Your ISP shares one public IP address among MANY customers. Think of it like an apartment building with one street address but many units.
Your Situation with CGNAT:
- Your router shows WAN IP:
10.194.x.x or 192.168.x.x
- Your actual public IP:
204.237.x.x
- These are DIFFERENT = You have CGNAT
- Result: Port forwarding CANNOT work
Why This Breaks Gaming:
Traditional multiplayer hosting requires:
- You open ports on your router (port forwarding)
- Friends connect to your public IP
- Router forwards traffic to your PC
With CGNAT:
- You CAN open ports on your router ✓
- Friends connect to public IP ✓
- ISP's CGNAT blocks the traffic ✗ FAILS
The ISP has ANOTHER router/NAT before yours that you can't control!
The Solution: ZeroTier + Goldberg
Both bypass the need for port forwarding by using OUTBOUND connections only.
1.2 How Goldberg Emulator Works
What Goldberg Does:
- Replaces Steam's API files (steam_api.dll)
- Emulates Steam's multiplayer features
- Enables LAN play without Steam running
- Allows multiple instances per game
Key Concepts:
LISTEN PORT (Local Port):
- Goldberg listens on a UDP/TCP port on YOUR computer
- Default varies, configured in
listen_port.txt
- This is LOCAL to your PC, NOT your router
- All players must use the SAME port number
- Example: Everyone uses port
47584
Important: This is NOT the same as "opening ports" on your router! This port is on your computer's network adapter (local), not facing the internet. CGNAT doesn't affect local ports!
BROADCAST DISCOVERY:
- Goldberg sends "broadcast packets" to find other players
- Normal: Broadcasts to
255.255.255.255 (local network only)
- With
custom_broadcasts.txt: Sends to specific IPs you list
- This is how players discover each other
CUSTOM_BROADCASTS.TXT (Critical for VLAN):
Location: %appdata%\Goldberg SteamEmu Saves\settings\custom_broadcasts.txt
Purpose: Tell Goldberg exactly where your friends are
172.28.145.82
172.28.145.93
172.28.145.104
This makes Goldberg send discovery packets to these IPs instead of just broadcasting locally. ESSENTIAL for ZeroTier/VLAN play!
1.3 ZeroTier Setup Guide
How ZeroTier Solves CGNAT:
- Creates a virtual network adapter on your PC
- Gives you a virtual IP (like
172.28.x.x)
- All players on same ZeroTier network can see each other
- Works by making OUTBOUND connections (bypasses CGNAT!)
The Magic: Your PC → (outbound) → ZeroTier servers → Friend's PC ← (outbound)
Both connections are OUTBOUND from each person's perspective! No inbound connections needed = CGNAT doesn't block it!
Step-by-Step Setup:
1
Create ZeroTier Account
- Go to https://my.zerotier.com/
- Click "Sign Up"
- Use Google/GitHub or email
- Verify email if needed
- Log in
2
Create Network
- Click "Create A Network"
- Note the 16-digit Network ID (example:
a0cbf4b62af04ee1)
- Click on network to configure
- Give it a name (optional): "Gaming Network"
- Keep "Access Control" as "Private"
- Remember this Network ID - you'll share with friends
3
Install ZeroTier
- Download from https://www.zerotier.com/download/
- Run installer
- Allow Windows Firewall (check both Private and Public)
- ZeroTier runs in system tray (bottom-right)
4
Join Your Network
- Right-click ZeroTier icon in system tray
- Select "Join Network..."
- Enter your Network ID:
a0cbf4b62af04ee1
- Click "Join"
5
Authorize Yourself
- Go back to ZeroTier Central (my.zerotier.com)
- Refresh your network page
- Scroll to "Members" section
- Find your PC (shows hostname)
- Check the "Auth?" checkbox
- Note your assigned IP (example:
172.28.147.83) - WRITE THIS DOWN!
6
Verify Connection & Test Ping
- Press Win+R, type:
cmd, press Enter
- Type:
ipconfig
- Look for "Ethernet adapter ZeroTier One"
- Note the IPv4 Address (should match what ZeroTier Central shows)
Testing Connectivity (Ping):
After your friends join and are authorized, test the connection:
You should see replies like:
Reply from 172.28.147.105: bytes=32 time=45ms TTL=64
Reply from 172.28.147.105: bytes=32 time=43ms TTL=64
If "Request timed out":
- Wait 2 minutes and try again (network needs time)
- Check Windows Firewall settings
- Verify friend is authorized in ZeroTier Central
- Make sure both PCs are connected to ZeroTier
7
Invite Friends
- Share Network ID with friends
- Friends repeat Steps 3-6
- You authorize each friend in ZeroTier Central (Step 5)
- Collect everyone's ZeroTier IPs:
- You:
172.28.147.83
- Friend A:
172.28.147.105
- Friend B:
172.28.147.222
1.6 LOBBY_CONNECT Tool (For Special Games)
What is LOBBY_CONNECT?
A special tool included with Goldberg that helps you discover and join game lobbies when the game has no LAN browser menu.
When You Need It:
- Game only has "Invite Steam Friends" option
- No LAN server browser in multiplayer menu
- Can't manually enter IP addresses
- Game uses Steam's lobby system exclusively
How It Works:
- Host creates a lobby in-game
- Host's Goldberg broadcasts lobby info via custom_broadcasts
- You run
lobby_connect.exe (before launching game)
- lobby_connect discovers host's lobby on the network
- Shows you list of available lobbies
- You select the lobby
- lobby_connect launches your game with "+connect_lobby" command
- Game automatically joins the lobby!
Step-by-Step Usage:
HOST (Player creating lobby):
- Launch game with Goldberg
- Go to multiplayer menu
- Create/Host a game
- Make sure it's PUBLIC (not invite-only)
- Wait in lobby
- Tell friends you're ready
JOINER (Player connecting):
- Make sure game is CLOSED
- Navigate to:
[Goldberg folder]\lobby_connect\
- Double-click
lobby_connect.exe
- Wait 2-3 seconds while it discovers lobbies
- You'll see a menu with available lobbies
- Type the number of the lobby to join
- Press Enter
- Browse to your game's .exe file when prompted
- Click Open
- Game launches and AUTO-CONNECTS to lobby!
Troubleshooting LOBBY_CONNECT:
"People on the network: 0"
- Host hasn't created lobby yet (wait for host)
custom_broadcasts.txt not configured (add host's IP)
- Can't ping host (fix ZeroTier connection first)
Shows people but no "command line"
- Host hasn't created lobby yet (host needs to actually host)
- Lobby is invite-only (host: make it public)
- Run lobby_connect AFTER host creates lobby
"Failed to initialize Steam API"
- Need
steam_appid.txt in lobby_connect folder
- Copy your game's
steam_appid.txt to the lobby_connect folder
Game launches but doesn't connect
- Wrong .exe selected (try different exe in game folder)
- Game doesn't support +connect_lobby command
- Host's lobby closed before you joined