Private coturn server for my games.
-
FAF has been operational for over a decade, and has yet to establish reliable consistent connections between players.
You rarely see this issue occur in steam, and the best part in steam is that, if someone does disconnect, you can simply wait for them to reconnect. 9/10 times they successfully reconnect too. I remember when you could do this in faf many moons ago, but sadly this is no longer the case. And you can't reconnect in the client either to try salvage it.
Idk what the problem is with faf and players not being able to reliably connect to eachother in game. It's very painful going through 32 minutes of video gameplay only to have some random player randomly disconnect for no apparent reason.
I doubt faf will ever fully resolve this issue, I don't think they even know how.
-
@yew said in Private coturn server for my games.:
I doubt faf will ever fully resolve this issue, I don't think they even know how.
This is correct. We don't know. None of us are professional game and/or network engineers. We can not afford to pay for a company to fix it for us. And making ourselves dependent of Steam is also not an option (even all the legal issues aside).
-
@iamfromrussia said in Private coturn server for my games.:
I still can't understand, does it make sense to combine binary traffic? If it's such a difficult task, is it worth spending time on? I'm not an expert in network programming, but isn't UDP a connectionless protocol https://docs.oracle.com/cd/E19620-01/805-4041/6j3r8iu2f/index.html ?
Is there a difference whether the client will receive information on one port, on 16 or on 16,000 ports that the server listens on in case of UDP connection?Just for optimization to reduce the total number of connections and the numer of individual packets flying through. Every UDP packet is independent, for example 8v8, its about 30 packets on every tick (lets say ~250 milliseconds). The total number of packets is 30164=1920 per second, for each player server should open 15 ports, 15*16=240.
For now the biggest problem for me is testing, i need atleast 3 players. using my main PC as host, remote desktop on another PC and old PC under the table.
-
If you need help testing feel free to ping me. I work from home so I'm available most of the day anyway.
-
Ok, now we can mythbust the proxy server approach.
I changed the faf-ice-adapter to use a single TCP socket for all communications.faf-ice-adapter repo
proxy-test repoAfter serveral mock tests i didn't see any difference. On weekend i plan to rent a basic VPS and run test in the wild.
-
In mock tests ICE also always works perfectly
Nobody ever questioned whether one large plain proxy would work. The ICE adapter laid foundations for rerouting the game traffic anywhere.
However it has drawbacks in operational costs and in latency.
And in theory plain ICE connections should always work (with relay as a fallback which basically is single-connection proxy). As such in theory it is also superior to a proxy-solution that does not traffic deduplication.
But in practice (especially Windows and/or security software interference) and for the given software libraries available we see, that it does not hold up the promises.However under current DDOS situation a proxy server becomes more interesting if it were tunneled through cloudflare websockets...
-
I have first feedback from 2v1 game, testers say it didn't feel better.
How to join testing?
- backup your
FAF Client/natives/faf-ice-adapter.jar
- replace with https://github.com/user-attachments/files/17532274/faf-ice-adapter.zip or build from the source (https://github.com/anykey111/faf-star-adapter)
- host game, invite firends (they must use the same version of faf-ice-adapter.jar as you're using)
Why should i participate?
For the sciene, even if we know that this solution is inferior there is no proofs and people keep returning to this idea.
- backup your
-
- Can I see in the logs/debugger which player is in my lobby and has coturn server connections?
- Can I prevent this by not allowing coturn server connections (so, I could have the IPs and block them as hosts in my firewall, then no more players can get into my lobby - there are only 4 Germany 1 / Finland / USA East / Global of them - or are there several and only the key regions are listed)?
- When you switch from the lobby to the actual game, are all connections renegotiated, right or wrong? And what happens in the lobby is just a rudimentary check to see if it works at all with the connections?
- What about the option “Allow the ICE adapter to use IPv6”? It says that it causes connection problems for some players, but what advantage does it have in general (more stable connections when a connection is established?)?
- What actually causes the lag in a DDoS when players are in the game, if it's just P2P connections? If players are connected to coturn servers and these are then attacked (the coturn servers - are they attacked at all?), or are there other services that limit the game (live replay?)? Does the player still have connections to FaF service servers during the game, which can cause lag (in-game behind issues)?
-
If you block the faf coturn server selected in the settings, you cannot connect to other players.
So a coturn server is always used?Germany 1 = Hetzner (Dedicated Server?) always same IP
Finland = Hetzner (Dedicated Server?) always same IP
US East = Hetzner (Cloud?) always same IP although cloud?
Global = xirsys / DigitalOcean (Cloud?) mostly always a different IPAs the only coturn server, what does Global actually want with port 80?
Example:
Germany 1:
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp] (c.f.iceadapter.ice.PeerIceModule:177)Global:
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177)
INFO Using all viable ice servers: [207.154.234.214:3478/tcp, 207.154.234.214:3478/udp, 207.154.234.214:80/udp, 207.154.234.214:80/tcp] (c.f.iceadapter.ice.PeerIceModule:177) -
Can’t say for sure but using a common web port like 80 or 443 is often an easy way to get through a network firewall since those ports are often allowed in order to allow web traffic. Could be because of that.