Danielside

informática softwarelibre divagaciones música

Internet en casa con modem 4G y raspberry pi

Hacía mucho que lo tenía en mente y al fin me he podido poner y lo he conseguido. Dar de baja la fibra, que es una buena pasta por un servicio escasamente aprovechado, para montarme un tinglado con un modem 4G, una sim de cualquier operador virtual, una raspberry pi y un router tp-link.

Hay varias formas de hacer esto, en Internet hay muchos tutoriales muy buenos donde montas en la raspberry el router completo (DHCP, DNS, enrutamiento, etc.) pero hay una manera mucho más sencilla dejando que un router haga el trabajo sucio y convirtiendo a la raspi en un modem.

En el esquema que he montado:

  • La raspberry pi (2 B+la 2, versión bastante modesta con 256Mb de RAM) tiene conectado el modem 4G Huawei E3372, encargándose de la conectividad a Internet
  • A su vez la raspi se conecta por ethernet a un puerto normal del router tp-link WR841N, no al puerto WAN.
  • Los clientes (pcs, teléfonos, tablets, etc) se conectan con normalidad al router tp-link, bien por cable bien por wifi, llevando este el peso de dchp, dns, seguridad wireless, enrutaminto local, etc.
  • El router tp-link les dice a los clientes que su gateway por defecto es la raspi.
  • La raspi enruta todo ese tráfico hacia internet por el modem.

Es una fórmula fácil, de bajo mantenimiento y barata. Y con una sim de simyo he conseguido entre 16 y 20 Mb de velocidad de bajada. Vamos al lio.

La raspberry y el modem

Haciendo pruebas, para que esto sea rápido he tenido que tirar de una Raspberry 2 B+ (900 Mhz, 1G RAM y Ethernet Gigabit). Por el motivo que fuera, las descargas congestionaban demasiado la raspberry 2B (700 Mhz, 512Mb RAM, Ethernet 10/100) La raspberry pi más humilde nos debe valer, porque no va a hacer dhcp, dns ni distribuir internet por wifi, como se suele hacer en los tutoriales que hay en Internet. Necesitamos que tenga Raspbian, la última versión disponible. Ejecutaremos sudo raspi-config y hacemos que tenga toda la RAM dedicada al procesamiento y el mínimo para la GPU y además habilitaremos el acceso SSH.

Tenemos que hacer que tenga una IP fija para que no haya lios y los clientes tengan su gateway a una ip que ya no existe. Para ello editamos /etc/dhcpcd.conf y vamos hasta donde pone “Example static ip configuration” y descomentamos dos líneas:

interface eth0
static ip_address=192.168.0.119/24

Y esa será la IP de la raspi por la interfaz ethernet y por tanto la IP del gateway por defecto. Luego nos encargaremos de que nadie nos la pise. El motivo de ponerla estática y no por DHCP con un lease estático es que no queremos que esta interfaz enrute hacia internet, porque se podría poner por defecto y la raspi ya no encontraría la ruta hacia el mundo. Debe quedar tal que así:

pi@raspberrypi:~ $ sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default hi.link 0.0.0.0 UG 203 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.8.0 0.0.0.0 255.255.255.0 U 203 0 0 eth1

Yo ya había tenido otro modem 3G de Huawei por USB, que realmente funcionaba como modem. Es decir que el ordenador que lo use debe encargarse de la marcación y abrir la conexión por el protocolo PPP de toda la vida, el mismo que cuando teníamos los modems de línea telefónica que hacían sonidos tan divertidos. Pero este es mucho más interesante y actúa como un micro-router. El trasto se encarga de habilitar la conexión de forma muy rápida, como si se tratara de un smartphone. Lo único que se hace la primera vez es configurarle el PIN de la SIM. A partir de ahí, concede IPs por DHCP (ethernet over usb) y tiene hasta una página web de administración en 192.168.8.1.

En Debian funciona perfecto, no hace falta instalar drivers adicionales. Lo único que tenemos que hacer es instalar el paquete usb-modeswitch. Normalmente Linux detecta estos dispositivos como de almacenamiento masivo porque llevan ranura SD. Este programa lo que hace es ponerlo automáticamente en modo modem. En Debian fue automático (al reiniciar) pero en Ubuntu fue necesario indagar un poco más y hacerlo a mano (chúpate esa ubuntu).

Si vemos que nos da IP el modem (en Raspbian ha creado una interfaz eth1) esto lo dejamos listo y continuamos con…

El router

No tiene por qué ser tp-link ni tiene por qué ser este modelo. Pero es muy interesante porque todavía se vende, es muy barato nuevo (20 euros), los hay a puñados de segunda mano y ¡admite librecmc!

LibreCMC es una distribución GNU/Linux para sistemas embebidos que fue añadida a la lista de la FSF de sistemas operativos completamente libres. Se fusionó con la iniciativa LibreWRT que a su vez derivaba del más conocido OpenWRT.

Cualquier router que tengamos con OpenWRT o, mejor, LibreCMC nos debería valer. Yo solo he probado con LibreCMC. Lo único que necesitamos es poder configurar las opciones del servidor DHCP.

Normalmente los routers vienen configurados para que ellos mismos sean el gateway y el servidor DHCP. En este caso lo que queremos es que todos los clientes que se conecten por DHCP sepan que su gateway no es el tp-link, sino la raspi.

Si recuerdas, le pusimos una IP fija a la raspi. Hay que asegurarse de que nadie la pise, dándole un lease estático (Network > DHCP and DNS y hacia abajo hasta Static Leases)

Ahora configuraremos a nuestro gusto el router, que no es el objetivo de este artículo. La seguridad wireless, DHCP, servidores DNS etc. El paso importante que nos queda aquí es configurar las opciones de DHCP. Para ello tenemos que ir a Network > Interfaces y pulsar en Edit sobre la interfaz LAN. Un router de estos suele ser una interfaz para la red local unida a un switch de cuatro puertos y una interfaz WAN. En este caso editamos las opciones de la interfaz LAN. Abajo del todo vemos DHCP Options.

Todo esto es bastante primitivo porque las opciones son números. La opción 6 hace que a los clientes se les ofrezcan sevidores DNS distintos del que se les da por defecto (que es el mimo router). Estos los he cogido de Open NIC.

Lo más importante para lo que nos ocupa es la opción 3, donde configuramos la IP de la raspi. De esta manera, cada cliente que se conecte por DHCP pondrá su gateway por defecto como la raspberry.

Cerrando

Debemos activar el forward de paquetes en el kernel, para que Linux sepa que tiene que intercambiar paquetes entre sus interfaces de red. Esto se hace editando /etc/sysctl.conf y descomentando la línea net.ipv4.ip_forward=1. Este cambio es a prueba de reinicios, pero para que funcione inmediatamente se puede hacer sudo sysctl -p.

Ya solo nos queda una regla iptables que termine de habilitar el enrutado entre las interfaces, que crearemos con sudo iptables -t nat -A POSTROUTING -j MASQUERADE. En cuanto la tengamos, para que aguante reinicios hay que instalar el paquete iptables-persistent. Durante la instalación nos preguntará si queremos guardar las reglas que tenemos en este momento, a lo que contestaremos afirmativamente.

Con esta configuración, en cualquier momento tecleando http://192.168.8.1 en el navegador podremos acceder al menú de administración del modem Huawei. Así podremos menear el invento hasta que tenga la mejor cobertura:

Ya solo te queda conectarte al tp-link por cable o wifi, configurar automáticamente la red del equipo con DHCP ¡y a navegar!

Si quieres ahorrarte el pastón de una conexión de fibra y tienes suficiente con una limitación de descarga al mes (en función de la tarifa que contrates) y además ser independiente de estas compañías, es una buena fórmula. Si cuentas con buena cobertura 4G en tu zona, se puede hacer de todo. El streaming va de lujo. Yo por ejemplo he terminado pagando 17€ por 20G/mes en lugar de 52€ por la fibra. Y si quiero puedo cambiar de tarifa inmediatamente. Además, cambiar de compañía es lo más fácil del mundo: pillarte una SIM y cambiarla en el modem. Y si te vas de vacaciones, simplemente te llevas el modem contigo. Aunque si quieres disfrutar de tus vacaciones, olvídate de Internet 😉

Y ahí va el speedtest para la configuración con la raspi 2 B+. Con la anterior, el test de subida siempre fallaba y la descarga daba 16Mb. Y ahora…


Archivado en categoría(s) GNU/Linux, Internet, Raspberry Pi, Software Libre

Enlace permanente


  • tomas dice:

    Muy bueno! A ver si le doy vida a esa raspberry que tengo por ahí cogiendo polvo.


  • Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *