lunes, 8 de julio de 2024

Utilizar Raspberry pi como extensor de internet - impresora con ethernet, ahora disponible por Wifi

 Casos de uso:

- en mi caso, tengo una impresora que tiene cable ethernet, pero no wifi, y donde la tengo instalada no tengo cables de red, ni me apetece dejar un cable por el suelo, o tener que montar un cable de red por todas las paredes. 
- un portátil al que se le haya roto la tarjeta wifi o las antenas
- un equipo fijo alejado de router o hub

 ¿Qué necesitas?

Una raspberry Pi b+ de las primeras que no estés utilizando para nada
un dongle de wifi por usb (la 1 y la 2 no lo traían incorporado, la 3 y posteriores lo incorporan de forma nativa) 


Pasos:

* Utilizamos el pi imager para instalar Raspbian lite (sin entorno gráfico). La última versión en 2024 era bookworm (basado en debian 12) 
se puede saber lanzando el comando "cat /etc/os-release"

* en las opciones de raspbian, le indicamos cual es la red wifi a la que vamos a conectar, y un usuario para acceder por SSH (así no tenemos que toquetear desde un teclado pequeño y conectarle una pantalla para modificar cosas)
Recomiendo no usar la combinación pi + raspberry, porque no le gustan al ser las predeterminadas.

* una vez que arranca, podemos probar a conectar en remoto desde una ventana msdos conectada a la misma red que la pi



Aquí estoy conectando al nombre que le he dado a mi pi, (piwifi) con el usuario pi

Me pedirá la contraseña que le he dado y ya estoy dentro. Aunque es posible que te diga que por seguridad tienes que añadir la llave SHA en el fichero known_hosts dentro de C:\Users\<tu usuario>\.ssh




* Actualizar raspbian con los comandos habituales

sudo apt-get update
sudo apt-get upgrade

Puede tardar un rato, porque verifica qué paquetes tiene que actualizar y los actualiza desde el repositorio de internet de Raspbian. 

* Instalar programas o servicios necesarios 
sudo apt-get install dnsmasq
sudo apt-get install iptables
sudo apt-get install avahi-daemon  (este en mi caso ya estaba)
sudo apt-get install parprouted
sudo apt-get install dhcp-helper


*Verificar que el fichero de configuración de wifi está bien
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf


Importante el detalle de country y el nombre de tu red + la password en psk

Le damos a Ctrl + o para guardar, enter, y Ctrl + X para salir


Vamos a usar un fichero o script sacado de https://github.com/arpitjindal97/raspbian-recipes/blob/master/wifi-to-eth-bridge.sh
"curl -O https://raw.githubusercontent.com/arpitjindal97/raspbian-recipes/refs/heads/master/wifi-to-eth-bridge.sh" 

Lo que hace es pasar todo entre la interfaz wlan y la eth0 

Lo guardamos en /home/pi/wifi-to-eth-bridge.sh

Y lo hacemos ejecutable con una modificación de permisos
sudo chmod 744 wifi-to-eth-bridge.sh


Antes estaba en blanco, ahora aparece de color verde. 


Ahora viene lo más importante, hacer que se lance cada vez que reiniciamos. 
Para ello modificamos el fichero rc.local que está en /etc
sudo nano /etc/rc.local

Y añadimos la línea "bash /home/pi/wifi-to-eth-route.sh &" antes de exit 0




Ahora probamos a reiniciar para ver si funciona... (sudo reboot) 

Ejemplo de ifconfig antes:


        tenemos ether sin nada, wlan conectado,  y lo = loopback o su servidor propio local en 127.0.0.1


ifconfig después: 

igual, no funciona, porque el truco de editar rc.local no parece funcionar en la edición bookworm de raspian.

Tenemos que complicarnos un poco la vida para garantizar que el script se activa en cada reinicio. Si lo lanzamos con sudo bash script.sh funciona, pero queremos que lo haga de forma autónoma y automática. 

Ejemplo de que sí funciona si lo lanzamos a mano cada vez.


Vamos a intentar el método de autoinicio de systemd (que lo lanzará como root)

sudo nano /etc/systemd/system/bridge.service

Dentro ponemos:

[Unit]
Description=Servicio para vincular ethernet y wifi
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=exec
Restart=on-failure
RestartSec=60
User=pi
ExecStart=/home/pi/wifi-to-eth-route.sh
Environment=PATH=/home/pi/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

[Install]
WantedBy=multi-user.target

Le modificamos permisos para poder ser lanzado por todos
sudo chmod 664 /etc/systemd/system/bridge.service

Luego toca usar estos comandos:
sudo systemctl daemon-reload
sudo systemctl enable bridge  (para que se active al iniciar) 
sudo systemctl start bridge  (para probar que no da fallos) 

El primero recarga la tabla de servicios, luego se habilita, y por último se lanza.

Si quieres ver si se está ejecutando bien, usa "systemctl status bridge.service" o "journalctl -xeu bridge.service"

Ahora reinicio de nuevo para ver si se activa sólo. NO ES EL CASO.
Voy a deshacer lo que modifiqué antes de rc.local para dejarlo como estaba (por dejarlo todo como estaba). 



RESULTADO FINAL: 

No funciona el tema de arranque automático en ninguno de sus métodos probados. 
Haga lo que haga, aunque el script .sh funciona por sí solo, no consigo que funcione desde systemd


Así que mientras investigo en profundidad, me toca arrancar la pi, conectar desde ssh, y lanzar el comando con sudo bash /home/pi/wifi-to-eth-route.sh cada vez que se reinicia la pi

No es una solución idónea pero hemos aprendido a utilizar la pi, también el systemd, sólo que debe existir una incompatibilidad entre systemd y la version bookworm que le hacen que ningún método de arranque automático de linux funcione. 
 

No hay comentarios: