Server does not appear in the in-game server browser

Call of DutyCall of Duty: United OffensiveCall of Duty 2Call of Duty 4: Modern WarfareCall of Duty: World at War

Your server starts, you can join it by IP, but it is not in the list.

First: separate the two problems

They are different failures with different fixes.

printf '\xff\xff\xff\xffgetstatus' | nc -u -w2 YOUR.IP 28960 | head -c 400
  • No reply — this is a reachability problem, not a listing problem. See Awaiting Challenge.
  • Reply arrives — the server is fine and the master registration is what is failing. Continue here.

Cause and fix

1. dedicated 2

+set dedicated 2

dedicated 1 is LAN. It never sends a heartbeat. This is the most common single cause.

2. The master server may simply be gone

State of the classic masters:

Game Master Authorize
Call of Duty 1 codmaster.activision.com:20510 codauthorize.activision.com:20500
Call of Duty: UO coduomaster.activision.com:20610 port 20600
Call of Duty 2 cod2master.activision.com:20710 cod2authorize.activision.com:20700
Call of Duty 4 cod4master.activision.com:20810 cod4authorize.activision.com:20800

CoD1's master is still answering in 2026. The later ones are unreliable and have been for years, so treat the in-game browser as a partial view of reality and publish your address directly.

For Call of Duty 4 the practical answer is CoD4X, which has its own working master and is where the remaining players are.

cod.pm runs a community master and web server list, which is a useful cross-check: if your server shows there but not in-game, the Activision master is the problem, not you.

3. Check you have not disabled the masters

Many configs copied from private servers contain:

set sv_master1 ""
set sv_master2 ""

which is exactly how you suppress registration. Remove those lines for a public server.

4. NAT that rewrites the source port

The heartbeat's source address is what the master records. Port-preserving NAT works. A NAT that rewrites the source port, or Docker's default bridge, will register an address that nobody can connect to — so the entry either fails to appear or appears and times out for everyone.

Use host networking in Docker. On a home router, forward the UDP port one-to-one rather than to a different internal port.

5. Give it time and check outbound

Heartbeats are periodic, not instant. Wait a few minutes. And confirm outbound UDP to the master is not blocked:

sudo tcpdump -ni any udp port 20510 or udp port 20610 or udp port 20710 or udp port 20810

You should see packets leaving.

Related