viernes, 30 de diciembre de 2016

Descargar rápido con Steam en Ubuntu (actualizado)

Estos días Steam está con las ofertas navideñas con interesantes descuentos. Y cómo no, las líneas de Internet están quemándose descargando videojuegos.

Los usuarios de GNU Linux se pueden encontrar con una desagradable sorpresa y es que hay un bug que impide descargar al máximo de velocidad con la conexión que tengas.

El bug en cuestión satura de peticiones DNS la red. Ubuntu incluye por defecto un sistema de DNS con el paquete dnsmasq-base.


Network Manager, que es el programa gestor de red usado en Ubuntu, lanza una instancia del programa dnsmasq, usado para encontrar la dirección IP correspondiente a las direcciones web a las que se quiera acceder.

Hay que activar la caché para este programa. Basta con añadir un archivo en /etc/NetworkManager/dnsmasq.d/ con una línea tal que así:

cache-size=100

Esto permitirá recordar a dnsmasq las IPs de direcciones buscadas previamente. Si navegáis por multitud de páginas distintas, podéis poner un número más grande. Yo lo he dejado en 1000.

Una vez añadido ese archivo (de nombre options.conf por ejemplo), hay que reiniciar el Network Manager:

sudo service network-manager restart

Se puede probar fácilmente. Sabiendo que el comando con el que se ejecuta dnsmasq bajo órdenes de Network Manager es el siguiente:

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d 

Sólo tenemos que usar la IP 127.0.1.1 para hacer resolución de nombres. El comando dig permite hacerlo.

dig @127.0.1.1 aguasmenores.blogspot.com
;; Query time: 36 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)

 

dig @127.0.1.1 aguasmenores.blogspot.com
;; Query time: 0 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)

 
El tiempo de respuesta se ve reducido a 0 msec. Sin activar la caché siempre será superior a 0. Si os fijáis, el comando de Network Manager pone la opción --cache-size=0. Lo que hay en el archivo de configuración tiene prioridad por lo que no pasa nada. De otro modo las pruebas con dig no hubieran salido bien.

Configurar Network Manager evita instalar los scripts para correr dnsmasq con systemd a modo de demonio de sistema vinculado a una interfaz de red concreta (es decir, que la resolución de nombres de esa interfaz -típicamente eth0-) se hace vía el dnsmasq arrancado con systemd y no el arrancado por Network Manager, que continua gestionando otras interfaces).

Probado en Ubuntu 16.10.

Este bug de Valve lleva así varios años. Algún día lo corregirán. Mientras habrá que instalar dnsmasq. Si no, la velocidad de red queda limitada a 500KiB/s en vez de decenas de MiB/s.


Si reiniciais el network manager durante una descarga activa en Steam, es posible que Steam se cierre. A mí me ha pasado.
Si no os funciona la caché quizá en vuestra versión de Ubuntu Network Manager no use el plugin DNS para conectar con el dnsmasq local. Para cargar dicho plugin, en el archivo /etc/Network/Manager/NetworkManager.conf debe aparecer la opción dns=dnsmasq en la sección main:
[main]
...
dns=dnsmasq


Si por lo que sea no tenéis Network Manager instalado, entonces instalad dnsmasq a secas. dnsmasq y Network Manager crean conflictos, así que si hay Network Manager entonces sólo dnsmasq-base tiene que estar instalado. Si no hay Network Manager entonces dnsmasq debe estar instalado (que también instalará dnsmasq-base, proveyendo el ejecutable).


Eso es todo.

Ah, una cosa más. Si quieres que las compras que hagas en Steam cuenten como compra realizada para GNU Linux, debes descargar el programa en GNU Linux y arrancarlo bajo GNU Linux unos minutos. Si no lo haces, es decir, si solo lo compras y antes de ejecutarlo en GNU Linux lo haces en Windows entonces contará para Windows ;-(

No hay comentarios:

Publicar un comentario en la entrada