System cannot be distinguished from other systems on the network in games

Hi,

I’ve noticed a strange issue when trying to play some older Call of Duty games on Linux via Proton (or Wine). The game in which this is most easily demonstrated is Call of Duty Black Ops (Multiplayer).

Some basic information about the scenario:

  • My friend and I play the same game, Call of Duty Black Ops (Multiplayer) 2010.
  • I use Linux while my friend uses Windows.
  • We are on the same network
  • The issue does not occur when we both use Windows.

If we want to play together, we join the same online server. Since switching to Linux, this is no longer possible as once I join a server, he is unable to join it, unless I use a VPN.

Other games where this issue can be found:

  • Plutonium IW5 (A popular client for Call of Duty Modern Warfare 3 2009).
  • Call of Duty 4 in some servers (with the CoD4X mod)

As mentioned, booting to Windows, we can both join the same server without issues.
As far as I can tell, something is working differently on Linux here.

Some select information about my system:

System:
  Kernel: 6.13.7-3-cachyos arch: x86_64 bits: 64
Machine:
  Type: Desktop System: Micro-Star product: MS-7B86 v: 1.0
    serial: <superuser required>
  Mobo: Micro-Star model: B450 GAMING PLUS (MS-7B86) v: 1.0
    serial: <superuser required> UEFI: American Megatrends LLC. v: 1.H5
    date: 01/19/2022
Network:
  Device-1: Realtek RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet
    driver: r8169
  IF: enp34s0 state: up speed: 1000 Mbps duplex: full mac: <filter>

I can’t help (sorry) beyond explaining, but that is interesting and it means that the server is almost certainly identifying you solely by your IP address (which probably comes out your router looking the same). It’s possible that the Windows client may append on some other value for it’s identifier? As to why it doesn’t work the same with both OSs is somewhat mystifying.
I would tend to suggest your only answer is going to be from a game dev/server operator, but I’m anxious to hear anyone DOES know.

1 Like

I am going to try disabling IPv6 with:

sysctl -w net.ipv6.conf.all.disable_ipv6 = 1
sysctl -w net.ipv6.conf.default.disable_ipv6 = 1
sysctl -w net.ipv6.conf.lo.disable_ipv6 = 1

I’m also gong to disable TCP window scaling with
sysctl -w net.ipv4.tcp_window_scaling=0

I’m not confident this will change anything but I’ll update after I get a chance to test it.

EDIT: After these changes, I can join the same server as my friend but it can take a few attempts. I won’t consider this the solution as I’d like it to work first try as it does on Windows.

Worth a shot :wink:
I have another idea (kinda sorta), maybe if one of you use ip6 only and one ip4, they will have different origination addresses in their IP space…so if I’m right, that could work out.

1 Like

I don’t know about Call of Duty, but generally speaking this might be related to “Crossplay”. Usually you talk about Crossplay when speaking about PC (mouse & keyboard) and Console (controller) players joining the same server.

I don’t know if CoD allows Crossplay at all und how a Linux client is identified in this regard. But it might be worth to do some more research in this direction.

Crossplay refers to native windows multiplayer with native linux multiplayer.

wine/proton games on multiplayer is not crossplay, it’s technically still just windows to windows, although they can block that out.

This might be a quirk of wine, e.g. call of duty has some feature that makes it so multiple pcs can play on the same IP and that feature doesn’t work on wine. That’s my guess. Might be worth it to report the issue on proton’s github page assuming that’s what you’re using, or winehq if you’re using regular wine.

may be nitpicking, but “crossplay” refers to any sort of multiplayer gaming with players using different “systems” - https://en.wikipedia.org/wiki/Cross-platform_play

Running the game in Wine is technically not the same as running it on Windows - see the whole “Kernel-level anti cheat” discussion - its just similar enough to run the game. I’m pretty sure that a game client can detect if it’s running inside Wine.

These games are from before something like crossplay was ever released. The examples I listed are all traditional multiplayer PC games in that you are presented with a server browser and join servers ran by others (not ran by Call of Duty).

Console players cannot join these servers, they cannot even join each other from different platforms. They’re restricted to either PSN or Xbox Live.

You’re clearly not a gamer, you don’t know what you’re talking about, we’re speaking about terminology, the technical details don’t matter, windows software is windows software, not linux software, end of story.

I’m a gamer, I play games a lot, I know what I’m talking about here, this terminology was created for people like me, it is used predominantly by and for people like me.

Yes, games can detect if you’re running on wine, and some devs have used that to prevent linux players from playing online deliebrately. EAC even has a toggle switch for it.

But that’s not ever called crossplay. You know why? Because you cannot say you officially support linux, without officially supporting linux. If you officially support linux then the players will not be using wine or proton to play in the first place, since wine/proton are used to run windows native versions of the game. Which means if they aren’t specifically prevented from playing online their online compatibility will be 1:1 with any other windows players. Since it’s windows software they’re running, not linux software.

1 Like

Sorry I don’t see how any of this is related to the issue.

It’s a Windows game running on Linux through Proton. The game is not aware of whether or not it is running on Windows or Linux. Sure, some new games might be able to tell, but these games cannot.

Crossplay, no matter how you define it, is NOT related to this.

1 Like

Indeed, that’s what i was trying to say. It’s not.