LAN game server not visible through Zerotier - local LAN works

Hi,

I have a funny problem and I’m running out of ideas.

So me and a few mates want to play an older game, Star Wars Battlefront 2 (the classic from 2005), in LAN via Zerotier. I’m the only one on Linux, running the game via Wine and the other mates are on Windows 10. We are all connected to the Zerotier network, ping works, remote access like using Anydesk works. When a Windows user does host a game, everyone can join and play … except me. I don’t see the server in the lobby. If I do host a server, nobody can see me, nobody can join. When I switch to Windows (I’ve got dualboot on the same PC), everythin works.

So I thought, hey, maybe running the game through Wine is the problem here. I fired up my second PC (Windows 10) in my local LAN and hosted a game there. It turns out, I can see and join the server on Linux too. So Wine can’t be the problem. Then I switched my second PC to W-LAN, connecting it to my smartphone hotspot, simulating a mate outside of my local LAN. Created a Zerotier server and both PCs joined. Pin works, Anydesk works, everything seems to work … except again, my Linux machine can’t see and join the server on the Windows machine.

So, then I thought, maybe Zerotier on Linux is somehow broken(?). I fired up a different game, still with my Zerotier setup, and look at that, my Linux machine can see and join the server in that specific game. I have to say, this other game relies on the old DirectPlay (Windows), but I’m not sure if that’s relevant. So, what’s going on?

A few more notes:

  • Firewall on all devices is deactivated

  • We observed that being able to to see a hosted server via Zerotier, in any game, is only possible after automatic metric in the ipv4 configuration under Windows is set to 1. Interesting enough, in my local LAN setup, on Linux, this was not necessary. But, to rule this one out, I changed the metric configuration on my Linux machine for the Zerotier connection and device to 1. At least I think that’s what I did. But it didn’t help. Here is how I did that:

sudo nmcli connection modify zerotier_name ipv4.route-metric 1
sudo nmcli connection up zerotier_name
sudo nmcli device modify zerotier_name ipv4.route-metric 1
sudo nmcli device up zerotier_name

To check, the following command

route -n

does show, that the metric has changed to 1. Strangely, the standard configuration doesn’t show any metric for the Zerotier connection and device.

Anyone got ideas?

Some more info here:
https://zerotier.atlassian.net/wiki/spaces/SD/pages/7536695/Problems+With+LAN+Game+Announcements+and+Broadcasts+on+Windows

Maybe try the linked WinIPBroadcast or ForceBindIP | r1ch.net programs.

Hi,

thanks for the answer and the provided links/information. I’ve tried everything mentioned there on the Windows side and, as far as possible, on the Linux side too. So, for example, installing the WinIPBroadcast service via Wine into the specific Wine prefix of the game etc. Strangely, using the ForceBindIP tool via Wine combined with the game does crash it as soon as I try to go into the Multiplayer “section” in that game. This does not happen on Windows but, like said, the provided tools didn’t change the situation, sadly.

But I have to admit, I messed it up a bit in my initial post about the second game tested. It turns out, only when I do host a server on my Linux machine via Zerotier, the Windows machine can see and join that game. But in reverse, my Linux machine doesn’t see the server hosted on the Windows machine (still everything via Zerotier). Running the main game (Battlefront 2), nobody can see each other. Perhaps this fact helps to nail down the problem? It seems, at least in the situation with the second game, either the game running via Wine doesn’t look up for information needed to find a LAN game or the Windows machine doesn’t send something needed for the Linux machine. Again, this only occurs via Zerotier. Local LAN is fine.

Another thing I discoverd:

Am I reading it wrong or does the Zerotier adapter on Windows receive a gateway (25.255.255.254), which is not present in the network adapter properties for Zerotier, and on Linux it doesn’t?

Windows (using my smartphone as a hotspot via W-LAN)
Imgur
Linux (using cable with router)
Imgur

25.255.255.254 is some hack for Windows. I don’t remember the details, but it’s only needed on Windows.

Bummer about ForceBindIP.

The main issue is that Windows’ networking stack will send broadcast and multicast only on one interface, the one with the lowest metric.

One linux, broadcast goes out of every interface.

Also, on Windows make sure the set the adapter to “private”. On windows 11 you need to use a shell command:

I think you’ll have to try looking at Wireshark on both ends to find where it’s failing, but I’m not sure there will be a solution.

And running it under wine is just another layer of stuff that can go wrong, so not ideal for debugging.

Like the broadcast “limit” there are many other oddities in the windows networking stack. I’m not sure if it’s the same for a virtual interface like zertier, but normaly you need to enable packet forwarding like you had multiple physical network adapters.

Btw, both WinIPBroadcast and ForceBindIP are tools meant to run on windows and not on wine as linux already solved this.

Could be the reason why the Windows machine can see the server hosted on the Linux machine but not in reverse. At least for the second game. Though, I always make sure that the metric settings on Windows for the Zerotier network adapter is set to 1, which is needed anyway in a only Windows scenario.

Everytime the window is poping up after connecting to the Zerotier network (Windows 10 in use), I make sure that I click on “yes” so it becomes private. But no harm in typing the command and forcing it again to become private. I’ll try that one out.

Yeah, possibly, though as I understand it, Wine isn’t much doing regarding network and just uses the network interfaces the Linux host provides. Anyway, I have a game, which also has a native Linux version, lying around. So I will test that one too.

That’s good to know and, again, could explain why the server hosted on the Linux machine is visible for the Windows machine in that second game.

Will tinker around further and report.

1 Like

Sorry, about posting again but… IT’S FIXED!

So, I was thinking. Why in the hell is the situation different in the second game than in the first. Then it came to me. Not every game is the same. So game 2, where Windows could see and join Linux, has to communicate in a different way regarding listing server compared to game 1. To be specific, game 2 probably behaves like this:

Client calls out (broadcast) if there is any server and the server, getting this call, calls back the same route it came in. The client gets the hosted game in the list.

Game 1, where Linux and Windows don’t see each other, has to behave like this:

Server calls out (broadcast), look at me I’m hosting a game, anybody there? Client gets this and the game is listed.

Could be wrong, though, but otherwise it doesn’t make sense. So, assuming this, I started to look at the Linux side (again) and searched through the web about sending/broadcasting problems on Linux with Zerotier, specifically in gaming. Almost didn’t consider it because of this statement:

It seems this isn’t quite right and/or more has to be configured for Zerotier on Linux. On my research I stumbled over this:
https://www.reddit.com/r/zerotier/comments/lgy553/mac_machines_cannot_see_lan_discovery_broadcast/
Exactly my problem! Mac and Linux aren’t that different so I tried my luck and executed the described command.

sudo route add -host 255.255.255.255 dev my_zeroztier_interface

Before:
Imgur
After:
Imgur

Tell you what. Windows and Linux see each others servers. Game 1 and Game 2. No problems anymore.
This article here also encouraged me:
https://zerotier.atlassian.net/wiki/spaces/SD/pages/6815768/Router+Configuration+Tips

System Firewalls and Security Software

If your computer has a local firewall, allow traffic to and from UDP port 9993. In some cases (such as the Windows built-in firewall) ZeroTier does this automatically if installed with one of our installation packages. In other cases such as Linux iptables we leave this to the user since there are too many variations and we do not want to accidentally corrupt user settings by trying to modify them manually.

So I hope this helps others facing the same problem in a mixed scenario like mine. I don’t know exactly why I have to add that route but, if it is by design, I advise to point this one out more visible.

Thank you both for your help and tips, appreciate it!

1 Like

Wow nice job. That’s a good tip.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.