Raspberry Pi

Raspi-config
Utilidad del termina que nos permite realizar algunos cambios de manera sencilla. Desde el terminal como root:
raspi-configMenus:
- System Options
- Password ( cambiamos la contraseña del usuario pi )
- Hostname ( cambiamos el nombre de host )
- Boot / Auto Login
- Console Text console, requiring user to login ( elegimos esta opción )
- Network at Boot ( seleccionamos no para acelerar el arranque )
- Interface Options
- SSH Enabled/disable remote command line access using SSH ( enable )
- Location options
- Locale ( configuramos correctamente el idioma )
- Timezone ( seleccionamos nuestra zona horaria )
- Keyboard ( seleccionamos nuestra distribución de teclado )
- Update ( actualizamos la herramienta )
Es necesario reiniciar para aplicar los cambios.
La red
Ahora vamos a dejar la red configurada según nuestras necesidades. Todas las operaciones son necesarias realizarlas como root y para aplicar los cambios se ha de reiniciar.
Nombrar el interface de red para humanos
Editamos /boot/cmdline.txt y añadimos al final “net.ifnames=0” quedando asi:
console=serial0,115200 console=tty1 root=PARTUUID=9b849d88-02 rootfstype=ext4 fsck.repair=yes rootwait net.ifnames=0Deshabilitar ipv6
Editamos /etc/sysctl.conf y añadimos al final :
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1Editamos /etc/rc.local y añadimos al final, si no esta ya :
exit 0Otro modo de hacer esto, mas rápido y radical es modificando el cmdline.txt. Según modelo o sistema operativo se puede encortar en varias rutas, revisa las dos posibilidades segun tu hardware y sistema:
- /boot/cmdline.txt
- /boot/firmware/cmdline.txt
Te encontraras algo parecido a esto:
console=serial0,115200 console=tty1 root=PARTUUID=5b621bc5-02 rootfstype=ext4 fsck.repair=yes rootwait net.ifnames=0Solo tienes que añadir un espacio y luego ipv6.disable=1, de tal forma que quedaria asi:
console=serial0,115200 console=tty1 root=PARTUUID=5b621bc5-02 rootfstype=ext4 fsck.repair=yes rootwait net.ifnames=0 ipv6.disable=1Configurar dirección ip fija
Editamos /etc/dhcpcd.conf y configuramos los parámetros correspondientes, ejemplo:
interface eth0
static ip_address=192.168.0.69/24
static routers=192.168.0.1
static domain_name_servers=9.9.9.9 1.1.1.1Donde:
interface “nombre interface de red” static ip_address “ip/mascara” static routers “default gateway” static domain_name_servers “ip dns primario” “ip dns secundario”
Reiniciamos para aplicar los cambios.
En las nuevas versiones de Raspberry Pi OS ( anteriormente Raspbian) que están basadas en Debian 12 (bookworm) o superior la configuración de la red se controla de manera distinta, utiliza network manager. Para ello se utiliza el comando nmcli. Vamos a ver rápidamente como hacer esto, desde la consola con privilegios de root:
Identificar nombres de nuestros interfaces que estén conectados, obtendremos una salida parecida e esta:
nmcli -p connection show
============================================
Perfiles de conexiones de NetworkManager
============================================
NAME UUID TYPE DEVICE
----------------------------------------------------------------------------
Conexión cableada 1 7470081f-935c-35a2-9c7b-66a33272fab5 ethernet eth0 En esta caso vamos a configurar “Conexión cableada 1” con los siguientes parámetros:
- Dirección IP 192.168.1.100
- Puerta de enlace 192.168.1.1
- Mascara de subred /24
- Servidores DNS 8.8.8.8 y 8.8.4.4
- Nombre de la interfaz de red Conexión cableada 1
Con el siguiente comando aplicamos la configuración:
nmcli connection modify "Conexión cableada 1" ipv4.method manual ipv4.addresses 192.168.1.1100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8 y 8.8.4.4"Para que los cambios surtan efecto, reiniciaremos Network Manager:
nmcli con down "Conexión cableada 1" && nmcli con up "Conexión cableada 1"ℹ️ Nota: Otra opción disponible es reiniciar la Raspberry Pi.
Ahora verificamos los camios y consultamos la configuración actual de nuestra conexión ethernet. El resultado será parecido al siguiente, la salida esta cortada mostrando solo lo que nos interesa, es muy detallada ////:
nmcli -p connection show "Conexión cableada 1"
===============================================================================
Detalles del perfil de conexiones (Conexión cableada 1)
===============================================================================
///////////////////////////////////////////////////////////////////////////////
ipv4.method: manual
ipv4.dns: 8.8.8.8 y 8.8.4.4
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.addresses: 192.168.1.100/24
ipv4.gateway: 192.168.1.1
ipv4.routes: --
ipv4.route-metric: -1
///////////////////////////////////////////////////////////////////////////////
802-3-ethernet.port: --
802-3-ethernet.speed: 0
802-3-ethernet.duplex: --
802-3-ethernet.auto-negotiate: no
802-3-ethernet.mac-address: --
802-3-ethernet.cloned-mac-address: --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist: --
802-3-ethernet.mtu: auto
802-3-ethernet.s390-subchannels: --
802-3-ethernet.s390-nettype: --
802-3-ethernet.s390-options: --
802-3-ethernet.wake-on-lan: default
802-3-ethernet.wake-on-lan-password: --
802-3-ethernet.accept-all-mac-addresses:-1 (default)
-------------------------------------------------------------------------------
ipv4.method: manual
ipv4.dns: 9.9.9.9,1.1.1.1
///////////////////////////////////////////////////////////////////////////////Otros que nos pueden interesar
Ip dinámica IpV4:
nmcli con modify "Conexión cableada 1" ipv4.method autoIp dinámica IpV6:
nmcli con modify "Conexión cableada 1" ipv6.method autoPara que los cambios surjan efecto, o reiniciar el servicio o la Raspberry Pi.
Evitar conexión automática, interesante con la WiFi:
nmcli con modify "preconfigured" connection.autoconnect noFuente e información sobre nmcli
Configurar Wifi
Configuración en Raspberry Pi OS 12 (Bookworm).
Desde el terminal con privilegios de root editamos el archivo de configuración de red “/etc/wpa_supplicant/wpa_supplicant.conf”. Añadir al final (cambia SSID y contraseña):
network={
ssid="TuNombreDeWiFi"
psk="TuContraseñaWiFi"
}Reinicimaos el servicio de red:
wpa_cli -i wlan0 reconfigure⚙️ Consejos útiles
- Comprbar zona/país con
raspi-config→ Localisation Options → WLAN Country. - Si no detecta redes, prueba:
rfkill unblock wifi ifconfig wlan0 up - Puedes listar redes disponibles con:
iwlist wlan0 scan | grep ESSID
Deshabilitar Wifi
iwconfig wlan0 txpower offKernel headers
apt install linux-headers-$(uname -r)Alimentación
Según el fabricante:
| Modelo | Alimentación recomendada |
|---|---|
| Raspberry Pi Zero 2 W | 600 mA |
| Raspberry Pi 5 | 5 A |
| Raspberry Pi A | 700 mA |
| Raspberry Pi B | 1,2 A |
| Raspberry Pi A+ | 700 mA |
| Raspberry Pi B+ | 1,8 A |
| Raspberry Pi 2 B | 1,8 A |
| Raspberry Pi 3 B | 2,5 A |
| Raspberry Pi 3 A+ | 2,5 A |
| Raspberry Pi 3 B+ | 2,5 A |
| Raspberry Pi 4 B | 3 A |
| Raspberry Pi Zero | 1,2 A |
| Raspberry Pi Zero W | 1,2 A |
Si tenemos problemas de alimentación puede que no arranque o bien si arranca saldrá un aviso durante el arranque y posteriormente en la esquina superior derecha en el entorno grafico. Pero si no es así lo podemos comprobar desde la consola con privilegios de root:
Instalamos el paquete necesario, si no lo tenemos ya:
apt install libraspberrypi-binEjecutamos:
vcgencmd get_throttled| Respuesta | Significado |
|---|---|
| 0x0 | todo ok |
| 0x50000 | tiene o tuvo problemas de voltaje desde el ultimo arranque |
| 0x80000 | tiene problemas de temperatura |
Los mensajes se guardan el el syslog del sistema:
/varlog/syslogEl cual podemos consultar para buscar patrones con el comando dmesg del siguiente modo, ejemplo:
dmesg | grep -iC 3 "under-voltage detected"Temperatura
Como todos sabemos uno de los problemas que nos podemos encontrar es la temperatura. La podemos leer de dos maneras:
En formato bruto con tres decimales grados centígrados:
cat /sys/class/thermal/thermal_zone0/tempCon la utilidad vcgencmd la cual nos lo muestra con un decimal:
vcgencmd measure_tempEsta información la podemos utilizar para monitorizar, tomar acciones con scripts, etc.
Servicios
Servidor ssh
El servicio ssh es el que nos proporciona acceso remoto a nuestra Rpi. Para gestionarlo utilizaremos el comando service desde la terminal:
Arrancar:
systemctl start sshdReiniciar:
systemctl restart sshdVer estado:
systemctl status sshd -lParar:
systemctl stop sshdSi estamos conectados en remoto y paramos el servicio se cortara la cnexion.
Es aconsejable realizar una serie de ajustes para que se lo mas suegro posible. El fichero donde se almacena toda la configuración del servicio esta en /etc/ssh/sshd_config.
Vamos a cambiar / definir una serie de parámetros. Antes de esto es aconsejable tener creadas las llaves de acceso remoto, aquí puedes ver como hacerlo.
Ejemplo de fichero de configuración con comentarios:
# Version del protocolo
Protocol 2
# Puerto
Port 22445
# AddressFamily any
# ListenAddress 0.0.0.0
# ListenAddress ::
# No permitir login remoto a root
PermitRootLogin no
# Tiempo necesario para introducir la contraseña
LoginGraceTime 30
# Número de intentos permitidos al introducir la contraseña
MaxAuthTries 3
# Número de logins simultáneos desde una IP
MaxStartups 3
# Lista blanca de usuarios
AllowUsers jhon fulano
# Lista negra de usuarios
DenyUsers adrian adrian2
# Lista blanca de grupos
AllowGroups admin sistemas
# Lista negra de grupos
DenyGroups marketing ventas
# Deshabilitar usuario y contraseña necesarias llaves
PasswordAuthentication no
# Habilitar el uso de llaves.
PubkeyAuthentication yes
# Nivel de log
# Deshabilitar túneles
AllowTcpForwarding no
# Habilitar túneles para el usuario sistemas
Match User sistemas
AllowTcpForwarding yes
# Banner
# PrintLastLogDuckDns
Para tener nuestra conexión localizada por ip por si la necesitamos. Registramos los dominios en Duckdns obteniendo un token. Desde el terminal con una cuenta de usuario:
- Creeamos el script:
mkdir duckdns cd duckdns vi duck.sh - Contenido:
echo url="https://www.duckdns.org/update?domains=dominio1,dominio2&token=MI_TOKEN_ULTRA_SECRETO&ip=" | curl -k -o ~/duckdns/duck.log -K - - Le damos permisos de ejecución:
chmod +x duck.sh - Lo programamos en el cronAhora cada 5 minutos se ejecutara y escribirá el resultado en el fichero duck.log. Sera ok o ko.
crontab -e */5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
Backup tarjeta SD
Local
Apagáramos la Rpi y la insertamos en nuestro equipo. Abrimos un terminal con privilegios de root e identificamos cual es el device de la tarjeta sd:
fdisk -lSuponiendo que sea /dev/sdb, esto varia en función de lo que tengamos conectado. Utilizaremos el comando dd y opcionalmente el pv para tener una barra de progreso. al directorio que queramos. Este comando tiene la siguiente estructura:
sudo dd if=/dev/sdb bs=1M status=progress of=raspbackup.imgSi queremos restaurar la copia:
dd if=raspbackup.img bs=1M status=progress of=/dev/sdbRemoto
Puede que en algún momento necesitemos realizar una copia por red o que tengamos algo en producción con lo cual no podemos parar.Desde el terminal:
ssh [email protected] "sudo dd if=/dev/mmcblk0 bs=1M status=progress | gzip -" | dd of=backup.gzDonde:
- “pi” El usuario que se conecta y puede ejecutar sudo sin pedir contraseña.
- “192.168.1.155” Dirección ip de nuestra Rpi.
- “backup.gz” fichero donde se guardara la copia.
- “1M” Tamaño de 1 Megabyte del bloque al realizar la copia.
Tener en cuenta:
Se añade el parámetro “status=progess”, si vamos a programar la tarea en el cron lo deberíamos omitir.
La copia se realiza comprimida al añadir “gzip -”. Es opcional.
Este procedimiento no me fallado nunca, esto no quiere decir que sea infalible tener en cuenta que esta en funcionamiento y se realiza el caliente.
Restore tarjeta SD
Local
Desde nuestro terminal como root donde tengamos el de la copia:
gzip -dc fichero_backup.gz | dd bs=1M status=progress of=/dev/sddDonde /dev/sdd es nuestra tarjeta sd donde restauraremos el backup.
Longevidad de la tarjeta SD
Las tarjetas SD tienen un número limitado de ciclos de escritura. En una Raspberry Pi que funciona 24/7, los logs del sistema se escriben constantemente en la SD, acortando su vida útil de forma significativa. Hay dos medidas sencillas que alargan su vida considerablemente.
noatime — eliminar escrituras de timestamps
Por defecto, Linux actualiza el timestamp de acceso de cada fichero cada vez que se lee. En una SD esto genera escrituras innecesarias. Para desactivarlo editamos /etc/fstab y añadimos noatime a la partición raíz:
PARTUUID=xxxxxxxx-02 / ext4 defaults,noatime 0 1Comprueba primero si ya está presente con:
cat /etc/fstab | grep noatimeLas versiones actuales de Raspberry Pi OS (Bookworm en adelante) ya lo incluyen por defecto.
log2ram — logs en memoria RAM
log2ram es una herramienta que mueve /var/log a la RAM del sistema. Los logs se escriben en memoria y se sincronizan a la SD una vez al día y en cada apagado limpio. El resultado es una reducción de escrituras en la SD de entre el 70 y el 80%.
Instalación
Añadimos el repositorio oficial y lo instalamos:
sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg
echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bookworm main" | sudo tee /etc/apt/sources.list.d/azlux.list
sudo apt update && sudo apt install log2ramReiniciamos para que entre en funcionamiento:
sudo rebootVerificar que está activo
systemctl is-active log2ram
df -h /var/logLa segunda línea mostrará /var/log montado en un tmpfs en memoria, no en la SD.
Configuración
El fichero de configuración está en /etc/log2ram.conf. El parámetro más relevante es el tamaño reservado en RAM:
SIZE=128M128M es suficiente para la mayoría de casos. Si el sistema genera muchos logs y log2ram no arranca por falta de espacio, auméntalo a 256M.
Importante: apagados accidentales
log2ram tiene un trade-off que hay que conocer: si la Raspberry Pi se apaga de forma abrupta (corte de luz, fallo de alimentación), los logs que estaban en RAM y no se habían sincronizado a disco se pierden. En un apagado limpio (sudo reboot, sudo halt) los logs se guardan correctamente.
Para troubleshooting post-crash, el journal del arranque anterior sigue disponible:
journalctl -b -1Es el trade-off habitual entre durabilidad de la SD y disponibilidad de logs recientes. Para una Raspberry Pi de uso doméstico o monitorización, merece la pena.
Verificar el estado del sistema de ficheros
Podemos consultar el estado general de la SD con:
sudo tune2fs -l /dev/mmcblk0p2 | grep -E "state|Mount count|Last checked|Lifetime writes"Si el estado no es clean o llevamos muchos meses sin verificación, podemos forzar un fsck en el próximo arranque:
sudo tune2fs -c 1 /dev/mmcblk0p2
sudo rebootTras el arranque, restauramos el valor a algo razonable para que no fuerce el fsck en cada boot:
sudo tune2fs -c 30 /dev/mmcblk0p2Consejos de seguridad
Consejos de seguridad
- No utilizar el inicio de sesión automático ni contraseñas vacías.
Las contraseñas son una parte muy importante de la seguridad de nuestro sistema.
Asegurarnos de que todos los accesos críticos piden una contraseña.
Buscar contraseñas vacías:
sudo awk -F: '($2 == "") {print}' /etc/shadow- Bloquear las cuentas no seguras:
passwd -l <nombre de usuario>- Cambiar la contraseña por defecto del usuario pi, logueados como usuario pi:
passwd- Deshabilitar el usuario pi:
Crear un nuevo usuario:
sudo adduser <nombre de usuario>Dar privilegios sudo, si es necesario:
sudo adduser <nombredeusuario> sudoComprobar que todo funciona correctamente (acceso ssh, sudo, …). Copiar los archivos del usuario pi al nuevo usuario si es necesario:
sudo cp /home/pi/Documentos/* /home/<nombredeusuario>/Documentos/ ...Eliminar el usuario pi:
sudo deluser -remove-home piSe puedes empezar por bloquear la cuenta y eliminarla sólo cuando se compruebe que con el nuevo usuario todo esta ok.
- Deshabilitar servicios innecesarios
Tener servicios en ejecución es una clara brecha de seguridad en cualquier sistema.
Listar servicios en ejecución:
sudo service --status-allParar un servicio:
sudo service <nombre del servicio> stopSi el servicio arranca automáticamente:
sudo update-rc.d <nombre-del-servicio> removePara desinstalarlo:
sudo apt remove <nombre-del-servicio>- Solicitar contraseña para el uso de
Editar :
sudo visudopi ALL=(ALL) NOPASSWD: ALLpi ALL=(ALL) PASSWD: ALLRealiza esta operación con los usuarios que tengan que utilizar sudo
Realizar backup´s periódicamente de la tarjeta SD.
Securizar servicio ssh.
Fecha y hora
#raspi-configIdioma
#raspi-config