Upgrade your LAN server bandwidth

Back to index

I'm going to a LAN party with my friends, and last year we had some problems with our LAN bandwidth. We had an old 1gbps network switch with switching capability of 2gbps, which means only two people can talk to each other at 1gbps at once. The second problem was that because the switch was so old and someone had an older Cat5 cable instead of a Cat5e cable the switch decided to make the whole network run at 100mbps. In the current day where games are generally at least several gigabytes if not tens of gigabytes, that is not a very good experience to be had. These are the steps I did to improve our next LAN party in about a month's time.

Also please note I'm not a network professional even though I have a basic surface-scratching networking engineering training. Someone might have a lot to say about my solutions here but ehh. It sure works for our LAN party I guess.

The switch

The previous switch had 8 ports and there were 8 of us plus a server, which meant we had to use some ports from our 4g router as well. That again means someone was going to be even more limited with speed since you can only put through 1gbps connection in between the switch and the router. And that got even worse since the switch decided to run only at 100mbps speed anyway, so if three people were connected to the router they would only get about 33mbps each if everyone were downloading from the server at once. Or vice-versa if the server were connected to the router everyone connected to the switch would get 100mbps/7 people bandwidth at once. How horrible is that? Very. Imagine downloading something like Call Of Duty: Warzone which was at the time around 100 GB of data to be downloaded. Sheesh.

I don't want to have that problem any more, so the requirement for the switch was to have enough ports for everyone and the server and possibly have room for improvement if we decide to scale the LAN party up in the future. This means 24 ports is the minimum. The switching capacity of the switch needs to be 48gbps (from 1 gbps port to another 1gbps port is 2gbps total) so everyone would be able to get full speed at any time. I ordered one from Ebay and I thought I bought a used one but it was still factory wrapped so I guess that was a win.

Another option I was thinking about was to have a switch with 16 ports with at least one of them being 10gbps and then also put a 10gbps NIC on to the server. I did not find such network switches with a tolerable enough pricepoint so I went with the other 24 port switch.

Oh, don't forget to check that your switch has support for 802.3ad as the bond network (which we will configure later in the server) is going to be using that. I won't go through how to configure that on your switch as it might be different on each manufacturer. Just know that you might need to set it up.

The server NIC

When I was looking for NICs from ebay I stumbled upon a 4-port NIC which gave me an idea to use that instead of a 10gbit NIC. So I went with the idea and got one of those 4 port NICs with each port supporting 1gbps speeds. Combined with the one already on the server's motherboard that's 5gbps total bandwidth available for the people at the LAN party, which sure is an improvement over the shared 100mbps connection we previously had.

Setting up the network on the server

The server is running Arch linux and the NIC was instantly recognised without me doing anything, which was a nice thing to have. I feared that I would need to install some obscure server hardware driver but I was positively surprised. Then what was left to be done was to set the network up so that it would have a single connection over all five ports. This is called bonding.

On my Arch install I would need to create the bond network by writing the following configuration to /etc/systemd/network/30-bond0-netdev

[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=802.3ad

And then also /etc/systemd/network/30-bond0.network

[Match]
Name=bond0

[Network]
DHCP=ipv4
LinkLocalAddressing=ipv6
ConfigureWithoutCarrier=yes

[DHCP]
RouteMetric=100
UseMTU=true

Finally all the network interfaces used for the bandiwdth would need to be configured with /etc/systemd/network/30-<interface>.network

[Match]
Name=<interface>

[Network]
LinkLocalAddressing=no
Bond=bond0

Just replace <interface> with your network interface you want to use for the bond network. Do it on all of them.

Then reboot, and you should have a bond network up and running. You can check ip link to see that your bond0 interface has an ip address, and then ping google.com to see that your internet works properly, as it did for me.

connected cables

Back to index