Slow Download Speeds on Steam For Linux

I’ve been getting horrendously slow speeds on Linux Steam (~500k/s) and 5-6Mb/s on Windows, and only now found out why. There’s a ticket on GitHub for this:

https://github.com/ValveSoftware/steam-for-linux/issues/3401

In short, the client is very aggressive on its DNS requests, which normally causes it to be throttled by servers, leading to really slow downloads. However, using dnsmasq allows the requests to be cached locally and offload the requests.

Even though the instructions are for Arch, they worked for me:

  1. Install dnsmasq
  2. Modify /etc/dnsmasq.config and add the line listen-address=127.0.0.1
  3. Restart the dnsmasq service (systemctl restart dnsmasq.service) or reboot your machine

Enjoy the speed

Dynamic IP Workaround

If you rely on remote access to your home computer but cannot be bothered with having to record your external IP each time then you can use DynDNS or No-IP, but they rely on installing their own tools to update their systems, and in some cases, want you to pay for the service. I have found a (somewhat convoluted) way of an alternative means, which should work under most Linux environments.

  1. Install the packages “at” and “grive” (at allows you to schedule tasks from command line with simple timing syntax. Grive is a console-based Google Drive syncing tool) — note, however, that grive may not be present in all repositories.
  2. Setup Grive.
  3. Add this script to the grive directory and name it externalIP.sh:

IP=wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
HOST=host $IP | cut -d ' ' -f5
echo $IP $HOST | tee externalIP.txt
grive
echo ‘cd {path-to-your-grive-folder};./externalIP.sh’ | at now + 2 hours

  1. Make the script executable
chmod +x externalIP.sh
  1. Run the script ONCE
$ ./externalIP.sh
XX.X.XXX.XXX your-hostname.
Reading local directories
Synchronizing folders
Reading remote server file list
Detecting changes from last sync
Synchronizing files
sync "./externalIP.txt" doesn't exist in server, uploading
Finished!
warning: commands will be executed using /bin/sh
job 278 at Tue May 6 22:48:00 2014

What the script does is determine the external IP address of your machine, do a reverse lookup on it, write the results to a text file, then sync it with Google Drive. What you can do is read the text file (externalIP.txt) off your Google Drive storage via the web interface at http://drive.google.com, and you can then access it remotely, using either the IP or the hostname. The last line schedules the script to be run again in two hours from now (in case your IP address changes), this is the “job 278” line.

It should also be noted that the scheduling carries on between reboots.

%d bloggers like this: