<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El Cornijal de Linux</title>
	<atom:link href="https://linuxete.duckdns.org/feed/" rel="self" type="application/rss+xml" />
	<link>https://linuxete.duckdns.org</link>
	<description>Un blog sobre Linux</description>
	<lastBuildDate>Fri, 26 Jun 2026 20:27:03 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>Configura tu propio servidor DNS recursivo con Pi-hole y Unbound</title>
		<link>https://linuxete.duckdns.org/configura-tu-propio-servidor-dns-recursivo-con-pi-hole-y-unbound/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=configura-tu-propio-servidor-dns-recursivo-con-pi-hole-y-unbound</link>
					<comments>https://linuxete.duckdns.org/configura-tu-propio-servidor-dns-recursivo-con-pi-hole-y-unbound/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Fri, 26 Jun 2026 05:07:36 +0000</pubDate>
				<category><![CDATA[Pi-hole]]></category>
		<category><![CDATA[Seguridad y Privacidad]]></category>
		<category><![CDATA[DNS recursivo]]></category>
		<category><![CDATA[DNS SEGURO]]></category>
		<category><![CDATA[DNSSEC]]></category>
		<category><![CDATA[pi-hole]]></category>
		<category><![CDATA[Unbound]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4461</guid>

					<description><![CDATA[En el mundo actual, donde la privacidad en línea es cada vez más valiosa, confiar en servidores DNS de terceros puede ser un riesgo. Por eso, en esta guía te mostraré cómo convertir tu Pi-hole en una solución DNS completa y autónoma, instalando y configurando Unbound como servidor DNS recursivo local. El problema: ¿en quién [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En el mundo actual, donde la privacidad en línea es cada vez más valiosa, confiar en servidores DNS de terceros puede ser un riesgo. Por eso, en esta guía te mostraré cómo convertir tu Pi-hole en una solución DNS completa y autónoma, instalando y configurando <strong>Unbound</strong> como servidor DNS recursivo local.</p>



<h2 class="wp-block-heading">El problema: ¿en quién confiar?</h2>



<p class="wp-block-paragraph">Pi-hole incluye su propio servidor DNS (FTLDNS) que, después de aplicar las listas de bloqueo, reenvía las consultas de los clientes a los servidores DNS upstream configurados.</p>



<p class="wp-block-paragraph">Sin embargo, esto plantea un problema de privacidad: cuando confías tus consultas DNS a un proveedor externo, estás delegando información sobre qué sitios visitas. Y aunque muchos proveedores prometen ser «privados y gratuitos», ¿cómo puedes saber realmente que cumplen su palabra?.</p>



<p class="wp-block-paragraph">Además, los servidores DNS de grandes proveedores son objetivos muy atractivos para los atacantes. Si logran envenenar la caché de uno de ellos, millones de usuarios podrían ser redirigidos a sitios de phishing sin saberlo.</p>



<p class="wp-block-paragraph">Cuando ejecutas tu propio servidor DNS recursivo (pequeño y local), la probabilidad de verse afectado por este tipo de ataques se reduce drásticamente.</p>



<h2 class="wp-block-heading">¿Qué es un servidor DNS recursivo?</h2>



<p class="wp-block-paragraph">La primera distinción importante es entre un servidor <strong>autoritativo</strong> y uno <strong>recursivo</strong>:</p>



<ul class="wp-block-list">
<li>Un servidor <strong>autoritativo</strong> conoce la respuesta correcta para un dominio porque es el que lo gestiona (por ejemplo, el servidor autoritativo de <code>pi-hole.net</code> sabe cuál es su IP real).</li>



<li>Un servidor <strong>recursivo</strong>, en cambio, resuelve cualquier consulta que recibe recorriendo la jerarquía del sistema DNS: pregunta a los servidores raíz, luego a los de nivel superior (TLD), y finalmente a los autoritativos, hasta obtener la respuesta.</li>
</ul>



<h2 class="wp-block-heading">¿Qué ofrece esta guía?</h2>



<p class="wp-block-paragraph">En pocos pasos, configuraremos tu propio servidor DNS recursivo en el mismo dispositivo donde ya tienes Pi-hole. No necesitas hardware adicional. La guía asume un sistema basado en Debian/Ubuntu relativamente reciente y utiliza los paquetes oficiales para simplificar el proceso.</p>



<h2 class="wp-block-heading">Antes de empezar: prueba de acceso a los servidores raíz</h2>



<p class="wp-block-paragraph"><strong>Es fundamental verificar que tu ISP o router no esté interceptando o redirigiendo el tráfico DNS en el puerto 53.</strong> Si lo hace, Unbound no podrá comunicarse directamente con los servidores raíz y fallará de formas difíciles de diagnosticar.</p>



<p class="wp-block-paragraph">Ejecuta estas pruebas en el sistema donde instalarás Unbound:</p>



<h3 class="wp-block-heading">1. Prueba de reachabilidad UDP</h3>



<p class="wp-block-paragraph">Consulta directamente el servidor raíz <code>a.root-servers.net</code> (198.41.0.4) sin solicitar recursión:</p>



<pre class="wp-block-code"><code>dig @198.41.0.4 . NS +norec +time=3</code></pre>



<p class="wp-block-paragraph">Revisa la línea <code>flags:</code> en la respuesta. Si estás hablando directamente con un servidor raíz, verás <code>aa</code> (Authoritative Answer) y <strong>no</strong> verás <code>ra</code> (Recursion Available), ya que los servidores raíz no ofrecen recursión.</p>



<p class="wp-block-paragraph">Ejemplo de respuesta correcta:</p>



<pre class="wp-block-code"><code>;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27</code></pre>



<p class="wp-block-paragraph">Si tu tráfico está siendo interceptado, aparecerá <code>ra</code> y probablemente faltará <code>aa</code>.</p>



<h3 class="wp-block-heading">2. Prueba de reachabilidad TCP</h3>



<p class="wp-block-paragraph">Unbound también depende de TCP/53 para respuestas DNSSEC grandes y para reintentos:</p>



<pre class="wp-block-code"><code>dig @198.41.0.4 . NS +norec +tcp +time=3</code></pre>



<p class="wp-block-paragraph">Si esta prueba falla (timeout) pero la anterior funcionó, puede que tu red esté bloqueando tráfico DNS sobre TCP, lo que causará fallos crípticos en Unbound.</p>



<h3 class="wp-block-heading">3. Confirmación de identidad vía CHAOS</h3>



<p class="wp-block-paragraph">Los servidores raíz responden a consultas de clase CHAOS con identificadores únicos. La mayoría de los proxies de ISP no manejan este tipo de consultas:</p>



<pre class="wp-block-code"><code>dig @198.41.0.4 version.bind CH TXT +time=3</code></pre>



<p class="wp-block-paragraph">Si te conectas directamente al servidor raíz, la respuesta será un registro TXT con «ATLAS»:</p>



<pre class="wp-block-code"><code>version.bind. 0 CH TXT "ATLAS"</code></pre>



<p class="wp-block-paragraph">Si el tráfico está siendo interceptado, obtendrás otra cadena, timeout o SERVFAIL.</p>



<p class="wp-block-paragraph"><strong>Si alguna de estas pruebas falla, no es recomendable continuar con la instalación hasta investigar y resolver la causa</strong> (redirección del ISP, bloqueo de TCP DNS, filtros de seguridad en el router, etc.).</p>



<h2 class="wp-block-heading">Configurando Pi-hole como servidor DNS recursivo</h2>



<p class="wp-block-paragraph">Vamos a utilizar <strong>Unbound</strong>, un servidor DNS recursivo seguro y de código abierto desarrollado por NLnet Labs, VeriSign, Nominet y Kirei.</p>



<h3 class="wp-block-heading">1. Instalación de Unbound</h3>



<pre class="wp-block-code"><code>sudo apt install unbound</code></pre>



<p class="wp-block-paragraph">Si instalas desde el gestor de paquetes, el archivo <code>root.hints</code> se instalará automáticamente con la dependencia <code>dns-root-data</code> y se actualizará con el gestor de paquetes.</p>



<p class="wp-block-paragraph"><strong>Opcional:</strong> Si no instalas desde un gestor de paquetes, puedes descargar manualmente la lista de servidores raíz (actualízala cada seis meses aproximadamente):</p>



<pre class="wp-block-code"><code>wget https://www.internic.net/domain/named.root -qO- | sudo tee /var/lib/unbound/root.hints</code></pre>



<p class="wp-block-paragraph">Si haces esto, tendrás que descomentar la línea <code>root-hints:</code> en el archivo de configuración.</p>



<h3 class="wp-block-heading">2. Configuración de Unbound</h3>



<p class="wp-block-paragraph">Crea o edita el archivo <code>/etc/unbound/unbound.conf.d/pi-hole.conf</code> con el siguiente contenido:</p>



<pre class="wp-block-code"><code>server:
    # Si no se especifica logfile, se usa syslog
    # logfile: "/var/log/unbound/unbound.log"
    verbosity: 0
    interface: 127.0.0.1
    port: 5335
    do-ip4: yes
    do-udp: yes
    do-tcp: yes
    # Puedes cambiarlo a no si no tienes conectividad IPv6
    do-ip6: yes
    # Déjalo en no a menos que tengas IPv6 nativo
    prefer-ip6: no
    # Usa esto solo si descargaste manualmente la lista de servidores raíz
    # root-hints: "/var/lib/unbound/root.hints"
    # Confía en la información de glue solo si está dentro de la autoridad del servidor
    harden-glue: yes
    # Requiere datos DNSSEC para zonas con trust-anchors; si faltan, la zona se marca como BOGUS
    harden-dnssec-stripped: yes
    # No uses randomización de mayúsculas (puede causar problemas con DNSSEC)
    use-caps-for-id: no
    # Reduce el tamaño del buffer de reensamblaje EDNS (recomendado por DNS Flag Day 2020)
    edns-buffer-size: 1232
    # Precarga entradas de caché próximas a expirar (solo para dominios consultados frecuentemente)
    prefetch: yes
    # Un hilo suele ser suficiente; aumenta solo en máquinas potentes
    num-threads: 1
    # Asegura que el buffer del kernel sea lo suficientemente grande para no perder mensajes
    so-rcvbuf: 1m
    # Protege la privacidad de rangos IP privados
    private-address: 192.168.0.0/16
    private-address: 169.254.0.0/16
    private-address: 172.16.0.0/12
    private-address: 10.0.0.0/8
    private-address: fd00::/8
    private-address: fe80::/10
    # Evita consultas inversas a rangos IP no públicos (RFC6303)
    private-address: 192.0.2.0/24
    private-address: 198.51.100.0/24
    private-address: 203.0.113.0/24
    private-address: 255.255.255.255/32
    private-address: 2001:db8::/32</code></pre>



<p class="wp-block-paragraph"><strong>Nota:</strong> En algunas distribuciones basadas en Red Hat (incluyendo CentOS hasta v10), la ruta del archivo puede ser <code>/etc/unbound/conf.d/pi-hole.conf</code>.</p>



<h3 class="wp-block-heading">3. Iniciar y probar Unbound</h3>



<p class="wp-block-paragraph">Reinicia el servidor:</p>



<pre class="wp-block-code"><code>sudo service unbound restart</code></pre>



<p class="wp-block-paragraph">Comprueba que funciona:</p>



<pre class="wp-block-code"><code>~ $ <strong>dig pi-hole.net @127.0.0.1 -p 5335</strong>

; &lt;&lt;>> DiG 9.20.23-1~deb13u1-Debian &lt;&lt;>> pi-hole.net @127.0.0.1 -p 5335
;; global options: +cmd
;; Got answer:
;; ->>HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 20038
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;pi-hole.net.			IN	A

;; ANSWER SECTION:
pi-hole.net.		300	IN	A	162.244.93.14

;; Query time: 36 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1) (UDP)
;; WHEN: Fri Jun 26 22:02:55 CEST 2026
;; MSG SIZE  rcvd: 56
</code></pre>



<p class="wp-block-paragraph">La primera consulta puede ser algo lenta, pero las siguientes (incluso para otros dominios bajo el mismo TLD) deberían ser bastante rápidas.</p>



<h3 class="wp-block-heading">4. Prueba de validación DNSSEC</h3>



<p class="wp-block-paragraph">Para verificar que DNSSEC funciona correctamente pasa este comando:</p>



<pre class="wp-block-code"><code>~ $ <strong>dig fail01.dnssec.works @127.0.0.1 -p 5335</strong> #copia este comando

; &lt;&lt;>> DiG 9.20.23-1~deb13u1-Debian &lt;&lt;>> fail01.dnssec.works @127.0.0.1 -p 5335
;; global options: +cmd
;; Got answer:
;; ->>HEADER&lt;&lt;- opcode: QUERY, status: <mark style="background-color:#7bdcb5" class="has-inline-color">SERVFAIL</mark>, id: 28659
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;fail01.dnssec.works.		IN	A

;; Query time: 1008 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1) (UDP)
;; WHEN: Fri Jun 26 21:58:14 CEST 2026
;; MSG SIZE  rcvd: 48
</code></pre>



<p class="wp-block-paragraph">Debería devolver <code>SERVFAIL</code> y sin dirección IP.</p>



<p class="wp-block-paragraph">y luego verifica con este otro:</p>



<pre class="wp-block-code"><code>~ $ <strong>dig +ad dnssec.works @127.0.0.1 -p 5335</strong> #Copia este comando

; &lt;&lt;>> DiG 9.20.23-1~deb13u1-Debian &lt;&lt;>> +ad dnssec.works @127.0.0.1 -p 5335
;; global options: +cmd
;; Got answer:
;; ->>HEADER&lt;&lt;- opcode: QUERY, status: <mark style="background-color:#7bdcb5" class="has-inline-color">NOERROR</mark>, id: 62528
;; flags: qr rd ra <mark style="background-color:#7bdcb5" class="has-inline-color">ad</mark>; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;dnssec.works.			IN	A

;; ANSWER SECTION:
dnssec.works.		3600	IN	A	<mark style="background-color:#7bdcb5" class="has-inline-color">46.23.92.212</mark>

;; Query time: 152 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1) (UDP)
;; WHEN: Fri Jun 26 21:59:03 CEST 2026
;; MSG SIZE  rcvd: 57
</code></pre>



<p class="wp-block-paragraph">Debería devolver <code>NOERROR</code>, una dirección IP y la bandera <code>ad</code> (Authentic Data) en la sección <code>flags:</code>, indicando que la respuesta ha sido autenticada y validada mediante DNSSEC.</p>



<h3 class="wp-block-heading">5. Configurar Pi-hole</h3>



<p class="wp-block-paragraph">Ve a la interfaz web de Pi-hole: <strong>Settings &gt; DNS</strong>.</p>



<p class="wp-block-paragraph">En la sección <strong>Custom DNS servers</strong>, especifica:</p>



<pre class="wp-block-code"><code>127.0.0.1#5335</code></pre>



<p class="wp-block-paragraph">Asegúrate de <strong>desmarcar</strong> todos los demás servidores upstream.</p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="427" height="828" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/Dns_servers-1.png" alt="" class="wp-image-4483" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/Dns_servers-1.png 427w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/Dns_servers-1-155x300.png 155w" sizes="(max-width: 427px) 100vw, 427px" /></figure>



<p class="wp-block-paragraph">No olvides hacer clic en <strong>Save &amp; Apply</strong>.</p>



<h3 class="wp-block-heading">6. Deshabilitar entrada de resolvconf (requerido para Debian Bullseye+)</h3>



<p class="wp-block-paragraph">En Debian Bullseye y versiones posteriores, se instala automáticamente el paquete <code>openresolv</code> con una configuración que puede causar comportamientos inesperados en Pi-hole y Unbound.</p>



<p class="wp-block-paragraph">El servicio <code>unbound-resolvconf.service</code> escribe <code>nameserver 127.0.0.1</code> (sin el puerto 5335) en <code>/etc/resolv.conf</code>, lo que afecta a los servicios locales.</p>



<h4 class="wp-block-heading">Paso 1: Deshabilitar el servicio</h4>



<p class="wp-block-paragraph">Comprueba si está activo:</p>



<pre class="wp-block-code"><code>systemctl is-active unbound-resolvconf.service</code></pre>



<p class="wp-block-paragraph">Si responde que inactivo, ve al punto 7, de lo contrario deshabilítalo.</p>



<p class="wp-block-paragraph">Deshabilítalo así:</p>



<pre class="wp-block-code"><code>sudo systemctl disable --now unbound-resolvconf.service</code></pre>



<h4 class="wp-block-heading">Paso 2: Deshabilitar el archivo de configuración</h4>



<pre class="wp-block-code"><code>sudo sed -Ei 's/^unbound_conf=/#unbound_conf=/' /etc/resolvconf.conf
sudo rm /etc/unbound/unbound.conf.d/resolvconf_resolvers.conf</code></pre>



<p class="wp-block-paragraph">Reinicia Unbound:</p>



<pre class="wp-block-code"><code>sudo service unbound restart</code></pre>



<h3 class="wp-block-heading">7. (Opcional) Añadir logs a Unbound</h3>



<p class="wp-block-paragraph"><strong>Advertencia:</strong> No se recomienda aumentar la verbosidad para uso diario, ya que Unbound genera muchos logs. Puede ser útil para depuración.</p>



<p class="wp-block-paragraph">Niveles de verbosidad:</p>



<ul class="wp-block-list">
<li><strong>0:</strong> Solo errores</li>



<li><strong>1:</strong> Información operativa</li>



<li><strong>2:</strong> Información operativa detallada</li>



<li><strong>3:</strong> Información a nivel de consulta</li>



<li><strong>4:</strong> Información a nivel de algoritmo</li>



<li><strong>5:</strong> Registro de identificación de cliente para fallos de caché</li>
</ul>



<p class="wp-block-paragraph">Edita el archivo con: </p>



<pre class="wp-block-code"><code><code>sudo nanno /etc/unbound/unbound.conf.d/pi-hole.conf </code></code></pre>



<p class="wp-block-paragraph">y añade en la sección <code>server</code>:</p>



<pre class="wp-block-code"><code>server:
    logfile: "/var/log/unbound/unbound.log"
    log-time-ascii: yes
    verbosity: 1</code></pre>



<p class="wp-block-paragraph">Crea el directorio y archivo de log, y establece permisos:</p>



<pre class="wp-block-code"><code>sudo mkdir -p /var/log/unbound
sudo touch /var/log/unbound/unbound.log
sudo chown unbound /var/log/unbound/unbound.log</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Una nota importante sobre AppArmor en Raspberry Pi OS</h3>



<p class="wp-block-paragraph"><strong>Es muy probable que AppArmor no esté activo en tu Raspberry Pi.</strong> (ni falta que hace)</p>



<p class="wp-block-paragraph">Raspberry Pi OS no lo habilita por defecto, y muchos usuarios tienen que activarlo manualmente. </p>



<pre class="wp-block-code"><code><code>sudo aa-status </code></code></pre>



<p class="wp-block-paragraph">Si al ejecutar el comando anterior, ves un error como <code>comando no encontrado</code>, <code>No such file or directory</code>, apparmor module is loaded, apparmor filesystem is not mounted, significa que AppArmor no está instalado o no está activo.</p>



<p class="wp-block-paragraph">En ese caso, el paso de la guía para añadir una excepción en AppArmor <strong>no es necesario</strong> y puedes ignorarlo con tranquilidad.</p>



<p class="wp-block-paragraph">Solo en el caso de que estuviese activo, sigue estos pasos:</p>



<h4 class="wp-block-heading">Añadir una excepción en AppArmor</h4>



<p class="wp-block-paragraph">En sistemas modernos Debian/Ubuntu, añade una excepción en AppArmor:</p>



<p class="wp-block-paragraph">Crea o edita <code>/etc/apparmor.d/local/usr.sbin.unbound</code> y añade:</p>



<pre class="wp-block-code"><code>/var/log/unbound/unbound.log rw,</code></pre>



<p class="wp-block-paragraph">Recarga AppArmor:</p>



<pre class="wp-block-code"><code>sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.unbound
sudo service apparmor restart</code></pre>



<p class="wp-block-paragraph">Reinicia Unbound:</p>



<pre class="wp-block-code"><code>sudo service unbound restart</code></pre>



<h3 class="wp-block-heading">8. Verificar que Pi-hole está usando Unbound</h3>



<p class="wp-block-paragraph">Realiza una consulta DNS:</p>



<pre class="wp-block-code"><code>dig en.wikipedia.org @127.0.0.1</code></pre>



<p class="wp-block-paragraph">Luego revisa el log de Pi-hole:</p>



<pre class="wp-block-code"><code>sudo tail /var/log/pihole/pihole.log</code></pre>



<p class="wp-block-paragraph">Deberías ver líneas como:</p>



<pre class="wp-block-code"><code>Nov 24 11:57:47 dnsmasq&#91;973]: query&#91;A] en.wikipedia.org from 127.0.0.1
Nov 24 11:57:47 dnsmasq&#91;973]: forwarded en.wikipedia.org to 127.0.0.1#5335
Nov 24 11:57:47 dnsmasq&#91;973]: reply en.wikipedia.org is &lt;IP&gt;</code></pre>



<p class="wp-block-paragraph">Si ves que las respuestas vienen de <code>127.0.0.1#5335</code>, ¡enhorabuena! Pi-hole está usando Unbound como upstream.</p>



<h2 class="wp-block-heading">Para otros clientes de la red</h2>



<p class="wp-block-paragraph">La configuración de la Raspberry <strong>solo afecta a la propia Raspberry</strong>. Para que el resto de dispositivos (móviles, portátiles, etc.) usen tu Pi-hole, configura tu <strong>router DHCP</strong> para que entregue <code>192.168.1.18</code> como único servidor DNS (y no entregue ningún secundario). Así, toda la red estará protegida.</p>



<h2 class="wp-block-heading">Desinstalar Unbound</h2>



<p class="wp-block-paragraph">Si en algún momento quieres revertir los cambios:</p>



<pre class="wp-block-code"><code>sudo apt remove unbound</code></pre>



<p class="wp-block-paragraph">Recuerda volver a configurar otro servidor DNS upstream en Pi-hole.</p>



<h2 class="wp-block-heading">Conclusión</h2>



<p class="wp-block-paragraph">Has configurado exitosamente tu propio servidor DNS recursivo con Pi-hole y Unbound. Ahora:</p>



<ul class="wp-block-list">
<li><strong>Tu privacidad mejora</strong>: ninguna entidad externa registra todas tus consultas DNS.</li>



<li><strong>Tu seguridad aumenta</strong>: al ser un servidor pequeño y local, es un objetivo mucho menos atractivo para ataques de envenenamiento de caché.</li>



<li><strong>Tienes control total</strong>: decides cómo se resuelven tus consultas DNS, sin depender de terceros.</li>
</ul>



<h2 class="wp-block-heading">Comprobaciones, errores y soluciones</h2>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Advertencia <code>so-rcvbuf</code> en Unbound</h3>



<p class="wp-block-paragraph">La configuración establece <code>so-rcvbuf: 1m</code> para manejar altas tasas de consultas. Puedes ver esta advertencia:</p>



<pre class="wp-block-code"><code>so-rcvbuf 1048576 was not granted. Got 425984.</code></pre>



<p class="wp-block-paragraph">¿Dónde se puede ver esta advertencia? En dos sitios principales:</p>



<h4 class="wp-block-heading">1. En los logs de Unbound</h4>



<p class="wp-block-paragraph">Esta es la forma más común de encontrar la advertencia. Unbound la escribe en sus propios registros cuando no puede establecer el tamaño de búfer que ha solicitado en su configuración (<code>so-rcvbuf: 1m</code>).</p>



<p class="wp-block-paragraph">Puedes comprobar los logs de Unbound con el siguiente comando:</p>



<pre class="wp-block-preformatted">sudo journalctl -u unbound | grep "so-rcvbuf"</pre>



<p class="wp-block-paragraph">Si la advertencia está presente, verás un mensaje similar a este:</p>



<pre class="wp-block-preformatted">unbound[110586:0] warning: so-rcvbuf 1048576 was not granted. Got 425984.[reference:0]</pre>



<p class="wp-block-paragraph">Este mensaje indica que Unbound pidió un búfer de recepción de <code>1048576</code> bytes (1 MB), pero el sistema solo le concedió <code>425984</code> bytes.</p>



<h4 class="wp-block-heading">2. Al iniciar Unbound manualmente (en primer plano)</h4>



<p class="wp-block-paragraph">Si ejecutas Unbound en primer plano (por ejemplo, para depuración), la advertencia aparecerá directamente en la terminal:</p>



<pre class="wp-block-preformatted">sudo unbound -d</pre>



<h4 class="wp-block-heading">¿Qué significa esta advertencia?</h4>



<ul class="wp-block-list">
<li><strong>No es un error crítico</strong>: Unbound seguirá funcionando, pero podría tener un rendimiento ligeramente inferior en momentos de mucho tráfico.<a href="https://discourse.pi-hole.net/t/how-to-fix-unbound-service-warnings/72711" target="_blank" rel="noreferrer noopener"></a></li>



<li><strong>Es un problema de límites del sistema</strong>: Unbound está pidiendo un búfer de red más grande para manejar mejor picos de tráfico, pero el límite del kernel (<code>net.core.rmem_max</code>) es más bajo.<a href="https://github.com/pi-hole/docs/issues/1293" target="_blank" rel="noreferrer noopener"></a></li>
</ul>



<p class="wp-block-paragraph">Para solucionarlo, tendrías que aumentar el límite del kernel de forma permanente, por ejemplo, creando un archivo en <code>/etc/sysctl.d/</code> (especialmente importante en sistemas más nuevos como Debian 13, donde <code>/etc/sysctl.conf</code> ya no se usa por defecto<a href="https://github.com/pi-hole/docs/issues/1293" target="_blank" rel="noreferrer noopener"></a>).</p>



<h4 class="wp-block-heading">¿Como se soluciona?</h4>



<ol class="wp-block-list">
<li>Comprueba el límite actual:</li>
</ol>



<pre class="wp-block-code"><code>   sudo sysctl net.core.rmem_max</code></pre>



<ol start="2" class="wp-block-list">
<li>Aumenta temporalmente:</li>
</ol>



<pre class="wp-block-code"><code>   sudo sysctl -w net.core.rmem_max=1048576</code></pre>



<ol start="3" class="wp-block-list">
<li>Hazlo permanente. Edita <br><code>sudo nano /etc/sysctl.d/99-unbound.conf</code><br> y añade:</li>
</ol>



<pre class="wp-block-code"><code>   net.core.rmem_max=1048576</code></pre>



<ol start="4" class="wp-block-list">
<li>Aplica los cambios:</li>
</ol>



<ul class="wp-block-list">
<li>En sistemas actualizados (ej. Debian 13): <code>sudo systemctl restart systemd-sysctl</code></li>
</ul>



<ol start="4" class="wp-block-list">
<li>Reinicia Unbound:</li>
</ol>



<pre class="wp-block-code"><code>   sudo service unbound restart</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Error en la prueba de DNSSEC</h3>



<p class="wp-block-paragraph">Durante la configuración de <strong>Pi-hole + Unbound</strong> como servidor DNS recursivo con validación DNSSEC, nos encontramos con un problema aparente,  al realizar consultas con la bandera <code>+dnssec</code>, el sistema mostraba <strong>timeouts</strong> y terminaba resolviendo a través del router (fallback) en lugar de nuestro propio Pi-hole.</p>



<h4 class="wp-block-heading">Síntoma</h4>



<p class="wp-block-paragraph">Desde el cliente, al ejecutar:</p>



<pre class="wp-block-code"><code>dig +dnssec sigfail.verteiltesysteme.net</code></pre>



<p class="wp-block-paragraph">obteníamos:</p>



<pre class="wp-block-code"><code>;; communications error to 192.168.1.18#53: timed out
...
;; SERVER: <mark style="background-color:#7bdcb5" class="has-inline-color">192.168.1.1#53</mark>  (el router)</code></pre>



<p class="wp-block-paragraph">La consulta <strong>funcionaba sin <code>+dnssec</code></strong> (respuesta inmediata desde Pi-hole), pero al pedir validación DNSSEC, el cliente se quedaba sin respuesta de Pi-hole y recurría al router, que sí devolvía <code>SERVFAIL</code> (porque también valida DNSSEC). Esto <strong>enmascaraba</strong> el problema real: Pi-hole no estaba respondiendo a tiempo.</p>



<h4 class="wp-block-heading">Causa raíz</h4>



<p class="wp-block-paragraph">El motivo eran <strong>tres timeouts encadenados</strong>:</p>



<ol class="wp-block-list">
<li><strong>Timeout de reenvío de dnsmasq (Pi-hole):</strong><br>Por defecto, el servidor DNS interno de Pi-hole (dnsmasq) espera <strong>2 segundos</strong> para que el upstream (Unbound) responda. Si Unbound tarda más (por ejemplo, en la primera resolución recursiva con DNSSEC, que puede llevar 400‑700 ms), dnsmasq <strong>aborta la conexión</strong> y no devuelve nada al cliente.</li>



<li><strong>Timeout por defecto de <code>dig</code>:</strong><br>El comando <code>dig</code> tiene un tiempo de espera de <strong>3 segundos</strong>. Si en el primer intento no recibe respuesta (por el aborto de dnsmasq), da el mensaje de <code>communications error</code> y reintenta. En el segundo intento, dnsmasq ya ha recibido la respuesta de Unbound (porque la caché ya está caliente) y la devuelve, pero el daño del mensaje de error ya está hecho.</li>



<li><strong>Presencia del router como DNS secundario en <code>/etc/resolv.conf</code>:</strong><br>Al tener <code>nameserver 192.168.1.1</code> como fallback, el sistema operativo, al no obtener respuesta de Pi-hole en el primer intento, <strong>acude al router</strong>, que responde rápidamente. Esto hacía que pareciera que «funcionaba» (porque se veía el <code>SERVFAIL</code> correcto), pero en realidad <strong>no estábamos usando nuestro propio Unbound</strong> para validar DNSSEC, sino el router.</li>
</ol>



<h4 class="wp-block-heading">Solución, eliminar el router como DNS secundario</h4>



<p class="wp-block-paragraph">Para asegurar que <strong>todas</strong> las consultas pasen por nuestro Pi-hole, es buena práctica dejar únicamente la IP de Pi-hole en <code>/etc/resolv.conf</code> (o configurar el DHCP del router para que entregue solo esa IP). Así, si Pi-hole falla, el sistema no tendrá un fallback y el error será evidente, pero en condiciones normales todas las consultas usarán nuestro propio resolver.</p>



<p class="wp-block-paragraph">A continuación expongo 3 formas de hacer esto:</p>



<h5 class="wp-block-heading">1. De forma gráfica.</h5>



<p class="wp-block-paragraph">Solo tienes que hacer clic derecho sobre el icono de red en la esquina superior derecha de la pantalla (el que parece dos monitores o unas barras de WiFi) y seleccionar <strong>«Wireless &amp; Wired Network Settings»</strong> o una opción similar<a href="https://dev.to/david_thomas/static-ip-on-raspberry-pi-stop-losing-track-of-your-pi-4oo1" target="_blank" rel="noreferrer noopener"></a><a href="https://www.digikey.at/en/maker/projects/how-to-set-a-static-ip-on-raspberry-pi/380853d3b4f24dd9b78c8bbc588626d6" target="_blank" rel="noreferrer noopener"></a>. Allí se abrirá una ventana para configurar tu conexión de red.</p>



<p class="wp-block-paragraph">Para asegurarte de que los cambios son permanentes y no se sobrescriben, lo más fiable es usar el editor gráfico de conexiones de NetworkManager. Para ello, en lugar de la opción anterior, haz clic en <strong>«Advanced Options»</strong> y luego en <strong>«Edit Connections&#8230;»</strong>. Se abrirá la ventana «Network Connections».</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="608" height="432" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/Conexion_cableada-1.png" alt="" class="wp-image-4488" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/Conexion_cableada-1.png 608w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/Conexion_cableada-1-300x213.png 300w" sizes="(max-width: 608px) 100vw, 608px" /></figure>



<p class="wp-block-paragraph">Aquí verás una lista de tus conexiones (por ejemplo, «Wired connection 1» para Ethernet o tu red WiFi). Selecciona la que estés usando y haz clic en el botón <strong>«Edit»</strong> (o «Configurar»). En la nueva ventana, ve a la pestaña <strong>«IPv4 Settings»</strong> (o «Ajustes IPv4»).</p>



<p class="wp-block-paragraph">En esta pestaña, cambia el <strong>«Method»</strong> (Método) de <em>Automatic (DHCP)</em> a <strong>«Manual»</strong><a href="https://dev.to/david_thomas/static-ip-on-raspberry-pi-stop-losing-track-of-your-pi-4oo1" target="_blank" rel="noreferrer noopener"></a><a href="https://www.jeffgeerling.com/blog/2024/set-static-ip-address-nmtui-on-raspberry-pi-os-12-bookworm/" target="_blank" rel="noreferrer noopener"></a>. Ahora se habilitarán los campos para que introduzcas tu configuración<a href="https://www.digikey.at/en/maker/projects/how-to-set-a-static-ip-on-raspberry-pi/380853d3b4f24dd9b78c8bbc588626d6" target="_blank" rel="noreferrer noopener"></a>:</p>



<ul class="wp-block-list">
<li><strong>Address</strong> (Dirección): La IP fija de tu Raspberry Pi (ej. <code>192.168.1.18</code>).</li>



<li><strong>Netmask</strong> (Máscara de red): Normalmente <code>255.255.255.0</code>.</li>



<li><strong>Gateway</strong> (Puerta de enlace): La IP de tu router (ej. <code>192.168.1.1</code>).</li>



<li><strong>DNS servers</strong> (Servidores DNS): Aquí es donde pones <code>127.0.0.1</code>.</li>
</ul>



<p class="wp-block-paragraph">Finalmente, haz clic en <strong>«Save»</strong> (Guardar) y luego cierra las ventanas. Para que los cambios surtan efecto, puedes reiniciar la interfaz de red o, simplemente, reiniciar la Raspberry Pi<a href="https://www.digikey.at/en/maker/projects/how-to-set-a-static-ip-on-raspberry-pi/380853d3b4f24dd9b78c8bbc588626d6" target="_blank" rel="noreferrer noopener"></a>.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="766" height="511" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/conexion_cableada.png" alt="" class="wp-image-4466" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/conexion_cableada.png 766w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/conexion_cableada-300x200.png 300w" sizes="(max-width: 766px) 100vw, 766px" /></figure>



<p class="wp-block-paragraph">Luego reiniciamos Pi-hole:</p>



<pre class="wp-block-code"><code>sudo systemctl restart pihole-FTL</code></pre>



<h5 class="wp-block-heading">2. Desde la terminal.(usando <code>nmcli</code>)</h5>



<p class="wp-block-paragraph">1. Identifica tu conexión de red</p>



<pre class="wp-block-code"><code>sudo nmcli connection show</code></pre>



<p class="wp-block-paragraph">Anota el nombre de tu conexión activa (ej. <code>eth0</code>, <code>Wired connection 1</code>).</p>



<p class="wp-block-paragraph">2. Ignora los DNS entregados por DHCP</p>



<pre class="wp-block-code"><code>sudo nmcli connection modify "eth0" ipv4.ignore-auto-dns yes</code></pre>



<p class="wp-block-paragraph">3. Asigna <code>127.0.0.1</code> como único DNS</p>



<pre class="wp-block-code"><code>sudo nmcli connection modify "eth0" ipv4.dns "127.0.0.1"</code></pre>



<p class="wp-block-paragraph">4. Aplica los cambios</p>



<pre class="wp-block-code"><code>sudo nmcli connection up "eth0"</code></pre>



<p class="wp-block-paragraph">5. Verifica que se ha aplicado</p>



<pre class="wp-block-code"><code>cat /etc/resolv.conf</code></pre>



<p class="wp-block-paragraph">Debe mostrar únicamente:</p>



<pre class="wp-block-code"><code>nameserver 127.0.0.1</code></pre>



<h5 class="wp-block-heading">3. Alternativa: <code>nmtui</code> (Interfaz gráfica en terminal)</h5>



<p class="wp-block-paragraph">Si no tienes el escritorio completo pero sí una interfaz de texto, puedes usar <code>nmtui</code>:</p>



<ol start="1" class="wp-block-list">
<li>Ejecuta <code>sudo nmtui edit "Wired connection 1"</code> (cambia el nombre de la conexión si es necesario)<a href="https://www.jeffgeerling.com/blog/2024/set-static-ip-address-nmtui-on-raspberry-pi-os-12-bookworm/" target="_blank" rel="noreferrer noopener"></a>.</li>



<li>Navega con las flechas del teclado hasta <strong>«IPv4 CONFIGURATION»</strong> y cámbialo de <code>&lt;Automatic></code> a <code>&lt;Manual></code><a href="https://www.jeffgeerling.com/blog/2024/set-static-ip-address-nmtui-on-raspberry-pi-os-12-bookworm/" target="_blank" rel="noreferrer noopener"></a>.</li>



<li>Selecciona <strong><code>&lt;Show></code></strong> para ver los campos y rellénalos con tu IP, puerta de enlace y el DNS <code>127.0.0.1</code><a href="https://www.jeffgeerling.com/blog/2024/set-static-ip-address-nmtui-on-raspberry-pi-os-12-bookworm/" target="_blank" rel="noreferrer noopener"></a>.</li>



<li>Guarda los cambios y reinicia NetworkManager con <code>sudo systemctl restart NetworkManager</code><a href="https://www.jeffgeerling.com/blog/2024/set-static-ip-address-nmtui-on-raspberry-pi-os-12-bookworm/" target="_blank" rel="noreferrer noopener"></a>.</li>
</ol>



<p class="wp-block-paragraph">Es un método igual de válido, pero a través de la línea de comandos y con una interfaz más amigable que <code>nmcli</code> puro.</p>



<h4 class="wp-block-heading">Verificación final</h4>



<p class="wp-block-paragraph">Tras aplicar los cambios:</p>



<pre class="wp-block-code"><code>~ $ <strong>dig +dnssec sigfail.verteiltesysteme.net</strong>

; &lt;&lt;>> DiG 9.20.23-1~deb13u1-Debian &lt;&lt;>> +dnssec sigfail.verteiltesysteme.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER&lt;&lt;- opcode: QUERY, status: SERVFAIL, id: 42460
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
;; QUESTION SECTION:
;sigfail.verteiltesysteme.net.	IN	A

;; Query time: 772 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Fri Jun 26 20:10:10 CEST 2026
;; MSG SIZE  rcvd: 57
</code></pre>



<p class="wp-block-paragraph"><strong>Resultado correcto:</strong></p>



<ul class="wp-block-list">
<li>Sin mensajes de timeout.</li>



<li><code>SERVER: 192.168.1.18#53</code> (nuestro Pi-hole).</li>



<li><code>status: SERVFAIL</code> con <code>EDE: 6 (DNSSEC Bogus)</code>.</li>
</ul>



<p class="wp-block-paragraph">Y para un dominio válido:</p>



<pre class="wp-block-code"><code>dig +dnssec +time=10 dnssec.works</code></pre>



<ul class="wp-block-list">
<li><code>status: NOERROR</code></li>



<li><code>flags: qr rd ra ad</code> (bandera <code>ad</code> = Authentic Data, validación DNSSEC correcta).</li>
</ul>



<h2 class="wp-block-heading">Conclusión</h2>



<p class="wp-block-paragraph"><strong>Conclusión sobre el fichero <code>resolv.conf</code>:</strong></p>



<ul class="wp-block-list">
<li><strong>Nunca</strong> pongas un DNS externo (ni el router) como secundario en la máquina que ejecuta Pi-hole.</li>



<li>La mejor práctica es fijar <code>127.0.0.1</code> como único nameserver.</li>



<li>Usa <code>nmcli</code> (o <code>systemd-resolved</code> si lo prefieres) para que los cambios sean permanentes.</li>



<li>Verifica que ningún otro servicio sobrescriba el fichero.</li>
</ul>



<p class="wp-block-paragraph">Esta simple corrección <strong>cierra la puerta a fugas de privacidad</strong> y garantiza que <strong>todas</strong> las consultas de tu servidor pasen por tu propio filtro y resolver DNSSEC.</p>



<p class="wp-block-paragraph">¡Disfruta de una navegación más privada y segura!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/configura-tu-propio-servidor-dns-recursivo-con-pi-hole-y-unbound/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pi-hole en Raspberry Pi: Instalación paso a paso</title>
		<link>https://linuxete.duckdns.org/pi-hole-en-raspberry-pi-instalacion-paso-a-paso/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pi-hole-en-raspberry-pi-instalacion-paso-a-paso</link>
					<comments>https://linuxete.duckdns.org/pi-hole-en-raspberry-pi-instalacion-paso-a-paso/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sun, 21 Jun 2026 16:20:56 +0000</pubDate>
				<category><![CDATA[Pi-hole]]></category>
		<category><![CDATA[Seguridad y Privacidad]]></category>
		<category><![CDATA[bloqueador de anuncios]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[pi-hole]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4365</guid>

					<description><![CDATA[Si estás harto de anuncios invasivos, rastreadores y páginas que cargan lentamente, Pi-hole es la solución definitiva. Se trata de un bloqueador de anuncios a nivel de red que instalarás en tu Raspberry Pi y protegerá todos los dispositivos de tu hogar (móviles, tablets, smart TVs, consolas…) sin necesidad de instalar nada en ellos. En [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si estás harto de anuncios invasivos, rastreadores y páginas que cargan lentamente, <strong>Pi-hole</strong> es la solución definitiva. Se trata de un bloqueador de anuncios a nivel de red que instalarás en tu Raspberry Pi y protegerá <strong>todos los dispositivos de tu hogar</strong> (móviles, tablets, smart TVs, consolas…) sin necesidad de instalar nada en ellos.</p>



<p class="wp-block-paragraph">En este tutorial te cuento mi <strong>experiencia real</strong> instalando Pi-hole usando el <strong>método oficial de clonado del repositorio</strong> (no el típico <code>curl | bash</code>).</p>



<h2 class="wp-block-heading">Requisitos previos</h2>



<ul class="wp-block-list">
<li>Una Raspberry Pi (cualquier modelo, incluso una Zero)</li>



<li>Conexión a Internet (por cable Ethernet o Wi-Fi).</li>



<li>Acceso al panel de administración de tu router en mi caso un Asus RT-AC86U (para el paso final).</li>
</ul>



<h2 class="wp-block-heading">Paso 1: Actualizar el sistema y preparar el terreno</h2>



<p class="wp-block-paragraph">Primero nos asegurarnos de tener todo actualizado:</p>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt upgrade -y</code></pre>



<p class="wp-block-paragraph">Instala <code>git</code>, la herramienta que usaremos para clonar el repositorio:</p>



<pre class="wp-block-code"><code>sudo apt install git -y</code></pre>



<h2 class="wp-block-heading">Paso 2: Configurar una IP estática (¡obligatorio!)</h2>



<p class="wp-block-paragraph">Tu Raspberry Pi debe tener siempre la misma dirección IP para que los dispositivos de tu red sepan dónde está Pi-hole. Tienes dos opciones:</p>



<h3 class="wp-block-heading">Opción A (recomendada): Reserva DHCP en el router</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Dispongo de un router Asus, a continuación te detallo los pasos que debes seguir para asignar una IP fija.</p>
</blockquote>



<p class="wp-block-paragraph">Accede a la interfaz web de tu router, busca la sección «LAN» &#8211; «Servidor DHCP» y asigna una <strong>IP fija</strong> a tu Raspberry Pi usando su dirección MAC.</p>



<h3 class="wp-block-heading">Opción B (desde la terminal): Configurar IP estática en la Raspberry</h3>



<p class="wp-block-paragraph">Si prefieres hacerlo por comandos, usa <code>nmcli</code> (sustituye <code>"Wired connection 1"</code> por el nombre de tu conexión, que verás con <code>nmcli con show</code>):</p>



<pre class="wp-block-code"><code>sudo nmcli con mod "Wired connection 1" ipv4.method manual ipv4.addr 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8
sudo nmcli device reapply eth0</code></pre>



<p class="wp-block-paragraph">Reinicia para aplicar los cambios:</p>



<pre class="wp-block-code"><code>sudo reboot</code></pre>



<p class="wp-block-paragraph">Luego reconéctate con la nueva IP.</p>



<h2 class="wp-block-heading">Paso 3: Clonar el repositorio de Pi-hole</h2>



<p class="wp-block-paragraph">Usaremos el <strong>método 2</strong> de la documentación oficial, que descarga el código completo para poder revisarlo antes de instalarlo:</p>



<pre class="wp-block-code"><code>git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole</code></pre>



<p class="wp-block-paragraph">El parámetro <code>--depth 1</code> acelera la descarga al solo obtener la última versión.</p>



<h2 class="wp-block-heading">Paso 4: Ejecutar el instalador</h2>



<p class="wp-block-paragraph">Entramos en la carpeta del instalador y lo lanzamos con permisos de superusuario:</p>



<pre class="wp-block-code"><code>cd Pi-hole/automated\ install/
sudo bash basic-install.sh</code></pre>



<p class="wp-block-paragraph">El asistente te hará unas preguntas. Estas fueron mis respuestas:</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer.png" alt="" class="wp-image-4366" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">Comenzamos por la primera pantalla donde nos dice que ¡Este instalador transformará tu dispositivo en un bloqueador de anuncios para toda la red!</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_1.png" alt="" class="wp-image-4367" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_1.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_1-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_1-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">Pi-hole es gratuito pero funciona gracias a tus donaciones. Te dan una dirección web para acceder a la zona de ofrendas a los dioses.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_2.png" alt="" class="wp-image-4369" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_2.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_2-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_2-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">En esta ventana nos dice que Pi-hole es un servidor y necesita de una Dirección IP estática para funcionar correctamente. Como esto ya lo hicimos en un punto anterior, damos a Continue.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_3.png" alt="" class="wp-image-4368" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_3.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_3-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_3-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">Dependiendo de si usas la interfaz de wifi (wlan0) o de cable (eth0) elige la que estes usando para conectar tu raspberry a internet. En mi caso usaré eth0 ya que estoy conectado por cable de red a mi router.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_4.png" alt="" class="wp-image-4370" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_4.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_4-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_4-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">Aquí selecciona un proveedor de DNS, si tienes uno propio selecciona Custom. En mi caso como no tengo ninguno propio usaré Cloudflare.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_5.png" alt="" class="wp-image-4371" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_5.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_5-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_5-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">Pi-hole se basa en listas de terceros para bloquear anuncios. Puedes usar la sugerencia a continuación o agregar la tuya propia después de la instalación.</p>



<p class="wp-block-paragraph">Aquí seleccionamos yes, ya que la lista que trae por defecto es suficiente para empezar a bloquear anuncios.</p>



<p class="wp-block-paragraph">Las <strong>listas de Steven Black</strong> (disponibles en <a href="https://github.com/StevenBlack/hosts" target="_blank" rel="noreferrer noopener">GitHub &#8211; StevenBlack/hosts</a>) <a href="https://github.com/StevenBlack/hosts" target="_blank" rel="noreferrer noopener">son archivos que consolidan y extienden listados de fuentes confiables para bloquear anuncios, rastreadores y sitios maliciosos</a>. Funcionan a nivel de sistema evitando que tu equipo resuelva las direcciones de dominios no deseados.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_6.png" alt="" class="wp-image-4372" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_6.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_6-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_6-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">Pregunta si quieres activar el registro de consultas (log), ¡pues claro que sí, no seas ridiculo!.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_7.png" alt="" class="wp-image-4373" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_7.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_7-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_7-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">Esa pantalla te pregunta <strong>qué nivel de detalle quieres ver en las estadísticas de Pi-hole y, sobre todo, qué información quieres que se almacene en los registros (logs)</strong>.</p>



<p class="wp-block-paragraph">Yo elegiré la opcion<strong> <code>0 Show everything</code>,</strong> ya que muestra y guarda todos los detalles. Verás todas las consultas, los dominios, las IPs de los clientes, etc.. Es la opción perfecta para empezar, ya que te permite <strong>entender cómo funciona Pi-hole y ver qué dispositivos están haciendo más consultas</strong>. Si estás en un entorno doméstico y quieres máximo control y visibilidad, esta es tu opción.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="923" height="563" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_8.png" alt="" class="wp-image-4374" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_8.png 923w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_8-300x183.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_8-768x468.png 768w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<p class="wp-block-paragraph">Pantalla de resumen  de la instalación, donde te dice cual es la dirección IP de tu servidor Pi-hole, distintos modos de como acceder a través del navegador y tu da una <strong>contraseña temporal</strong> para el acceso.</p>



<h2 class="wp-block-heading">Paso 5: Acceder al panel de administración</h2>



<p class="wp-block-paragraph">Abre tu navegador y ve a:</p>



<pre class="wp-block-code"><code>http:&#47;&#47;localhost/admin</code></pre>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="472" height="601" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_9.png" alt="" class="wp-image-4375" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_9.png 472w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/pihole_installer_9-236x300.png 236w" sizes="auto, (max-width: 472px) 100vw, 472px" /></figure>



<p class="wp-block-paragraph">Inicia sesión con la contraseña temporal. </p>



<p class="wp-block-paragraph">Si lo deseas puedes cambiar la contraseña por una más segura de tu elección:</p>



<pre class="wp-block-code"><code>pihole -a -p</code></pre>



<h2 class="wp-block-heading">Paso 6: Configurar el router para usar Pi-hole</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Como dije anteriormente, sigo sobre los pasos de un router Asus, las instrucciones del tuyo pueden ser algo diferentes. Investiga como hacerlo.</p>
</blockquote>



<p class="wp-block-paragraph">Ahora, el paso clave para que toda tu red se beneficie:</p>



<ol class="wp-block-list">
<li>Entra en la configuración de tu router.</li>



<li>Busca la sección de <strong>LAN</strong> y dentro busca <strong>Servidor DHCP</strong>.</li>



<li>Pon como <strong>servidor DNS primario</strong> la IP estática de tu Raspberry Pi. Así todos los dispositivos que se conecten automáticamente usarán Pi-hole.</li>



<li>Guarda los cambios y reinicia el router si es necesario.</li>
</ol>



<h2 class="wp-block-heading">Paso 7: forzar la actualización de listas.</h2>



<p class="wp-block-paragraph">En la instalación, las <strong>listas de Steven Black fueron añadidas pero no descargadas ni instaladas</strong>.</p>



<p class="wp-block-paragraph">Desde la terminal, podemos hacerlo de forma rápida con un comando de este modo:</p>



<pre class="wp-block-code"><code>sudo pihole -g</code></pre>



<p class="wp-block-paragraph">Este comando descarga e instala las listas de bloqueo.</p>



<h2 class="wp-block-heading">Paso 8: Verificar que el bloqueo funciona.</h2>



<p class="wp-block-paragraph">Para probar, ejecuta desde la terminal de tu Raspberry:</p>



<pre class="wp-block-code"><code>nslookup ad.doubleclick.net 127.0.0.1</code></pre>



<p class="wp-block-paragraph"><strong>Resultado esperado:</strong></p>



<pre class="wp-block-code"><code>raspberry@terrapi:~ $ nslookup ad.doubleclick.net 127.0.0.1
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	ad.doubleclick.net
Address: <mark style="background-color:#7bdcb5" class="has-inline-color">0.0.0.0</mark>
Name:	ad.doubleclick.net
Address: ::
</code></pre>



<p class="wp-block-paragraph">Si ves <code>0.0.0.0</code>  o ( <code>::</code>), ¡enhorabuena! Pi-hole está bloqueando.</p>



<p class="wp-block-paragraph">Otra forma gráfica de saber si tu Pi-hole está funcionando correctamente, es pinchando en el siguiente enlace.</p>



<p class="wp-block-paragraph"><a href="https://blockads.fivefilters.org/?pihole">https://blockads.fivefilters.org/?pihole</a></p>



<p class="wp-block-paragraph">Si todo va bien deberás obtener una pantalla como esta en tu dispositivo.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="536" height="1024" src="https://linuxete.duckdns.org/wp-content/uploads/2024/03/1000020944-536x1024.jpg" alt="" class="wp-image-2071" style="width:359px;height:auto" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/03/1000020944-536x1024.jpg 536w, https://linuxete.duckdns.org/wp-content/uploads/2024/03/1000020944-157x300.jpg 157w, https://linuxete.duckdns.org/wp-content/uploads/2024/03/1000020944.jpg 670w" sizes="auto, (max-width: 536px) 100vw, 536px" /></figure>



<h2 class="wp-block-heading">Otros ajustes.</h2>



<h3 class="wp-block-heading">## Cambia el puerto del servidor.</h3>



<p class="wp-block-paragraph">A partir de la <strong>versión 6</strong>, Pi-hole dejó de usar <code>lighttpd</code> y ahora incluye su propio servidor web integrado. Para cambiar el puerto del panel de administración en las versiones modernas de Pi-hole, tienes que hacerlo así:</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> El método correcto para Pi-hole v6 o superior</h4>



<p class="wp-block-paragraph">La configuración del puerto se encuentra en el archivo <code>/etc/pihole/pihole.toml</code>. Para cambiarlo:</p>



<ol class="wp-block-list">
<li>Abre el archivo de configuración con el siguiente comando: <br><code><strong>sudo nano /etc/pihole/pihole.toml</strong></code></li>



<li>Dentro del archivo, busca la sección <code><strong>[webserver]</strong></code>. <br>Verás una línea que define el puerto, similar a esta: <code>port = "80o,443os,[::]:80o,[::]:443os"</code> Esta línea configura los puertos para IPv4 e IPv6, tanto HTTP como HTTPS.</li>



<li>Modifica el número de puerto que deseas cambiar. Por ejemplo, para que el panel web use el puerto <code>8080</code>, la línea quedaría así: <code>port = "8080o,443os,[::]:8080o,[::]:443os"</code></li>



<li>Guarda los cambios (<code>Ctrl+O</code>, <code>Enter</code>) y cierra el editor (<code>Ctrl+X</code>).</li>



<li>Para que los cambios surtan efecto, reinicia el servicio de Pi-hole:<br><code><strong>sudo systemctl restart pihole-FTL</strong></code><br>o usa el comando:<br><strong>s<code>udo pihole restartdns</code></strong></li>
</ol>



<p class="wp-block-paragraph">A partir de ahora, accederás al panel de administración a través de <code>http://&lt;IP_de_tu_Raspberry&gt;:8080/admin</code>.</p>



<h3 class="wp-block-heading">## Actualiza tu Pi-hole</h3>



<p class="wp-block-paragraph">A continuación veremos el comando necesario para <strong>actualizar todos los componentes de Pi-hole a su última versión</strong>.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ¿Qué hace exactamente?</h4>



<p class="wp-block-paragraph">Al ejecutarlo, el script revisa los repositorios oficiales de los tres componentes principales de Pi-hole:</p>



<ul class="wp-block-list">
<li><strong>Pi-hole Core</strong>: El núcleo del software.</li>



<li><strong>Web Interface</strong>: El panel de administración.</li>



<li><strong>FTL</strong> (FTL Engine): El motor DNS que procesa las consultas.</li>
</ul>



<p class="wp-block-paragraph">Si detecta una nueva versión disponible, la descarga y la instala automáticamente.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bb.png" alt="💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ¿Cómo se usa?</h4>



<p class="wp-block-paragraph">Puedes usar cualquiera de estos dos comandos en la terminal:</p>



<pre class="wp-block-code"><code>sudo pihole updatePihole</code></pre>



<p class="wp-block-paragraph">o su forma abreviada:</p>



<pre class="wp-block-code"><code>sudo pihole -up</code></pre>



<p class="wp-block-paragraph">Ambos comandos hacen exactamente lo mismo.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Puntos importantes</h4>



<ul class="wp-block-list">
<li><strong>Permisos de root</strong>: Dependiendo de tu configuración, es posible que necesites ejecutarlo con <code>sudo</code>.</li>



<li><strong>No actualiza las listas de bloqueo</strong>: Este comando solo actualiza el software de Pi-hole. Para actualizar las listas de dominios bloqueados, debes usar <code>pihole -g</code> (o <code>pihole updateGravity</code>).</li>
</ul>



<h3 class="wp-block-heading">## Añadir nuevas listas</h3>



<p class="wp-block-paragraph">Las listas de <strong><a href="https://oisd.nl/setup/pihole">OISD</a></strong> (que significan <em>«Oh, I See, Domains!»</em>) son unas listas de bloqueo de dominios muy populares y reconocidas en la comunidad de Pi-hole.<a href="https://oisd.nl" target="_blank" rel="noreferrer noopener"></a></p>



<p class="wp-block-paragraph">Su filosofía principal es <strong>priorizar la funcionalidad</strong> para que todo siga funcionando correctamente, evitando los molestos «falsos positivos» que rompen páginas web. De hecho, su lema es que la lista <strong>«pasa la prueba de la novia»</strong> , lo que significa que es tan fiable que una persona no técnica ni siquiera notará que está activa, más allá de que los anuncios desaparecen.<a href="https://oisd.nl" target="_blank" rel="noreferrer noopener"></a></p>



<p class="wp-block-paragraph">Añadir las listas de OISD a Pi-hole es muy sencillo. Solo tienes que añadirlas como cualquier otra lista de bloqueo. Te explico cómo hacerlo en tu versión 6.</p>



<p class="wp-block-paragraph">Existen cuatro listas diferentes, pero lo normal es usar solo una de cada categoría, ya que son acumulativas:</p>



<ul class="wp-block-list">
<li><strong><code>https://big.oisd.nl</code></strong>: Es la lista completa. Bloquea anuncios, rastreadores, malware, phishing y telemetría. (No incluye contenido NSFW).</li>



<li><strong><code>https://small.oisd.nl</code></strong>: Es una versión más ligera que se centra principalmente en anuncios. Está incluida en la lista <code>big</code>.</li>



<li><strong><code>https://nsfw.oisd.nl</code></strong>: Bloquea sitios para adultos (pornografía, shock, etc.).</li>



<li><strong><code>https://nsfw-small.oisd.nl</code></strong>: Versión más ligera de la lista NSFW. Está incluida en la lista <code>nsfw</code>.</li>
</ul>



<h3 class="wp-block-heading">Método 1: Añadir las listas desde la interfaz web (Recomendado)</h3>



<ol class="wp-block-list">
<li>Abre el panel de administración de Pi-hole: <code>http://&lt;IP_de_tu_Raspberry&gt;/admin</code></li>



<li>En el menú lateral, ve a <strong>«Group Management»</strong> y luego haz clic en <strong>«Adlists»</strong>.</li>



<li>En el campo <strong>«Address»</strong>, pega la URL de la lista que quieras usar (por ejemplo, <code>https://big.oisd.nl</code>).</li>



<li>Haz clic en el botón <strong>«Add»</strong>.</li>



<li><strong>Actualiza la lista de bloqueo</strong>: Ve a <strong>«Tools»</strong> y haz clic en <strong>«Update Gravity»</strong>, o ejecuta el comando <code>pihole -g</code> en la terminal.</li>
</ol>



<h3 class="wp-block-heading">Método 2: Añadir las listas desde la terminal (CLI)</h3>



<p class="wp-block-paragraph">Si prefieres usar la terminal, puedes añadir las listas con el siguiente comando (reemplaza <code>"https://big.oisd.nl"</code> por la URL que prefieras):</p>



<pre class="wp-block-code"><code>pihole -a adlist add "https://big.oisd.nl"</code></pre>



<p class="wp-block-paragraph">Después, actualiza Gravity para que los cambios surtan efecto:</p>



<pre class="wp-block-code"><code>pihole -g</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Un par de detalles importantes</h3>



<ul class="wp-block-list">
<li><strong>Versión de Pi-hole</strong>: Asegúrate de que tu Pi-hole está actualizado. Estas listas requieren <strong>FTL v5.22, Web v5.19 y Core v5.16.1 o superior</strong>. Como tienes la versión 6, estás sobradamente cubierto.</li>



<li><strong>Número de dominios</strong>: Justo después de añadir la lista, es posible que Pi-hole muestre <code>0 dominios</code> en el contador. Es un <strong>problema visual conocido</strong>. No te preocupes, la lista se ha añadido correctamente y los dominios se cargarán al actualizar Gravity.</li>
</ul>



<p class="wp-block-paragraph">Con estos pasos, ya tendrás una de las listas de bloqueo más completas y con menos falsos positivos de toda la comunidad Pi-hole.</p>



<h3 class="wp-block-heading">## Lista de permitidos (allowlist)</h3>



<p class="wp-block-paragraph">En Pi-hole v6, el concepto de «lista blanca» (whitelist) ha pasado a llamarse oficialmente <strong>«lista de permitidos» (allowlist)</strong>. </p>



<p class="wp-block-paragraph">Dominios habituales en la lista blanca. <a href="https://discourse.pi-hole.net/t/commonly-whitelisted-domains/212/1">Pincha aquí</a></p>



<p class="wp-block-paragraph">Tienes varias formas de añadir dominios a esta lista, tanto desde la interfaz web como desde la terminal. </p>



<p class="wp-block-paragraph">Te explico cada una:</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Método 1: Desde la terminal (CLI) &#8211; El más rápido</h4>



<p class="wp-block-paragraph">La forma más directa es usar el nuevo comando <code>pihole allow</code>.</p>



<h5 class="wp-block-heading">Añadir un solo dominio:</h5>



<pre class="wp-block-code"><code>pihole allow dominio.com</code></pre>



<h5 class="wp-block-heading">Añadir varios dominios a la vez:</h5>



<pre class="wp-block-code"><code>pihole allow dominio1.com dominio2.com dominio3.com</code></pre>



<h5 class="wp-block-heading">Eliminar un dominio de la lista de permitidos:</h5>



<pre class="wp-block-code"><code>pihole allow remove dominio.com</code></pre>



<p class="wp-block-paragraph"><strong>Ejemplo práctico</strong> con algunos de los dominios que menciona el hilo de Discourse:</p>



<pre class="wp-block-code"><code>pihole allow clients4.google.com clients2.google.com s.youtube.com video-stats.l.google.com</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota:</strong> El comando <code>pihole allow</code> es el equivalente moderno al antiguo <code>pihole -w</code> de versiones anteriores.</p>
</blockquote>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Método 2: Desde la interfaz web (GUI) &#8211; El más visual</h4>



<ol class="wp-block-list">
<li>Abre el panel de administración de Pi-hole: <code>http://&lt;IP_de_tu_Raspberry&gt;/admin</code></li>



<li>En el menú lateral, haz clic en <strong>«Lists»</strong> (Listas).</li>



<li>Verás dos secciones: <strong>«Allowlist»</strong> (Lista de permitidos) y <strong>«Denylist»</strong> (Lista de denegados).</li>



<li>En la sección <strong>Allowlist</strong>, escribe el dominio que quieras permitir en el campo de texto.</li>



<li>Haz clic en <strong>«Add Allowlist»</strong> (Añadir a la lista de permitidos).</li>
</ol>



<p class="wp-block-paragraph">Puedes añadir varios dominios separados por espacios o cada uno en una línea nueva.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Método 3: Importar una lista completa (recomendado para muchos dominios)</h3>



<p class="wp-block-paragraph">Pi-hole v6 permite <strong>suscribirte a listas de permitidos públicas</strong>, igual que ya se hacía con las listas de bloqueo.</p>



<ol class="wp-block-list">
<li>Ve a <strong>«Lists»</strong> en el panel web.</li>



<li>En la sección <strong>«Allowlist»</strong>, encontrarás un campo para añadir una <strong>URL de lista de permitidos</strong>.</li>



<li>Introduce la URL de la lista (por ejemplo, la del repositorio comunitario).</li>



<li>Haz clic en <strong>«Add Allowlist»</strong>.</li>



<li>Ejecuta <code>pihole -g</code> (o <code>pihole gravity</code>) para que Pi-hole procese la nueva lista.</li>
</ol>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Importante: Los dominios se asignan al grupo «Default»</h2>



<p class="wp-block-paragraph">Por defecto, cuando añades un dominio a la lista de permitidos, este se asocia al <strong>grupo «Default»</strong> (por defecto). Si quieres que se aplique a otros grupos, tendrás que ir a <strong>Group Management &gt; Domains</strong> dentro de la interfaz web y asignarlos manualmente.</p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Resumen rápido</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Acción</th><th>Comando (terminal)</th><th>Ruta en web</th></tr></thead><tbody><tr><td>Añadir dominio</td><td><code>pihole allow dominio.com</code></td><td>Lists &gt; Allowlist &gt; Añadir dominio</td></tr><tr><td>Añadir varios</td><td><code>pihole allow dom1.com dom2.com</code></td><td>Lists &gt; Allowlist &gt; Añadir separados por espacio</td></tr><tr><td>Eliminar dominio</td><td><code>pihole allow remove dominio.com</code></td><td>Lists &gt; Allowlist &gt; Botón eliminar</td></tr><tr><td>Importar lista</td><td><code>pihole -g</code> (tras añadir URL)</td><td>Lists &gt; Allowlist &gt; Añadir URL</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Ahora ya sabes dónde y cómo añadir esos dominios comunes a tu lista de permitidos en Pi-hole v6. ¡A disfrutar de una navegación sin bloqueos falsos!</p>



<h2 class="wp-block-heading">Conclusión</h2>



<p class="wp-block-paragraph">Instalar Pi-hole en una Raspberry Pi ha sido una experiencia mucho más gratificante de lo que esperaba. No solo he conseguido eliminar anuncios y rastreadores en toda mi red doméstica, sino que también he aprendido conceptos fundamentales de redes como el DNS, las IP estáticas y la gestión de servidores.</p>



<p class="wp-block-paragraph">Lo que empezó como un simple proyecto técnico se convirtió en una oportunidad para <strong>entender cómo funciona Internet a nivel local</strong> y, de paso, mejorar la privacidad y velocidad de navegación de todos los dispositivos de mi casa.</p>



<p class="wp-block-paragraph"><strong>¿Dudas?</strong> Déjalas en los comentarios y te ayudaré encantado. ¡Feliz bloqueo!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/pi-hole-en-raspberry-pi-instalacion-paso-a-paso/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo recibir notificaciones de aMule en Telegram</title>
		<link>https://linuxete.duckdns.org/como-recibir-notificaciones-de-amule-en-telegram/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-recibir-notificaciones-de-amule-en-telegram</link>
					<comments>https://linuxete.duckdns.org/como-recibir-notificaciones-de-amule-en-telegram/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 16:23:00 +0000</pubDate>
				<category><![CDATA[amule]]></category>
		<category><![CDATA[aMule 3.0.0]]></category>
		<category><![CDATA[amule.conf]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[Bot]]></category>
		<category><![CDATA[Descargas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Notificaciones]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Raspberry Pi 4]]></category>
		<category><![CDATA[Raspberry Pi 5]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Telegram]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=3826</guid>

					<description><![CDATA[Si eres de la vieja escuela, que aún disfruta con aMule, sabrás que no hay nada más frustrante que estar mirando la pantalla esperando a que termine esa descarga de pocas fuentes, que lleva semanas o el algún caso meses, esperando a finalizar. ¿No sería maravilloso que la «Mula» te enviara un mensaje al móvil [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si eres de la vieja escuela, que aún disfruta con <strong>aMule</strong>, sabrás que no hay nada más frustrante que estar mirando la pantalla esperando a que termine esa descarga de pocas fuentes, que lleva semanas o el algún caso meses, esperando a  finalizar. ¿No sería maravilloso que la «Mula» te enviara un mensaje al móvil cuando termina? <br>Aquí os comparto este tutorial definitivo, y digo <strong>definitivo</strong> porque hemos peleado con todos los errores posibles: nombres de archivos con comillas, tamaños en bytes ilegibles y mensajes que nunca llegaban. La mayoría de los scripts que circulan por internet fallan porque aMule se vuelve loco con los espacios y los símbolos (como el apóstrofo de <em>Don&#8217;t</em>) y acaba enviando mensajes vacíos o bloqueando el sistema.</p>



<p class="wp-block-paragraph">Vamos a usar un script «inteligente» que recoge todo lo que aMule escupe, calcula los Megabytes y lo envía a Telegram usando un formato que <strong>nunca falla</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Paso 1: Configurar aMule</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>¡OJO!</strong> Antes de editar, detén aMule</p>
</blockquote>



<pre class="wp-block-code"><code>sudo systemctl stop amuled.service</code></pre>



<p class="wp-block-paragraph">Vamos a decirle a aMule que ejecute nuestro script. Para ello, debemos editar el archivo <code>amule.conf</code>.</p>



<p class="wp-block-paragraph">Recuerda que estamos usando un usuario dedicado, por lo que lo haremos a su ruta</p>



<pre class="wp-block-code"><code>sudo nano /home/amule/.aMule/amule.conf</code></pre>



<p class="wp-block-paragraph">Busca la sección <code>[UserEvents/DownloadCompleted]</code> y déjala exactamente así:</p>



<pre class="wp-block-code"><code>CoreEnabled=1
CoreCommand=/home/<mark style="background-color:#7bdcb5" class="has-inline-color">tu_usuario</mark>/notificar_amule.sh %NAME %SIZE</code></pre>



<p class="wp-block-paragraph">Sustituye tu_usuario por el tuyo propio.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Paso 2: Crear el Script</h3>



<p class="wp-block-paragraph">Crea el archivo de tu script, sustituyendo tu_usuario por el tuyo propio:</p>



<pre class="wp-block-code"><code>sudo nano /home/amule/notificar_amule.sh </code></pre>



<p class="wp-block-paragraph">y pega este código (sustituye tu Token y tu ID de Chat):</p>



<pre class="wp-block-code"><code>#!/bin/bash

# --- CONFIGURACION DEL BOT ---
TOKEN="<mark style="background-color:#7bdcb5" class="has-inline-color">TU_TOKEN_AQUI</mark>"
ID_CHAT="<mark style="background-color:#7bdcb5" class="has-inline-color">TU_ID_AQUI</mark>"

# 1. Recogemos todo lo que mande aMule de golpe
TODO="$*"

# 2. Extraemos el tamaño (el último número de la frase)
BYTES=$(echo "$TODO" | grep -oP '\d+$')

# 3. Limpiamos el nombre (quitamos el número del final)
NOMBRE=$(echo "$TODO" | sed 's/&#91;0-9]*$//')

# 4. Calculamos los MB y sacamos la fecha de la Raspberry
TAMANO_MB=$((BYTES / 1048576))
FECHA=$(date +"%d/%m/%Y a las %H:%M")

# 5. El Mensaje (con emoticonos para darle estilo)
MENSAJE="&#x2705; DESCARGA COMPLETADA
----------------------------------
&#x1f3b5; Archivo: $NOMBRE
&#x2696; Tamaño: $TAMANO_MB MB
&#x1f552; Finalizado: $FECHA
&#x1f967; Servidor: Raspberry Pi
----------------------------------"

# 6. Envío blindado con urlencode (evita que el mensaje se corte)
/usr/bin/curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
     --data-urlencode "chat_id=$ID_CHAT" \
     --data-urlencode "text=$MENSAJE" &gt; /dev/null
</code></pre>



<p class="wp-block-paragraph">Como este archivo fue creado con sudo, el propietario será root, pero nosotros lo vamos a cambiar al usuario dedicado que es amule</p>



<pre class="wp-block-code"><code>sudo chown amule:amule /home/amule/notificar_amule.sh</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Paso 3: Permisos y Arranque</h3>



<p class="wp-block-paragraph">Para que esto funcione, dale permiso de ejecución al script:</p>



<pre class="wp-block-code"><code>sudo chmod +x /home/amule/notificar_amule.sh</code></pre>



<p class="wp-block-paragraph">Ahora, arranca aMule de nuevo:</p>



<pre class="wp-block-code"><code><code>sudo systemctl restart amule</code></code></pre>



<p class="wp-block-paragraph">¡Y listo! A partir de ahora, cada vez que la Mula termine su trabajo, recibirás un «ping» en tu Telegram con toda la información. ¡A disfrutar de la descarga!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-recibir-notificaciones-de-amule-en-telegram/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cambia la plantilla web de aMule y dale un aspecto moderno.</title>
		<link>https://linuxete.duckdns.org/%f0%9f%8e%a8-cambia-la-plantilla-web-de-amule-y-darle-un-aspecto-moderno/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25f0%259f%258e%25a8-cambia-la-plantilla-web-de-amule-y-darle-un-aspecto-moderno</link>
					<comments>https://linuxete.duckdns.org/%f0%9f%8e%a8-cambia-la-plantilla-web-de-amule-y-darle-un-aspecto-moderno/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 16:00:00 +0000</pubDate>
				<category><![CDATA[amule]]></category>
		<category><![CDATA[aMule 3.0.0]]></category>
		<category><![CDATA[aMule WebUI]]></category>
		<category><![CDATA[amuleweb]]></category>
		<category><![CDATA[AmuleWebUI-Reloaded]]></category>
		<category><![CDATA[interfaz remota]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4182</guid>

					<description><![CDATA[Si has seguido mi guía anterior para compilar aMule desde GitHub en tu Raspberry Pi 5, ya tienes el demonio (amuled) funcionando y accedes a la interfaz web en http://localhost:4711. Estas instrucciones no te funcionarán si instalaste aMule desde repositorios. La plantilla web por defecto es bastante espartana, con un diseño que recuerda a principios [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si has seguido mi guía anterior para compilar aMule desde GitHub en tu Raspberry Pi 5, ya tienes el demonio (<code>amuled</code>) funcionando y accedes a la interfaz web en <code>http://localhost:4711</code>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Estas instrucciones no te funcionarán si instalaste aMule desde repositorios.</p>
</blockquote>



<p class="wp-block-paragraph"><strong>La plantilla web por defecto es bastante espartana</strong>, con un diseño que recuerda a principios de los 2000. Por suerte, aMule permite cambiarla fácilmente, y existen creaciones de la comunidad mucho más atractivas y modernas.</p>



<p class="wp-block-paragraph">En este artículo te mostraré cómo instalar <strong>AmuleWebUI-Reloaded</strong>, una plantilla que utiliza <strong>Bootstrap, jQuery e iconos</strong> para ofrecer una interfaz responsive, limpia y agradable a la vista, tanto en ordenador como en móvil.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ¿Qué mejora esta plantilla?</h3>



<ul class="wp-block-list">
<li><strong>Diseño actualizado</strong> con Bootstrap y animaciones CSS.</li>



<li><strong>Interfaz responsive</strong> que se adapta a pantallas pequeñas (perfecta para usar desde el móvil).</li>



<li><strong>Iconos y botones más claros</strong> que facilitan la navegación.</li>



<li><strong>Transiciones suaves</strong> y logo animado en el inicio de sesión.</li>



<li><strong>Mismas funcionalidades</strong> que la plantilla original, solo mejora la apariencia.</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Requisitos previos</h3>



<p class="wp-block-paragraph">Antes de empezar, asegúrate de que tienes:</p>



<ul class="wp-block-list">
<li>aMule funcionando en tu Raspberry Pi (siguiendo mi <a href="https://linuxete.duckdns.org/como-compilar-amule-3-0-en-raspberry-pi/">guía de compilación</a>).</li>



<li>Acceso por SSH a la Raspberry Pi.</li>



<li>El servicio <code>amule.service</code> activo.</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Instalación paso a paso</h3>



<h4 class="wp-block-heading">1. Detener el servicio aMule</h4>



<p class="wp-block-paragraph">Siempre es recomendable detener el demonio antes de modificar sus archivos:</p>



<pre class="wp-block-code"><code>sudo systemctl stop amuled.service</code></pre>



<h4 class="wp-block-heading">2. Clonar la plantilla en el directorio correcto</h4>



<p class="wp-block-paragraph">Como compilamos aMule desde código fuente y lo instalamos en <code>/usr/local</code>, el directorio de plantillas web está en:</p>



<pre class="wp-block-code"><code>cd /usr/local/share/amule/webserver</code></pre>



<p class="wp-block-paragraph">Ahora clonamos el repositorio de la plantilla:</p>



<pre class="wp-block-code"><code>sudo git clone https://github.com/MatteoRagni/AmuleWebUI-Reloaded.git</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota:</strong> Usamos <code>sudo</code> porque el directorio pertenece al sistema.</p>
</blockquote>



<h4 class="wp-block-heading">3. Configurar aMule para usar la nueva plantilla</h4>



<p class="wp-block-paragraph">Editamos el archivo de configuración del demonio, que se encuentra en tu carpeta personal:</p>



<pre class="wp-block-code"><code>sudo nano /home/amule/.aMule/amule.conf</code></pre>



<p class="wp-block-paragraph">Buscamos la sección <code>[Webserver]</code> y añadimos o modificamos la línea <code>Template</code>:</p>



<pre class="wp-block-code"><code>&#91;Webserver]
Enabled=1
Password=tu_hash_md5
Port=4711
Template=AmuleWebUI-Reloaded</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Importante:</strong> El nombre <code>Template</code> debe coincidir exactamente con el nombre de la carpeta que clonaste. Respeta mayúsculas y minúsculas.</p>
</blockquote>



<p class="wp-block-paragraph">Guarda los cambios con <code>Ctrl+O</code>, presiona <code>Enter</code> y sal con <code>Ctrl+X</code>.</p>



<h4 class="wp-block-heading">4. Reiniciar el servicio</h4>



<pre class="wp-block-code"><code>sudo systemctl restart amuled.service</code></pre>



<h4 class="wp-block-heading">5. ¡Disfrutar de la nueva interfaz!</h4>



<p class="wp-block-paragraph">Abre tu navegador y accede a <code>http://la-ip-de-tu-raspberry:4711</code> (o <code>http://localhost:4711</code> si estás en la propia Raspberry).</p>



<p class="wp-block-paragraph">Verás que la pantalla de login tiene un logo animado y un aspecto mucho más cuidado. Introduce tu contraseña y ¡listo!</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Verificación de que todo funciona</h3>



<p class="wp-block-paragraph">Si algo no va bien, puedes comprobar los logs del servicio:</p>



<pre class="wp-block-code"><code>journalctl -u amuled.service -f</code></pre>



<p class="wp-block-paragraph">Abre la interfaz web mientras observas los logs. Si la plantilla no se carga, puede que el nombre no coincida o que la carpeta no esté en la ruta correcta.</p>



<p class="wp-block-paragraph">También puedes listar las plantillas disponibles para confirmar que está instalada:</p>



<pre class="wp-block-code"><code>ls -la /usr/local/share/amule/webserver/</code></pre>



<p class="wp-block-paragraph">Deberías ver la carpeta <code>AmuleWebUI-Reloaded</code> junto con otras (como <code>default</code> o <code>php-default</code>).</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5bc.png" alt="🖼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Comparativa visual</h3>



<p class="wp-block-paragraph">Para que te hagas una idea, así se ve la interfaz <strong>antes</strong> (plantilla clásica):</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="601" height="1024" src="https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-06-601x1024.jpg" alt="" class="wp-image-4184" style="width:455px;height:auto" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-06-601x1024.jpg 601w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-06-176x300.jpg 176w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-06-768x1308.jpg 768w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-06-902x1536.jpg 902w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-06.jpg 1080w" sizes="auto, (max-width: 601px) 100vw, 601px" /></figure>



<p class="wp-block-paragraph">Y así se ve <strong>después</strong> con AmuleWebUI-Reloaded:</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="597" height="1024" src="https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-02-597x1024.jpg" alt="" class="wp-image-4185" style="width:455px;height:auto" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-02-597x1024.jpg 597w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-02-175x300.jpg 175w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-02-768x1316.jpg 768w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-02-896x1536.jpg 896w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-05-31_20-25-02.jpg 1080w" sizes="auto, (max-width: 597px) 100vw, 597px" /></figure>



<p class="wp-block-paragraph">La diferencia es notable, sobre todo si accedes desde el móvil.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f41b.png" alt="🐛" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Posibles problemas y soluciones</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Problema</th><th>Posible solución</th></tr></thead><tbody><tr><td>La plantilla no se ve, sigue saliendo la antigua</td><td>Verifica que el nombre en <code>Template</code> sea exactamente <code>AmuleWebUI-Reloaded</code>. Reinicia el servicio.</td></tr><tr><td>Error 404 o página en blanco</td><td>Asegúrate de que la carpeta está en <code>/usr/local/share/amule/webserver/</code> y tiene permisos de lectura.</td></tr><tr><td>El servicio no arranca</td><td>Revisa los logs con <code>journalctl -u amuled.service -e</code>. Puede que hayas introducido mal algún parámetro en <code>amule.conf</code>.</td></tr><tr><td>Quiero volver a la plantilla original</td><td>Cambia la línea <code>Template</code> por <code>Template=default</code> y reinicia el servicio.</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusión</h3>



<p class="wp-block-paragraph">Cambiar la plantilla web de aMule es un proceso sencillo que mejora enormemente la experiencia de uso. En pocos minutos, tu interfaz web pasará de ser funcional pero austera a algo mucho más agradable y moderno.</p>



<p class="wp-block-paragraph">Ahora ya puedes gestionar tus descargas desde cualquier dispositivo con un diseño responsive y cuidado. Si te ha gustado este artículo, compártelo o déjame un comentario con tus impresiones.</p>



<p class="wp-block-paragraph">¡Felices descargas! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f418.png" alt="🐘" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a1.png" alt="⚡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Enlaces de interés</h3>



<ul class="wp-block-list">
<li><a href="https://github.com/MatteoRagni/AmuleWebUI-Reloaded">Repositorio de la plantilla AmuleWebUI-Reloaded</a></li>



<li><a href="https://linuxete.duckdns.org/como-compilar-amule-3-0-en-raspberry-pi/">Guía de compilación de aMule en Raspberry Pi 5</a></li>



<li><a href="https://www.amule.org">Web oficial de aMule</a></li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/%f0%9f%8e%a8-cambia-la-plantilla-web-de-amule-y-darle-un-aspecto-moderno/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como compilar aMule 3.0 en Raspberry  Pi</title>
		<link>https://linuxete.duckdns.org/como-compilar-amule-3-0-en-raspberry-pi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-compilar-amule-3-0-en-raspberry-pi</link>
					<comments>https://linuxete.duckdns.org/como-compilar-amule-3-0-en-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 15:48:55 +0000</pubDate>
				<category><![CDATA[amule]]></category>
		<category><![CDATA[aMule 3.0.0]]></category>
		<category><![CDATA[aMule 3.0 Debian]]></category>
		<category><![CDATA[aMule Raspberry Pi]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4234</guid>

					<description><![CDATA[¡Bienvenidos una vez más, amantes del P2P! Después de una espera que se nos ha hecho eterna, por fin podemos celebrar una noticia que muchos creíamos que nunca llegaría. La versión 3.0.0 de aMule ya está aquí y, creedme, merecía la espera. Para todos los que seguimos confiando en las redes eD2k y Kademlia, esto [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">¡Bienvenidos una vez más, amantes del P2P! Después de una espera que se nos ha hecho eterna, por fin podemos celebrar una noticia que muchos creíamos que nunca llegaría. La versión <strong>3.0.0 de aMule</strong> ya está <a href="https://amule-org.github.io/es/">aquí</a> y, creedme, merecía la espera. Para todos los que seguimos confiando en las redes eD2k y Kademlia, esto es como volver a ver a un amigo después de muchos años.</p>



<p class="wp-block-paragraph">El proyecto, que llevaba más de cinco años sin un lanzamiento importante desde la versión 2.3.3 de 2021, ha vuelto a la carga con una versión que han bautizado acertadamente como <strong>«The &#8216;alive again&#8217; version»</strong> (la versión «viva de nuevo»). Y no es para menos.</p>



<h3 class="wp-block-heading">¿Qué trae de nuevo aMule 3.0.0?</h3>



<p class="wp-block-paragraph">El cambio más impactante, sin duda, está en el rendimiento. Los desarrolladores han realizado una profunda reescritura del sistema de E/S de disco y de la capa de red. El resultado son unas cifras que quitan el hipo: <strong>mejoras de velocidad de entre 100 y 380 veces más rápidas</strong> en descargas entre pares en comparación con la versión anterior, sin necesidad de cambiar de hardware. Las pruebas sobre el terreno hablan por sí solas: en un Mac Studio con chip Apple Silicon se ha pasado de 0,35 MB/s a <strong>135 MB/s</strong>. ¡Una auténtica bestia!</p>



<p class="wp-block-paragraph">Pero no todo es velocidad. aMule 3.0.0 también ha modernizado por completo sus entrañas:</p>



<ul class="wp-block-list">
<li><strong>Sistema de compilación moderno</strong>: Se ha eliminado el anticuado Autotools y se ha unificado todo con CMake, lo que facilita enormemente la compilación en los sistemas actuales.</li>



<li><strong>Paquetes nativos para todos</strong>: Por fin tenemos binarios nativos y actualizados para las principales plataformas. Instalador y versión portable para Windows (x64 y ARM64), .dmg universal para macOS (Apple Silicon e Intel) y AppImage o Flatpak para Linux (x64 y ARM64). Ya no hay excusas para no tenerlo todo a punto.</li>



<li><strong>Límites de ancho de banda corregidos</strong>: Los limitadores de subida y bajada se han reescrito por completo para que funcionen como es debido, con un sistema de «token bucket» real que promete una gestión del tráfico mucho más precisa.</li>



<li><strong>HTTPS y más</strong>: La descarga de listas de servidores y otras funciones vía HTTPS vuelven a funcionar correctamente, y el cliente de geolocalización se ha actualizado a MaxMindDB.</li>
</ul>



<p class="wp-block-paragraph">La espera ha sido larga, pero la comunidad alrededor de aMule puede respirar tranquila. El proyecto no solo está vivo, sino que ha vuelto con una fuerza inusitada, modernizándose por completo sin perder esa esencia que nos hizo enamorarnos del P2P.</p>



<p class="wp-block-paragraph">Este tutorial se compone de los siguientes pasos.</p>



<ul class="wp-block-list">
<li>A. Preparación.</li>



<li>B. Compilación e instalación</li>



<li>C. Creación de un Usuario Dedicado</li>



<li>D. Automatización avanzada del servicio con Systemd</li>



<li>E. Configuración de aMule</li>
</ul>



<h2 class="wp-block-heading">A. Preparación.</h2>



<p class="wp-block-paragraph">Para compilar la versión 3.0 estable de aMule tal como indica la documentación oficial, usaremos CMake. La ventaja de hacerlo en Debian 13 (Trixie) es que todos los paquetes y dependencias requeridos, incluyendo wxWidgets 3.2, están disponibles de forma nativa en los repositorios oficiales sin tener que buscar versiones alternativas.</p>



<h3 class="wp-block-heading">Instalar las dependencias</h3>



<p class="wp-block-paragraph">El documento de instalación de GitHub menciona las dependencias obligatorias (como Crypto++, zlib y Boost) y las opcionales para la interfaz, los iconos en la bandeja del sistema y las estadísticas.</p>



<p class="wp-block-paragraph">Actualizamos la lista de paquetes.</p>



<pre class="wp-block-code"><code>sudo apt update</code></pre>



<p class="wp-block-paragraph">Ejecuta este comando en tu terminal para instalar todas las librerías de desarrollo necesarias:</p>



<pre class="wp-block-code"><code>sudo apt install build-essential cmake git gettext libwxgtk3.2-dev \
    libcrypto++-dev libboost-dev libboost-system-dev zlib1g-dev libupnp-dev \
    libgd-dev libmaxminddb-dev libayatana-appindicator3-dev libglib2.0-dev</code></pre>



<h2 class="wp-block-heading">B. Compilación e instalación.</h2>



<h3 class="wp-block-heading">Descarga el código fuente</h3>



<p class="wp-block-paragraph">Sitúate en tu directorio de usuario para descargar el ćodigo fuente con este comando:</p>



<pre class="wp-block-code"><code>cd ~</code></pre>



<p class="wp-block-paragraph">Un vez ahí, descargamos el código fuente de aMule 3.0</p>



<pre class="wp-block-code"><code>wget https://github.com/amule-org/amule/archive/refs/tags/3.0.0.tar.gz</code></pre>



<p class="wp-block-paragraph">Como resultado obtendremos un archivo comprimido en Gzip</p>



<pre class="wp-block-code"><code>3.0.0.tar.gz</code></pre>



<p class="wp-block-paragraph">Descomprime el archivo así.</p>



<pre class="wp-block-code"><code>tar -xzf 3.0.0.tar.gz</code></pre>



<p class="wp-block-paragraph">Al descomprimirse creará un directorio con los archivos necesarios para la compilación.</p>



<p class="wp-block-paragraph">Entramos al nuevo directorio con:</p>



<pre class="wp-block-code"><code>cd amule-3.0.0</code></pre>



<h3 class="wp-block-heading">Configuración avanzada con CMake (Exprimiendo la Pi 5)</h3>



<p class="wp-block-paragraph">En lugar de hacer una compilación genérica, vamos a pasarle a CMake una serie de directivas de optimización brutales para exprimir la arquitectura de los núcleos <strong>Cortex-A76</strong> de la Raspberry Pi 5 y mejorar el rendimiento del almacenamiento.</p>



<p class="wp-block-paragraph">Creamos un directorio limpio para la compilación y configuramos el entorno:</p>



<pre class="wp-block-code"><code>mkdir build &amp;&amp; cd build</code></pre>



<p class="wp-block-paragraph">Ahora, lanza el comando de configuración con las banderas optimizadas:</p>



<pre class="wp-block-code"><code>cmake .. \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_C_FLAGS="-O3 -march=armv8.2-a+crypto -mtune=cortex-a76 -pipe" \
    -DCMAKE_CXX_FLAGS="-O3 -march=armv8.2-a+crypto -mtune=cortex-a76 -pipe" \
    -DBUILD_DAEMON=ON \
    -DBUILD_REMOTEGUI=ON \
    -DBUILD_AMULECMD=ON \
    -DBUILD_WEBSERVER=ON \
    -DBUILD_MONOLITHIC=OFF \
    -DENABLE_MMAP=OFF \
    -DENABLE_UPNP=ON \
    -DCMAKE_INSTALL_PREFIX=/usr/local
</code></pre>



<h4 class="wp-block-heading">¿Por qué esta configuración?</h4>



<ul class="wp-block-list">
<li><strong><code>-DCMAKE_BUILD_TYPE=RelWithDebInfo</code>:</strong> Aplica las optimizaciones de velocidad de una versión <em>Release</em>, pero conserva los símbolos de depuración. Si la rama <em>master</em> sufriera un cierre inesperado, el <em>core dump</em> nos dirá la línea exacta del fallo sin ralentizar el demonio en el día a día.</li>



<li><strong><code>-DBUILD_MONOLITHIC=OFF</code>:</strong> Desactivamos la interfaz gráfica «todo en uno». Al compilar sólo el demonio y las herramientas remotas, el binario es muchísimo más ligero.</li>



<li><strong><code>+crypto</code> y <code>cortex-a76</code>:</strong> Obliga a GCC a generar instrucciones específicas para el procesador de la Pi 5, aprovechando su aceleración criptográfica por hardware para el cálculo de hashes P2P.</li>



<li><strong><code>-DENABLE_MMAP=OFF</code>:</strong> Desactiva el mapeo de memoria. Usa E/S tradicional (más compatible con kernels de 16KB y sistemas remotos, evita corrupción). En lugar de proyectar los archivos directamente en la memoria virtual, el demonio usará las operaciones clásicas de lectura/escritura (<code>read</code> / <code>write</code>).</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Importante sobre <code>DENABLE_MMAP=OFF</code></strong> <strong>en Debian 13</strong><br>Desactiva el mapeo de memoria nativo de Linux. </p>



<p class="wp-block-paragraph"><strong>Efectos principales:</strong></p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Mayor compatibilidad</strong>: Evita problemas de corrupción en kernels con tamaños de página no estándar (como las páginas de <strong>16 KB</strong> en Raspberry Pi 5 con Debian 13), en sistemas de archivos remotos (NFS, SMB) o con implementaciones problemáticas de <code>mmap</code>.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Soluciona bucles de rehasheo</strong> en aMule, ya que elimina el desalineamiento de páginas que ocurría al superar ciertos tamaños de archivo.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Rendimiento algo menor</strong>: Incrementa ligeramente el uso de CPU y reduce la velocidad de transferencia en almacenamiento rápido (NVMe, SSD), porque se copian datos entre usuario y kernel en cada operación.</li>
</ul>



<p class="wp-block-paragraph"><strong>Cuándo usarlo:</strong><br>Solo si experimentas fallos con la opción activada (archivos corruptos, rehasheos infinitos, descargas que nunca completan). En caso contrario, mantener <code>ON</code> ofrece mejor rendimiento.</p>
</blockquote>



<h3 class="wp-block-heading">4. Compilación.</h3>



<p class="wp-block-paragraph">Para no perder tiempo, le indicamos al sistema que compile aprovechando todos los núcleos del procesador en paralelo. Gracias al <code>flag -pipe</code>, el proceso se hará intercambiando datos en la RAM en lugar de escribir temporales intermedios en el disco:</p>



<pre class="wp-block-code"><code>cmake --build . -j"$(nproc)"</code></pre>



<h3 class="wp-block-heading">5. Instalación.</h3>



<p class="wp-block-paragraph">Una vez que el proceso finalice con éxito, instalamos los binarios optimizados en el sistema:</p>



<pre class="wp-block-code"><code>sudo cmake --install .</code></pre>



<h4 class="wp-block-heading">Refresca la caché de enlaces dinámicos del sistema</h4>



<p class="wp-block-paragraph">El comando <code>ldconfig</code> lo que hace es asegurar y actualizar la caché de las librerías compartidas (los archivos <code>.so</code>) en los directorios del sistema (como <code>/usr/local/lib</code>).</p>



<pre class="wp-block-code"><code>sudo ldconfig</code></pre>



<p class="wp-block-paragraph">Aunque en este caso, los ejecutables que se generan no instalan librerías compartidas del sistema y no sería necesario ejecutarlo , pero siempre es un buen hábito su ejecución.</p>



<h4 class="wp-block-heading">Actualizar la caché de iconos</h4>



<pre class="wp-block-code"><code># 1. Copiar el icono de la 3.0.0 a pixmaps con el nombre exacto que busca el lanzador
sudo cp /home/raspberry/amule-3.0.0/org.amule.aMule.png /usr/share/pixmaps/org.amule.aMule.png

# 2. Forzar la actualización de la caché de iconos del sistema
sudo gtk-update-icon-cache -f /usr/share/icons/hicolor

# 3. Reiniciar el panel de XFCE4 para que aplique el cambio de inmediato
xfce4-panel --restart</code></pre>



<p class="wp-block-paragraph">En cuanto parpadee la barra de tareas tras el último comando, abre el menú de aplicaciones. El dibujo clásico de aMule ya aparecerá impecable en el lanzador. ¡Solucionado!</p>



<h2 class="wp-block-heading">B. Creación de un Usuario Dedicado</h2>



<p class="wp-block-paragraph">Por seguridad (aplicando el <strong>Principio de Menor Privilegio</strong>), nunca debemos ejecutar un demonio expuesto a la red con el usuario root o con nuestra cuenta personal. Al aislar aMule en su propio usuario de sistema, si el proceso se ve comprometido por algún exploit de red, el atacante se quedará atrapado en una «jaula» sin acceso al resto del sistema ni a tus datos personales.</p>



<h3 class="wp-block-heading">b.1. Crear el usuario de sistema <code>amule</code></h3>



<p class="wp-block-paragraph">Ejecutamos el siguiente comando para generar el entorno aislado:</p>



<pre class="wp-block-code"><code>sudo useradd -r -m -s /usr/sbin/nologin amule</code></pre>



<ul class="wp-block-list">
<li><strong><code>-r</code>:</strong> Define que es un usuario de sistema (no caduca).</li>



<li><strong><code>-m</code>:</strong> Crea automáticamente su directorio de trabajo en <code>/home/amule</code> para alojar sus configuraciones.</li>



<li><strong><code>-s /usr/sbin/nologin</code>:</strong> Bloquea por completo cualquier intento de inicio de sesión (local o por SSH) con esta cuenta.</li>
</ul>



<h3 class="wp-block-heading">b.2. Preparar la carpeta en el almacenamiento.</h3>



<p class="wp-block-paragraph">Las carpetas de almacenamiento las puedes dejar tal vienen por defecto y tan solo deberás darles permisos como haremos mas adelate.</p>



<p class="wp-block-paragraph">Como dispongo de un viejo disco mecánico conectado via usb a mi raspberry y para no desgastar el disco SSD/NVMe con la escritura intensiva del P2P, voy a crear una carpeta dedicada en mi disco de almacenamiento montado en <code>/media</code></p>



<pre class="wp-block-code"><code>sudo mkdir -p /media/Disco_1TB/aMule/Incoming /media/Disco_1TB/aMule/Temp</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota al lector: para montar un disco en Debian, sigue los pasos de <a href="https://linuxete.duckdns.org/guia-completa-montar-particiones-al-inicio-en-debian/">Guía completa: Montar particiones al inicio en Debian</a></p>
</blockquote>



<h3 class="wp-block-heading">b.3. El truco maestro de los permisos (SGID)</h3>



<p class="wp-block-paragraph">Si le damos la propiedad de la carpeta exclusivamente al usuario <code>amule</code>, mi usuario habitual (<code>raspberry</code>) podrá leer las descargas pero <strong>no podrá borrarlas, renombrarlas ni moverlas</strong> a otra parte de la red sin usar <code>sudo</code>.</p>



<p class="wp-block-paragraph">Para solucionar esto de forma elegante como un administrador profesional, aplicamos la siguiente configuración de permisos compartidos:</p>



<pre class="wp-block-code"><code># 1. Metemos a tu usuario habitual en el grupo de amule
sudo usermod -aG amule raspberry

# 2. Hacemos que 'amule' sea el dueño y el grupo 'amule' sea el propietario de todo de forma recursiva
sudo chown -R amule:amule /media/Disco_1TB/amule_downloads

# 3. Damos permisos 775 (lectura, escritura y ejecución) recursivamente a todo lo actual
sudo chmod -R 775 /media/Disco_1TB/amule_downloads

# 4. Activamos el bit SGID en la carpeta raíz y en las subcarpetas de descarga
sudo chmod g+s /media/Disco_1TB/aMule
sudo chmod g+s /media/Disco_1TB/aMule/Incoming
sudo chmod g+s /media/Disco_1TB/aMule/Temp</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>¿Qué hace el bit SGID (<code>chmod g+s</code>)?</strong> Es la clave de todo. Al activarlo en la carpeta madre, <strong>cualquier archivo o subcarpeta que aMule descargue e inserte ahí dentro heredará automáticamente el grupo <code>amule</code></strong> con permisos de escritura. Gracias a esto, tu usuario <code>raspberry</code> siempre tendrá el control total para gestionar las descargas completadas. <em>(Nota: Recuerda reiniciar sesión con tu usuario o ejecutar <code><mark style="background-color:var(--ast-global-color-7)" class="has-inline-color">newgrp amule</mark></code> para que el sistema reconozca tu nuevo grupo).</em></p>
</blockquote>



<h2 class="wp-block-heading">C. Automatización avanzada del servicio con Systemd</h2>



<p class="wp-block-paragraph">Para garantizar que el demonio arranque de forma impecable en cada inicio del sistema, creamos un archivo de servicio altamente optimizado para entornos de red:</p>



<pre class="wp-block-code"><code>sudo nano /etc/systemd/system/amuled.service</code></pre>



<p class="wp-block-paragraph">Pega el siguiente contenido:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=aMule Master Daemon
After=network.target network-online.target
Wants=network-online.target

&#91;Service]
Type=simple
User=amule
Group=amule
Environment="HOME=/home/amule"
ExecStart=/usr/local/bin/amuled
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
# Para detener el demonio y sus subprocesos (amuleweb) limpiamente
KillMode=control-group
KillSignal=SIGTERM

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<h3 class="wp-block-heading">¿Por qué este servicio?</h3>



<ul class="wp-block-list">
<li><strong><code>network-online.target</code>:</strong> Espera a que la Raspberry Pi tenga una IP real asignada por la red antes de intentar lanzar el demonio, evitando fallos de conexión en el arranque.</li>



<li><strong><code>LimitNOFILE=65536</code>:</strong> Eleva el límite de conexiones y archivos abiertos simultáneamente por Linux, algo vital para mantener la estabilidad cuando el P2P gestiona cientos de fuentes a la vez.</li>



<li><strong><code>KillMode=control-group</code>:</strong> Garantiza que cuando el servicio se detenga, systemd mate a <strong>todos</strong> los procesos dentro de ese grupo, incluido <code>amuleweb</code>.</li>
</ul>



<p class="wp-block-paragraph">Habilitamos el servicio para que sea automático y lo arrancamos:</p>



<p class="wp-block-paragraph">Comenzamos con un <strong><code>daemon-reload</code>:</strong> Le dice a Systemd que vuelva a escanear los directorios de configuración de los servicios. Como acabamos de crear el archivo <code>amuled.service</code> desde cero, el sistema operativo necesita este «refresco» para enterarse de que hay un nuevo servicio disponible y poder gestionarlo.</p>



<pre class="wp-block-code"><code>sudo systemctl daemon-reload</code></pre>



<p class="wp-block-paragraph">Después seguimos con un <strong><code>enable amuled.service</code>:</strong> Configura el demonio para que se active <strong>automáticamente cada vez que arranques</strong> la Raspberry Pi. Lo que hace internamente es crear un enlace simbólico (<em>symlink</em>) en los directorios de inicio del sistema operativo (bajo el objetivo <code>multi-user.target</code>).</p>



<pre class="wp-block-code"><code>sudo systemctl enable amuled.service</code></pre>



<p class="wp-block-paragraph">Una vez activo haz un <strong><code>start amuled.service</code>:</strong> Enciende y pone a funcionar el proceso de <code>amuled</code> <strong>inmediatamente en este preciso momento</strong>. No necesitas reiniciar la máquina para que el programa empiece a correr en segundo plano.</p>



<pre class="wp-block-code"><code>sudo systemctl start amuled.service</code></pre>



<p class="wp-block-paragraph">A modo de información <strong><code>status amuled.service</code>:</strong> Muestra el estado actual del servicio en tiempo real. Te permite comprobar de un vistazo si el demonio está corriendo correctamente (<code>active (running)</code>), si está detenido o si ha fallado por algún error (<code>failed</code>). Además, tiene la enorme ventaja de mostrarte las últimas líneas del registro de log, lo que resulta vital para diagnosticar qué ha pasado si algo no va bien.</p>



<pre class="wp-block-code"><code>sudo systemctl status amuled.service</code></pre>



<p class="wp-block-paragraph">Casi con total seguridad, la primera vez que hagas esto, te lo encontraras inactivo, no te preocupes, es normal, la primera vez que amule arranca lo hace para crear sus directorios así como sus archivo de configuración.</p>



<pre class="wp-block-code"><code>raspberry@terrapi:~ $ sudo systemctl status amuled.service 
● amuled.service - aMule Master Daemon
     Loaded: loaded (/etc/systemd/system/amuled.service; enabled; preset: enabled)
     Active: <mark style="background-color:#7bdcb5" class="has-inline-color">inactive</mark> (running) since Sun 2026-06-14 10:10:12 CEST; 2 days ago
 Invocation: 029397ab533f4ea591acdaaec815610f
   Main PID: 23651 (amuled)
      Tasks: 15 (limit: 9492)
        CPU: 1h 14min 333ms
     CGroup: /system.slice/amuled.service
             ├─23651 /usr/local/bin/amuled
             └─23680 amuleweb --amule-config-file=/home/amule/.aMule/amule.conf

jun 14 10:10:12 terrapi systemd&#91;1]: amuled.service: Scheduled restart job, restart counter is at 1.
jun 14 10:10:12 terrapi systemd&#91;1]: Started amuled.service - aMule Master Daemon.
</code></pre>



<h2 class="wp-block-heading">D. Configuración de aMule</h2>



<p class="wp-block-paragraph">Ahora que ya arrancaste aMule por primera con la orden start.amuled.service  y status.amuled.service no arrojó ningún error, es hora de comenzar </p>



<h3 class="wp-block-heading">d.1. Generar contraseña encriptada (hash MD5)</h3>



<pre class="wp-block-code"><code>echo -n "TuContraseñaSegura" | md5sum</code></pre>



<p class="wp-block-paragraph">Crea un par de contraseñas, una para aMuleGUI y la otra para aMuleweb.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota, cuando crees tu contraseña, desprecia el guión final (no lo uses)</p>



<pre class="wp-block-code"><code>usuario@pi5:~ $ echo -n "TuContraseñaSegura" | md5sum
1c1b95a7f1aa172dd1cddafd371d4d12  <mark style="background-color:#8ed1fc" class="has-inline-color">-</mark>
usuario@pi5:~ $ </code></pre>
</blockquote>



<h3 class="wp-block-heading">d.2. Configuración final de las rutas</h3>



<p class="wp-block-paragraph">Al arrancar por primera vez, recuerda que lo hicimos con <code><mark style="background-color:var(--ast-global-color-7)" class="has-inline-color">sudo systemctl start amuled.service</mark></code> se habrá generado el archivo de configuración base. Es aquí donde utilizaremos las dos contraseñas creadas, mas la activación de las conexiones externas.</p>



<p class="wp-block-paragraph">Como el archivo de configuración no puede ser escrito mientras aMule se ejecuta debes pararlo ejecutando</p>



<pre class="wp-block-code"><code>sudo systemctl stop amuled.service</code></pre>



<p class="wp-block-paragraph">Ábrelo para modificar su contenido con:</p>



<pre class="wp-block-code"><code>sudo nano /home/amule/.aMule/amule.conf</code></pre>



<p class="has-medium-font-size wp-block-paragraph"><strong>+ Conexiones externas.</strong></p>



<p class="wp-block-paragraph">Modifica estas líneas:</p>



<pre class="wp-block-code"><code>AcceptExternalConnections=1
ECPassword=pega_uno_de los_hash_que_copiaste</code></pre>



<p class="wp-block-paragraph">En la sección <code>[WebServer]</code>:</p>



<pre class="wp-block-code"><code>&#91;WebServer]
Enabled=1
Password=pega_el_otro_hash_que_creaste
Port=4711</code></pre>



<p class="has-medium-font-size wp-block-paragraph"><strong>+ Puertos</strong></p>



<p class="wp-block-paragraph">Los puertos predeterminados y <strong>NO</strong> <strong>recomendados</strong>  de usar son <strong>TCP 4662</strong> y <strong>UDP 4672</strong>. El programa genera un tercer puerto oculto llamado <strong>TCP + 3</strong> (por defecto <strong>4665</strong>). Para obtener <strong>ID Alta</strong>, debes abrir los tres en tu router.</p>



<pre class="wp-block-code"><code>Port=34662
UDPPort=34672
UDPEnable=1</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota: Cambia los puertos, por ejemplo  <strong>TCP 34662</strong> y  <strong>UDP 34672</strong> que generan el puerto <strong>UDP 34665</strong>, lo cuales deberás abrir en tu router.</p>
</blockquote>



<p class="has-medium-font-size wp-block-paragraph"><strong>+ Directorios</strong></p>



<p class="wp-block-paragraph">Para aplicar la redirección hacia tu disco rápido de almacenamiento, busca y modifica las siguientes líneas apuntando a la estructura que creamos:</p>



<pre class="wp-block-code"><code>TempDir=/media/Disco_1TB/aMule/Temp
IncomingDir=/media/Disco_1TB/aMule/Incoming</code></pre>



<p class="wp-block-paragraph">Guarda con <code>Ctrl+O</code>, Enter, y sal con <code>Ctrl+X</code>.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>+ Seguridad</strong></p>



<p class="wp-block-paragraph">El archivo <strong>IPFilterURL</strong> en <strong>aMule</strong> es una lista negra que bloquea direcciones IP maliciosas, fakes y rastreadores de Internet, mejorando tu seguridad y privacidad al descargar. Buscala y déjala como la siguiente.</p>



<pre class="wp-block-code"><code>IPFilterURL=http://upd.emule-security.org/ipfilter.zip</code></pre>



<p class="wp-block-paragraph">Una vez guardados los cambios reinicia el servicio para que empiece a descargar con total seguridad y el máximo rendimiento de hardware:</p>



<pre class="wp-block-code"><code>sudo systemctl restart amuled.service</code></pre>



<p class="wp-block-paragraph">¿Qué te parece esta versión? ¿Ya la has probado? ¡Te leo en los comentarios!</p>



<h2 class="wp-block-heading">Soluciones a errores y trucos.</h2>



<p class="wp-block-paragraph">En esta sección expongo algunos errores y trucos que me han ayudado con aMule</p>



<h3 class="wp-block-heading">* Desinstalación de aMule</h3>



<p class="wp-block-paragraph">Si no te convence como va tu aMule compilado, siempre lo podrás eliminar de la forma siguiente:</p>



<p class="wp-block-paragraph">Dirigente a la carpeta «builld»</p>



<pre class="wp-block-code"><code>cd ~/amule/build</code></pre>



<p class="wp-block-paragraph">Una vez dentro, haz comprueba que existe un archivo llamado install_manifest.txt</p>



<pre class="wp-block-code"><code>ls -l ./install_manifest.txt &amp;&amp; cat install_manifest.txt</code></pre>



<p class="wp-block-paragraph">Si ese archivo existe, puedes usarlo para desinstalar automáticamente:</p>



<pre class="wp-block-code"><code>sudo xargs rm -f &lt; install_manifest.txt</code></pre>



<p class="wp-block-paragraph">Un vez ejecutado el comando anterior, la desinstalación será instantánea, así que para comprobar que todo a salido bien, busca posibles restos con:</p>



<pre class="wp-block-code"><code>find /usr/local -name "*amule*" -type f 2&gt;/dev/null</code></pre>



<p class="wp-block-paragraph">Sabrás que aMule se eliminó correctamente ya que no deberá de salir nada a la orden del comando anterior.</p>



<h3 class="wp-block-heading">* Forzar la ejecución manual en la terminal como usuario <code>amule</code></h3>



<p class="wp-block-paragraph">Si por cualquier motivo quieres ver el <em>output</em> (la salida de texto) que escupe aMule en la terminal en su primer arranque para comprobar que no falta ninguna librería, <strong>no puedes usar el usuario <code>raspberry</code></strong>.</p>



<p class="wp-block-paragraph">Como el usuario <code>amule</code> tiene el login bloqueado (<code>nologin</code>), debes usar <code>sudo</code> con el flag <code>-u</code> (user) para suplantarlo solo durante la ejecución de ese comando:</p>



<pre class="wp-block-code"><code>sudo -u amule /usr/local/bin/amuled</code></pre>



<p class="wp-block-paragraph">Al hacerlo así, el sistema operativo ejecutará el programa <strong>en nombre de <code>amule</code></strong>, creará los archivos en <code>/home/amule/.aMule/</code> con los permisos correctos de propietario y verás los mensajes en tu pantalla. Una vez que veas que ha arrancado bien, lo cierras con <code>Ctrl + C</code> y procedes a editar el archivo.</p>



<h4 class="wp-block-heading">* aMuleweb. Sin acceso desde el navegador.</h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Es posible que no necesites hacer esto, ya que en versiones anteriores a la 3.0, como en aMuleWeb 2.3.3 se cerraba en frecuentemente.</p>
</blockquote>



<p class="wp-block-paragraph">Dado que <code>amuleweb</code> en ocasiones, puede comportarse de forma inestable llegando a cerrarse, la solución más robusta para un sistema 24/7 es, <strong>un script «vigilante» (watchdog)</strong> que lo reactive automáticamente cuando muera.</p>



<p class="wp-block-paragraph">Aquí tienes la forma más sencilla de hacerlo.</p>



<p class="wp-block-paragraph"><strong>Paso 1: Crear el script vigilante</strong></p>



<p class="wp-block-paragraph">Ve a tu terminal, si estas en el equipo, si no, conéctate por SSH y crea el script:</p>



<pre class="wp-block-code"><code>sudo nano /usr/local/bin/amuleweb-watchdog.sh</code></pre>



<p class="wp-block-paragraph"><strong>Paso 2: Copiar el contenido (más simple y efectivo)</strong></p>



<p class="wp-block-paragraph">Este script es más simple: solo comprueba si el proceso <code>amuleweb</code> existe y, si no, lo arranca.</p>



<pre class="wp-block-code"><code>#!/bin/bash
# Script para vigilar y reiniciar amuleweb si se cierra

if pgrep -x "amuleweb" &gt; /dev/null
then
    :
else
    logger "amuleweb-watchdog: amuleweb no encontrado, reiniciando..."
    # Se ejecuta como el usuario dedicado 'amule' apuntando a su home real
    sudo -u amule /usr/local/bin/amuleweb --amule-config-file=/home/amule/.aMule/amule.conf &amp;
fi</code></pre>



<p class="wp-block-paragraph"><strong>Paso 3: Dar permisos y probar</strong></p>



<pre class="wp-block-code"><code>sudo chmod +x /usr/local/bin/amuleweb-watchdog.sh</code></pre>



<p class="wp-block-paragraph"><strong>Paso 4: Programarlo cada minuto</strong></p>



<p class="wp-block-paragraph">Edita el <code>crontab</code> del usuario <code>root</code> para que vigile todo el tiempo:</p>



<pre class="wp-block-code"><code>sudo crontab -e</code></pre>



<p class="wp-block-paragraph">Añade esta línea al final del archivo:</p>



<pre class="wp-block-code"><code>* * * * * /usr/local/bin/amuleweb-watchdog.sh</code></pre>



<p class="wp-block-paragraph">Con esto, el sistema comprobará cada minuto si <code>amuleweb</code> está vivo y lo levantará automáticamente si se ha cerrado.</p>



<h4 class="wp-block-heading">* Instala la rama master</h4>



<p class="wp-block-paragraph">Si quieres tener los últimos cambios y novedades, ve a por la rama Master y compila desde ahí.</p>



<p class="wp-block-paragraph">Clonamos el repositorio oficial de aMule directamente desde GitHub para asegurarnos de compilar la última versión de la rama <em>master</em>:</p>



<pre class="wp-block-code"><code>git clone https://github.com/amule-org/amule.git</code></pre>



<p class="wp-block-paragraph">Una vez descargado el clon de github sigue los pasos que se describen en el apartado 2. Descarga el código fuente.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-compilar-amule-3-0-en-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Raspberry Pi 5 + Debian 13: La maldición de los archivos corruptos</title>
		<link>https://linuxete.duckdns.org/raspberry-pi-5-debian-13-la-maldicion-de-los-archivos-corruptos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=raspberry-pi-5-debian-13-la-maldicion-de-los-archivos-corruptos</link>
					<comments>https://linuxete.duckdns.org/raspberry-pi-5-debian-13-la-maldicion-de-los-archivos-corruptos/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sun, 14 Jun 2026 14:25:46 +0000</pubDate>
				<category><![CDATA[Debian 13]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[archivos corruptos]]></category>
		<category><![CDATA[corrupcion de datos]]></category>
		<category><![CDATA[Debian Raspberry]]></category>
		<category><![CDATA[kernel debian 13]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4302</guid>

					<description><![CDATA[Imagina la escena: tienes tu flamante Raspberry Pi 5, la actualizas a Debian 13 (Trixie) o instalas una derivada como MX Linux, y todo parece funcionar… hasta que intentas descargar algo grande. Esto me pasó a mí. Y lo peor es que en Debian 12 funcionaba todo perfectamente. Probé de todo: memtest, cambiar la fuente [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Imagina la escena: tienes tu flamante Raspberry Pi 5, la actualizas a Debian 13 (Trixie) o instalas una derivada como MX Linux, y todo parece funcionar… hasta que intentas descargar algo grande.</p>



<ul class="wp-block-list">
<li>Bajas una ISO de Linux desde el navegador, haces el <code>sha256sum</code> y… <strong>falla</strong>. La vuelves a descargar, el hash es diferente otra vez. Corrupta siempre.</li>



<li>Usas aMule para compartir archivos, la descarga llega feliz al 100% y de repente <strong>retrocede al 80%</strong>. Vuelve a subir, otra vez 100%, otra vez 80%… un bucle infinito de rehasheo. A veces después de horas logra completar, pero la desesperación ya te ha consumido.</li>
</ul>



<p class="wp-block-paragraph">Esto me pasó a mí. Y lo peor es que <strong>en Debian 12 funcionaba todo perfectamente</strong>. Probé de todo: memtest, cambiar la fuente de alimentación, revisar el NVMe, hacer <code>fsck</code>… nada. Hasta que por fin alguien me dio la solución mágica: dos cambios aparentemente absurdos que lo arreglaron todo.</p>



<p class="wp-block-paragraph">Hoy te cuento por qué ocurría, por qué la solución funciona, y sobre todo cómo aplicarla para que nunca más sufras con descargas rotas en tu Raspberry Pi 5.</p>



<h2 class="wp-block-heading">Lo que NO era (descartando lo obvio)</h2>



<p class="wp-block-paragraph">Antes de tirarme por la ventana, descarté lo típico:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Memoria RAM defectuosa</strong> – Pasó las pruebas.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Problemas de red</strong> – Otras máquinas descargaban el mismo archivo sin fallos.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Alimentación insuficiente</strong> – Usaba el cargador oficial de la Pi 5.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Disco duro o microSD corruptos</strong> – Ni <code>fsck</code> ni <code>smartctl</code> mostraban errores.</li>
</ul>



<p class="wp-block-paragraph">Era algo más raro, más profundo. Algo que había cambiado entre Debian 12 y Debian 13.</p>



<h2 class="wp-block-heading">El hallazgo inesperado: el kernel de 16KB</h2>



<p class="wp-block-paragraph">Resulta que, para optimizar el rendimiento en procesadores modernos, algunas distribuciones de Linux para ARM64 (como las últimas versiones de Raspberry Pi OS y Debian 13) han empezado a compilar el kernel con <strong>páginas de memoria de 16KB</strong>, en lugar de las clásicas de 4KB que hemos usado toda la vida.</p>



<p class="wp-block-paragraph">¿Qué significa esto? El sistema operativo divide la memoria RAM en «páginas» (como las hojas de un libro). Durante décadas el estándar fue 4KB. Pero si aumentas el tamaño a 16KB, el sistema puede manejar más datos con menos operaciones internas, lo que teórico mejora el rendimiento.</p>



<p class="wp-block-paragraph">El problema es que <strong>el software del mundo real está compilado asumiendo páginas de 4KB</strong>. Navegadores, aMule, emuladores, clientes de descarga… todos ellos hacen cálculos basándose en ese tamaño. En concreto, utilizan una función del sistema llamada <code>mmap</code> (memory-mapped files) que es muy rápida pero muy sensible al alineamiento de las páginas.</p>



<h3 class="wp-block-heading">¿Qué hace <code>mmap</code> y por qué se rompe?</h3>



<p class="wp-block-paragraph"><code>mmap</code> le dice al kernel: «Oye, toma este archivo del disco y proyéctalo directamente en la memoria RAM, para que pueda escribir en él a toda pastilla». Para hacerlo, el programa calcula las posiciones (offsets) en múltiplos del tamaño de página.</p>



<p class="wp-block-paragraph">Si el programa usa 4KB y el kernel piensa en 16KB, los cálculos se desalinean. Los datos se escriben en posiciones incorrectas, unos encima de otros. Esto es especialmente crítico con archivos grandes (varios GB). Las ISO se descargan completas pero internamente tienen los bytes cambiados de sitio. Por eso el <code>sha256sum</code> nunca coincide, y por eso aMule entra en un bucle de rehasheo: detecta que los bloques no son los que deberían ser y vuelve a descargarlos una y otra vez.</p>



<p class="wp-block-paragraph"><strong>Ese era el monstruo oculto bajo la cama.</strong></p>



<h2 class="wp-block-heading">La solución: dos caminos, uno definitivo</h2>



<h3 class="wp-block-heading">Opción 1: Cambiar el kernel al de 4KB (recomendada)</h3>



<p class="wp-block-paragraph">La forma más limpia y que arregla todos los programas de golpe es <strong>obligar a la Raspberry Pi a usar el kernel clásico de 64 bits con páginas de 4KB</strong>. Es muy sencillo:</p>



<ol class="wp-block-list">
<li>Abre el archivo de configuración del firmware:</li>
</ol>



<pre class="wp-block-code"><code>   sudo nano /boot/firmware/config.txt</code></pre>



<ol start="2" class="wp-block-list">
<li>Al final del archivo, añade esta línea:</li>
</ol>



<pre class="wp-block-code"><code>   kernel=kernel8.img</code></pre>



<ol start="3" class="wp-block-list">
<li>Guarda, reinicia y ya está.</li>
</ol>



<p class="wp-block-paragraph">¿Qué hace esa línea? El firmware de la Raspberry Pi, al arrancar, busca un kernel. <code>kernel8.img</code> es el kernel de 64 bits «estándar», que usa páginas de 4KB como toda la vida. Las versiones más modernas a veces usan otros nombres (como <code>kernel8-16k.img</code>), pero <code>kernel8.img</code> sigue siendo el clásico. Así que con esa instrucción le dices: «carga ese, no el que te dé la gana».</p>



<p class="wp-block-paragraph">Después de reiniciar, puedes comprobar el tamaño de página activo con:</p>



<pre class="wp-block-code"><code>getconf PAGE_SIZE</code></pre>



<p class="wp-block-paragraph">Si ves <code>4096</code> (que son 4KB), enhorabuena. El problema ha desaparecido para siempre.</p>



<h3 class="wp-block-heading">Opción 2: El parche solo para aMule (no recomendado, pero existe)</h3>



<p class="wp-block-paragraph">Si por alguna razón no quieres tocar el kernel, puedes recompilar aMule desactivando el uso de <code>mmap</code>. Así el programa usará el sistema de entrada/salida clásico, que no se ve afectado por el tamaño de página.</p>



<pre class="wp-block-code"><code>./configure --disable-mmap
make &amp;&amp; sudo make install</code></pre>



<p class="wp-block-paragraph"><strong>Ojo:</strong> Esto solo arregla aMule. El navegador web y cualquier otra aplicación que use <code>mmap</code> seguirá descargando archivos corruptos. Por eso la opción 1 es infinitamente mejor.</p>



<h2 class="wp-block-heading">Comprobación de que todo funciona</h2>



<p class="wp-block-paragraph">Después de aplicar la solución (la opción 1, claro), haz estas pruebas:</p>



<ul class="wp-block-list">
<li>Descarga dos veces la misma ISO grande (por ejemplo, Ubuntu 24.04). Calcula el <code>sha256sum</code> de ambas. <strong>Deben ser idénticos</strong> y coincidir con el oficial.</li>



<li>Prueba una descarga pesada con aMule. Llegará al 100% y se quedará ahí, sin rehasheos.</li>



<li>Opcional: <code>getconf PAGE_SIZE</code> debe decir <code>4096</code>.</li>
</ul>



<h2 class="wp-block-heading">¿Pierdo rendimiento usando páginas de 4KB?</h2>



<p class="wp-block-paragraph">En teoría, los kernels con páginas de 16KB pueden ser ligeramente más rápidos en ciertos benchmarks de memoria masiva. En la práctica, con un uso normal de escritorio, servidor casero o centro multimedia, <strong>no notarás la diferencia</strong>. Lo que sí notarás es que tus archivos se descargan correctamente. Para mí, la fiabilidad gana por goleada.</p>



<p class="wp-block-paragraph">Además, hay quien dice que muchos juegos y emuladores funcionan incluso mejor con 4KB precisamente por la compatibilidad. Así que no le des más vueltas.</p>



<h2 class="wp-block-heading">Preguntas frecuentes</h2>



<p class="wp-block-paragraph"><strong>¿Esto es seguro? ¿Puedo romper mi Raspberry Pi?</strong><br>Absolutamente seguro. <code>kernel=kernel8.img</code> es un kernel oficial, firmado, estable. No es overclock ni modificación extraña.</p>



<p class="wp-block-paragraph"><strong>¿Qué pasa si en el futuro el kernel <code>kernel8.img</code> también se vuelve de 16KB?</strong><br>Muy improbable, porque ese nombre está reservado tradicionalmente para el kernel de 4KB. En todo caso, si ocurriera, existiría otra forma de forzar 4KB. Pero de momento no hay indicios.</p>



<p class="wp-block-paragraph"><strong>Me pasa en Ubuntu Server o Arch Linux ARM, ¿vale lo mismo?</strong><br>El problema puede aparecer en cualquier distribución que haya adoptado el kernel de 16KB para la Pi 5. La solución es similar: busca cómo cargar un kernel con páginas de 4KB. En algunos casos puedes instalar el kernel <code>raspberrypi-kernel</code> o compilar el tuyo. Pero para no complicarte, te recomiendo probar primero con la línea <code>kernel=kernel8.img</code> en el <code>config.txt</code>. Suerte.</p>



<p class="wp-block-paragraph"><strong>¿Por qué no me pasaba en Debian 12?</strong><br>Porque Debian 12 usaba el kernel clásico de 4KB. El cambio a 16KB ha llegado con las versiones más recientes (Debian 13, Trixie, y algunas actualizaciones de Raspberry Pi OS). Es un cambio silencioso que nos ha pillado a muchos por sorpresa.</p>



<h2 class="wp-block-heading">La Bitácora de Pruebas: Descartando pieza a pieza</h2>



<p class="wp-block-paragraph">Estas son las pruebas que realicé para descartar problemas de hardware, en la que fui aislando cada componente del sistema, empezando por lo mas básico:</p>



<h3 class="wp-block-heading">1. El test de estrés a la Memoria RAM (<code>memtester</code>)</h3>



<p class="wp-block-paragraph">En los casos de corrupción aleatoria de datos, el primer sospechoso siempre es un módulo de memoria defectuoso. Instalamos la herramienta <code>memtester</code> para exprimir la RAM de las Pi 5 y obligarlas a leer y escribir patrones de datos buscando bits defectuosos.</p>



<pre class="wp-block-code"><code>sudo apt install memtester
sudo memtester 4000M 3</code></pre>



<p class="wp-block-paragraph"><em>Le asignamos 4GB de RAM y le pedimos 3 pasadas completas.</em></p>



<p class="wp-block-paragraph"><strong>Resultado:</strong> No debe de dar errores.</p>



<h3 class="wp-block-heading">2. Auditoría y estrés del NVMe local (Descarte de almacenamiento)</h3>



<p class="wp-block-paragraph">Descartada la RAM, el siguiente sospechoso era el almacenamiento. ¿Estaba el bus PCIe, el adaptador HAT oficial o el propio firmware del NVMe corrompiendo los datos al escribir? Para salir de dudas, sometimos el disco a una auditoría en tres fases: pasiva, de superficie y de hash lógico.</p>



<h4 class="wp-block-heading">Fase A: Lectura de salud S.M.A.R.T.</h4>



<p class="wp-block-paragraph">Instalamos las herramientas de diagnóstico para interrogar directamente al firmware del disco y comprobar si arrastraba fallos físicos o sectores reasignados:</p>



<pre class="wp-block-code"><code>sudo apt install smartmontools
sudo smartctl -a /dev/nvme0n1</code></pre>



<p class="wp-block-paragraph"><em>(Nota: Cambia <code>/dev/nvme0n1</code> por la ruta específica de tu dispositivo si varía).</em></p>



<p class="wp-block-paragraph"><strong>Resultado:</strong> Todo limpio. Parámetros críticos como <em>Media and Data Integrity Errors</em> o sectores reasignados estaban a cero. El disco reportaba salud de fábrica.</p>



<h4 class="wp-block-heading">Fase B: Test de superficie a bajo nivel (<code>badblocks</code>)</h4>



<p class="wp-block-paragraph">Para asegurar que ninguna celda de silicio flaqueaba bajo estrés, ejecutamos la prueba de fuego más exhaustiva que existe en Linux:</p>



<pre class="wp-block-code"><code>sudo badblocks -vsw -b 4096 /dev/nvme0n1</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>¡Ojo!</strong> El parámetro <code>-w</code> realiza un test de escritura destructivo (escribe patrones encima de lo que haya). Hazlo siempre sobre un disco vacío o antes de montar datos definitivos.</p>
</blockquote>



<p class="wp-block-paragraph">Este comando realiza <strong>4 pasadas completas</strong> a todo el disco, escribiendo, leyendo y verificando secuencialmente patrones de bits totalmente diferentes (<code>0xaa</code>, <code>0x55</code>, <code>0xff</code> y <code>0x00</code>). Si un bit se queda pegado o falla al retener la información, <code>badblocks</code> lo caza al vuelo.</p>



<p class="wp-block-paragraph"><strong>Resultado:</strong> Cero errores en las 4 comprobaciones. Las celdas físicas del NVMe respondieron de forma impecable.</p>



<h4 class="wp-block-heading">Fase C: Integridad lógica y velocidad en ráfaga (<code>dd</code> + <code>sha256sum</code>)</h4>



<p class="wp-block-paragraph">Por último, queríamos estresar el bus PCIe de la Raspberry Pi 5 a su máxima tasa de transferencia y comprobar si los archivos se «deformaban» al copiarse localmente. Ejecutamos esta secuencia en bloque:</p>



<pre class="wp-block-code"><code># 1. Creamos un archivo masivo de 1 GB de ceros puros a máxima velocidad
dd if=/dev/zero of=test_gordo.img bs=1M count=1024

# 2. Calculamos su huella digital o hash único original
sha256sum test_gordo.img

# 3. Lo duplicamos a otra zona física del NVMe
cp test_gordo.img test_gordo_copia.img

# 4. Calculamos el hash de la copia para comprobar si ha mutado
sha256sum test_gordo_copia.img
</code></pre>



<p class="wp-block-paragraph"><strong>Resultado:</strong> Los hashes de ambos archivos coincidieron al milímetro, firmando un resultado idéntico. Además, la transferencia local se mantuvo a una velocidad brutal de <strong>1,8 GB/s</strong>.</p>



<h4 class="wp-block-heading">Conclusión del descarte de hardware</h4>



<p class="wp-block-paragraph">Si el bus PCIe, las pistas del HAT o el controlador del disco sufrieran la más mínima degradación por temperatura o carga, los hashes habrían salido distintos y el test de bloques habría cantado fallos.</p>



<p class="wp-block-paragraph">Con la RAM en perfecto estado y el almacenamiento local rindiendo como una roca a casi 2 GB/s, <strong>el hardware quedaba totalmente absuelto</strong>. El poltergeist de la corrupción de datos tenía que ser, por fuerza, un problema de software entre el Kernel y la pila de red.</p>



<h3 class="wp-block-heading">3. La prueba cruzada de red</h3>



<p class="wp-block-paragraph">Si las tripas de la máquina estaban sanas, miramos hacia afuera. Repetimos las descargas en mi segunda Raspberry Pi 5. Mismo resultado: hashes aleatorios. En cambio, al realizar la misma descarga en un PC Intel conectado por Ethernet en el mismo switch, los hashes salían perfectos a la primera. El problema se concentraba <em>exclusivamente</em> en las Pi 5.</p>



<h3 class="wp-block-heading">4. El misterio de la EEPROM</h3>



<p class="wp-block-paragraph">Para asegurar que no arrastrábamos configuraciones antiguas grabadas a fuego en las placas, entramos en <code>sudo raspi-config</code> y restablecimos el <strong>Bootloader (EEPROM) a los valores por defecto de fábrica</strong>. El problema persistió.</p>



<h3 class="wp-block-heading">5. La prueba del Wi-Fi</h3>



<p class="wp-block-paragraph">Para confirmar si el fallo venía exclusivamente por el cable eléctrico, <strong>desconectamos el cable Ethernet y activamos el Wi-Fi</strong>. Al ir por un chip inalámbrico independiente, la corrupción desapareció, confirmando que la interfaz por cable <code>eth0</code> era el embudo donde se deformaban los paquetes.</p>



<h2 class="wp-block-heading">Conclusión:</h2>



<p class="wp-block-paragraph">Me costó semanas de pruebas, foros y cabezazos contra el techo. Al final, el culpable no era ni el hardware ni la red: era un cambio interno en el kernel que nadie me había advertido.</p>



<p class="wp-block-paragraph">Si esta entrada te ha salvado de un dolor de cabeza, por favor, compártela en los foros, en los grupos de Telegram, en Reddit o con ese amigo que tiene una Raspberry Pi 5 y se queja de que «las descargas le van mal». Entre todos podemos hacer que Linux sea más predecible y amigable.</p>



<p class="wp-block-paragraph">Y recuerda: cuando todo falle, prueba a poner <code>kernel=kernel8.img</code> en el <code>config.txt</code>. A veces la solución más pequeña es la que desatasca el mayor de los problemas.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/raspberry-pi-5-debian-13-la-maldicion-de-los-archivos-corruptos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Guía completa: Montar particiones al inicio en Debian</title>
		<link>https://linuxete.duckdns.org/guia-completa-montar-particiones-al-inicio-en-debian/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=guia-completa-montar-particiones-al-inicio-en-debian</link>
					<comments>https://linuxete.duckdns.org/guia-completa-montar-particiones-al-inicio-en-debian/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sat, 13 Jun 2026 17:05:12 +0000</pubDate>
				<category><![CDATA[Discos]]></category>
		<category><![CDATA[Disco USB]]></category>
		<category><![CDATA[fstab]]></category>
		<category><![CDATA[Montaje automático]]></category>
		<category><![CDATA[mount]]></category>
		<category><![CDATA[umount]]></category>
		<category><![CDATA[UUID]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4272</guid>

					<description><![CDATA[Con el avance constante de la tecnología, es inevitable acumular componentes que se van quedando obsoletos para el día a día. Sin embargo, si eres de los que no les gusta tirar nada y prefiere exprimir el hardware al máximo, esos componentes guardados en el «baúl de los recuerdos» aún tienen mucha guerra que dar. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Con el avance constante de la tecnología, es inevitable acumular componentes que se van quedando obsoletos para el día a día. Sin embargo, si eres de los que no les gusta tirar nada y prefiere exprimir el hardware al máximo, esos componentes guardados en el «baúl de los recuerdos» aún tienen mucha guerra que dar.</p>



<p class="wp-block-paragraph">En mi caso, he rescatado dos discos duros olvidados para montarlos en mi <a href="https://shop.inux3d.com/en/home/101-134-terrapi-xtreme-duo.html#/13-color-orange">TerraPi Xtreme DUO</a> con una <strong>Raspberry Pi 5</strong>, dándoles una segunda vida útil antes de que ganen su merecido descanso en el Valhalla de la informática.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="345" height="361" src="https://linuxete.duckdns.org/wp-content/uploads/2026/06/terrapi.png" alt="La TerraPi Xtreme DUO es una carcasa abierta para Raspberry Pi NAS, con dos ranuras para discos duros de 3,5&quot;. Está disponible en colores negro y naranja-negro." class="wp-image-4298" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/06/terrapi.png 345w, https://linuxete.duckdns.org/wp-content/uploads/2026/06/terrapi-287x300.png 287w" sizes="auto, (max-width: 345px) 100vw, 345px" /><figcaption class="wp-element-caption">TerraPi Xtreme DUO &#8211; Raspberry Pi NAS Case</figcaption></figure>



<p class="wp-block-paragraph">En este artículo te explico, paso a paso, cómo configurar tus discos para que se <strong>monten automáticamente al arrancar el sistema</strong>. Veremos cómo hacerlo de forma correcta, segura y profesional, evitando los errores típicos de configuración que pueden comprometer la estabilidad de tu sistema.</p>



<h2 class="wp-block-heading">1. Identificador de disco «UUID»</h2>



<p class="wp-block-paragraph">El UUID son las siglas de Universally Unique Identifier (Identificador Único Universal). En el contexto de Linux y los discos, es un número de 128 bits que se asigna a cada partición de forma que sea prácticamente único en todo el mundo.<br>Sirve para identificar de forma inequívoca una partición, independientemente de dónde esté conectada o en qué orden la detecte el sistema.</p>



<p class="wp-block-paragraph">Con el comando <code>lsblk -f</code> puedes ver todos los discos y particiones.</p>



<pre class="wp-block-code"><code>lsblk -f

raspberry@terrapi:/mnt/Datos $ lsblk -f
NAME        FSTYPE FSVER LABEL  UUID                                          FSAVAIL   FSUSE%   MOUNTPOINTS
loop0       swap   1                                                                
sda                                                                                 
└─sda1      ext4   1.0   Disco_4TB c1ejfioe36-3f56-4ffb-8ee1-3e5lfojrdbb3       3,4T       0%     /mnt/Zombie
sdb                                                                                 
└─sdb1      ext4   1.0   Disco_1TB 4ddd15-57f5-4b75-8cc7-9143332b1062           429,4G    48%     /mnt/Datos
zram0       swap   1     zram0  a3r3bf9-7ee7-47b0-bf32-a3fgasda099b7                                &#91;SWAP]
nvme0n1                                                                             
├─nvme0n1p1 vfat   FAT32 bootfs 7D34-B6BD                                       428,8M    16%     /boot/firmware
└─nvme0n1p2 ext4   1.0   rootfs 61r3raf9-9db4-4dec-8a3b-437abc3df332d           439,5G     2%    /
raspberry@terrapi:/mnt/Datos $ 
</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota: Nunca uses la ruta al dispositivo como por ejemplo`/dev/sda1` porque puede cambiar al reiniciar, usa **UUID** (identificador universal único).</p>
</blockquote>



<p class="wp-block-paragraph">Antes de editar ningún archivo, debes identificar **de forma única** tu partición. </p>



<h3 class="wp-block-heading">1.1 Obtener el UUID de una partición concreta</h3>



<p class="wp-block-paragraph">Lo podemos obtener de varias formas, siendo estos comandos los mas usados:</p>



<p class="wp-block-paragraph">a &#8211; Ver todos los UUID de las particiones</p>



<pre class="wp-block-code"><code>sudo blkid</code></pre>



<p class="wp-block-paragraph">b &#8211; Ver solo los UUID (más limpio)</p>



<pre class="wp-block-code"><code>lsblk -f</code></pre>



<p class="wp-block-paragraph">c &#8211; Obtener UUID de un disco concreto</p>



<pre class="wp-block-code"><code>sudo blkid /dev/sda1</code></pre>



<p class="wp-block-paragraph">Anota el `UUID` y el `TYPE` que corresponda a tu disco.(por ejemplo `ext4`, `ntfs`, `exfat`).</p>



<h2 class="wp-block-heading">2. Crear el punto de montaje <code>/media</code> vs <code>/mnt</code></h2>



<p class="wp-block-paragraph">La elección no afecta al funcionamiento (Linux monta en cualquier directorio vacío), pero hay una <strong>buena práctica</strong> basada en el estándar FHS (Filesystem Hierarchy Standard):</p>



<ul class="wp-block-list">
<li><strong><code>/media</code></strong> → Para discos <strong>extraíbles o de datos</strong> (USB, discos externos, tarjetas SD).<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <em>Úsalo si son discos que conectas/desconectas o que almacenan solo datos personales (películas, copias de seguridad, música).</em></li>



<li><strong><code>/mnt</code></strong> → Para montajes <strong>temporales y manuales</strong> realizados por el administrador (reparar el sistema, probar una partición).<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <em>Úsalo solo si vas a montar un disco de forma puntual, no permanente.</em></li>
</ul>



<p class="wp-block-paragraph">En mi caso (Raspberry Pi con 2 HDD USB fijos de datos)</p>



<p class="wp-block-paragraph"><strong>Crearé los dos puntos de montaje bajo <code>/media</code>:</strong></p>



<pre class="wp-block-preformatted">sudo mkdir -p /media/Disco_4TB /media/Disco_1TB</pre>



<p class="wp-block-paragraph">Así se integra mejor con el sistema (detectados automáticamente por aplicaciones como Plex, Samba, o el gestor de archivos) y sigues la convención actual.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Recuerda</strong>: Lo importante es que el directorio exista y esté vacío antes de montar. El resto es organización.</p>
</blockquote>



<h2 class="wp-block-heading">3. Montaje manual de prueba (antes de hacerlo permanente)</h2>



<p class="wp-block-paragraph">Hagamos un montaje manual para verificar que el disco se monta sin errores:</p>



<pre class="wp-block-code"><code>sudo mount /dev/sda1 /media/Disco_4TB /dev/sdb1 /media/Disco_1TB</code></pre>



<p class="wp-block-paragraph">Lista los archivos del disco con:</p>



<pre class="wp-block-code"><code>ls /media/Disco_4TB /media/Disco_1TB</code></pre>



<p class="wp-block-paragraph">¿se ven los archivos? si es así, desmonta el disco manualmente con:</p>



<pre class="wp-block-code"><code>sudo umount /media/Disco_4TB /media/Disco_1TB</code></pre>



<h2 class="wp-block-heading">4. Montaje automático con `/etc/fstab`</h2>



<p class="wp-block-paragraph">El archivo `/etc/fstab` controla los montajes al inicio. **Haz una copia de seguridad** antes de editarlo:</p>



<pre class="wp-block-code"><code>sudo cp /etc/fstab /etc/fstab.bak</code></pre>



<p class="wp-block-paragraph">Ahora edítalo:</p>



<pre class="wp-block-code"><code>sudo nano /etc/fstab</code></pre>



<p class="wp-block-paragraph">Añade una línea por cada partición con el siguiente formato:</p>



<pre class="wp-block-code"><code>UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /punto/de/montaje tipo_fs opciones 0 2</code></pre>



<p class="wp-block-paragraph">Ejemplo real para un disco ext4 de datos:</p>



<pre class="wp-block-code"><code>UUID=c1ejfioe36-3f56-4ffb-8ee1-3e5lfojrdbb3 /media/Disco_4TB ext4 defaults,nofail,x-systemd.automount 0 2
UUID=4ddd15-57f5-4be75-8cc7-9143332b1062ese /media/Disco_1TB ext4 defaults,nofail,x-systemd.automount 0 2</code></pre>



<h4 class="wp-block-heading">¿Qué significan estas opciones?</h4>



<ul class="wp-block-list">
<li><strong><code>defaults</code></strong>:  Incluye: `rw, suid, dev, exec, auto, nouser, async`</li>



<li><strong><code>nofail</code></strong>:  Si el disco no está conectado, el sistema arranca igual (imprescindible para discos externos)</li>



<li><strong><code>x-systemd.automount</code></strong>: El disco se monta bajo demanda, al primer acceso. Acelera el arranque.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota: ¿Qué pasa si el disco no está conectado al arrancar? Sin `nofail`, el sistema se quedará esperando o entrará en modo de emergencia. <br><br>**Siempre añade `nofail` en discos extraíbles**.</p>
</blockquote>



<p class="wp-block-paragraph"><strong>Otras opciones que puedes añadir si las necesitas:</strong></p>



<ul class="wp-block-list">
<li><strong><code>users</code></strong>:  Permite que cualquier usuario monte/desmonte la unidad (cuidado con `noexec`)</li>



<li><strong><code>errors=remount-ro</code></strong>: Si hay errores, remonta como solo lectura para proteger los datos</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Atención con <code>users</code> y <code>noexec</code>:</strong><br>Cuando usas la opción <code>users</code>, el sistema añade automáticamente <code>noexec</code> (no se pueden ejecutar programas desde esa unidad) por razones de seguridad. Si necesitas ejecutar binarios en esa partición, añade explícitamente <code>exec</code> después de <code>users</code>. Ejemplo: <code>users,exec,defaults</code>.</p>
</blockquote>



<h4 class="wp-block-heading">Ejemplo para un disco NTFS (Windows)</h4>



<p class="wp-block-paragraph">Si tu disco proviene de un sistema tipo Windows, instalaremos la gestión de particiones NTFS</p>



<pre class="wp-block-code"><code>sudo apt install ntfs-3g</code></pre>



<p class="wp-block-paragraph">Línea en fstab:</p>



<pre class="wp-block-code"><code>UUID=1234567890ABCDEF /media/WinData ntfs-3g defaults,uid=1000,gid=1000,dmask=022,fmask=133,noexec,nofail 0 0</code></pre>



<ul class="wp-block-list">
<li>uid=1000/gid=1000` → tu usuario normal es el dueño</li>



<li>dmask=022,fmask=133` → permisos: directorios 755, archivos 644</li>
</ul>



<h2 class="wp-block-heading">5. Probar y recargar sin reiniciar</h2>



<p class="wp-block-paragraph">Después de editar `fstab`monta todo lo que esté en fstab (solo lo nuevo)</p>



<pre class="wp-block-code"><code>sudo mount -a</code></pre>



<p class="wp-block-paragraph">Si usas systemd.automount como tenemos en nuestro ejemplo</p>



<pre class="wp-block-code"><code>sudo systemctl daemon-reload </code></pre>



<p class="wp-block-paragraph">Si no hay errores, todo está correcto. Puedes reiniciar para confirmar.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Resumiendo.</h3>



<p class="wp-block-paragraph">Monta tus HDD USB en <code>/media</code>. </p>



<p class="wp-block-paragraph">Aquí te detallo varias razones de peso:</p>



<ol class="wp-block-list">
<li><strong>Son discos de datos, no del sistema</strong><br>El NVMe ya tiene el sistema operativo (<code>/dev/nvme0n1p2</code> montado en <code>/</code> y <code>p1</code> en <code>/boot/firmware</code>). Los HDD USB son puramente almacenamiento secundario.</li>



<li><strong>Son fijos pero externos</strong><br>Aunque no los desconectes, al estar por USB el sistema los trata como extraíbles. La convención moderna es que <code>/media</code> es para <strong>medios extraíbles o de datos</strong>, incluso si están siempre conectados.</li>



<li><strong>Mejor integración con el entorno</strong><br>Muchas aplicaciones (Plex, Samba, MiniDLNA, gestores de archivos) detectan automáticamente lo montado bajo <code>/media</code>.<br>Si usas escritorio, aparecerán automáticamente en el administrador de archivos.<br>Por el contrario, <code>/mnt</code> es ignorado por muchas herramientas gráficas.</li>



<li><strong>Evitas confusiones de sistema</strong><br>Los scripts del sistema y <code>udisks</code> (que gestiona montajes automáticos de USB) respetan <code>/media</code>. Si montas en <code>/mnt</code>, pierdes esa integración.</li>
</ol>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f19a.png" alt="🆚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Excepción: ¿Cuándo usar <code>/mnt</code>?</h3>



<p class="wp-block-paragraph"><strong>Prácticamente nunca</strong> para estos discos fijos. Solo lo usarías si:</p>



<ul class="wp-block-list">
<li>Temporalmente necesitas desmontar y montar un disco para reparación o pruebas.</li>



<li>Quieres montar manualmente una partición sin dejarla fija en <code>fstab</code>.</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tabla resumen</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Si tu disco es…</th><th>Monta en…</th></tr></thead><tbody><tr><td>Sistema operativo (NVMe, SSD interno)</td><td><code>/</code> o <code>/boot</code> (lo decide el instalador)</td></tr><tr><td>Disco de datos interno adicional (sata, nvme secundario)</td><td><code>/media</code> (o <code>/mnt</code> si prefieres, pero menos práctico)</td></tr><tr><td><strong>Disco USB fijo (tu caso)</strong></td><td><code>/media</code> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Disco USB que conectas/desconectas</td><td><code>/media</code> (montaje automático)</td></tr><tr><td>Montaje temporal para reparar el sistema</td><td><code>/mnt</code></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Comandos útiles para el día a día</h3>



<p class="wp-block-paragraph">Ver todos los montajes activos</p>



<pre class="wp-block-code"><code>mount | grep "/media"</code></pre>



<p class="wp-block-paragraph">Ver uso de espacio en discos montados</p>



<pre class="wp-block-code"><code>df -h</code></pre>



<p class="wp-block-paragraph">Desmontar de forma segura</p>



<pre class="wp-block-code"><code>sudo umount /media/Disco_4TB</code></pre>



<p class="wp-block-paragraph"># Forzar desmontaje (si está ocupado)</p>



<pre class="wp-block-code"><code>sudo umount -l /media/Disco_4TB</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Configuración recomendada.</h3>



<p class="wp-block-paragraph">Resumen para cada HDD:</p>



<pre class="wp-block-code"><code># Crear puntos de montaje descriptivos
sudo mkdir -p /media/Disco1
sudo mkdir -p /media/Disco2

# Obtener UUID de cada uno
sudo blkid | grep -E "sda|sdb"   # según tu fdisk, /dev/sda y /dev/sdb

# Editar /etc/fstab añadiendo líneas como:
UUID=AAAA...   /media/Disco1   ext4   defaults,nofail,x-systemd.automount   0   2
UUID=BBBB...   /media/Disco2   ext4   defaults,nofail,x-systemd.automount   0   2</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/guia-completa-montar-particiones-al-inicio-en-debian/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo instalar Xfce4 en Raspberry Pi Os.</title>
		<link>https://linuxete.duckdns.org/como-instalar-raspberry-pi-os-con-xfce4-en-raspberry-pi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-instalar-raspberry-pi-os-con-xfce4-en-raspberry-pi</link>
					<comments>https://linuxete.duckdns.org/como-instalar-raspberry-pi-os-con-xfce4-en-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sun, 31 May 2026 19:34:05 +0000</pubDate>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Sistema]]></category>
		<category><![CDATA[personalizar xfce4]]></category>
		<category><![CDATA[xfce4]]></category>
		<category><![CDATA[xfce4 Debian Trixie]]></category>
		<category><![CDATA[xfce4 raspberry pi]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4118</guid>

					<description><![CDATA[Cada nueva versión de Raspberry Pi OS incluye el ya clásico —y un tanto aburrido— escritorio PIXEL. Se trata de un entorno simple y espartano en opciones, donde la mayor novedad visual entre actualizaciones suele ser el fondo de pantalla. Esto tiene su lógica: el sistema oficial no está pensado para competir como un sistema [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Cada nueva versión de Raspberry Pi OS incluye el ya clásico —y un tanto aburrido— escritorio PIXEL. Se trata de un entorno simple y espartano en opciones, donde la mayor novedad visual entre actualizaciones suele ser el fondo de pantalla. Esto tiene su lógica: el sistema oficial no está pensado para competir como un sistema de escritorio tradicional, sino para priorizar el rendimiento y la ligereza en proyectos técnicos.</p>



<p class="wp-block-paragraph">Pero como en mi caso utilizo la placa como un híbrido entre PC y servidor, y aprovechando que la Raspberry Pi 5 va sobrada de potencia, he decidido instalar Xfce4 desde cero para llevar la experiencia de uso a otro nivel.</p>



<figure class="wp-block-image aligncenter size-large is-resized is-style-default"><img loading="lazy" decoding="async" width="1024" height="576" src="https://linuxete.duckdns.org/wp-content/uploads/2026/05/mi_escritorio-1024x576.jpg" alt="" class="wp-image-4191" style="width:652px;height:auto" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/05/mi_escritorio-1024x576.jpg 1024w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/mi_escritorio-300x169.jpg 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/mi_escritorio-768x432.jpg 768w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/mi_escritorio.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">En este artículo te guiaré paso a paso para instalar Xfce, configurar el sistema completamente en español, instalar un navegador web y personalizar el entorno para conseguir un aspecto moderno y atractivo.</p>



<h2 class="wp-block-heading">Requisitos previos</h2>



<ul class="wp-block-list">
<li>Raspberry Pi 5 (también vale para Pi 3/4/400/500)</li>



<li>Disco SSD o Nvme (evita las MicroSD) de 120 GB en adelante.</li>



<li>Raspberry Pi OS Lite <strong>instalado</strong> en el disco (versión 64<strong>-bit</strong>)</li>



<li>Conexión a internet (por cable o WiFi configurada desde <code>raspi-config</code>)</li>



<li>Paciencia y ganas de aprender <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
</ul>



<h2 class="wp-block-heading">¿Por qué empezar con Raspberry Pi OS Lite?</h2>



<p class="wp-block-paragraph">Si ya tienes la versión completa de Raspberry Pi OS (con el escritorio Pixel), instalar otro entorno encima puede provocar conflictos visuales y duplicación de aplicaciones. Por eso es <strong>mejor empezar desde Raspberry Pi OS Lite</strong> (sin escritorio) e instalar solo lo que necesitas.</p>



<ul class="wp-block-list">
<li>Descarga <strong>Raspberry Pi OS Lite</strong> 64 bits, desde la web oficial.</li>



<li>Grábalo en un un disco SSD o Nvme con <strong>Raspberry Pi Imager</strong>.</li>



<li>Usa el asistente para elegir nombre de la máquina, usuario, configurar idioma  etc etc etc .</li>
</ul>



<h2 class="wp-block-heading">1. Instalación base de Xfce</h2>



<p class="wp-block-paragraph">Una vez instalado, entra a tu sistema de terminal pura, e inicia sesión con tu usuario y ejecuta estos comandos <strong>en orden</strong>:</p>



<h3 class="wp-block-heading">1.1 Actualizar el sistema por completo</h3>



<pre class="wp-block-code"><code>sudo apt update
sudo apt full-upgrade -y</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota</strong>: <code>full-upgrade</code> es importante porque actualiza el kernel y paquetes con cambios de dependencias, algo que el simple <code>upgrade</code> no hace siempre.</p>
</blockquote>



<h3 class="wp-block-heading">1.2 Instalar Xfce + drivers + gestor de red</h3>



<pre class="wp-block-code"><code>sudo apt install xfce4 xfce4-goodies network-manager-gnome gldriver-test -y</code></pre>



<p class="wp-block-paragraph"><strong>¿Qué es cada cosa?</strong></p>



<ul class="wp-block-list">
<li><code>xfce4</code>: el escritorio base.</li>



<li><code>xfce4-goodies</code>: un montón de utilidades extra (visor de imágenes, archivador, editor de texto, etc.).</li>



<li><code>network-manager-gnome</code>: interfaz gráfica para conectarte a Internet desde el escritorio.</li>



<li><code>gldriver-test</code>: Específico de Raspberry Pi y detecta automáticamente el hardware (Pi 5 con VideoCore VII) para configurar el driver gráfico adecuado.</li>
</ul>



<h3 class="wp-block-heading">1.3 Configurar el arranque en modo gráfico</h3>



<p class="wp-block-paragraph">Ve a las opciones de configuración la eeprom con el siguiente comando.</p>



<pre class="wp-block-code"><code>sudo raspi-config</code></pre>



<p class="wp-block-paragraph">Dentro de la herramienta:</p>



<p class="wp-block-paragraph">Ve a 1. <strong><mark style="background-color:#8ed1fc" class="has-inline-color">System Options       Configure system settings</mark>  </strong></p>



<pre class="wp-block-code"><code>Raspberry Pi 5 Model B Rev 1.0, 8GB


┌─────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├──────────┐
│                                                                              │
│       <mark style="background-color:#8ed1fc" class="has-inline-color">1 System Options       Configure system settings</mark>                       │
│       2 Display Options      Configure display settings                      │
│       3 Interface Options    Configure connections to peripherals            │
│       4 Performance Options  Configure performance settings                  │
│       5 Localisation Options Configure language and regional settings        │
│       6 Advanced Options     Configure advanced settings                     │
│       8 Update               Update this tool to the latest version          │
│       9 About raspi-config   Information about this configuration tool       │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                     &lt;Select&gt;                     &lt;Finish&gt;  </code></pre>



<p class="wp-block-paragraph">Busca la opcion <strong><mark style="background-color:#8ed1fc" class="has-inline-color">S5 Boot            Select boot into desktop or to command line</mark> </strong>y pulsa Enter</p>



<pre class="wp-block-code"><code>


┌─────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├──────────┐
│                                                                              │
│      S1 Wireless LAN    Enter SSID and passphrase                            │
│      S2 Audio           Select audio out through HDMI or 3.5mm jack          │
│      S3 Password        Change password for the 'raspberry' user             │
│      S4 Hostname        Set name for this computer on a network              │
│      <mark style="background-color:#8ed1fc" class="has-inline-color">S5 Boot            Select boot into desktop or to command line</mark>          │
│      S6 Auto Login      Enable auto login to desktop or to command line      │
│      S7 Splash Screen   Choose graphical splash screen or text boot          │
│      S8 Power LED       Set behaviour of power LED                           │
│      S9 Browser         Choose default web browser                           │
│      S10 Admin Password Enable or disable sudo password                      │
│                                                                              │
│                                                                              │
│                                                                              │
│                     &lt;Select&gt;                     &lt;Back&gt;         </code></pre>



<p class="wp-block-paragraph">Baja con las flechas del teclado hasta <strong>B2 Desktop Desktop GUI</strong></p>



<pre class="wp-block-code"><code>


┌─────────┤ Raspberry Pi Software Configuration Tool (raspi-config) ├──────────┐
│                                                                              │
│                           B1 Console Text console                            │
│                           <mark style="background-color:#8ed1fc" class="has-inline-color">B2 Desktop Desktop GUI</mark>                             │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                     &lt;Aceptar&gt;                    &lt;Cancelar&gt;                  │
│                                                               </code></pre>



<p class="wp-block-paragraph">Pulsa Tab, para Aceptar, luego Enter, y al salir te preguntará si quieres reiniciar. Di que <strong>Sí</strong>.</p>



<h3 class="wp-block-heading">1.4 Al reiniciar, ¡magia!</h3>



<p class="wp-block-paragraph">Aparecerá la <strong>pantalla de inicio de sesión de Xfce</strong> (LightDM por defecto). Inicia sesión con tu usuario y contraseña.</p>



<p class="wp-block-paragraph"><strong>¡Felicidades!</strong> Ya tienes Xfce funcionando, con el driver gráfico correcto y el gestor de red listo para conectar por ETHERNET o WiFi.</p>



<h2 class="wp-block-heading">2. Poniendo a punto el sistema.</h2>



<h3 class="wp-block-heading">2.2 Instala los paquetes de idioma de Xfce4.</h3>



<p class="wp-block-paragraph">Xfce recién instalado está en inglés. Vamos a arreglarlo.</p>



<pre class="wp-block-code"><code>sudo apt install task-spanish-desktop -y</code></pre>



<h3 class="wp-block-heading">2.3 Configura el idioma del sistema.</h3>



<pre class="wp-block-code"><code>sudo dpkg-reconfigure locales</code></pre>



<ul class="wp-block-list">
<li>Usa las flechas y la <strong>barra espaciadora</strong> para seleccionar <code>es_ES.UTF-8</code></li>



<li>También marca <code>en_US.UTF-8 UTF-8</code> (por si acaso, no está de más).</li>



<li>En la pantalla siguiente, elige <code>es_ES.UTF-8</code> como <strong>idioma por defecto</strong>.</li>
</ul>



<h3 class="wp-block-heading">2.4 Hacer visibles equipos en red.</h3>



<p class="wp-block-paragraph">Por algún motivo que desconozco, xfce viene de fábrica mas ciego que un topo, no ve ningún equipo en la red.</p>



<p class="wp-block-paragraph">Y para arreglare esto, instala los paquete sugeridos:</p>



<pre class="wp-block-code"><code>sudo apt install thunar-archive-plugin thunar-media-tags-plugin gvfs-backends</code></pre>



<h3 class="wp-block-heading">2.5 Reinicia para que todo se aplique.</h3>



<pre class="wp-block-code"><code>sudo reboot</code></pre>



<p class="wp-block-paragraph">Al volver, <strong>todos los menús de Xfce</strong>, la configuración y las aplicaciones estarán en <strong>español de España</strong> (incluido Firefox cuando lo abras).</p>



<h2 class="wp-block-heading">3. Personaliza Xfce para que se vea BONITO</h2>



<p class="wp-block-paragraph">Xfce por defecto es funcional pero feo. Con estos pasos lo convertirás en un escritorio moderno, similar a macOS o Windows 11.</p>



<h3 class="wp-block-heading">3.1 Instala temas, iconos y un dock</h3>



<pre class="wp-block-code"><code>sudo apt install arc-theme papirus-icon-theme</code></pre>



<ul class="wp-block-list">
<li><strong>Arc-theme</strong>: tema limpio y moderno (versión oscura y clara).</li>



<li><strong>Papirus-icon-theme</strong>: los mejores iconos para Linux, actualizados y vistosos.</li>
</ul>



<h3 class="wp-block-heading">3.1.a Aplicar el tema y los iconos (desde el escritorio)</h3>



<p class="wp-block-paragraph">Ve al menú de aplicaciones &gt; <strong>Settings</strong> &gt; <strong>Appearance</strong>:</p>



<ul class="wp-block-list">
<li>En la pestaña <strong>Style</strong>, selecciona <code>Arc-Darker</code> (o <code>Arc-Dark</code> si te gusta muy oscuro).</li>



<li>En la pestaña <strong>Icons</strong>, selecciona <code>Papirus-Dark</code> (o <code>Papirus</code> para la versión clara).</li>
</ul>



<p class="wp-block-paragraph">Luego ve a <strong>Settings</strong> &gt; <strong>Window Manager</strong> y en la pestaña <strong>Style</strong>, elige también <code>Arc-Darker</code> para que las ventanas combinen.</p>



<h3 class="wp-block-heading">3.1.b Cambiar el fondo de pantalla (opcional)</h3>



<p class="wp-block-paragraph">Haz clic derecho en el escritorio &gt; <strong>Desktop Settings</strong> &gt; <strong>Background</strong>. Elige una imagen bonita. Puedes descargar fondos con:</p>



<pre class="wp-block-code"><code>sudo apt install variety  # gestor de fondos de pantalla (luego lo encuentras en el menú)</code></pre>



<h3 class="wp-block-heading">3.1.c Extra: instalar un tema para LightDM (pantalla de inicio de sesión)</h3>



<pre class="wp-block-code"><code>sudo apt install lightdm-settings</code></pre>



<p class="wp-block-paragraph">Luego ve a <strong>Settings</strong> &gt; <strong>LightDM GTK+ Greeter Settings</strong> para elegir un tema que combine con tu escritorio.</p>



<h2 class="wp-block-heading">4 Trucos adicionales para un escritorio perfecto</h2>



<h3 class="wp-block-heading">4.2 Hacer que el sistema sea más rápido</h3>



<p class="wp-block-paragraph">En una Raspberry Pi 5 va muy fluido, así que no deshabilitaré ningún efecto, pero si tu placa es mas limitada puedes hacerlo así.</p>



<pre class="wp-block-code"><code># Deshabilitar efectos visuales pesados
xfconf-query -c xfwm4 -p /general/use_compositing -s false</code></pre>



<h2 class="wp-block-heading">5 Instalar Software.</h2>



<h3 class="wp-block-heading">5.1 Instalar un navegador web (Firefox en español)</h3>



<p class="wp-block-paragraph">Lo primero que haremos será instalar un navegador, ya que lo vas a necesitar para seguir este tutorial.</p>



<p class="wp-block-paragraph">En una terminal reglamentaria y homologada, escribe:</p>



<pre class="wp-block-code"><code>sudo apt install firefox-esr firefox-esr-l10n-es-es -y</code></pre>



<p class="wp-block-paragraph">Ahora lo encontrarás en el menú de aplicaciones &gt; Internet &gt; Firefox ESR.</p>



<h3 class="wp-block-heading">5.2 Instalar Flatpak</h3>



<p class="wp-block-paragraph">Con Flatpak tendremos acceso a una gran cantidad de software y lo instalaremos mediante el siguiente proceso.</p>



<pre class="wp-block-preformatted"># 1. Instalar Flatpak<br>sudo apt install flatpak -y<br><br># 2. Añadir el repositorio Flathub<br>sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo</pre>



<h3 class="wp-block-heading">5.3 Instalar Telegram desde Flatpak</h3>



<p class="wp-block-paragraph">Telegram no puede faltar en mis equipos, así, que una vez instalado Flatpak, nada nos impide empezar a instalar cualquier software que necesitemos, en este caso empezamos por Telegram.</p>



<pre class="wp-block-code"><code># 3. Instalar Telegram
sudo flatpak install flathub org.telegram.desktop -y

# 4. Ejecutar Telegram
flatpak run org.telegram.desktop</code></pre>



<h3 class="wp-block-heading">5.4 Instalar Flatseal (dando permisos a aplicaciones)</h3>



<p class="wp-block-paragraph"><strong>Flatseal</strong>. Es una herramienta gráfica fantástica que te permite gestionar los permisos de tus apps de Flatpak con solo mover unos interruptores.</p>



<p class="wp-block-paragraph">Por seguridad, las aplicaciones Flatpak corren en una especie de caja de arena (sandbox) y no tienen acceso a tus carpetas personales por defecto, por eso no te deja arrastrar y soltar archivos.</p>



<p class="wp-block-paragraph">Una vez que tienes instalado Flatpak , puedes instalar Flatseal abriendo tu terminal y ejecutando el siguiente comando:</p>



<pre class="wp-block-code"><code>flatpak install flathub com.github.tchx84.Flatseal</code></pre>



<p class="wp-block-paragraph">Una vez instalada, ábrela desde el menú de aplicaciones de tu Raspberry Pi (suele aparecer en la sección de «Accesorios»).</p>



<h4 class="wp-block-heading">Dando permisos a Telegram.</h4>



<p class="wp-block-paragraph">Por seguridad, cuando intentas arrastrar y soltar archivos a Telegram ocurre un error de permisos ya que las aplicaciones corren en una especie de caja de arena (sandbox) y no tienen acceso a tus carpetas personales por defecto.</p>



<p class="wp-block-paragraph">Para solucionar esto:</p>



<ol start="1" class="wp-block-list">
<li>En la barra lateral izquierda de Flatseal, busca y selecciona <strong>Telegram</strong>.</li>



<li>En el panel de la derecha, baja hasta la sección llamada <strong>Filesystem</strong> (Sistema de archivos).</li>



<li>Activa la opción <strong>All user files</strong> (Todos los archivos de usuario) o <strong>Home folder</strong> (Carpeta personal).
<ul class="wp-block-list">
<li><em>Tip:</em> Si prefieres no darle acceso a todo, puedes ir a la opción <strong>Other files</strong> (Otros archivos), añadir una ruta manualmente y poner, por ejemplo, <code>~/Downloads</code> (tu carpeta de Descargas).</li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading">Una alternativa rápida por comandos (sin instalar nada)</h3>



<p class="wp-block-paragraph">Si no te apetece instalar otra app y prefieres arreglarlo en un segundo desde la terminal, puedes darle acceso a tu carpeta personal (<code>home</code>) a Telegram ejecutando este comando:</p>



<pre class="wp-block-code"><code>flatpak override org.telegram.desktop --filesystem=home</code></pre>



<p class="wp-block-paragraph"><strong>Nota importante:</strong> Después de aplicar los cambios (ya sea con Flatseal o por comando), asegúrate de <strong>cerrar Telegram por completo y volverlo a abrir</strong> para que los permisos se activen. ¡Con eso ya deberías poder arrastrar tus archivos sin problemas!</p>



<h3 class="wp-block-heading">5.5 Instalar software básico</h3>



<pre class="wp-block-code"><code># Reproductor de música
sudo apt install quodlibet

# Reproductor de vídeo
sudo apt install vlc

# Editor de imágenes
sudo apt install gimp

# Oficina (opcional, algo pesado para Pi 5 pero funciona)
sudo apt install libreoffice</code></pre>



<p class="wp-block-paragraph">¡Claro que sí! He reestructurado el texto para que quede impecable, con una jerarquía clara, bloques de código limpios y un formato muy cómodo de leer para los visitantes de tu blog.</p>



<p class="wp-block-paragraph">Aquí tienes la propuesta maquetada en Markdown, lista para copiar y pegar:</p>



<h3 class="wp-block-heading">5.6 Recuperar el bloqueo de pantalla clásico (LightDM) en MX 25 / Debian 13</h3>



<p class="wp-block-paragraph">El equipo de desarrollo de Xfce ha ido independizando y delegando por completo el bloqueo de sesión en <code>xfce4-screensaver</code>. Ahora, el gestor de energía no bloquea por sí mismo, sino que le dice al salvapantallas: <em>«Oye, apágate y bloquea»</em>.</p>



<p class="wp-block-paragraph"><strong>¿La consecuencia?</strong> Ya no ves la pantalla de login nativa de LightDM. En su lugar, aparece la interfaz propia de <code>xfce4-screensaver</code> (con su fondo gris, reloj flotante o el logo del tema actual). Aunque cumple su función, estéticamente no es lo mismo a lo que estábamos acostumbrados en Debian 12 o MX 23.</p>



<p class="wp-block-paragraph">Si prefieres el comportamiento clásico —un bloqueo directo con la pantalla de login de LightDM y sin un demonio de salvapantallas consumiendo recursos en segundo plano—, sigue estos pasos:</p>



<h4 class="wp-block-heading">Paso 1: Desinstalar el salvapantallas de Xfce</h4>



<p class="wp-block-paragraph">Para evitar conflictos entre gestores, lo ideal es eliminar por completo el paquete nativo y limpiar sus residuos. Abre una terminal y ejecuta:</p>



<pre class="wp-block-code"><code>sudo apt remove --purge xfce4-screensaver

sudo apt autoremove</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Nota:</strong> El parámetro <code>--purge</code> asegura que también se eliminen los archivos de configuración obsoletos, mientras que <code>autoremove</code> limpia las dependencias pequeñas que hayan quedado huérfanas.</p>
</blockquote>



<h4 class="wp-block-heading">Paso 2: Instalar y configurar Light-Locker</h4>



<p class="wp-block-paragraph">Como en las versiones más recientes de Debian (como <em>Trixie</em>) el paquete gráfico <code>light-locker-settings</code> ya no está disponible en los repositorios, instalaremos solo el motor principal desde la terminal:</p>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt install light-locker</code></pre>



<p class="wp-block-paragraph">Cierra sesión o reinicia tu Raspberry.</p>



<p class="wp-block-paragraph">A continuación, debemos asegurarnos de que <code>light-locker</code> arranque automáticamente con el sistema:</p>



<ul class="wp-block-list">
<li>Ve al menú de aplicaciones ➔ <strong>Configuración</strong> ➔ <strong>Sesión e inicio</strong>.</li>



<li>Entra en la pestaña <strong>Inicio automático de aplicaciones</strong>.</li>



<li>Comprueba que se añadió <strong>Bloqueador de pantalla</strong>.</li>
</ul>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="630" height="532" src="https://linuxete.duckdns.org/wp-content/uploads/2026/05/bloqueador_de_pantalla.png" alt="" class="wp-image-4422" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/05/bloqueador_de_pantalla.png 630w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/bloqueador_de_pantalla-300x253.png 300w" sizes="auto, (max-width: 630px) 100vw, 630px" /></figure>



<p class="wp-block-paragraph">Si <code>light-locker</code> no aparece y no está cargado, podemos añadirlo manualmente con:</p>



<ol start="1" class="wp-block-list">
<li>Ve al menú de aplicaciones ➔ <strong>Configuración</strong> ➔ <strong>Sesión e inicio</strong>.</li>



<li>Entra en la pestaña <strong>Autoarranque de aplicaciones</strong>.</li>



<li>Haz clic en el botón <strong>«+» (Añadir)</strong> y rellena los campos de la siguiente manera:
<ul class="wp-block-list">
<li><strong>Nombre:</strong> <code>Light Locker Classic</code></li>



<li><strong>Descripción:</strong> <code>Bloqueo con pantalla de login nativa</code></li>



<li><strong>Comando:</strong> <code>light-locker --lock-on-suspend --lock-after-screensaver=0</code></li>
</ul>
</li>



<li>Guarda los cambios.</li>
</ol>



<h3 class="wp-block-heading">¿Cómo probar si funciona?</h3>



<p class="wp-block-paragraph">Para que los cambios surtan efecto, cierra tu sesión actual y vuelve a entrar (o reinicia el sistema).</p>



<p class="wp-block-paragraph">Si quieres comprobar que el bloqueo funciona correctamente de inmediato, sin necesidad de esperar el tiempo de inactividad, abre una terminal y lanza este comando:</p>



<pre class="wp-block-code"><code>light-locker-command -l</code></pre>



<p class="wp-block-paragraph">Verás cómo el monitor salta instantáneamente a la mítica pantalla de login tradicional, idéntica a la gestión de sesiones que disfrutábamos en Debian 12.</p>



<h2 class="wp-block-heading">6. Resumen de comandos útiles (chuleta)</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Acción</th><th>Comando</th></tr></thead><tbody><tr><td>Actualizar sistema</td><td><code>sudo apt update &amp;&amp; sudo apt full-upgrade -y</code></td></tr><tr><td>Instalar Xfce completo</td><td><code>sudo apt install xfce4 xfce4-goodies network-manager-gnome gldriver-test -y</code></td></tr><tr><td>Configurar arranque gráfico</td><td><code>sudo raspi-config</code> (Boot &gt; Desktop GUI)</td></tr><tr><td>Cambiar idioma</td><td><code>sudo dpkg-reconfigure locales</code></td></tr><tr><td>Instalar temas bonitos</td><td><code>sudo apt install arc-theme papirus-icon-theme</code></td></tr><tr><td>Instalar Firefox en español</td><td><code>sudo apt install firefox-esr firefox-esr-l10n-es-es -y</code></td></tr><tr><td>Reiniciar el sistema</td><td><code>sudo reboot</code></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">7. Conclusión</h2>



<p class="wp-block-paragraph">Con este tutorial hemos conseguido:</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Instalar Xfce en Raspberry Pi 5 <strong>sin pantalla negra</strong> (usando <code>gldriver-test</code> y <code>raspi-config</code>).<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tener el sistema <strong>completo en español de España</strong> (interfaz, teclado y Firefox).<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Un escritorio <strong>bonito y moderno</strong> con temas Arc, iconos Papirus.<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Un <strong>navegador web, gestor de red WiFi y aplicaciones básicas</strong> listas para usar.</p>



<p class="wp-block-paragraph">Ahora tu Raspberry Pi 5 tiene un escritorio <strong>ligero, atractivo y totalmente funcional</strong>, perfecto para trabajar, navegar o incluso como pequeño PC de escritorio.</p>



<p class="wp-block-paragraph"><strong>¿Te ha funcionado? ¿Tienes alguna duda?</strong> Déjame un comentario en el blog y te ayudaré.</p>



<p class="wp-block-paragraph"><em>Este tutorial está basado en mi experiencia real y en el vídeo «How to Install XFCE Desktop on Raspberry Pi OS Lite (Trixie)» de Amine Tech. Todos los comandos han sido probados en Raspberry Pi 5 con Debian 13 Trixie</em>,</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-instalar-raspberry-pi-os-con-xfce4-en-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WireGuard en Raspberry PI, VPN casera, segura y gratuita.</title>
		<link>https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita</link>
					<comments>https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sun, 17 May 2026 14:00:14 +0000</pubDate>
				<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[servidor VPN]]></category>
		<category><![CDATA[VPN casera]]></category>
		<category><![CDATA[WireGuard]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4107</guid>

					<description><![CDATA[¿Por qué WireGuard? WireGuard es una VPN moderna, ultrarrápida y muy segura. A diferencia de OpenVPN, es nativa del kernel de Linux (va como parte del sistema, no como un programa aparte), consume muy pocos recursos y se configura en minutos. ¿Para qué querrás una VPN en tu Raspberry Pi? Ventajas de montarla en una [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">¿Por qué WireGuard?</h2>



<p class="wp-block-paragraph">WireGuard es una VPN moderna, ultrarrápida y muy segura. A diferencia de OpenVPN, es <strong>nativa del kernel de Linux</strong> (va como parte del sistema, no como un programa aparte), consume muy pocos recursos y se configura en minutos.</p>



<p class="wp-block-paragraph"><strong>¿Para qué querrás una VPN en tu Raspberry Pi?</strong></p>



<ul class="wp-block-list">
<li>Acceder a tu red local desde cualquier lugar (archivos, impresoras, otros equipos)</li>



<li>Navegar con la IP de tu casa cuando estés fuera (evitar bloqueos geográficos)</li>



<li>Sincronizar contraseñas de forma segura con KeePass + Syncthing (el siguiente tutorial)</li>



<li>Usar WiFi públicas sin miedo a que espíen tu tráfico</li>
</ul>



<p class="wp-block-paragraph"><strong>Ventajas de montarla en una Raspberry Pi:</strong></p>



<ul class="wp-block-list">
<li>Consumo eléctrico ridículo (puede estar 24/7 encendida)</li>



<li>Control total de tus datos (no dependes de servicios de terceros)</li>



<li>Aprendizaje enorme</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Requisitos</h2>



<ul class="wp-block-list">
<li>Una <strong>Raspberry Pi</strong> (cualquier modelo desde la 3B funciona, pero mejor una Pi 4 o 5)</li>



<li><strong>Raspberry Pi OS</strong> instalado y actualizado (puede ser la versión Lite sin escritorio)</li>



<li><strong>DuckDNS</strong> (gratuito) o cualquier servicio de DNS dinámico ( no lo configuramos aquí)</li>



<li>Un puerto abierto en tu router (el 51820 UDP)</li>



<li>Un teléfono Android (para probar el cliente)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1. Instalación de WireGuard</h2>



<p class="wp-block-paragraph">Conéctate a tu Raspberry Pi por SSH o directamente con teclado y pantalla.</p>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt upgrade -y
sudo apt install wireguard wireguard-tools qrencode iptables nftables -y</code></pre>



<p class="wp-block-paragraph"><strong>Verifica que el módulo del kernel se ha cargado correctamente:</strong></p>



<pre class="wp-block-code"><code>sudo modprobe wireguard
lsmod | grep wireguard</code></pre>



<p class="wp-block-paragraph">Si ves algo como <code>wireguard 131072 0</code>, está todo bien.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2. Generar las claves del servidor</h2>



<p class="wp-block-paragraph">Cada VPN necesita un par de claves (pública y privada) para el servidor y otro par para cada cliente. Empezamos con las del servidor.</p>



<pre class="wp-block-code"><code>sudo mkdir -p /etc/wireguard
cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee private.key
sudo cat private.key | sudo wg pubkey | sudo tee public.key</code></pre>



<p class="wp-block-paragraph"><strong>Comprueba que se han creado los archivos:</strong></p>



<pre class="wp-block-code"><code>sudo ls -la /etc/wireguard/</code></pre>



<p class="wp-block-paragraph">Debes ver <code>private.key</code> y <code>public.key</code>, ambos con permisos <code>-rw-------</code> (600).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3. Crear la configuración del servidor</h2>



<p class="wp-block-paragraph">Ahora creamos el archivo de configuración que arrancará la VPN.</p>



<pre class="wp-block-code"><code>sudo nano /etc/wireguard/wg0.conf</code></pre>



<p class="wp-block-paragraph">Pega este contenido (cambiando la <code>PrivateKey</code> por la tuya):</p>



<pre class="wp-block-code"><code>&#91;Interface]
PrivateKey = PEGA_AQUÍ_TU_CLAVE_PRIVADA
Address = 10.0.0.1/24
ListenPort = 51820
SaveConfig = false

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE</code></pre>



<p class="wp-block-paragraph"><strong>¿Cómo obtener tu clave privada?</strong></p>



<pre class="wp-block-code"><code>sudo cat /etc/wireguard/private.key</code></pre>



<p class="wp-block-paragraph">Copia el resultado y pégalo donde pone <code>PrivateKey = ...</code></p>



<p class="wp-block-paragraph"><strong>Importante sobre la interfaz de red:</strong></p>



<ul class="wp-block-list">
<li>Si tu Raspberry Pi usa <strong>cable Ethernet</strong>, deja <code>eth0</code></li>



<li>Si usa <strong>WiFi</strong>, cambia <code>eth0</code> por <code>wlan0</code></li>



<li>Si no estás seguro, ejecuta <code>ip route | grep default</code> y mira qué interfaz aparece</li>
</ul>



<p class="wp-block-paragraph">Las líneas <code>PostUp</code> y <code>PostDown</code> son las que permiten que tu móvil tenga acceso a internet a través de la VPN (enmascaramiento NAT). Sin ellas, la VPN conectará pero no habrá internet.</p>



<p class="wp-block-paragraph">Guarda el archivo (<code>Ctrl+O</code>, <code>Enter</code>, <code>Ctrl+X</code>).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4. Configurar el sistema para enrutar tráfico</h2>



<p class="wp-block-paragraph">La VPN necesita que el sistema operativo permita reenviar paquetes de una interfaz a otra.</p>



<pre class="wp-block-code"><code>echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p</code></pre>



<p class="wp-block-paragraph">Debes ver <code>net.ipv4.ip_forward = 1</code> en la salida.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5. Arrancar WireGuard</h2>



<pre class="wp-block-code"><code>sudo chmod 600 /etc/wireguard/*
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0</code></pre>



<p class="wp-block-paragraph"><strong>Verifica que funciona:</strong></p>



<pre class="wp-block-code"><code>sudo wg show</code></pre>



<p class="wp-block-paragraph">Deberías ver algo como:</p>



<pre class="wp-block-code"><code>interface: wg0
  public key: TU_CLAVE_PUBLICA
  private key: (hidden)
  listening port: 51820</code></pre>



<p class="wp-block-paragraph"><strong>Y comprueba que el puerto está escuchando:</strong></p>



<pre class="wp-block-code"><code>sudo ss -tuln | grep 51820</code></pre>



<p class="wp-block-paragraph">Debe aparecer <code>0.0.0.0:51820</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6. Crear la configuración para el móvil (cliente)</h2>



<p class="wp-block-paragraph">Cada dispositivo que se conecte a la VPN necesita su propio par de claves. Vamos a generar las del móvil.</p>



<pre class="wp-block-code"><code>sudo mkdir -p /etc/wireguard/clients
cd /etc/wireguard/clients
sudo umask 077
sudo wg genkey | sudo tee mobile_private.key
sudo cat mobile_private.key | sudo wg pubkey | sudo tee mobile_public.key</code></pre>



<p class="wp-block-paragraph">Ahora creamos el archivo de configuración que importaremos en el móvil.</p>



<pre class="wp-block-code"><code>sudo nano mobile.conf</code></pre>



<p class="wp-block-paragraph">Pega este contenido (cambia solo los campos entre <code>[ ... ]</code>):</p>



<pre class="wp-block-code"><code>&#91;Interface]
PrivateKey = &#91;CLAVE_PRIVADA_DEL_MOVIL]
Address = 10.0.0.2/32
DNS = 8.8.8.8

&#91;Peer]
PublicKey = &#91;CLAVE_PUBLICA_DEL_SERVIDOR]
Endpoint = &#91;TU_DOMINIO_O_IP_PUBLICA]:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25</code></pre>



<p class="wp-block-paragraph"><strong>Rellena cada campo:</strong></p>



<ul class="wp-block-list">
<li><code>[CLAVE_PRIVADA_DEL_MOVIL]</code> → El contenido de <code>sudo cat /etc/wireguard/clients/mobile_private.key</code></li>



<li><code>[CLAVE_PUBLICA_DEL_SERVIDOR]</code> → El contenido de <code>sudo cat /etc/wireguard/public.key</code></li>



<li><code>[TU_DOMINIO_O_IP_PUBLICA]</code> → Tu dominio DuckDNS (ej: <code>tublog.duckdns.org</code>) o tu IP pública si no tienes DNS dinámico</li>
</ul>



<p class="wp-block-paragraph">Guarda el archivo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7. Añadir el móvil como cliente permitido en el servidor</h2>



<pre class="wp-block-code"><code>MOBILE_PUBKEY=$(sudo cat /etc/wireguard/clients/mobile_public.key)
sudo wg set wg0 peer $MOBILE_PUBKEY allowed-ips 10.0.0.2/32
sudo wg-quick save wg0</code></pre>



<p class="wp-block-paragraph">Verifica que aparece el peer:</p>



<pre class="wp-block-code"><code>sudo wg show</code></pre>



<p class="wp-block-paragraph">Ahora deberías ver una sección <code>peer:</code> adicional con la clave pública del móvil.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8. Preparar el código QR para el móvil</h2>



<pre class="wp-block-code"><code>sudo cat /etc/wireguard/clients/mobile.conf | qrencode -t ansiutf8</code></pre>



<p class="wp-block-paragraph">Esto mostrará un código QR en la terminal.</p>



<p class="wp-block-paragraph"><strong>En tu Android:</strong></p>



<ol class="wp-block-list">
<li>Instala la app <strong>WireGuard</strong> desde Play Store</li>



<li>Abre la app → Botón <code>+</code> → <strong>Escanear desde código QR</strong></li>



<li>Escanea el código QR de la terminal</li>
</ol>



<p class="wp-block-paragraph">La app importará automáticamente la configuración. Solo tendrás que pulsar el interruptor para conectarte.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9. Abrir el puerto en el router (imprescindible para acceso remoto)</h2>



<p class="wp-block-paragraph">Este es el único paso que depende de tu router, pero es sencillo.</p>



<p class="wp-block-paragraph"><strong>Primero, averigua la IP local de tu Raspberry Pi:</strong></p>



<pre class="wp-block-code"><code>hostname -I</code></pre>



<p class="wp-block-paragraph">Anota la primera IP (ej: <code>192.168.1.150</code>).</p>



<p class="wp-block-paragraph"><strong>Accede a la web de tu router</strong> (normalmente <code>192.168.1.1</code> o <code>192.168.0.1</code>).</p>



<p class="wp-block-paragraph">Busca la sección <strong>«Reenvío de puertos»</strong> o <strong>«Port Forwarding»</strong> y añade una regla:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Campo</th><th class="has-text-align-left" data-align="left">Valor</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">Nombre</td><td class="has-text-align-left" data-align="left">WireGuard</td></tr><tr><td class="has-text-align-left" data-align="left">Puerto externo</td><td class="has-text-align-left" data-align="left">51820</td></tr><tr><td class="has-text-align-left" data-align="left">Protocolo</td><td class="has-text-align-left" data-align="left"><strong>UDP</strong> (importante, no TCP)</td></tr><tr><td class="has-text-align-left" data-align="left">IP interna</td><td class="has-text-align-left" data-align="left">[LA IP DE TU RASPBERRY PI]</td></tr><tr><td class="has-text-align-left" data-align="left">Puerto interno</td><td class="has-text-align-left" data-align="left">51820</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Guarda los cambios. Si tu router tiene la opción, reinícialo para aplicar la regla.</p>



<p class="wp-block-paragraph"><strong>Si usas DuckDNS:</strong> Asegúrate de que el cliente de actualización está corriendo en tu Raspberry Pi o en el router, para que tu dominio siempre apunte a tu IP pública.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">10. Comprobación final</h2>



<h3 class="wp-block-heading">Prueba dentro de casa (WiFi local)</h3>



<ol class="wp-block-list">
<li>En el móvil, activa WireGuard</li>



<li>Abre el navegador y busca «cuál es mi IP»</li>



<li>Debe mostrar la <strong>IP pública de tu casa</strong> (la de tu router)</li>
</ol>



<h3 class="wp-block-heading">Prueba desde fuera (con datos móviles)</h3>



<ol class="wp-block-list">
<li>Desactiva el WiFi del móvil</li>



<li>Activa WireGuard</li>



<li>Repite la búsqueda de IP</li>



<li>Sigue debiendo mostrar la IP de tu casa</li>
</ol>



<p class="wp-block-paragraph"><strong>Si ves la IP de tu casa, la VPN funciona perfectamente.</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">11. Posibles errores y soluciones (basados en errores reales)</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Error</th><th class="has-text-align-left" data-align="left">Causa</th><th class="has-text-align-left" data-align="left">Solución</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left"><code>iptables: command not found</code></td><td class="has-text-align-left" data-align="left">El paquete <code>iptables</code> no está instalado</td><td class="has-text-align-left" data-align="left"><code>sudo apt install iptables -y</code></td></tr><tr><td class="has-text-align-left" data-align="left">El móvil conecta pero no tiene internet</td><td class="has-text-align-left" data-align="left">Faltan las reglas <code>PostUp</code> en <code>wg0.conf</code></td><td class="has-text-align-left" data-align="left">Añade las líneas <code>PostUp/PostDown</code> y recarga</td></tr><tr><td class="has-text-align-left" data-align="left"><code>wg-quick up</code> falla con <code>RTNETLINK answers: Operation not supported</code></td><td class="has-text-align-left" data-align="left">El módulo WireGuard no está cargado</td><td class="has-text-align-left" data-align="left"><code>sudo modprobe wireguard</code> y reinicia</td></tr><tr><td class="has-text-align-left" data-align="left">No se puede crear <code>/etc/wireguard</code></td><td class="has-text-align-left" data-align="left">Permisos</td><td class="has-text-align-left" data-align="left">Usa <code>sudo</code> para todos los comandos dentro de ese directorio</td></tr><tr><td class="has-text-align-left" data-align="left">El código QR no se ve bien</td><td class="has-text-align-left" data-align="left">Fuente de la terminal</td><td class="has-text-align-left" data-align="left">Usa una terminal que soporte UTF-8 o importa el archivo <code>.conf</code> manualmente</td></tr><tr><td class="has-text-align-left" data-align="left">La IP del móvil no cambia a la de casa</td><td class="has-text-align-left" data-align="left"><code>AllowedIPs</code> no es <code>0.0.0.0/0</code></td><td class="has-text-align-left" data-align="left">Corrígelo en <code>mobile.conf</code> y vuelve a importar</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">12. Mantenimiento y buenas prácticas</h2>



<ul class="wp-block-list">
<li><strong>Actualiza regularmente:</strong> <code>sudo apt update &amp;&amp; sudo apt upgrade -y</code></li>



<li><strong>Monitorea el servicio:</strong> <code>sudo systemctl status wg-quick@wg0</code></li>



<li><strong>Revoca el acceso a un dispositivo:</strong> Elimina su peer del servidor con <code>sudo wg set wg0 peer [su_clave_publica] remove</code></li>



<li><strong>Copia de seguridad de las claves:</strong> Guarda en un lugar seguro (<code>/etc/wireguard/</code> entero)</li>



<li><strong>Puerto seguro:</strong> El 51820 UDP es el estándar, pero puedes cambiarlo por cualquier otro si quieres algo menos predecible</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">13. ¿Qué viene después?</h2>



<p class="wp-block-paragraph">Con la VPN funcionando, ya puedes:</p>



<ul class="wp-block-list">
<li><strong>Sincronizar contraseñas</strong> entre tu PC con Linux y tu Android usando <strong>KeePassXC + Syncthing</strong> (próximo tutorial)</li>



<li><strong>Acceder a tu red doméstica</strong> desde cualquier lugar (NAS, servidor multimedia, impresora)</li>



<li><strong>Usar Pi-hole</strong> para bloquear anuncios también en tu móvil cuando estás fuera de casa</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Conclusión</h2>



<p class="wp-block-paragraph">Has montado tu propia VPN en una Raspberry Pi sin depender de servicios externos, sin Docker y con software libre. WireGuard es ligero, seguro y una vez configurado, olvidas que está ahí.</p>



<p class="wp-block-paragraph"><strong>¿Te ha servido? ¿Tienes dudas?</strong> Puedes dejar un comentario y te ayudaré (porque yo ya pasé por todos los errores posibles mientras escribía este tutorial).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Este tutorial está basado en una instalación real en Raspberry Pi 5 con Raspberry Pi OS, sin Docker, y probado con Android 13.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>El misterio de la pantalla negra en Raspberry Pi 5: ¿Culpa del NVMe?</title>
		<link>https://linuxete.duckdns.org/el-misterio-de-la-pantalla-negra-en-raspberry-pi-5-culpa-del-nvme/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=el-misterio-de-la-pantalla-negra-en-raspberry-pi-5-culpa-del-nvme</link>
					<comments>https://linuxete.duckdns.org/el-misterio-de-la-pantalla-negra-en-raspberry-pi-5-culpa-del-nvme/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sat, 14 Mar 2026 18:47:43 +0000</pubDate>
				<category><![CDATA[Raspberry PI]]></category>
		<category><![CDATA[cmdline.txt]]></category>
		<category><![CDATA[Debian 13]]></category>
		<category><![CDATA[EEPROM]]></category>
		<category><![CDATA[HDMI Fix]]></category>
		<category><![CDATA[lightdm]]></category>
		<category><![CDATA[No signal]]></category>
		<category><![CDATA[NVMe]]></category>
		<category><![CDATA[Pantalla Negra]]></category>
		<category><![CDATA[PCIe Gen 3]]></category>
		<category><![CDATA[Raspberry Pi 5]]></category>
		<category><![CDATA[Raspberry Pi OS]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4047</guid>

					<description><![CDATA[Hasta hace unos días, mi vida tecnológica con la nueva Raspberry Pi 5 era un remanso de paz. Tenía conectado un disco SSD de 2,5 pulgadas y todo funcionaba como la seda. Pero, como nos pasa a todos los que nos gusta «cacharrear», decidí dar el salto a la máxima velocidad y actualicé a un [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Hasta hace unos días, mi vida tecnológica con la nueva <strong>Raspberry Pi 5</strong> era un remanso de paz. Tenía conectado un disco SSD de 2,5 pulgadas y todo funcionaba como la seda. Pero, como nos pasa a todos los que nos gusta «cacharrear», decidí dar el salto a la máxima velocidad y actualicé a un <strong>disco SSD NVMe</strong>. Ahí es donde empezaron los sudores fríos.</p>



<p class="wp-block-paragraph">De repente, cada vez que reiniciaba el sistema, la Pi arrancaba pero con la <strong>pantalla más negra que el porvenir de un zombi</strong>. Al principio, el pánico: pensé que el sistema se colgaba y no arrancaba. Cambié el HAT, probé otro disco NVMe, compré cables HDMI nuevos e incluso reinstalé el sistema operativo varias veces. ¿El resultado? El mismo vacío oscuro.</p>



<p class="wp-block-paragraph">Sin embargo, al entrar por <strong>SSH</strong> desde mi teléfono, descubrí la verdad: la Pi estaba vivita y coleando, con el sistema totalmente cargado y funcionando de fondo. El problema no era que la Pi no arrancara, ¡era que no quería hablar con mi monitor!</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota: Para que el sistema arranque de forma normal quita el cable de alimentación y tras 5 segundos vuelve a conectar.</p>
</blockquote>



<h3 class="wp-block-heading">¿Por qué el NVMe «rompe» el vídeo al reiniciar?</h3>



<p class="wp-block-paragraph">Si te está pasando lo mismo, no te vuelvas loco cambiando hardware. La explicación de por qué con una tarjeta SD o un SSD lento todo iba bien y con el NVMe oficial falla, se resume en estos tres factores:</p>



<ul class="wp-block-list">
<li><strong>Tu Raspberry Pi ahora es «demasiado rápida»:</strong> Imagina que el arranque es una conversación. Con la SD, la Pi tardaba 30 segundos; al monitor le daba tiempo a despertarse y tomarse un café. Con el NVMe, el sistema carga en 5 segundos. La Pi lanza la señal de vídeo tan rápido que el monitor aún está «desperezándose» del reinicio. Cuando el monitor quiere mirar, la Pi ya ha dejado de llamar a la puerta y ambos se quedan esperando en silencio.</li>



<li><strong>Interferencias y «ruido» eléctrico:</strong> El bus PCIe donde va tu NVMe funciona a frecuencias altísimas que generan ondas electromagnéticas. Como los puertos micro-HDMI están pegados al conector PCIe en la Pi 5, ese «ruido» puede ensuciar la señal. Si el cable no es de excelente calidad, la Pi no recibe los datos del monitor (EDID) y, por seguridad, apaga la salida.</li>



<li><strong>El reinicio «suave» vs «fuerte»:</strong> Al reiniciar desde el escritorio, el driver de vídeo a veces no se cierra correctamente antes de que el rapidísimo NVMe vuelva a cargar todo. Esto deja a la gráfica en un estado de confusión total.</li>
</ul>



<p class="wp-block-paragraph"><strong>En resumen:</strong> Es como si tu Raspberry Pi fuera ahora un coche de carreras. Arranca tan rápido que sale del garaje antes de que la puerta (tu monitor) termine de abrirse.</p>



<p class="wp-block-paragraph">A continuación, te explico los pasos exactos para decirle a tu Pi: <em>«Espera un segundo antes de salir y, aunque veas la puerta cerrada, empuja, que se abrirá»</em>.</p>



<h3 class="wp-block-heading">El cambio imprescindible (De Wayland a X11)</h3>



<p class="wp-block-paragraph">Por defecto, la Raspberry Pi 5 utiliza <strong>Wayland</strong>. Sin embargo, Wayland todavía tiene problemas para gestionar el «Screen Blanking» (que la pantalla se apague sola tras un tiempo sin uso).</p>



<p class="wp-block-paragraph">Si quieres que tu monitor descanse y que los comandos que vamos a usar funcionen, debemos volver al servidor gráfico <strong>X11</strong>.</p>



<h4 class="wp-block-heading">¿Cómo cambiar a X11?</h4>



<ol start="1" class="wp-block-list">
<li>Abre una terminal y escribe: <code>sudo raspi-config</code></li>



<li>Ve a <strong>6 Advanced Options</strong>.</li>



<li>Busca <strong>A6 Wayland</strong>.</li>



<li>Selecciona <strong>W1 X11</strong> (o el que indique que desactiva Wayland).</li>



<li>Dale a <strong>Finish</strong> y acepta el <strong>Reboot</strong> (reiniciar).</li>
</ol>



<p class="wp-block-paragraph"><em>Ahora que estamos en X11, todos los comandos de ahorro de energía y gestión de pantalla funcionarán como un reloj.</em></p>



<h2 class="wp-block-heading">Parte 1: El «Seguro de Vida» (Configurar SSH)</h2>



<p class="wp-block-paragraph">Antes de meterle mano a la configuración interna, necesitamos una forma de hablar con la Raspberry Pi cuando la pantalla está en negro. Para eso usamos el <strong>SSH (Secure Shell)</strong>. Si puedes entrar por SSH desde tu móvil o tu PC mientras la pantalla está oscura, ¡felicidades!, tu Pi no está muerta, solo está «tímida» con el monitor.</p>



<h3 class="wp-block-heading">1. ¿Cómo saber si el SSH está activo?</h3>



<p class="wp-block-paragraph">Si tienes la suerte de que la pantalla ha encendido o estás configurándola por primera vez, abre una terminal y comprueba el estado del servicio:</p>



<pre class="wp-block-code"><code>sudo systemctl status ssh
</code></pre>



<h4 class="wp-block-heading">Caso A: El servicio funciona correctamente</h4>



<p class="wp-block-paragraph">Si ves un mensaje en verde que dice <strong><code>active (running)</code></strong>, todo está perfecto. Ya puedes acceder remotamente.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Ojo:</strong> En mi caso veréis que uso el puerto <strong>22299</strong>, pero por defecto en vuestra Pi será el <strong>22</strong>.</p>
</blockquote>



<pre class="wp-block-code"><code>● ssh.service - OpenBSD Secure Shell server
     Active: active (running) since Sat 2026-03-14 15:15:56 CET; 3h 28min ago
     ...
     mar 14 15:15:56 pi5-2 sshd&#91;1006]: Server listening on 0.0.0.0 port 22299.
</code></pre>



<h4 class="wp-block-heading">Caso B: El servicio está apagado o muerto</h4>



<p class="wp-block-paragraph">Si por el contrario ves que dice <strong><code>inactive (dead)</code></strong>, significa que estás «ciego» si la pantalla falla. Tienes que activarlo obligatoriamente.</p>



<pre class="wp-block-code"><code>○ ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (...; disabled; ...)
     Active: inactive (dead)
</code></pre>



<h3 class="wp-block-heading">2. Cómo activar e iniciar el SSH</h3>



<p class="wp-block-paragraph">Para que el SSH se encienda solo cada vez que arranques la Pi (muy importante para nuestro problema), ejecuta estos dos comandos:</p>



<p class="wp-block-paragraph"><strong>Primero: Habilitar el inicio automático</strong></p>



<pre class="wp-block-code"><code>sudo systemctl enable ssh</code></pre>



<p class="wp-block-paragraph"><em>Verás que el sistema crea unos «symlinks» (accesos directos internos), eso indica que ahora arrancará siempre con el sistema.</em></p>



<p class="wp-block-paragraph"><strong>Segundo: Arrancar el servicio ahora mismo</strong></p>



<pre class="wp-block-code"><code>sudo systemctl start ssh</code></pre>



<h2 class="wp-block-heading">Parte 2: El diagnóstico definitivo (¿Monitor o Sistema?)</h2>



<p class="wp-block-paragraph">Una vez que tengas SSH, la próxima vez que reinicies y la pantalla se quede <strong>«más negra que el porvenir de un zombi»</strong>, no entres en pánico. Conéctate desde tu móvil y lanza este comando:</p>



<pre class="wp-block-code"><code>kmsprint</code></pre>



<ul class="wp-block-list">
<li><strong>Si ves <code>HDMI-A-1 (connected)</code> </strong>nos confirma que <strong>la Raspberry Pi sí detecta el monitor</strong>, pero la señal de vídeo no se está «dibujando»</li>



<li><strong>Si quieres forzar el encendido desde el móvil</strong>, pega esto en la terminal de tu móvil:</li>
</ul>



<pre class="wp-block-code"><code>export DISPLAY=:0
xset dpms force on</code></pre>



<p class="wp-block-paragraph">Si esto no enciende tu monitor, ejecuta:</p>



<pre class="wp-block-code"><code><code>sudo systemctl restart lightdm</code></code></pre>



<p class="wp-block-paragraph"><em>(Esto cerrará tus apps abiertas, pero debería forzar al monitor a recibir señal).</em></p>



<p class="wp-block-paragraph">En mi caso, reiniciar lightdm encendió mi monitor. </p>



<p class="wp-block-paragraph">El hecho de que al reiniciar <code>lightdm</code> la pantalla se encienda es la <strong>prueba definitiva</strong>: el sistema operativo arranca bien, el hardware funciona y el disco NVMe está perfecto.</p>



<h2 class="wp-block-heading">Parte 3: La Solución Definitiva (La «D» Mágica)</h2>



<p class="wp-block-paragraph">Si has confirmado que por SSH todo funciona pero el HDMI se queda frito, vamos a aplicar la medicina. Editamos el archivo de configuración del arranque:</p>



<pre class="wp-block-code"><code>sudo nano /boot/firmware/cmdline.txt</code></pre>



<p class="wp-block-paragraph">Ve al final de la única línea que hay, añade un espacio y escribe:</p>



<p class="wp-block-paragraph"><code>video=HDMI-A-1:1920x1080@60D</code></p>



<p class="wp-block-paragraph"><strong>¿Por qué la D?</strong> Porque le dice a la Pi: <em>«Envía señal Digital sí o sí, no preguntes al monitor si está listo, ¡dispara!»</em>.</p>



<h3 class="wp-block-heading">Un último ajuste en la EEPROM</h3>



<p class="wp-block-paragraph">Para que el disco NVMe y el vídeo se lleven bien eléctricamente en la Raspberry Pi 5, te recomiendo este cambio final:</p>



<pre class="wp-block-code"><code>sudo rpi-eeprom-config --edit</code></pre>



<p class="wp-block-paragraph">Dentro te encontrarás tres líneas como estas.</p>



<pre class="wp-block-code"><code>BOOT_UART=1
BOOT_ORDER=0xf146
NET_INSTALL_AT_POWER_ON=1</code></pre>



<p class="wp-block-paragraph">Añade estas líneas al final de las existentes:</p>



<ul class="wp-block-list">
<li><code>POWER_OFF_ON_HALT=1</code></li>



<li><code>HDMI_DELAY=1</code></li>
</ul>



<p class="wp-block-paragraph">Cuando lo tengas, guarda los cambios con Ctrl + o y cierra para salir con Crtl + x</p>



<p class="wp-block-paragraph">Entonces se generará la nueva configuración.</p>



<pre class="wp-block-code"><code>raspberry@pi5:~ $ <strong>sudo rpi-eeprom-config --edit</strong>
Updating bootloader EEPROM
 image: /usr/lib/firmware/raspberrypi/bootloader-2712/default/pieeprom-2026-05-26.bin
config_src: blconfig device
config: /tmp/tmp_3tpo_c8/boot.conf
################################################################################
&#91;all]
BOOT_UART=1
BOOT_ORDER=0xf146
NET_INSTALL_AT_POWER_ON=1
POWER_OFF_ON_HALT=1
HDMI_DELAY=1

################################################################################
*** CREATED UPDATE /tmp/tmp_3tpo_c8/pieeprom.upd  ***

Checking flashrom probe
   CURRENT: vie 06 feb 2026 14:31:40 UTC (1770388300)
    UPDATE: mar 26 may 2026 15:01:25 UTC (1779807685)
    BOOTFS: /boot/firmware
'/tmp/tmp.1fcqwNnARo' -> '/boot/firmware/pieeprom.upd'

UPDATING bootloader. This could take up to a minute. Please wait

*** Do not disconnect the power until the update is complete ***

If a problem occurs then the Raspberry Pi Imager may be used to create
a bootloader rescue SD card image which restores the default bootloader image.

flashrom -p linux_spi:dev=/dev/spidev10.0,spispeed=16000 -w /boot/firmware/pieeprom.upd
Verifying update
VERIFY: SUCCESS
UPDATE SUCCESSFUL
raspberry@pi5:~ $ 
</code></pre>



<p class="wp-block-paragraph">Ahora tan solo reinicia el sistema con</p>



<pre class="wp-block-code"><code>sudo reboot</code></pre>



<p class="wp-block-paragraph">Este paso es como ajustar el «reloj interno» y la gestión eléctrica de la placa base de tu Raspberry Pi 5. Es el ajuste que soluciona el conflicto físico entre el disco NVMe y el puerto HDMI.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ul class="wp-block-list">
<li><strong><code>POWER_OFF_ON_HALT=1</code></strong>: Fuerza un reinicio eléctrico completo. Evita que el disco «atonté» a la salida de vídeo.</li>



<li><strong><code>HDMI_DELAY=1</code></strong>: Le da un segundo de ventaja al monitor para que esté listo antes de que la Pi empiece a enviar imágenes.</li>
</ul>
</blockquote>



<p class="wp-block-paragraph">¡Y listo! Con esto habrás pasado de tener un pisapapeles caro a una <strong>Raspberry Pi 5 con NVMe</strong> que vuela y que no se achica ante ningún reinicio.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/el-misterio-de-la-pantalla-negra-en-raspberry-pi-5-culpa-del-nvme/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
