This problem is generally due to a well-known software problem with Steam games on multi-homed machines, and it's not specific to our servers here. It's a simple bug that's been around for years and which has been brought to Valve's attention repeatedly, but which they have so far been unwilling or unable to fix.
Specifically, when the server attempts to connect to Steam using TCP, it does not bind to the correct IP address. As a result, anything that depends on the master server's knowledge of the IP, including the browser and follow-a-friend feature, will use whatever the OS uses for connections by default, which is usually the wrong one.
Steam uses this broken TCP connection by default on Linux. On Windows, it first tries with UDP, and only reverts to TCP if the UDP connection breaks.
On Windows, the simplest workaround is to restart the game server. Most of the time, this will lead to their UDP system being used again, and that mechanism binds to the correct IP. We restart our own servers once a day, which works well for this.
A more thorough workaround is to prevent the TCP connection to Steam from being established, causing those connections to time out and forcing Steam to use UDP exclusively (this is the only workaround that can be applied successfully on Linux). You can do this by using a firewall to block TCP connections that use a remote port range of 27017-27019. This can be done through the "Firewall" page in the control panel using these steps:
- Open the control panel for your VDS.
- Click "Firewall".
- For one of the rules, click "[Choose a preset or custom filter]" and then choose "block tcp from ports 27017 through 27019" from the menu.
- Click "Submit filter changes".
You can check to see if your server is listed properly with Valve using a URL like this: http://api.steampowered.com/ISteamApps/ ... 64.202.209. You can check to see what type of Steam connection (TCP or UDP) is being used, and what Steam server IP the game server is trying to connect to, by viewing "Steam/logs/connection_log_xxx.txt" or "bin/logs/connection_log_xxx.txt" (the name varies depending on the type of server) in the server's tree.