hits counter
Este sitio web utiliza cookies para obtener estadísticas de navegación. Si sigue adelante, consideraremos que acepta su uso. Acepto | Más información

Servidores:



Servidor web Nginx + PHP + SSL

Aunque Apache es el servidor web más usado en Internet, tiene el inconveniente de que está pensado para máquinas con un hardware potente. Nginx, por el contrario, es un servidor web que consume menos recursos, por lo que es más adecuado para instalarlo en una pequeña placa como la Raspberry Pi. Su consumo de RAM es inferior al de Apache, es capaz de gestionar más páginas por segundo y su tiempo de respuesta es menor. Estas mejoras se producen sobre todo cuando se utiliza con páginas web estáticas.

Instalamos el servidor:

sudo apt install nginx

Podemos ver que se ha instalado correctamente accediendo desde el navegador de nuestro PC a la IP de la Raspberry, lo que nos mostrará esto:


Instalar PHP

Hecho lo anterior, ya podemos instalar PHP en su versión 7.3:

sudo apt install php7.3 php7.3-common php7.3-fpm php7.3-mysql php7.3-xml php7.3-cli php7.3-curl php7.3-gd php7.3-json php7.3-mbstring php7.3-zip

Vamos a editar la configuración de PHP para hacer un cambio:

sudo nano /etc/php/7.3/fpm/php.ini

Buscamos dentro las siguientes líneas (con Ctrl+w) y las modificamos (o descomentamos, según el caso) de manera que queden así:

cgi.fix_pathinfo=1
memory_limit = 256M

Ahora editamos otro fichero para indicarle a Nginx que se encargue de servir también archivos PHP:

sudo nano /etc/nginx/sites-available/default

Para ello incluimos index.php en la lista y además descomentamos las otras líneas que se indican a continuación:

# Add index.php to the list if you are using PHP  
index index.php index.html index.htm index.nginx-debian.html; 
. . . . . 
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
	include snippets/fastcgi-php.conf;
#
#       # With php-fpm (or other unix sockets):
	fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
}

Comprobamos que, tras los cambios, no recibimos ningún mensaje de error:

sudo nginx -t

A continuación vamos a editar su fichero de configuración:

sudo nano /etc/nginx/nginx.conf

Aquí le indicamos dos cosas: que utilice todos los núcleos de la CPU (podemos averiguar su número con el comando grep processor /proc/cpuinfo | wc -l) y que, por razones de seguridad, no envíe la versión del servidor en las conexiones HTTP:

worker_processes 4;
server_tokens off;

Terminada la configuración, reiniciamos ambos servicios:

sudo service php7.3-fpm restart
sudo service nginx restart

Para comprobar que todo funciona correctamente, en la ruta /var/www/html creamos un archivo de prueba llamado, por ejemplo, prueba.php:

cd /var/www/html
sudo nano prueba.php

en el que incluiremos este sencillo contenido:

<?php
phpinfo();
?>

Si accedemos desde el navegador del PC a la IP local de la Raspberry, seguida del nombre del fichero PHP que hemos creado antes (http://192.168.1.33/prueba.php), nos aparecerá un cuadro con información detallada sobre la versión de PHP instalada:


Una vez comprobado su funcionamiento, por razones de seguridad es conveniente eliminarlo:

sudo rm prueba.php

Las páginas web que queramos mostrar hemos de guardarlas, como acabamos de ver, en el directorio /var/www/html. Por otro lado, conviene saber que los ficheros que guardan los registros de acceso al servidor se encuentran en /var/log/nginx y son dos: access.log y error.log. Podemos revisarlos de vez en cuando para comprobar el funcionamiento del servidor.


Certificado SSL

Con lo hecho hasta aquí vamos a poder usar nuestro servidor Nginx bajo el protocolo HTTP. Pero si queremos convertirlo en un servidor web seguro, hay que usar el protocolo HTTPS. Lo conseguiremos añadiendo un Certificado SSL de Let's Encrypt.




Servidor LAMP + WordPress + SSL

LAMP es el acrónimo que corresponde a Linux, Apache, MySQL y PHP. Todos estos elementos son necesarios para poder instalar después el CMS más usado para la creación de blogs: WordPress. Además, añadiremos al final una utilidad para gestionar las bases de datos de una manera fácil y cómoda: phpMyAdmin. Una vez instalados y configurados todos ellos, tendremos un conjunto de servicios con el que podremos crear un completo sitio web alojado en nuestra propia Raspberry Pi.


Requisitos previos

Puesto que Linux ya lo tenemos funcionando en nuestra máquina mediante el uso de Raspberry Pi OS, antes de ponernos manos a la obra con los demás elementos, tenemos que asegurarnos de haber hecho estas dos cosas:

  1. 1.) Asignarle a la Raspberry Pi una IP estática, tal y como se indica en este apartado.
  2. 2.) Crear un DNS dinámico para poder acceder al servidor desde Internet, algo que podemos hacer de la forma que explicamos aquí.


Apache

Apache es probablemente el servidor web más utilizado del mundo. Para una placa con poca potencia de hardware como la Raspberry Pi sería, sin embargo, más adecuado usar Nginx, como explicamos en el apartado anterior; pero este presenta problemas para cambiar los enlaces permanentes de WordPress, motivo por el cual nos hemos decantado por el primero.

Instalarlo y dejarlo listo para funcionar es muy fácil:

sudo apt install apache2

Si en el PC abrimos el navegador y escribimos la IP local de nuestra RasPi, podremos ver una página web de prueba que nos indica que el servidor está funcionando:

Para poder configurar más adelante en WordPress los enlaces permanentes a nuestro gusto es necesario hacer ahora un par de cambios. El primero es habilitar el módulo rewrite:

sudo a2enmod rewrite

Y el segundo es configurar adecuadamente este fichero:

sudo nano /etc/apache2/sites-enabled/000-default.conf

añadiendo las líneas que se muestran en negrita, de manera que quede así:

<VirtualHost *:80>
       . . . . . .
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html
       . . . . . .
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       . . . . . .
       <Directory /var/www/html>
          AllowOverride All
       </Directory>

       . . . . . .
</VirtualHost>

Además, por razones de seguridad, vamos a evitar que envíe la versión del servidor en las conexiones al mismo. Para lograrlo, editamos el fichero

sudo nano /etc/apache2/apache2.conf

y al final del archivo escribimos estos dos parámetros:

ServerSignature Off
ServerTokens Prod

Ahora reiniciamos el servidor:

sudo systemctl restart apache2

PHP

En segundo lugar instalaremos PHP en su versión 7.3:

sudo apt install php7.3 php7.3-common libapache2-mod-php7.3 php7.3-mysql php7.3-xml php7.3-cli php7.3-curl php7.3-gd php7.3-json php7.3-mbstring php7.3-zip

Y reiniciamos de nuevo el servidor web:

sudo systemctl restart apache2

A partir de este momento nuestra Raspberry Pi ya tiene soporte para PHP, algo imprescondible para poder ejecutar luego WordPress.

Las páginas o sitios web que queramos mostrar hemos de guardarlas, como hemos visto antes, en el directorio /var/www/html. Por otro lado, conviene saber que los ficheros que guardan los registros de acceso al servidor se encuentran en /var/log/apache2 y son dos: access.log y error.log. Podemos revisarlos de vez en cuando para comprobar el funcionamiento del servidor.


MariaDB

Raspberry Pi OS, al igual que otras distribuciones de Linux, ya no incluye MySQL en sus repositorios, debido a que ha dejado de ser Open source (código abierto) al convertirse en propiedad de Oracle. En su lugar utiliza un fork o escisión del mismo llamado MariaDB. Así pues, procedemos a la instalación de este gestor de bases de datos:

sudo apt install mariadb-server

Contrariamente a lo que cabría esperar, MariaDB no nos pide que pongamos una contraseña de administrador durante su instalación, así que tendremos que dar un rodeo para añadirla:

sudo mysql_secure_installation

Lo que nos dará como resultado lo siguiente:

Enter current password for root (enter for none):                              [Pulsamos Enter]
Set root password? [Y/n]                    [pulsamos 'Y' para poner una nueva password]
New password:                                     [Ponemos una contraseña y la anotamos]
Re-enter new password:

IMPORTANTE: no olvidemos anotar la contraseña de root que acabamos de poner. La vamos a necesitar un poco más adelante para crear una base de datos y también al final para entrar en phpMyAdmin.

Luego, a todas las demás preguntas, contestamos Y, que es la opción por defecto.

A continuación actualizamos el sistema:

sudo mysql -u root

Como respuesta a este comando, escribiremos lo que se indica a continuación en negrita:

MariaDB [(none)]> USE mysql;
MariaDB [mysql]> UPDATE user SET plugin='' WHERE user='root';
MariaDB [mysql]> FLUSH PRIVILEGES;
MariaDB [mysql]> exit;

El último paso es crear la base de datos y el usuario con su contraseña:

mysql -u root -p

Como antes, aquí también escribimos las órdenes que se muestran en negrita, cambiando mi_password por una contraseña (que anotaremos, ya que vamos a usarla después para configurar WordPress):

Enter password:         [la del administrador (root), que anotamos 2 pasos más arriba]
MariaDB [(none)]> CREATE DATABASE wordpress;
MariaDB [(none)]> CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'mi_password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_user'@'localhost' IDENTIFIED BY 'mi_password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit;

Certificado SSL

Con lo hecho hasta aquí, una vez que instalemos WordPress en el siguiente paso, sólo podremos usarlo mediante el protocolo HTTP. Pero necesitamos convertir nuestro servidor Apache en un servidor web seguro que use el protocolo HTTPS. Para ello vamos a añadir un Certificado SSL de Let's Encrypt.


Instalar y configurar Wordpress

Nos vamos al directorio en el que se guardan las páginas web, descargamos WordPress, lo descomprimimos, lo movemos de sitio y borramos todo lo que ya no es necesario:

cd /var/www/html
sudo wget http://wordpress.org/latest.tar.gz
sudo tar xzf latest.tar.gz
sudo mv wordpress/* .
sudo rmdir wordpress
sudo rm latest.tar.gz
sudo rm index.html

Luego le cambiamos el dueño y el grupo:

sudo chown -R www-data:www-data /var/www/html

Hecho lo anterior, ya podemos pasar a su configuración. Desde el PC accedemos a la Raspberry mediante el protocolo HTTPS y nuestro dominio:

https://midominio.com

Se nos mostrará una ventana para elegir el idioma:

Pulsamos en el botón Continuar y pasamos a una nueva ventana de bienvenida en la que se nos indica la información, relativa a la base de datos que creamos antes, que se nos van a pedir a continuación. Aceptamos y pasamos a la siguiente ventana en la que tendremos que introducir dichos datos: nombre de la base de datos (wordpress), nombre de usuario (wp_user) y contraseña (la que anotamos más arriba). Los dos últimos los dejamos como están:

Pulsamos en Enviar y en otra pequeña ventana se nos advierte de que ya ha terminado la primera parte de la instalación de WordPress, así que ahora pulsamos en Ejecutar la instalación.

Una última ventana nos pedirá la información necesaria para crear nuestro sitio web: el título que deseamos ponerle, el nombre del usuario que va a administrarlo, su contraseña (ya nos aparece una por defecto) y un correo electrónico válido:

Ya sólo queda pinchar en Instalar WordPress para que se complete el proceso. Podemos entra en el panel de administración escribiendo en el navegador el dominio de la Raspberry seguido de /wp-login.php:

https://midominio.com/wp-login.php

Una vez entremos en nuestro flamante CMS, lo primero que haremos será cambiar la opción que viene seleccionada por defecto en los ajustes de los enlaces permanentes (Simple) por la que se muestra en esta imagen (Nombre de la entrada):


Este cambio es importante, ya que hace los enlaces más comprensibles para los usuarios y además ayuda al posicionamiento SEO de nuestro blog a la hora de ser indexado por los buscadores.

Para que se haga efectivo el cambio hay que pulsar en Guardar cambios.


phpMyAdmin

phpMyAdmin es una utilidad, escrita en PHP, que sirve para administrar las bases de datos SQL por medio de una interfaz web, por lo que su uso resulta muy fácil e intuitivo. Para su instalación vamos a escribir lo siguiente:

sudo apt install phpmyadmin

Durante el proceso de instalación se nos preguntará qué servidor web hemos instalado. Seleccionamos apache2 con la tecla Espacio y continuamos. Después nos preguntará si queremos configurar la base de datos con dbconfig-common; puesto que ya tenemos una creada, contestamos que No.

Una vez finalizada la instalación, escribiremos estos dos comandos:

sudo phpenmod mysqli
sudo systemctl restart apache2

Y ahora, para acceder a la interfaz de phpMyAdmin, ponemos en el navegador lo siguiente:

http://192.168.1.33/phpmyadmin

La IP anterior debe corresponder, lógicamente, con la IP local de nuestra Raspberry. El usuario es root y su contraseña es la que le asignamos más arriba cuando instalamos MariaDB.




Servidor de impresión

Si no disponemos de una impresora con conexión de red Ethernet, sino de una simple impresora USB, la tendremos conectada a uno de nuestros ordenadores y sólo podremos imprimir desde este PC. Para solventar este inconveniente, podemos configurar la Raspberry Pi como un servidor de impresión, lo que nos permitirá imprimir desde cualquier PC conectado a la red local. Es una solución fácil y práctica para quienes no dispongan de una impresora de red. Veamos cómo convertir nuestra RasPi en un servidor de impresión gracias a CUPS.

Instalación de CUPS

  1. 1.) Conectamos el cable de la impresora a uno de los puertos USB de la RasPi y encendemos ambas máquinas.
  2. 2.) Si no lo tenemos hecho ya antes, debemos asignar una IP fija a la Raspberry, tal y como se explica aquí.
  3. 3.) Procedemos entonces a actualizar el sistema operativo de la forma habitual:
    sudo apt update
    sudo apt upgrade
  4. 4.) Ejecutamos estos dos comandos para instalar y preparar el uso de CUPS:
    sudo apt install printer-driver-gutenprint
    sudo usermod -a -G lpadmin pi
  5. 5.) Desde el escritorio de la RasPi, abrimos el navegador y escribimos la direción
    localhost:631
    para entrar en la interfaz web de CUPS a través del puerto 631.
  6. 6.) En la pestaña "Administración", en el apartado Servidor, marcamos las casillas "Compartir impresoras conectadas a este sistema":
    y también "Permitir administración remota". Con esto último podremos acceder a la interfaz web de CUPS instalada en la Raspberry desde otro PC, escribiendo su IP:
    192.168.1.33:631
    Finalmente pulsamos en el botón "Cambiar configuración" para que se activen ambas opciones.
  7. 7.) En la misma pestaña "Administración", en el apartado Impresoras, ahora pulsamos en el botón "Añadir impresora":
  8.      Se nos pedira el usuario y contraseña de acceso a la Raspberry.
  9. 8.) Seleccionamos nuestra impresora en la parte superior (Impresoras locales) y pulsamos en el botón "Siguiente".
  10. 9.) En la siguiente pantalla comprobamos que los datos son correctos. Opcionalmente podemos poner un nombre a la impresora en Ubicación. Luego marcamos la casilla "Compartir esta impresora" y pulsamos en "Siguiente".
  11. 10.) Pasamos después a una nueva pantalla. Lo más importante aquí está en el apartado Modelo, donde debemos elegir el modelo exacto de nuestra impresora. Si no aparece en la lista (cosa que desgraciadamente es bastante habitual), en el apartado inferior (O proporcione un archivo PPD) podremos seleccionar la carpeta con el fichero PPD que corresponda a la impresora, pulsando en el botón "Examinar"; pero debemos tener en cuenta que dicho fichero habremos de buscarlo y descargarlo previamente de Internet. Hecho esto, pulsamos en "Añadir impresora".
    En última instancia, si no encontramos la impresora con ninguno de los dos métodos anteriores, puede que en la web del fabricante hallemos un instalador con el driver para CUPS, en cuyo caso tendremos que obviar los pasos anteriores e instalarlo manualmente en la Raspberry.
  12. 11.) En la pestaña "Impresoras" debe de aparecer ya la impresora que hayamos seleccionado y configurado en el punto anterior:

Imprimir en la red local

Completados los pasos anteriores, en los PCs con Linux de nuestra red local debería de aparecer automáticamente en la lista de impresoras, y si no ha habido ningún problema, podremos imprimir en ella. Las propiedades de la impresora mostrarán algo como esto:

En el caso de Windows, en cambio, la cosa es más complicada. La impresora compartida no aparecerá por sí misma en los "dispositivos e impresoras" del Panel de control. Tendremos que añadirla nosotros manualmente. Para ello, seguiremos estos pasos:

  1. 1.) Nos vamos al Panel de control - Hardware y sonido - Ver dispositivos e impresoras - Agregar impresora.
  2. 2.) En la ventana que aparece, pulsamos abajo en "La impresora no está en la lista".
  3. 3.) Elegimos "Seleccionar una impresora compartida por nombre" y escrbimos lo siguiente:
    http://192.168.1.33:631/printers/HLL2300D
    sustituyendo 192.168.1.33 por la IP local de nuestra RasPi, y HLL2300D por el nombre de nuestra impresora tal y como aparecía anteriormente en CUPS.
  4. 4.) Pulsamos en el botón "Siguiente" y la seleccionamos en la lista de impresoras, si aparece. Si no aparece en esta lista, pulsamos en el botón "Usar disco" y buscamos la carpeta donde tenemos guardados los drivers para Windows de nuestra impresora.
  5. 5.) Ahora en "Ver dispositivos e impresoras" ya aparecerá y la podremos establecer como impresora predeterminada e imprimir en ella con normalidad.



Servidor VPN WireGuard

Una VPN (Virtual Private Network, Red Privada Virtual) es un sistema que nos permitirá conectarnos a la Raspberry Pi desde cualquier lugar de Internet de una manera segura, mediante una conexión cifrada, y tener acceso a toda nuestra red local igual que si estuviéramos en casa. De hecho, una VPN es como una extensión de nuestra red local, pero realizada a través de una red pública (Internet en este caso). Una vez conectados desde el exterior al servidor VPN, nuestro dispositivo pasará a formar parte de la red doméstica y usará el router de nuestra casa para movernos por Internet, siendo por ello el encargado de asignarnos la IP pública correspondiente. Además, cuando nos conectamos a la VPN, todo el tráfico entre el cliente y el servidor (es decir, los datos generados por cualquier servicio o aplicación que usemos) viajarán con un cifrado de alta seguridad, por lo que nadie podrá ver su contenido aunque estemos usando una wifi pública y haya algún hácker espiando el tráfico de datos que circula por ella.

Vamos a instalar un servidor VPN del tipo WireGuard, ya que actualmente se ha convertido en el más usado (por encima de OpenVPN, que veremos después) debido a su mayor rapidez, facilidad de configuración y seguridad. Aunque WireGuard no es difícil de instalar y configurar, resulta mucho más fácil aún si recurrimos a PiVPN, un script que lleva a cabo todo el proceso de una forma simple y sencilla, lo que nos ahorrará el trabajo de realizar manualmente la configuración del servidor.


Requisitos previos

Antes de comenzar con la instalación, tenemos que asegurarnos de haber hecho estas tres cosas:

  1. 1.) Instalar y configurar el Sistema Operativo. Necesitamos tener instalado un SO, como puede ser Raspberry Pi OS (preferiblemente, aunque se pueden usar también otros sistemas). Para los que no tengan experiencia previa con la Raspberry, en los primeros apartados del menú Sistema explicamos cómo hacer todo el proceso: instalar el SO, acceder por SSH a la RasPi y realizar una configuración básica de la misma.
  2. 2.) Asignarle a la Raspberry Pi una IP estática, tal y como se detalla en este apartado de nuestra web.
  3. 3.) Crear un DNS dinámico o nombre de dominio virtual para poder acceder al servidor VPN desde Internet, algo que podemos hacer de la forma que explicamos en este otro apartado.

Instalación

El proceso de instalación del servidor WireGuard consistirá en realizar estos cuatro pasos:

  1. 1.) Instalar el servidor con PiVPN. Para ello ejecutaremos este script desde la línea de comandos:
    curl -L https://install.pivpn.io | bash
    Durante el proceso de ejecución se nos preguntarán algunas cosas:
  1. [a] Inicialmente el sistema hará ciertas comprobaciones, instalará algunos paquetes y nos ofrecerá información que hemos de aceptar. Al final mostrará la IP estática que hemos configurado previamente y el Gateway (seleccionamos ).
  2. [b] El usuario local que va a usarse para la configuración del servidor (pi por defecto).
  3. [c] Se nos dará a elegir entre instalar WireGuard o bien OpenVPN (elegimos WireGuard en este caso).
  4. [d] WireGuard emplea el protocolo UDP, así que sólo se nos preguntará el puerto que vamos a usar (51820 por defecto, aunque conviene cambiarlo). El puerto elegido tendremos que abrirlo en el router y redireccionarlo a la IP local de la Raspberry.
  5. [e] Elegimos un servidor de DNS concreto de la lista que se nos ofrece (Quad9, OpenDNS, Norton, Google...).
  6. [f] La IP pública o el nombre de dominio que usaremos para acceder al servidor (elegimos DNS Entry).
  7. [g] Un nombre público para nuestro servidor, que será el DNS dinámico (dominio de no-ip en nuestro caso) que creamos anteriormente en el paso 3 de los REQUISITOS PREVIOS.
  8. [h] Si deseamos activar o no las actualizaciones automáticas ( por defecto).
  9. [i] Seremos informados sobre cómo añadir un nuevo usuario y, finalmente, se nos preguntará si deseamos reiniciar el sistema (contestamos ) y aceptamos.

  1. 2.) Crear usuarios. Hecho lo anterior, abrimos de nuevo una terminal y añadimos los usuarios que van a acceder al servidor VPN mediante el comando
    pivpn add
    que nos pedirá el nombre del usuario y generará las claves pública y privada correspondientes. Se creará un perfil con la configuración de cada usuario en /etc/wireguard/configs y, además, una copia en /home/pi/configs. Cada perfil consta de un fichero con la forma usuario.conf.

  1. 3.) Instalar los clientes en todos aquellos dispositivos (PCs, portátiles, smartphones o tabletas digitales) desde los que queramos acceder al servidor. Para el sistema Android podemos usar varias apps, como por ejemplo la oficial o bien esta otra. Para iOS también está disponible la app oficial. Y en el caso de macOS y Windows, podremos descargar los clientes desde la web de WireGuard. Además, disponemos de información sobre cómo instalar y configurar los clientes para los distintos sistemas operativos en este sitio.

  1. 4.) Importar las claves. Una vez instalado el cliente en cada dispositivo, desde este tenemos que importar el fichero que contiene las claves pública y privada de cada usuario (usuario.conf) y que se encuentra en cualquiera de las dos carpetas que indicamos en el paso 2.).

    Este proceso podemos hacerlo desde un ordenador con Linux conectándonos a la Raspberry y descargándonos los ficheros mediante el comando scp:
    scp -P xxxx pi@192.168.1.33:/home/pi/configs/* /home/usuario
    El argumento -P xxxx es para indicar el puerto en caso de que no usemos el estándar (22) en el servidor SSH de la Raspberry Pi. Si no es nuestro caso, entonces no hace falta escribirlo.

    Pero si ya estamos en la RasPi y lo que deseamos es exportar los archivos a otra máquina Linux, entonces el comando sería:
    scp -P xxxx /home/pi/configs/* usuario@192.168.1.28:/home/usuario
    Como antes, el argumento -P xxxx correspondería al puerto del servidor SSH de la máquina destino, en caso de que no use el estándar.

    En lo que respecta a Windows, podemos recurrir a la aplicación WinSCP, que es un cliente SFTP/SCP (es decir, un sistema FTP seguro) que funciona a través del servidor SSH y que resulta muy práctico para transferir archivos a/desde la Raspberry, siendo además muy fácil de usar. Es similar a usar el comando scp de Linux, pero en modo gráfico.

    En el caso de los dispositivos móviles con Android o iOS, una de las características más interesantes y útiles de PiVPN es que permite generar un código QR (mediante el comando pivpn -qr) con la configuración de cada usuario y que luego se puede escanear desde la app móvil, de manera que la importación de las claves es un proceso completamente automático.

    Otra posibilidad para transferir los archivos a cualquier dispositivo es hacerlo manualmente copiando los ficheros, por ejemplo, en un pendrive y de ahí pasarlos directamente al PC o, mediante un cable OTG, al smartphone/tableta digital. Y por último, también podemos copiar los ficheros a la carpeta /boot (que en realidad es una partición de la microSD formateada en FAT32), apagar la Raspberry, introducir la microSD en el lector de tarjetas del dispositivo y copiarlos desde ahí.

Hecho todo el proceso anterior, ya tenemos todo listo para empezar a utilizar el servidor WireGuard que acabamos de instalar. Ahora bien, si más adelante, por algún motivo, deseamos desinstalarlo, escribiremos esto:

pivpn uninstall

Usuarios

Más arriba, en el apartado 2.), ya vimos cómo crear usuarios. En el caso de que queramos eliminar alguno de ellos, lo primero que debemos hacer es obtener un listado de los mismos, lo que conseguiremos con esta orden:

pivpn list

Y luego, mediante el siguiente comando, lo eliminamos:

pivpn remove usuario

Si escribimos de nuevo pivpn list veremos que el usuario ya no aparece en la lista. El borrado consiste en eliminar el fichero correspondiente del directorio /etc/wireguard/configs (que es el verdaderamente importante), pero se conserva una copia en /home/pi/configs, por lo que aquí tendremos que borrar el fichero de forma manual.

Por otro lado, en cualquier momento podremos saber los clientes que se encuentran conectados al servidor. Para ello tenemos que ejecutar este comando:

pivpn clients



Servidor VPN OpenVPN

Recordemos, como dijimos antes, que una VPN (Virtual Private Network, Red Privada Virtual) es un sistema que nos permitirá conectarnos a la Raspberry Pi desde cualquier lugar de Internet de una manera segura, mediante una conexión cifrada, y tener acceso a toda nuestra red local igual que si estuviéramos en casa. De hecho, una VPN es como una extensión de nuestra red local, pero realizada a través de una red pública (Internet en este caso). Una vez conectados desde el exterior al servidor VPN, nuestro dispositivo pasará a formar parte de la red doméstica y usará el router de nuestra casa para movernos por Internet, siendo por ello el encargado de asignarnos la IP pública correspondiente. Además, cuando nos conectamos a la VPN, todo el tráfico entre el cliente y el servidor (es decir, los datos generados por cualquier servicio o aplicación que usemos) viajarán con un cifrado de alta seguridad, por lo que nadie podrá ver su contenido aunque estemos usando una wifi pública y haya algún hácker espiando el tráfico de datos que circula por ella.

Montar un servidor VPN mediante OpenVPN es mucho más seguro que hacerlo utilizando protocolos más antiguos, como PPTP, por ejemplo. Pero OpenVPN tiene el inconveniente de su complejidad a la hora de realizar su instalación y configuración. Sin embargo, podemos obviar este problema si recurrimos a PiVPN, un script que lleva a cabo todo el proceso de una forma simple y sencilla, lo que nos ahorra el trabajo de realizar manualmente, paso a paso, toda la compleja configuración del servidor.

Al contrario que otras placas, la Raspberry Pi no dispone de aceleración AES-NI por hardware para el cifrado/descifrado de datos, lo que implica que ha de hacerse por software y ello conlleva una ralentización de la velocidad de conexión cuando se usa el servidor VPN. Por eso es recomendable, en el paso [j] del apartado 1.) de la INSTALACIÓN (véase más adelante), escoger un nivel de cifrado que no sea demasiado alto. Elegir el que se nos ofrece por defecto proporciona un buen equilibro entre seguridad y velocidad.


Requisitos previos

Antes de comenzar con la instalación, tenemos que asegurarnos de haber hecho estas tres cosas:

  1. 1.) Instalar y configurar el Sistema Operativo. Necesitamos tener instalado un SO, como puede ser Raspberry Pi OS (preferiblemente, aunque se pueden usar también otros sistemas). Para los que no tengan experiencia previa con la Raspberry, en los primeros apartados del menú Sistema explicamos cómo hacer todo el proceso: instalar el SO, acceder por SSH a la RasPi y realizar una configuración básica de la misma.
  2. 2.) Asignarle a la Raspberry Pi una IP estática, tal y como se detalla en este apartado de nuestra web.
  3. 3.) Crear un DNS dinámico o nombre de dominio virtual para poder acceder al servidor VPN desde Internet, algo que podemos hacer de la forma que explicamos en este otro apartado.

Instalación

El proceso de instalación del servidor OpenVPN consistirá en realizar estos cuatro pasos:

  1. 1.) Instalar el servidor con PiVPN. Para ello ejecutaremos este script desde la línea de comandos:
    curl -L https://install.pivpn.io | bash
    Durante el proceso de ejecución se nos preguntarán algunas cosas:
  1. [a] Inicialmente el sistema hará ciertas comprobaciones, instalará algunos paquetes y nos ofrecerá información que hemos de aceptar. Al final mostrará la IP estática que hemos configurado previamente y el Gateway (indicamos ).
  2. [b] El usuario local que va a usarse para la configuración del servidor (pi por defecto).
  3. [c] Se nos dará a elegir entre instalar WireGuard o bien OpenVPN (elegimos OpenVPN en este caso).
  4. [d] El protocolo que queremos emplear (UDP o TCP, preferiblemente el primero), así como el puerto (1194 por defecto, aunque conviene cambiarlo). El puerto elegido tendremos que abrirlo en el router y redireccionarlo a la IP local de la Raspberry.
  5. [e] Elegimos un servidor de DNS concreto de la lista que se nos ofrece (Quad9, OpenDNS, Norton, Google...).
  6. [f] Se nos preguntará si deseamos añadir un dominio personalizado (indicamos No).
  7. [g] El tipo de dominio que usaremos para acceder al servidor (elegimos DNS Entry).
  8. [h] Un nombre público para nuestro servidor, que será el DNS dinámico (dominio de no-ip en nuestro caso) que creamos anteriormente en el paso 3 de los REQUISITOS PREVIOS.
  9. [i] Si queremos utilizar autentificación con clave de curva elíptica. Es aconsejable hacerlo, ya que tendremos un cifrado más rápido y seguro, pero es necesario que los clientes soporten esto (el cliente oficial, que veremos más adelante, sí lo acepta). En caso de duda elegiremos No.
  10. [j] El nivel de cifrado que deseamos usar, que será diferente según lo que hayamos elegido en el punto anterior (256/2048 bits, según el caso, son los recomendados). La creación de las claves de cifrado (si hemos optado antes por no usar clave de curva elíptica) es un proceso bastante lento y puede tardar varios minutos.
  11. [k] Si deseamos activar o no las actualizaciones automáticas ( por defecto).
  12. [l] Seremos informados sobre cómo añadir un nuevo usuario y, finalmente, se nos preguntará si deseamos reiniciar el sistema (contestamos ) y aceptamos.

  1. 2.) Crear usuarios. Hecho lo anterior, abrimos de nuevo una terminal y añadimos los usuarios que van a acceder al servidor VPN mediante el comando
    pivpn add
    que nos pedirá el nombre del usuario, cuántos días debe durar el certificado (1080 por defecto) y su correspondiente contraseña. De esta manera se generará la clave privada del usuario que acabamos de crear, que se guardará en la carpeta /home/pi/ovpns y que consta de un fichero con la forma usuario.ovpn.

  1. 3.) Instalar los clientes en todos aquellos dispositivos (PCs, portátiles, smartphones o tabletas digitales) desde los que queramos acceder al servidor. Para el sistema Android podemos usar varias apps, como por ejemplo la oficial o bien esta otra, que es algo más complicada de configurar. Para iOS también está disponible la app oficial. En el caso de Linux podremos configurar el cliente como se indica aquí. Y en lo que respecta a Windows, el cliente lo podremos descargar desde este enlace y luego nos conectaremos según se explica en esta guía.

  1. 4.) Importar las claves. Una vez instalado el cliente correspondiente en cada dispositivo, desde este tenemos que importar los distintos ficheros que contienen la clave privada de cada usuario (usuario.ovpn) que vamos a usar para realizar la conexión al servidor y que se encuentran, como vimos antes, en la carpeta /home/pi/ovpns de la RasPi.

    Este proceso podemos hacerlo desde un ordenador con Linux conectándonos a la Raspberry y descargándonos los ficheros mediante el comando scp:
    scp -P xxxx pi@192.168.1.33:/home/pi/ovpns/* /home/usuario
    El argumento -P xxxx es para indicar el puerto en caso de que no usemos el estándar (22) en el servidor SSH de la Raspberry Pi. Si no es nuestro caso, entonces no hace falta escribirlo.

    Pero si ya estamos en la RasPi y lo que deseamos es exportar los archivos a otra máquina Linux, entonces el comando sería:
    scp -P xxxx /home/pi/ovpns/* usuario@192.168.1.28:/home/usuario
    Como antes, el argumento -P xxxx correspondería al puerto del servidor SSH de la máquina destino, en caso de que no use el estándar.

    En lo que respecta a Windows, podemos recurrir a la aplicación WinSCP, que es un cliente SFTP/SCP (es decir, un sistema FTP seguro) que funciona a través del servidor SSH y que resulta muy práctico para transferir archivos a/desde la Raspberry, siendo además muy fácil de usar. Es similar a usar el comando scp de Linux, pero en modo gráfico.

    En el caso de Android, podríamos recurrir a una app parecida a la de Windows: AndFTP. En última instancia, en caso de tener problemas con esta aplicación, siempre podremos hacerlo copiando los ficheros, por ejemplo, en un pendrive y de ahí pasarlos al smartphone o la tableta digital mediante un cable OTG.

    Otra posibilidad para transferir los archivos a cualquier dispositivo es copiar los ficheros a la carpeta /boot (que en realidad es una partición de la microSD formateada en FAT32), apagar la Raspberry, introducir la microSD en el lector de tarjetas del dispositivo y copiarlos desde ahí.

Hecho todo el proceso anterior, ya tenemos todo listo para empezar a utilizar el servidor OpenVPN que acabamos de instalar. Ahora bien, si más adelante, por algún motivo, deseamos desinstalarlo, escribiremos esto:

pivpn uninstall

Usuarios

Más arriba, en el apartado 2.), hemos visto cómo crear usuarios. En el caso de que queramos eliminar alguno de ellos, lo primero que debemos hacer es obtener un listado de los mismos, lo que conseguiremos con esta orden:

pivpn list

Y luego, mediante el siguiente comando, revocaremos su certificado, lo que implica que dicho usuario ya no podrá volver a conectarse al servidor VPN:

pivpn revoke nombre_usuario

Por otro lado, en cualquier momento podremos saber los clientes que se encuentran conectados al servidor. Para ello tenemos que ejecutar este comando:

pivpn clients



Servidor FTP

Para compartir archivos desde fuera de la red local, es decir, desde Internet, no hay nada mejor que un servidor FTP. En Linux podemos instalar varios de ellos. Nosotros vamos a usar proftpd debido a su gran flexibilidad para el manejo y configuración de las distintas carpetas que queramos poner a disposición de los demás.

Así pues, lo primero es instalar el servidor:

sudo apt install proftpd

Durante el proceso de instalacción puede que se nos pregunte qué tipo de servidor queremos instalar. Elegimos el tipo por defecto: independiente (standalone).


Carpetas compartidas

Acabado el proceso, creamos las carpetas en las que vamos a guardar los archivos. Para ello usaremos un disco duro USB que se encuentra conectado a la Raspberry y montado en la ruta /media/hdusb (si no lo tenemos instalado, aquí se explica cómo formatearlo y montarlo). En él vamos a crear una carpeta llamada ftp y dentro de ella crearemos varias subcarpetas: musica, elibros y fotos para compartir ficheros, y finalmente la carpeta recibidos para que los usuarios puedan enviar sus propios ficheros al servidor. Lo haremos así:

cd /media/hdusb                         [directorio de montaje del HD]
sudo mkdir ftp
cd ftp
sudo mkdir musica
sudo mkdir elibros
sudo mkdir fotos
sudo mkdir recibidos
sudo chmod 777 recibidos

Si hemos realizado correctamente los pasos anteriores, debemos de tener ya creadas cuatro subcarpetas:

/media/hdusb/ftp/musica
/media/hdusb/ftp/elibros
/media/hdusb/ftp/fotos
/media/hdusb/ftp/recibidos

En las tres primeras copiaremos todos los ficheros y carpetas que deseemos compartir; la última (recibidos) la dejaremos vacía para que los usuarios nos envíen a nosotros sus ficheros.


Usuario de acceso

Al instalar proftpd se crea por defecto un usuario llamado ftp. Este será el usuario habitual para el acceso a nuestro servidor, que podrá entrar únicamente en las carpetas que hemos creado anteriormente. Editamos el fichero /etc/passwd:

sudo nano /etc/passwd

nos vamos al final del mismo y comprobamos que dicho usuario tenga puesto su directorio correspondiente (en este caso, /media/hdusb/ftp) y además le asignaremos un intérprete de comandos falso (/bin/false), de modo que quede así:

ftp:x:111:65534::/media/hdusb/ftp:/bin/false

Guardamos los cambios realizados (Ctrl+o, Intro, Ctrl+x) y continuamos.

Lo anterior implica que tenemos que añadir el mencionado intérprete de comandos (/bin/false) al final del fichero /etc/shells. Así que editamos dicho fichero:

sudo nano /etc/shells

y lo añadimos al final del mismo. Hecho esto, guardamos de nuevo los cambios (Ctrl+o, Intro, Ctrl+x).

Ya sólo nos queda poner una contraseña al usuario ftp, pues no queremos permitir accesos anónimos en nuestro servidor:

sudo passwd ftp

y escribimos la contraseña dos veces.


Configurar el servidor

Necesitamos configurar adecuadamente nuestro server. Lo haremos modificando el fichero que se encuentra en la ruta /etc/proftpd/proftpd.conf. Pero antes vamos a hacer una copia de seguridad de dicho fichero por si cometemos algún error grave y tenemos que volver a él:

sudo cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.original

Tomada esta medida preventiva, ya podemos proceder a configurar el servidor editando el fichero proftpd.conf:

cd /etc/proftpd
sudo nano proftpd.conf

Como medida de seguridad, comprobaremos que estén presentes las siguientes líneas, que hacen que todos los usuarios que accedan al servicio queden enjaulados en la carpeta que hemos creado antes para que contenga el árbol de directorios del servidor:

DefaultRoot                            /media/hdusb/ftp
DefaultChdir                           /media/hdusb/ftp

Además, impediremos que se pueda acceder al servidor como root:

RootLogin                               off

Modificaremos la línea PassivePorts, que se refiere al rango de puertos pasivos que usará el servidor. La descomentamos, quitándole la almohadilla (#), y ponemos el rango que creamos adecuado; por ejemplo este:

PassivePorts                           25000 30000

Vamos a añadir también algunas líneas para configurar las descargas y las subidas:

# No permitir que los ficheros subidos sean sobrescritos
AllowOverwrite                       off
# Permitir continuar descargas/downloads interrumpidas
AllowRetrieveRestart               on
# No permitir continuar las subidas/uploads interrumpidas
AllowStoreRestart                   off
# Borrar las subidas/uploads abortadas
DeleteAbortedStores               on

Controlaremos la cantidad de usuarios que se pueden conectar simultáneamente, para lo que se incluirán las siguientes líneas:

# Número de usuarios permitidos en el servidor
MaxClients                              6 "Máximo %M usuarios conectados."
MaxClientsPerHost                  3 "Sólo se admiten 3 conexiones por Host/IP."
MaxClientsPerUser                  3 "Sólo se admiten 3 conexiones por usuario."

También configuraremos el tamaño máximo de los archivos de descarga/subida, poniendo limitaciones al usuario ftp y sin ninguna limitación para el resto:

# Limitaciones de los archivos de descarga y subida
MaxRetrieveFileSize                 100 Gb user ftp
MaxRetrieveFileSize                 *
MaxStoreFileSize                     50 Gb user ftp
MaxStoreFileSize                     *

O cuántos intentos de inicio de sesión vamos a permitir:

# Intentos de inicio de sesión permitidos
MaxLoginAttempts                 3

Al final del archivo añadimos esta directiva, que definirá los permisos que otorgaremos a las carpetas de descargas (los usuarios podrán descargar de ellas, pero no podrán modificar, borrar o enviar ficheros/carpetas):

<Directory /media/hdusb/ftp>
   <Limit WRITE>
	 DenyAll
   </Limit>
   <Limit READ>   
	 AllowAll	  
   </Limit>		  
</Directory>  

Mediante esta otra directiva configuraremos la subcarpeta recibidos, en la que se almacenará todo lo que los usuarios envíen al servidor, y para ello definiremos los permisos apropiados sobre la misma (se podrán enviar ficheros/carpetas, pero no se podrá descargar de ella):

<Directory /media/hdusb/ftp/recibidos>
   <Limit READ WRITE>
	 DenyAll
   </Limit>
   <Limit STOR MKD>   
	 AllowAll	  
   </Limit>		  
</Directory>  

Ahora vamos a indica qué usuarios (de todos los que tengamos activos en el sistema) permitiremos que accedan al servidor:

<Limit LOGIN>
     AllowUser ftp
     AllowUser jcarlos
     DenyAll
</Limit>

Por último, denegaremos el uso de chmod para el cambio de permisos:

<Limit SITE_CHMOD>
     DenyAll
</Limit>

Y ya podemos guardar el fichero de configuración (Ctrl+o, Intro, Ctrl+x).


Puesta en marcha

Ahora ponemos en marcha el servidor FTP y comprobaremos que no haya ningún error:

sudo service proftpd restart

Es posible que obtengamos un error relativo a "memcache". Si es así, tendremos que editar el fichero /etc/proftpd/modules.conf:

sudo nano /etc/proftpd/modules.conf

En él buscamos la línea LoadModule mod_tls_memcache.c y la comentamos, colocándole delante el signo de la almohadilla (#), de modo que quede así:

#LoadModule mod_tls_memcache.c

Guardamos el fichero (Ctrl+o, Intro, Ctrl+x) y reiniciamos de nuevo el servidor:

sudo service proftpd restart

Como siempre, recordemos que tenemos que abrir los puertos pasivos indicados antes (del 25000 al 30000) y los puertos 20 y 21 en el router, redireccionándolos a la IP local de la Raspberry Pi para permitir el acceso desde Internet. Si tenemos instalado un cortafuegos, también debemos abrirlos en el mismo.

Una vez que el servidor esté en funcionamiento, podemos obtener información sobre los usuarios conectados al mismo utilizando alguno de estos comandos:

ftpwho
ftptop                       [salimos pulsando Ctrl+c]

Y si deseamos ver el tráfico del server, podemos echar un vistazo de vez en cuando al contenidso de los ficheros de log:

sudo cat /var/log/proftpd/proftpd.log             [Accesos al servidor]
sudo cat /var/log/proftpd/xferlog                    [Transferencias realizadas]



Samba

Samba es un servicio libre que implementa el protocolo de archivos compartidos de Microsoft Windows, llamado SMB o CIFS en los sistemas UNIX/Linux. Este protocolo nos va a permitir compartir archivos y carpetas con los demás ordenadores de nuestra red.

Vamos, pues, a instalar el servidor y a crear una carpeta en la Raspberry para poner en ella todo aquello que queramos compartir con cualquiera de los demás ordenadores de nuestra red local, de manera que estos puedan acceder a dichos recursos compartidos.

Primero instalamos Samba:

sudo apt install samba samba-common-bin

A continuación añadimos los usuarios, que deben de estar previamente creados en el SO. Dado que pi es el usuario por defecto del sistema Raspberry Pi OS, lo añadimos a Samba:

sudo smbpasswd -a pi

Nos pedirá una contraseña. Escribimos la misma que tenemos ya establecida para el usuario pi en el sistema, aunque podemos poner otra distinta.

Si tenemos más usuarios creados en el SO, podemos añadirlos también, si lo deseamos, de la misma forma que lo hemos hecho con el anterior.


Compartir carpetas

Suponiendo que tenemos un disco duro conectado a la Raspberry, vamos a crear en él una carpeta para compartirla y hacerla pública, de manera que cualquiera pueda acceder a ella sin tener que escribir un nombre de usuario y una contraseña. Para ello, nos desplazamos a donde tenemos montado el disco, creamos la carpeta, le damos todos los permisos y luego cambiamos, recursivamente, el nombre del dueño y del grupo:

cd /media/hdusb
sudo mkdir musica
sudo chmod 777 musica
sudo chown -R nobody:nogroup musica

Ahora editamos el fichero de configuración de Samba para añadir la carpeta:

sudo nano /etc/samba/smb.conf

Nos desplazamos al final del mismo y escribimos estas líneas:

[musica]
comment = carpeta pública para compartir música
path = /media/hdusb/musica
browseable = yes
read only = no
writeable = yes
guest ok = yes
public = yes
force user = nobody
create mask = 0777
directory mask = 0777

Al comienzo ponemos entre corchetes un nombre para identificar la carpeta que queremos compartir ([musica]), luego añadimos un comentario descriptivo de la misma (comment) e indicamos su ruta exacta (path). Como se puede observar, los usuarios que accedan a la carpeta lo harán como nobody, que es una especie de usuario anónimo, que tendrá permiso para hacer cualquier modificación en ella (read only = no, writeable = yes). Para ello es neceario, además, otorgar todos los permisos para la creación de archivos y directorios (0777), tal y como se indica en las dos últimas líneas.

En el caso de que quisiéramos compartir todo el contenido del disco duro (no sólo una carpeta), incluiríamos los mismos parámetros que en el ejemplo anterior, sólo que en este caso tendríamos que cambiar la identificacióin de la carpeta que queremos compartir, usando un nombre más apropiado que nos sirva de referencia ([hdusb] por ejemplo), el correspondiente comentario para describir su uso (comment) y la ruta donde se encuentra montado el disco (path):

[hdusb]
comment = carpeta para compartir el disco duro
path = /media/hdusb
. . . . . .
. . . . . .

Pero también podemos hacer que la carpeta sea privada y que sólo el/los usuario/s autorizados accedan a la misma. Para ello tendríamos que configurarla de la siguiente forma:

[musica]
comment = carpeta privada para compartir música
path = /media/hdusb/musica
browseable = yes
read only = no
writeable = yes
guest ok = no
public = no
valid users = pi
admin users = pi
create mask = 0644
directory mask = 0755

Como se observa, sólo se admite el acceso del usuario pi, aunque podríamos añadir más usuarios (separados por comas o espacios). A este usuario se le conceden permisos tanto de lectura como de escritura (read only = no, writeable = yes). En este caso, create mask y directory mask se refieren a los permisos para la creación de nuevos ficheros y carpetas, respectivamente, desde Samba. Para que los permisos de escritura sobre el recurso compartido sean efectivos, deben coincidir con los permisos que posee la carpeta en el sistema de ficheros de Raspberry Pi OS. De no ser así, se aplicarán los permisos más restrictivos.

Ya sólo queda guardar el archivo de configuración (Ctrl+o, Intro, Ctrl+x) y reiniciar el servidor:

sudo service smbd restart

Ahora la carpeta estará compartida y podremos usarla para intercambiar ficheros con otros ordenadores de nuestra red. Podemos comprobarlo accediendo a la carpeta mediante la IP local de la Raspberry. En el Explorador de Archivos de Windows, la RasPi aparecerá en la sección de Red; además podemos crear un acceso directo para Agregar una ubicación de red y también podremos acceder escribiendo directamente su IP en la barra superior, así:

\\192.168.1.33

Si la carpeta es privada, para tener acceso a la misma debemos escribir un nombre de usuario y contraeña que hayamos autorizado previamente en el momento de definir dicha carpeta.


Evitar compartir la carpeta de usuario

Normalmente, cuando instalamos el servidor Samba se comparte por defecto la carpeta de los usuarios (/home/pi en nuestro caso). Si queremos evitar esto, tenemos que hacer algunos cambios en el fichero de configuración:

sudo nano /etc/samba/smb.conf

Buscamos con Ctrl+w la línea [homes] y comentamos (con ; o con #) a partir de aquí todos los valores referentes al directorio home de los usuarios:

#[homes]
#     comment = Home Directories
#     browseable = no
. . . . . .
#     read only = yes
. . . . . .
#     create mask = 0700
. . . . . .
#     directory mask = 0700
. . . . . .
#     valid users = %S

Ahora tendremos que reiniciar el servidor para que los cambios surtan efecto:

sudo service smbd restart

Añadir una papelera

Una interesante utilidad que podemos añadir a Samba es una papelera, lo que nos permitirá recuperar archivos o carpetas que hayamos borrado previamente, ya sea de forma voluntaria o accidental. Tomando el mismo ejemplo que hemos usado antes para crear una carpeta privada, bastará con añadir cuatro líneas al final (las escritas en negrita) para crear la papelera, de modo que quedará así:

[musica]
comment = carpeta para guardar música
path = /home/pi/musica
browseable = yes
read only = no
writeable = yes
guest ok = no
public = no
valid users = pi
admin users = pi
create mask = 0644
directory mask = 0755
vfs object = recycle
recycle:repository = papelera
recycle:keeptree = true
recycle:versions = true

Como es habitual, tendremos que reiniciar de nuevo el servicio para que los cambios surtan efecto:

sudo service smbd restart

AVISO: Es posible que la carpeta que contiene la papelera no se cree hasta que borremos algún elemento por primera vez.




DLNA

Según la Wikipedia, "DLNA (Digital Living Network Alliance o Alianza para el estilo de vida digital en red, en español) es una asociación de fabricantes de electrónica e informática sin ánimo de lucro fundada por Sony en junio de 2003. Su objetivo es definir directrices de interoperabilidad que permitan compartir medios digitales entre dispositivos de consumo como ordenadores, impresoras, cámaras, teléfono móviles y otros dispositivos multimedia."

Se trata, pues, de crear un sistema para transmitir contenido multimedia (vídeos, películas, música o fotos) a través de la red y que pueda ser reproducido en dispositivos como PCs, smart TV, videoconsolas, tabletas digitales o smartphones.

Como es obvio, lo primero que haremos es instalar el servidor DLNA en nuestra Raspberry. Debido a su escaso consumo de recursos, vamos a elegir para ello el servidor miniDLNA:

sudo apt install minidlna

Una vez instalado, debemos proceder a la configuración del servidor:

sudo nano /etc/minidlna.conf

En el fichero de configuración buscamos la línea en la que se indica dónde se encuentran ubicados nuestros archivos multimedia. Será una línea similar a esta:

media_dir=/var/lib/minidlna

Naturalmente, deberemos cambiarla por el directorio (o directorios, si son varios) donde cada uno tenga guardados sus archivos. En nuestro caso, tenemos un disco duro USB y un pendrive conectados a dos de los puertos USB de la RasPi, con sendas carpetas que incluyen, respectivamente, películas y música, por lo que nos quedaría así:

media_dir=V,/media/hdusb/peliculas
media_dir=A,/media/pen/musica

La V de la primera línea significa vídeo y la A de la segunda, audio. Y es que la configuración admite filtros de indexación de contenidos: A para audio, V para vídeo y P para fotos. Si no indicamos nada, se indexará todo.

Ahora le daremos un nombre al servidor, para que cuando accedamos a él desde otro dispositivo nos sea fácil de encontrar. Para ello bajamos unas líneas hasta que localizamos la siguiente:

#friendly_name=

Descomentamos la línea quitándole la almohadilla (#) y añadimos el nombre que queramos darle a nuestro servidor DLNA:

friendly_name=RPi DLNA Server

Ahora, un poco más abajo, le decimos que automáticamente vaya añadiendo el nuevo contenido que metamos en las carpetas indicadas antes, para lo que descomentamos también estas dos líneas, poniendo en la segunda el intervalo de tiempo (en segundos):

inotify=yes
notify_interval=600

Guardamos el fichero (Ctrl+o, Intro, Ctrl+x) y ya tenemos el servidor listo para funcionar, así que lo arrancamos:

sudo service minidlna start

La indexación de contenidos hemos de hacerla manualmente mediante este comando:

sudo service minidlna force-reload

Como es habitual en cualquier servicio, el servidor DLNA admite distintos parámetros: podemos detenerlo (stop), iniciarlo (start), conocer su estado (status) o reiniciarlo después de haber hecho alguna modificación en la configuración (restart):

sudo service minidlna parámetro

Finalmente, no hay que olvidar abrir el puerto 8200/TCP si estamos usando un cortafuegos.

Es posible utilizar una gran cantidad de clientes para acceder al servidor DLNA que acabamos de instalar en nuestra Raspberry Pi. En Windows podríamos usar Windows Media Center o el propio Reproductor multimedia del sistema; en el caso de Android, DLNA Player o bien MediaHouse UPnP / DLNA Browser, por poner un par de ejemplos. Y si tenemos una Smart TV también podremos acceder desde ella a los contenidos del servidor.




Pi-hole

Pi-hole es un sistema para convertir la Raspberry Pi en un servidor de DNS caché capaz de filtrar y bloquear la publicidad a nivel de red. Una vez instalado y configurado, sólo tendremos que poner la IP local de la RasPi como servidor de DNS en el router o bien ponerla manualmente en cada dispositivo de nuestra red local. Las peticiones DNS pasarán entonces por la Raspberry y esta actuará como un filtro antipublicidad, al estilo de las extensiones "adblock" de los navegadores, pero con varias ventajas añadidas sobre estos:

  1. 1ª) Servirá para todos los dispositivos que tengamos conectados a nuestra LAN, sin necesidad de instalar nada extra en ellos.
  2. 2ª) Las webs que visitemos no serán capaces de detectar que estamos bloqueando su publicidad.
  3. 3ª) También sirve para detener algunos intentos de instalar malware que realizan ciertas webs maliciosas.
  4. 4ª) Ofrece la posiblidad de bloquear aquellas páginas web que no queramos que visiten nuestros hijos o la gente que esté conectada a nuestra red local.
  5. 5ª) Incluso bloquea la publicidad de las apps gratuitas que tengamos instaladas en el smartphone o la tableta digital.


Requisitos previos

Antes de instalar Pi-hole tenemos que cumplir estos dos requisitos:

  1. 1.) Instalar y configurar el Sistema Operativo. Necesitamos tener instalado un SO, como puede ser Raspberry Pi OS (preferiblemente, aunque se pueden usar también otros sistemas). Para los que no tengan experiencia previa con la RasPi, en los primeros apartados del menú Sistema explicamos cómo hacer todo el proceso: instalar el SO, acceder por SSH a la Raspberry y realizar una configuración básica del sistema.
  2. 2.) Asignarle a la Raspberry Pi una IP estática, tal y como se detalla en este apartado de nuestra web.

Instalación

El proceso de instalación y configuración consta de dos pasos:

  1. 1.) Instalar Pi-hole. En el caso de que usemos la Raspberry Pi 2/3/4 ejecutaremos este script desde la línea de comandos:
    curl -sSL https://install.pi-hole.net | bash
    Si en lugar de una Raspberry 2/3/4 estamos usando un modelo más antiguo (la versión 1 ó 1+), entonces modificamos ligeramente el comando anterior:
    curl -L https://install.pi-hole.net | bash

    NOTA: También es posible realizar la instalación mediante este otro método, que primero descarga el script y después lo ejecuta:
    wget -O basic-install.sh https://install.pi-hole.net
    sudo bash basic-install.sh
  1. [a] Inicialmente se harán ciertas comprobaciones y se instalarán varios paquetes. Después simplemente se nos informará de algunos detalles, con lo que basta con aceptar y continuar.
  2. [b] En caso de que tengamos varias interfaces de red, lo primero que se nos preguntará es la interfaz que deseamos usar (por defecto será eth0).
  3. [c] El servidor de DNS que preferimos (Google, OpenDNS, Comodo, Quad9,...).
  4. [d] Un conjunto de sitios que poseen listas de bloqueo (aparecen seleccionados todos por defecto).
  5. [e] Los protocolos que se utilizarán (IPv4 e IPv6), marcados ambos por defecto.
  6. [f] Si queremos usar la IP estática previamente configurada y el Gateway (indicamos ).
  7. [g] También si deseamos instalar la interfaz de administración web (recomendado On).
  8. [h] O si se instala el servidor web lighttpd (On es lo recomendado).
  9. [i] Si queremos activar el fichero log de peticiones (una vez más se recomienda On).
  10. [j] Finalmente, el modo de privacidad para FTL (0 Show everything por defecto).
  11. [k] Comenzará la instalación de los paquetes, y tras ello, se nos indicará la contraseña de acceso a las distintas opciones disponibles en el menú de la interfaz web de la aplicación.

  1. Posible error de FTL. Puede que al final de la instalación nos dé un error relativo al motor de FTL y no aparezca la ventana con la contraseña de acceso (lo que indicaría que Pi-hole no se ha instalado correctamente):
    [i] Checking for existing FTL binary...  
    [x] Downloading and Instaling FTL 
    Error: Unable to get latest release location from GitHub 
    [x] FTL Engine not installed 
    
    Para solucionar esto hay que desinstalar (pihole uninstall), reiniciar la Raspberry e instalar de nuevo. Pero si no funciona el comando de desinstalación, entonces simplemente reiniciamos el sistema y reinstalamos nuevamente. Esto debería de solucionar el problema.

    Si a pesar de todo el error persiste, entonces es muy probable que el fallo se deba a que la instalación de Pi-hole ha desconfigurado el servidor de DNS. En este caso habrá que editar el fichero
    sudo nano /etc/dhcpcd.conf
    y, al final del mismo, poner un servidor de DNS válido; por ejemplo:
    static domain_name_servers=8.8.8.8
    Y ya podremos proceder con la reinstalación.

  1. 2.) Usar Pi-hole como servidor DNS predeterminado, lo que podremos hacer, como dijimos al principio, de dos maneras: o bien poniendo la IP de la Raspberry Pi como servidor de DNS en el router (en lugar de las DNS que suele traer por defecto, que serán las de nuestro ISP) o bien poner dicha IP manualmente como servidor DNS en cada uno de los dispositivos conectados a nuestra red local (PCs, portátiles, Smart TV, smartphones, tabletas digitales...).

Interfaz web y contraseña

Para comprobar que el sistema está en marcha, accederemos a la interfaz web de administración escribiendo la dirección IP local de la Raspberry en el navegador de cualquier dispositivo conectado a nuestra LAN:

192.168.1.33/admin

Aquí podremos iniciar sesión (Login) y tener acceso a un menú con las distintas posibilidades que nos ofrece Pi-hole:

Para cambiar la contraseña de inicio de sesión de la interfaz web usaremos este comando desde la terminal:

pihole -a -p contraseña

Pi-hole y el cortafuegos ufw

Si estamos usando el cortafuegos ufw, debemos abrir los siguientes puertos: el puerto 53 TCP/UDP, para que dnsmasq resuelva las peticiones DNS, y el puerto 80 TCP para poder acceder a la interfaz web mediante lighttpd:

sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw allow 80/tcp

Puede darse el caso de que el cortafuegos no se active en los sucesivos arranques o reinicios de la Raspberry, en cuyo caso será necesario ejecutar este comando para solucionar el problema:

sudo systemctl disable netfilter-persistent

Actualizar, desinstalar, reinstalar

Cuando exista una nueva versión de Pi-hole, nos será posible actualizar, también desde la terminal, mediante la siguiente orden:

pihole -up

Y si por algún motivo tenemos la necesidad de desinstalar, usaremos este comando:

pihole uninstall

Durante la desinstalación, cuando se nos pregunte "Do you wish to go through each dependency for removal?... [Y/n]", contestaremos negativamente (n) y una vez acabado el proceso, reiniciamos el sistema.

Si tras la desinstalacción queremos volver a reinstalar, sólo tenemos que ejecutar de nuevo el script que indicamos al principio:

curl -sSL https://install.pi-hole.net | bash



OpenVPN + Pi-hole

Más arriba hemos visto cómo instalar cada uno de estos dos servidores. Usándolos por separado, de forma individual, ambos funcionan correctamente. Pero si deseamos utilizarlos a la vez, tendremos que hacer algunas modificaciones en su configuración. En caso contrario, nos toparemos con el problema de que Pi-hole no hace su trabajo de bloquear la publicidad cuando nos conectemos a nuestra red local a través de OpenVPN. Para que todo funcione como debe, tendremos que realizar algunos cambios.


1.- Instalar OpenVPN y conocer su IP

Instalamos OpenVPN y, una vez terminado el proceso, averiguamos su dirección IP:

ip a show dev tun0

Esto nos devolverá una serie de líneas, una de las cuales será similar a esta:

inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0

En ella vemos que la dirección IP del servidor VPN es 10.8.0.1


2.- Instalar Pi-hole

En el apartado anterior ya vimos cómo instalar Pi-hole. Una vez finalizado el proceso de instalación, pasamos a la siguiente etapa, que es la que nos permitirá usar ambos servicios conjuntamente, de manera que cada uno haga correctamente su función.


3.- Modificar la configuración de OpenVPN

Hemos de cambiar el servidor de DNS definido en el archivo de configuración de OpenVPN. Necesitamos modificarlo para que haga referencia a la subred que éste utiliza por defecto. Lo haremos editando el siguiente fichero:

sudo nano /etc/openvpn/server.conf

En él modificamos las dos líneas que se muestran a continuación: en la primera sustituimos la IP existente por la IP de la interfaz tun0 que averiguamos más arriba; la segunda la comentamos (ponemos el carácter # al comienzo), de forma que ambas queden así:

push "dhcp-option DNS 10.8.0.1"
#push "dhcp-option DNS 8.8.4.4"

4.- Modificar la configuración de Pi-hole

Ahora debemos establecer la interfaz tun0 del servidor VPN como la interfaz de Pi-hole. Para ello editamos este archivo:

sudo nano /etc/pihole/setupVars.conf

y modificamos la línea existente para que haga referencia a dicha interfaz:

PIHOLE_INTERFACE=tun0

A continuación creamos un nuevo archivo:

sudo nano /etc/dnsmasq.d/02-ovpn.conf

e incluimos en él las dos interfaces de red:

interface=eth0
interface=tun0

Finalmente entramos en la interfaz web de Pi-hole y hacemos clic en Login - Settings - menú DNS y activamos todas las interfaces de red (Listen on all interfaces), como se muestra en esta imagen:

No debemos olvidar guardar los cambios pulsando en el botón Save que se encuentra en la parte inferior.


5.- Configurar el cortafuegos ufw

Si estamos usando el cortafuegos ufw, al instalar OpenVPN + Pi-hole necesitaremos modificar algunas cosas para que el sistema funcione correctamente. Primero debemos permitir que el servidor redirija tráfico. Esto es esencial para la funcionalidad que queremos que nuestro servidor VPN proporcione. Podemos ajustar esta configuración modificando el siguiente archivo:

sudo nano /etc/sysctl.conf

Entonces buscamos una línea como la que se muestra a continuación y, en caso de que la tenga puesta, le quitamos la almohadilla (#), de manera que quede así:

net.ipv4.ip_forward=1

Y ahora, para leer el archivo y ajustar los valores de la sesión actual, escribimos:

sudo sysctl -p

También modificaremos el archivo de reglas del cortafuegos para configurar el enmascaramiento, un concepto de iptables que proporciona NAT dinámico para enrutar correctamente las conexiones de los clientes.

Pero antes de abrir el archivo de configuración del firewall para agregar enmascaramiento, necesitamos encontrar la interfaz de red pública de nuestra máquina. Para ello, escribimos:

ip route | grep default

Lo que nos devolverá lo siguiente:

default via 192.168.1.1 dev eth0 src 192.168.1.33 metric 320

La interfaz pública es la que aparece después de la palabra dev. En nuestro caso es eth0.

Una vez sepamos el nombre de la interfaz, abrimos el siguiente archivo:

sudo nano /etc/ufw/before.rules

Este archivo controla la configuración que se debe establecer antes de que se carguen las reglas convencionales de ufw. En él incluiremos la parte que a continuación destacamos en negrita:

#
# rules.before
#
# Rules that should be run before the ufw command line added rules.
# Custom rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
........

Una vez guardado el archivo, tenemos que decirle a ufw que permita también los paquetes enviados por defecto. Para ello abriremos este otro archivo:

sudo nano /etc/default/ufw

En él buscamos la directiva DEFAULT_FORWARD_POLICY y cambiamos el valor DROP por ACCEPT, de manera que quede así:

DEFAULT_FORWARD_POLICY="ACCEPT"

Guardamos los cambios y abrimos el puerto del servidor OpenVPN, el que indicamos más arriba en el punto 1.) [d] de la instalación del mismo:

sudo ufw allow 1194/udp

Por supuesto, también tendremos que abrirlo en el router.

Además debemos abrir (pero en este caso solamente en el cortafuegos, NO en el router) los dos puertos relativos a Pi-hole: el puerto 53 TCP/UDP, para que dnsmasq resuelva las peticiones DNS, y el puerto 80 TCP para poder acceder a la interfaz web mediante lighttpd:

sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw allow 80/tcp

Es necesario deshabilitar y volver a habilitar ufw para que surtan efecto los cambios que hemos realizado en los archivos anteriores:

sudo ufw disable
sudo ufw enable

Puede darse el caso de que el cortafuegos no se active en los sucesivos arranques o reinicios de la Raspberry, en cuyo caso será necesario ejecutar este comando para solucionar el problema:

sudo systemctl disable netfilter-persistent

Hecho todo lo anterior, sólo nos queda reiniciar la Raspberry Pi y ya tendremos nuestro servidor OpenVPN funcionando correctamente junto a Pi-hole:

sudo reboot

Podemos comprobarlo si visitamos esta web de prueba, cuyo resultado debería ser este:




WireGuard + Pi-hole

Más arriba hemos visto cómo instalar cada uno de estos dos servidores. Usándolos por separado, de forma individual, ambos funcionan correctamente. Pero si deseamos utilizarlos a la vez, tendremos que hacer algunas modificaciones en su configuración. En caso contrario, nos toparemos con el problema de que Pi-hole no hace su trabajo de bloquear la publicidad cuando nos conectemos a nuestra red local a través de WireGuard. Para que todo funcione como debe, tendremos que realizar algunos cambios.


1.- Instalar WireGuard y Pi-hole

Primero instalamos WireGuard y luego hacemos lo propio con Pi-hole. Una vez finalizado el proceso de instalación, pasamos a la siguiente etapa, que es la que nos permitirá usar ambos servicios conjuntamente, de manera que cada uno realice su función de forma correcta.


2.- Modificar la configuración de WireGuard

En la configuración de WireGuard hemos de indicar el servidor de DNS adecuado e incluir un par de reglas de iptables. Para ello editamos el siguiente fichero:

sudo nano /etc/wireguard/wg0.conf

En él añadiremos las líneas que se muestran a continuación en negrita, teniendo en cuenta que el DNS que se indica corresponde a la IP local de la Raspberry:

[Interface]
PrivateKey = server_privatekey
Address = 10.6.0.1/24
ListenPort = 51820
DNS = 192.168.1.33
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
. . . . . .

También tenemos que cambiar las DNS en los ficheros de cada usuario. La configuración de los mismos se encuentran en dos sitios: en /home/pi/configs y en /etc/wireguard/configs. Para acceder a este último directorio, que es el verdaderamente importante, tendremos que hacerlo como administrador:

sudo su
cd /etc/wireguard/configs

Abrimos el fichero de cada usuario que creamos tras la instalación de WireGuard:

nano usuario.conf

y cambiamos las DNS que contiene por la IP local de la Raspberry, igual que hicimos antes en la configuración del servidor:

DNS = 192.168.1.33

Cuando hayamos terminado, para dejar de actuar como administrador y volver al usuario normal, sólo tenemos que teclear

exit

Si aún no hemos importado las claves del usuario al cliente (por ejemplo, a nuestro smartphone), podemos hacerlo ahora mediante el código QR generado con el comando pivpn -qr, y de esta forma el proceso se realizará usando el DNS ya actualizado.

IMPORTANTE: sin embargo, si las claves del usuario ya las habíamos importado al cliente con anterioridad, tendremos puestas unas DNS que ahora no son válidas, por lo que será necesario cambiarlas manualmente: vamos al cliente y en el apartado Interface -- DNS servers cambiamos las DNS que aparecen por la IP local de la Raspberry.


3.- Modificar la configuración de Pi-hole

Tenemos que establecer la interfaz wg0 del servidor VPN como la interfaz de Pi-hole. Para ello editamos este archivo:

sudo nano /etc/pihole/setupVars.conf

y modificamos la línea existente para que haga referencia a dicha interfaz:

PIHOLE_INTERFACE=wg0

A continuación creamos un nuevo archivo:

sudo nano /etc/dnsmasq.d/02-ovpn.conf

e incluimos en él las dos interfaces de red:

interface=eth0
interface=wg0

Finalmente entramos en la interfaz web de Pi-hole y hacemos clic en Login - Settings - menú DNS y activamos todas las interfaces de red (Listen on all interfaces), como se muestra en esta imagen:

No debemos olvidar guardar los cambios pulsando en el botón Save que se encuentra en la parte inferior.


4.- Configurar el cortafuegos ufw

Si estamos usando el cortafuegos ufw, al instalar WireGuard + Pi-hole necesitaremos modificar algunas cosas para que el sistema funcione correctamente. Primero debemos permitir que el servidor redirija tráfico. Esto es esencial para la funcionalidad que queremos que nuestro servidor VPN proporcione. Podemos ajustar esta configuración modificando el siguiente archivo:

sudo nano /etc/sysctl.conf

Entonces buscamos una línea como la que se muestra a continuación y, en caso de que la tenga puesta, le quitamos la almohadilla (#), de manera que quede así:

net.ipv4.ip_forward=1

Y ahora, para leer el archivo y ajustar los valores de la sesión actual, escribimos:

sudo sysctl -p

Abrimos el puerto del servidor WireGuard, el que indicamos más arriba en el punto 1.) [d] de la instalación del mismo:

sudo ufw allow 51820/udp

Por supuesto, también tendremos que abrirlo en el router.

Además debemos abrir (pero en este caso solamente en el cortafuegos, NO en el router) los dos puertos relativos a Pi-hole: el puerto 53 TCP/UDP, para que dnsmasq resuelva las peticiones DNS, y el puerto 80 TCP para poder acceder a la interfaz web mediante lighttpd:

sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw allow 80/tcp

Es necesario deshabilitar y volver a habilitar ufw para que surtan efecto los cambios que hemos realizado en los archivos anteriores:

sudo ufw disable
sudo ufw enable

Puede darse el caso de que el cortafuegos no se active en los sucesivos arranques o reinicios de la Raspberry, en cuyo caso será necesario ejecutar este comando para solucionar el problema:

sudo systemctl disable netfilter-persistent

Hecho todo lo anterior, sólo nos queda reiniciar la Raspberry Pi y ya tendremos nuestro servidor WireGuard funcionando correctamente junto a Pi-hole:

sudo reboot

Podemos comprobarlo si visitamos esta web de prueba, cuyo resultado debería ser este:




Servidor proxy TOR

Un proxy actúa como un intermediario para los clientes que solicitan recursos a un servidor, como por ejemplo descargar un archivo o acceder a un sitio web. Cuando se configura un servidor proxy Tor, todo el tráfico del navegador se redirige a través de la red Tor. Así, cada paquete de datos que envíamos se cifra y descifra varias veces usando criptografía asimétrica o de clave pública, redirigiéndose por diversos nodos (llamados relays) que se seleccionan al azar de entre los muchos que componen esta red. Cada conexión pasa por un mínimo de tres nodos. De esta manera podemos ocultar nuestra ubicación o nuestra dirección IP, lo que impide el rastreo de las actividades que llevamos a cabo mientras navegamos por Internet. A cambio, y debido al funcionamiento que acabamos de describir, la red Tor conlleva una ralentización en la velocidad de navegación y transmisión de datos: es el precio que hemos de pagar por la seguridad y el anonimato que nos proporciona.

Lo más común es acceder a Tor a través del navegador gratuito que está disponible en su web; sin embargo esto requiere instalar dicho navegador en cada uno de los dispositivos desde los que vamos a acceder a Internet. Pero si lo que deseamos es utilizar Tor desde cualquier máquina de nuestra red local utilizando el navegador que ya tenemos instalado en cada una, entonces tendremos que configurar un servidor proxy Tor, que es lo que vamos a mostrar a continuación.


Instalar y configurar el servidor proxy

Lo instalamos de la forma habitual:

sudo apt install tor

Y comprobamos que está activo:

sudo systemctl status tor@default.service

Lo que nos mostrará esto:

Salimos pulsando la tecla q.

A continuación vamos a modificar el fichero de configuración de Tor, pero antes haremos una copia de seguridad del mismo:

sudo cp /etc/tor/torrc /etc/tor/torrc.backup

Y ya podemos editarlo:

sudo nano /etc/tor/torrc

Tenemos que descomentar las siguientes cuatro líneas, modificando además las dos primeras. En SocksPort pondremos la IP local de la Raspberry, seguida del puerto estándar 9050 (aunque podemos cambiarlo); en SocksPolicy accept indicaremos que se puedan conectar todos los dispositivos de nuestra red local (192.168.1.0/24). En las siguientes líneas, le decimos que se ejecute como demonio en segundo plano, por lo que no necesitaremos llamarlo cada vez que lo usemos; finalmente, indicamos que los datos se guarden en el directorio predeterminado (/var/lib/tor):

SocksPort 192.168.1.33:9050
SocksPolicy accept 192.168.1.0/24
RunAsDaemon 1
DataDirectory /var/lib/tor

Sólo nos queda reiniciar el proxy para dar por concluida la instalación y configuración del mismo:

sudo systemctl restart tor@default.service

Configurar el navegador en los clientes

Para poder usar Tor en nuestra red local, tendremos que configurar el navegador que tengamos instalado en cada cliente. En el caso de utilizar Mozilla Firefox, desplegaremos el menú de la esquina superior derecha y seleccionamos Opciones -- General -- Configuración de red -- Configuración:

En la ventana que aparece, marcamos Configuración manual del proxy, en Host SOCKS escribimos la IP de la Raspberry (192.168.1.33) y en Puerto ponemos el 9050. Por último, comprobamos que, debajo, esté seleccionado SOCKS v5:

Hacemos clic en el botón Aceptar y reiniciamos el navegador. Para asegurarnos de que estamos utilizando de verdad la red Tor, sólo tenemos que pulsar en este enlace.

La IP que se muestra al pinchar en el enlace anterior es la IP de uno de los nodos de salida de la red Tor por los que pasa nuestra conexión, no es nuestra IP pública auténtica, de modo que ésta queda completamente enmascarada. Para saber cuál es nuestra verdadera IP, sólo tenemos que desactivar el proxy en el navegador: marcamos Sin proxy en la ventana anterior, aceptamos el cambio y volvemos a hacer clic en el enlace.