Compartir la conexión a Internet con un Linux

A veces puede ocurrir que en un lugar donde solo tengáis wifi necesitéis pinchar algo con ethernet y justo en ese momento no dispongáis de ningún adaptador, pero sí de un portátil.

Por poner un ejemplo, quizás parezca un poco absurdo, pero creerme que no lo es, imaginad que os vais a pasar unos días fuera de casa y os lleváis vuestro teléfono IP, el cual no tiene wifi, pero os lo lleváis porque estáis muy contentos con él y los softphones que hay para linux son bastante peores, ya que no disponen de cancelación de ruido de fondo entre otras cosas.

Estáis fuera y con un móvil podéis hacer teetering y generar una Wifi, a la cual os conectáis con el portátil, pero … ¿cómo os conectáis con el teléfono?, no se puede a priori.

Bueno, sí se puede, para ello os comparto una de mis recetas de usos veraniegos 🙂

  1. Instalar un servidor de DHCP, ojo, no es necesario que arranque siempre por defecto, puede ser que no estemos siempre con la necesidad de generar DHCP.
  2. Instalar un firewall para hacer NAT del teléfono (o red local generada).
  3. Importantísimo, habilitar el fordwarding en el linux.

Estos tres pasos los tengo hechos en mi portátil con una Ubuntu 16.04.

Para instalar un servidor de DHCP:

sudo apt-get install isc-dhcp-server

Esto obviamente no es ciencia, ahora la configuración aunque no es muy complicada, os pego la que he usado en mi caso, os pego sólo lo que he añadido en el fichero /etc/dhcp/dhcpd.conf:

option subnet-mask 255.255.255.0;
option broadcast-address 192.168.89.255;
option routers 192.168.89.1;
option domain-name-servers 8.8.8.8,8.8.4.4;
option domain-name "eduangi.com";

subnet 192.168.89.0 netmask 255.255.255.0 {
range 192.168.89.10 192.168.89.100;
}

En mi caso la red que he levantado para usar el teléfono y crear una lan donde me haga falta es la 192.168.89.0/24.

También hay que añadir al fichero /etc/default/isc-dhcp-server donde yo he añadido

INTERFACES="enx803f5d093ea8"

Sí, mi ethernet se llama así :(, es un adaptador USB.

Y ahora lo más importante es que el servicio no arranque por defecto, para ello simplemente

sudo update-rc.d isc-dhcp-server disable

Genial, ahora vamos a por el siguiente paso, el NAT, para ello necesitaremos tener instalado iptables y agregar la regla siguiente:

sudo iptables -t nat -A POSTROUTING -s 192.168.89.0/24 -o tun0 -j MASQUERADE

Obviamente esta regla hace referencia a la red que yo me he dado de alta para tener mi teléfono corriendo y cada uno deberá de modificarsela. En cuanto a -o tun0 hace referencia a que quiero que el tráfico quiero que salga por la Open VPN  que tengo corriendo en el portátil porque como ya he comentado la voy a usar para conectar un teléfono y obviamente la centralita no tiene IP pública.

Y para habilitar el forwarding simplemente ejecutaremos como root:

echo 1 > /proc/sys/net/ipv4/ip_forward

Ahora, como configurar esto va por gustos, en mi caso como hay he comentado antes al arrancar si quiero usar esa red me gusta levantarla a mano y esto es:

sudo /etc/init.d/isc-dhcp-server start
sudo iptables -t nat -A POSTROUTING -s 192.168.89.0/24 -o tun0 -j MASQUERADE
sudo -i
echo 1 > /proc/sys/net/ipv4/ip_forward

Así que si tenéis la necesidad de levantar alguna red ethernet y conectarla a la wifi de vuestro linux ya sabéis como, aunque si sois gente «normal» quizás no necesitéis esto jamás, pero … nunca se sabe.