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. Check its address in the Call of Duty 1, Call of Duty 2 or Call of Duty 4 server list on MantaScope to compare the public listing with the in-game browser.

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