Compartir Wi-Fi con el Raspberry Pi

Compartir la conexión a internet Wi-Fi de nuestra PC con el Raspberry Pi es sencillo si has seguido este blog ya que básicamente requiere los mismos pasos que en el post sobre compartir Wi-Fi con un contenedor LXC. Aquí repetiré los pasos para el Raspberry usando la conexión DHCP que ya hemos preparado en el post anterior.

En primer lugar, si recuerdan, en el post sobre compartir Wi-Fi con un contenedor LXC mencioné que el adaptador de red que usado para compartir el internet debe tener una IP en el mismo segmento de red que la red Wi-Fi. En el caso del Raspberry es igual pero, debido a que estamos usando una IP asignada por el servidor DHCP, debemos primero definir una subred en el mismo segmento de red que la conexión Wi-Fi para el servidor DHCP. En el post anterior editamos el archivo /etc/dhcp/dhcpd.conf para definir una subred en el rango 10.128.0.0 pero en mi caso la red Wi-Fi está en el rango 192.168.1.0 por lo que debemos editar el archivo nuevamente para cambiar la definición de subred o bien agregar una nueva. Si defines varias subredes, al iniciar el servidor DHCP éste responderá a la definición de subred de acuerdo a la IP asignada al adaptador de red, por lo que en mi caso he dejado dos definiciones de subred en el archivo /etc/dhcp/dhcpd.conf:

subnet 10.128.0.0 netmask 255.255.255.0 {
  range 10.128.0.1 10.128.0.255;
}

subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.1 192.168.2.255;
}

Ahora podemos conectar el Raspberry a la PC usando el cable de red y, si utilizamos una IP correspondiente a la segunda subred, el Raspberry automáticamente recibirá una IP en ese mismo segmento de red, por ejemplo:

monstruosoft@monstruosoft-PC:~$ systemctl status isc-dhcp-server.service
 isc-dhcp-server.service - LSB: DHCP server
   Loaded: loaded (/etc/init.d/isc-dhcp-server)
   Active: failed (Result: exit-code) since dom 2017-08-27 15:47:52 CDT; 4 days ago
  Process: 699 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=1/FAILURE)
monstruosoft@monstruosoft-PC:~$ sudo ifconfig eth0 192.168.2.1
monstruosoft@monstruosoft-PC:~$ sudo service isc-dhcp-server restart 
monstruosoft@monstruosoft-PC:~$ systemctl status isc-dhcp-server.service 
 isc-dhcp-server.service - LSB: DHCP server
   Loaded: loaded (/etc/init.d/isc-dhcp-server)
   Active: active (running) since vie 2017-09-01 12:38:52 CDT; 7s ago
  Process: 24809 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/isc-dhcp-server.service
           └─24817 /usr/sbin/dhcpd -q -cf /etc/dhcp/dhcpd.conf -pf /var/run/d...
monstruosoft@monstruosoft-PC:~$ sudo dhcp-lease-list --lease /var/lib/dhcp/dhcpd.leases
To get manufacturer names please download http://standards.ieee.org/regauth/oui/oui.txt to /usr/local/etc/oui.txt
MAC                IP              hostname            valid until         manufacturer        
===============================================================================================
aa:bb:xx:eb:ff:c5  192.168.2.1     monstruosoft-PC     2017-09-01 21:25:50 -NA-                
bb:aa:ee:cc:xx:c0  192.168.2.2     raspberrypi         2017-09-01 21:26:07 -NA-

Podemos ver que, en este ejemplo, el Raspberry tiene la IP 192.168.2.2, lo que podemos confirmar realizando una conexión SSH con el Raspberry. Sin embargo, el Raspberry aún no tiene acceso a internet como podemos ver a continuación:

monstruosoft@monstruosoft-PC:~$ ssh pi@192.168.2.2
pi@192.168.2.2's password: 
Linux raspberrypi 4.9.41+ #1023 Tue Aug 8 15:47:12 BST 2017 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Aug 19 04:24:13 2017 from 192.168.2.1

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $ ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.589 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=0.598 ms
64 bytes from 192.168.2.1: icmp_seq=3 ttl=64 time=0.574 ms
^C
--- 192.168.2.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2074ms
rtt min/avg/max/mdev = 0.574/0.587/0.598/0.009 ms
pi@raspberrypi:~ $ ping 192.168.1.254
connect: Network is unreachable

Como en el post sobre contenedores LXC, hace falta usar el comando iptables en la PC para compartir el internet y usar el comando route en el Raspberry para configurar la puerta de enlace:

monstruosoft@monstruosoft-PC:~$ sudo iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
monstruosoft@monstruosoft-PC:~$ ssh pi@192.168.2.2
pi@192.168.2.2's password: 
Linux raspberrypi 4.9.41+ #1023 Tue Aug 8 15:47:12 BST 2017 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Aug 19 04:51:02 2017 from 192.168.2.1

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     202    0        0 enxb827eb02d2c0
pi@raspberrypi:~ $ sudo route add default gw 192.168.2.1
pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.2.1     0.0.0.0         UG    0      0        0 enxb827eb02d2c0
192.168.2.0     0.0.0.0         255.255.255.0   U     202    0        0 enxb827eb02d2c0
pi@raspberrypi:~ $ ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.513 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=0.606 ms
64 bytes from 192.168.2.1: icmp_seq=3 ttl=64 time=0.574 ms
^C
--- 192.168.2.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.513/0.564/0.606/0.043 ms
pi@raspberrypi:~ $ ping 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.
64 bytes from 192.168.1.254: icmp_seq=1 ttl=63 time=6.52 ms
64 bytes from 192.168.1.254: icmp_seq=2 ttl=63 time=3.01 ms
64 bytes from 192.168.1.254: icmp_seq=3 ttl=63 time=5.55 ms
^C
--- 192.168.1.254 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.010/5.031/6.528/1.484 ms

En este punto el Raspberry tiene acceso a internet a través de la conexión compartida. Un último detalle puede ser que el Raspberry encuentre las páginas de internet por su dirección IP pero no por su URL, en este caso debemos definir un DNS o nameserver en el archivo /etc/resolv.conf:

pi@raspberrypi:~ $ ping www.google.com
ping: www.google.com: Temporary failure in name resolution
pi@raspberrypi:~ $ sudo nano /etc/resolv.conf
pi@raspberrypi:~ $ cat /etc/resolv.conf.bak 
nameserver 8.8.8.8
pi@raspberrypi:~ $ ping www.google.com
PING www.google.com (74.125.136.103) 56(84) bytes of data.
64 bytes from 74.125.136.103 (74.125.136.103): icmp_seq=1 ttl=46 time=85.4 ms
64 bytes from 74.125.136.103 (74.125.136.103): icmp_seq=2 ttl=46 time=87.8 ms
64 bytes from 74.125.136.103 (74.125.136.103): icmp_seq=3 ttl=46 time=85.7 ms
64 bytes from 74.125.136.103 (74.125.136.103): icmp_seq=4 ttl=46 time=87.6 ms
^C
--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 85.469/86.667/87.856/1.142 ms

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s