<?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>Tue, 27 Oct 2026 21:05:35 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
	<item>
		<title>Guía completa: montar discos y particiones al inicio en Debian (y derivados como Raspberry Pi OS)</title>
		<link>https://linuxete.duckdns.org/guia-completa-montar-discos-y-particiones-al-inicio-en-debian-y-derivados-como-raspberry-pi-os/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=guia-completa-montar-discos-y-particiones-al-inicio-en-debian-y-derivados-como-raspberry-pi-os</link>
					<comments>https://linuxete.duckdns.org/guia-completa-montar-discos-y-particiones-al-inicio-en-debian-y-derivados-como-raspberry-pi-os/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sun, 25 Oct 2026 19:02:06 +0000</pubDate>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Discos]]></category>
		<category><![CDATA[Debian 13]]></category>
		<category><![CDATA[fstab]]></category>
		<category><![CDATA[montar discos]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Systemd]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4799</guid>

					<description><![CDATA[Aprende a montar discos y particiones al inicio en Debian 13 (Trixie) de forma fiable: UUID, nofail, automontaje con systemd y solución de los errores más comunes.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Montar un disco secundario al arranque de forma automática y fiable es una de esas tareas que parece sencilla, pero que esconde varios detalles que pueden hacerte perder horas si no se conocen. En esta guía veremos <strong>cómo montar un disco o partición al inicio en Debian</strong> (y sistemas derivados como Raspberry Pi OS, Ubuntu, Linux Mint…), explicando no solo los pasos, sino también <strong>el porqué de cada opción</strong>, los errores más comunes y cómo resolverlos.</p>



<p class="wp-block-paragraph">Al terminar, tendrás un montaje:</p>



<ul class="wp-block-list">
<li><strong>Robusto</strong>: usa <code>UUID</code> en lugar de nombres de dispositivo volátiles (<code>/dev/sda1</code>).</li>



<li><strong>Seguro para el arranque</strong>: si el disco no está conectado, el sistema arranca igualmente.</li>



<li><strong>Bajo demanda</strong>: el disco se monta solo cuando se accede a él, ahorrando recursos.</li>
</ul>



<h2 class="wp-block-heading">Índice</h2>



<ol class="wp-block-list">
<li><a href="#conceptos-previos">Conceptos previos</a></li>



<li><a href="#paso-1">Paso 1: Comprobar que el disco está conectado y detectado</a></li>



<li><a href="#paso-2">Paso 2: Obtener el UUID del disco</a></li>



<li><a href="#paso-3">Paso 3: Crear el punto de montaje</a></li>



<li><a href="#paso-4">Paso 4: Editar <code>/etc/fstab</code></a></li>



<li><a href="#paso-5">Paso 5: Recargar systemd</a></li>



<li><a href="#paso-6">Paso 6: Activar la unidad de automontaje</a></li>



<li><a href="#paso-7">Paso 7: Verificar el montaje</a></li>



<li><a href="#paso-8">Paso 8: Permisos de usuario.</a></li>



<li><a href="#opciones-fstab">Opciones de <code>fstab</code> explicadas</a></li>



<li><a href="#troubleshooting">Solución de problemas</a></li>



<li><a href="#resumen">Resumen del flujo completo</a></li>



<li><a href="#conclusion">Conclusión</a></li>
</ol>



<h2 id="conceptos-previos" class="wp-block-heading">Conceptos previos.</h2>



<p class="wp-block-paragraph">Antes de tocar nada, conviene tener claros cuatro conceptos que aparecerán una y otra vez:</p>



<ul class="wp-block-list">
<li><strong><code>/media</code> vs <code>/mnt</code></strong>: por convención, <code>/media</code> se usa para medios extraíbles (USB, discos externos) y <code>/mnt</code> para montajes temporales o manuales. Usaremos <code>/media</code>.</li>



<li><strong><code>UUID</code> vs <code>/dev/sdX</code></strong>: el nombre <code>/dev/sda</code>, <code>/dev/sdb</code>… <strong>puede cambiar</strong> entre arranques (sobre todo con discos USB). El <code>UUID</code> es un identificador único y estable del sistema de archivos. <strong>Usa siempre <code>UUID</code>.</strong></li>



<li><strong><code>systemd</code> y <code>fstab</code></strong>: en sistemas modernos, <code>systemd</code> es quien gestiona los montajes definidos en <code>/etc/fstab</code> mediante unidades (<code>.mount</code> y <code>.automount</code>). Por eso, tras editar <code>fstab</code>, hay que decirle a systemd que recargue (<code>daemon-reload</code>).</li>



<li><strong><code>x-systemd.automount</code></strong>: opción que le dice a systemd que <strong>no monte el disco inmediatamente</strong>, sino que cree una unidad de automontaje que lo montará <strong>la primera vez que se acceda al directorio</strong>. Esto es ideal para discos USB que queremos que se monten solo cuando se usen.</li>
</ul>



<h2 id="paso-1" class="wp-block-heading">Paso 1: Comprobar que el disco está conectado y detectado.</h2>



<p class="wp-block-paragraph"><strong>Este paso es ineludible.</strong> Si el disco no está siendo detectado por el sistema, ningún ajuste en <code>fstab</code> funcionará. Y es un fallo muy común con discos USB que no reciben suficiente energía o con cables defectuosos.</p>



<p class="wp-block-paragraph">Conecta el disco y ejecuta:</p>



<pre class="wp-block-code"><code>lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT</code></pre>



<p class="wp-block-paragraph">Deberías ver un disco nuevo con el tamaño esperado, por ejemplo:</p>



<pre class="wp-block-code"><code>NAME        SIZE TYPE FSTYPE MOUNTPOINT
sda       931,5G disk
<mark style="background-color:#7bdcb5" class="has-inline-color">└─sda1    931,5G part ext4</mark>
sdb       111,8G disk
<mark style="background-color:#7bdcb5" class="has-inline-color">└─sdb1    111,8G part ext4</mark>
nvme0n1   238,5G disk
├─nvme0n1p1 256M part vfat  /boot/firmware
└─nvme0n1p2 237,7G part ext4 /</code></pre>



<p class="wp-block-paragraph">En este ejemplo voy a montar dos discos duros, un disco <strong>SSD de 120GB</strong>, conectado al puerto USB 3.0, mediante un adaptador SATA-USB, el cual aparece en el sistema como <code>sdb1</code> y un disco <strong>HD de 1TB</strong>, conectado al puerto USB 3.0 mediante un adaptador SATA-USB autoalimentado apareciendo como <code>sda1</code></p>



<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;" /> Antes de seguir, si tu disco no aparece</strong>, el problema es físico o de alimentación.<br><br>Conecta el disco y revisa los últimos mensajes del kernel</p>



<pre class="wp-block-code"><code>sudo dmesg | tail -n 30</code></pre>



<p class="wp-block-paragraph">Busca errores como <code>device descriptor read/64, error -110</code> o <code>reset full-speed USB device</code>. Si los ves, prueba con <strong>otro puerto USB</strong>, <strong>otro cable</strong> o asegúrate de que la <strong>alimentación externa</strong> (si la tiene) está conectada. Desconecta y vuelve a conectar el disco, y repite <code>lsblk</code>.</p>



<p class="wp-block-paragraph"><strong>Truco</strong>: en Raspberry Pi y otros SBC, un disco de 2.5&#8243; puede consumir más de lo que un solo puerto USB puede entregar de forma estable. Un <strong>hub USB con alimentación</strong> suele resolver el problema.</p>
</blockquote>



<h2 id="paso-2" class="wp-block-heading">Paso 2: Obtener el UUID del disco.</h2>



<p class="wp-block-paragraph">Una vez que el disco aparece en <code>lsblk</code>, obtén su <code>UUID</code> real:</p>



<pre class="wp-block-code"><code>sudo blkid /dev/sda1 /dev/sdb1</code></pre>



<p class="wp-block-paragraph">Salida de ejemplo:</p>



<pre class="wp-block-code"><code>/dev/sda1: LABEL="SD_120Gb" UUID="f6b565ed-cee0-4508-b94d-464c422fd9f1" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="c7a2c28e-01"
/dev/sdb1: LABEL="Disco_1TB" UUID="4fa0fd15-57f5-4b75-8cc7-916186cb1062" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1d6caf36-01"</code></pre>



<p class="wp-block-paragraph"><strong>Copia el <code>UUID</code> exacto.</strong> Compruébalo carácter por carácter: un <code>0</code> por <code>O</code>, un <code>1</code> por <code>l</code>… y el montaje fallará silenciosamente.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Consejo</strong>: Si tienes varios discos, puedes ver todos los UUID a la vez con <code>sudo blkid</code> (sin argumentos).</p>
</blockquote>



<h2 id="paso-3" class="wp-block-heading">Paso 3: Crear el punto de montaje.</h2>



<p class="wp-block-paragraph">Crea un directorio vacío donde se montará el disco:</p>



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



<p class="wp-block-paragraph">Comprueba que esté vacío:</p>



<pre class="wp-block-code"><code>ls -la /media/Disco_120GB /media/Disco_1TB</code></pre>



<p class="wp-block-paragraph">Si tiene archivos dentro (residuos de un montaje anterior), límpialos con cuidado. Un punto de montaje «sucio» puede impedir que systemd active la unidad.</p>



<h2 id="paso-4" class="wp-block-heading">Paso 4: Editar <code>/etc/fstab</code>.</h2>



<p class="wp-block-paragraph">Abre el archivo con tu editor preferido:</p>



<pre class="wp-block-code"><code>sudo nano /etc/fstab</code></pre>



<p class="wp-block-paragraph">Añade una línea al final con este formato:</p>



<pre class="wp-block-code"><code>UUID=4fa0fd15-57f5-4b75-8cc7-916186cb1062 /media/Disco_1TB ext4  defaults,nofail,x-systemd.automount,x-systemd.device-timeout=10s  0  2

UUID=f6b565ed-cee0-4508-b94d-464c422fd9f1 /media/Disco_120GB ext4  defaults,nofail,x-systemd.automount,x-systemd.device-timeout=5s  0  2</code></pre>



<p class="wp-block-paragraph">Desglose de los campos:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Campo</th><th>Valor</th><th>Significado</th></tr></thead><tbody><tr><td>1</td><td><code>UUID=...</code></td><td>Identificador único del sistema de archivos</td></tr><tr><td>2</td><td><code>/media/Disco_120GB</code> <code>/media/Disco_1</code>TB</td><td>Punto de montaje (debe existir)</td></tr><tr><td>3</td><td><code>ext4</code></td><td>Tipo de sistema de archivos (usa el que devuelva <code>blkid</code>)</td></tr><tr><td>4</td><td><code>defaults,nofail,x-systemd.automount,x-systemd.device-timeout=10s</code></td><td>Opciones de montaje (ver abajo)</td></tr><tr><td>5</td><td><code>0</code></td><td><code>dump</code>: normalmente <code>0</code> (no se usa)</td></tr><tr><td>6</td><td><code>2</code></td><td><code>fsck</code>: <code>1</code> para raíz, <code>2</code> para el resto, <code>0</code> para deshabilitar</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">¿Qué hace cada opción?</h3>



<ul class="wp-block-list">
<li><strong><code>defaults</code></strong>: opciones por defecto (<code>rw</code>, <code>suid</code>, <code>dev</code>, <code>exec</code>, <code>auto</code>, <code>nouser</code>, <code>async</code>).</li>



<li><strong><code>nofail</code></strong>: si el disco no está presente al arrancar, el sistema <strong>arranca igualmente</strong> sin bloquearse. Imprescindible para discos secundarios y USB.</li>



<li><strong><code>x-systemd.automount</code></strong>: crea una unidad <code>.automount</code>. El disco <strong>no se monta hasta que se accede a él</strong> por primera vez. Perfecto para discos que no se usan constantemente.</li>



<li><strong><code>x-systemd.device-timeout=10s</code></strong>: le dice a systemd que no espere más de 10 segundos al dispositivo. Sin esto, el valor por defecto es <strong>90 segundos</strong>, lo que puede alargar el arranque si el disco no está conectado.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Valores recomendados para <code>x-systemd.device-timeout</code></strong>:</p>



<ul class="wp-block-list">
<li><strong>SSD</strong> (detección casi instantánea): <code>5s</code>.</li>



<li><strong>HDD por USB</strong> (el motor tarda en arrancar): <code>10s</code> o <code>15s</code>.</li>



<li><strong>Nunca <code>0</code></strong>: eso haría que el sistema espere <strong>indefinidamente</strong>.</li>
</ul>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Extra opcional</strong>: si quieres que el disco se desmonte solo tras un tiempo sin uso (ahorro de energía), añade <code>x-systemd.idle-timeout=10min</code>.</p>
</blockquote>



<p class="wp-block-paragraph">Guarda el archivo (<code>Ctrl+O</code>, <code>Enter</code>, <code>Ctrl+X</code> en <code>nano</code>).</p>



<h2 id="paso-5" class="wp-block-heading">Paso 5: Recargar systemd</h2>



<p class="wp-block-paragraph">Cada vez que edites <code>/etc/fstab</code>, systemd debe releer la configuración:</p>



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



<p class="wp-block-paragraph">Si no haces esto, systemd seguirá usando la versión antigua en memoria y verás el aviso:</p>



<pre class="wp-block-code"><code>mount: (consejo) fstab ha sido modificado, pero systemd sigue utilizando
       la versión antigua; utilice 'systemctl daemon-reload' para recargar.</code></pre>



<p class="wp-block-paragraph"><strong><code>daemon-reload</code> no monta nada</strong>: solo recarga definiciones. El montaje viene en los pasos siguientes.</p>



<h2 id="paso-6" class="wp-block-heading">Paso 6: Activar la unidad de automontaje.</h2>



<p class="wp-block-paragraph"><strong>Este es el paso que más gente olvida y la causa principal de que «no se monte nada».</strong> Tras crear una entrada nueva en <code>fstab</code> con <code>x-systemd.automount</code>, systemd <strong>crea la unidad pero la deja inactiva</strong> (<code>inactive (dead)</code>). No se activará sola hasta el próximo arranque.</p>



<p class="wp-block-paragraph">Comprueba el estado:</p>



<pre class="wp-block-code"><code>systemctl list-units --type=automount --all</code></pre>



<p class="wp-block-paragraph">Comprueba que en el resultado ninguna aparece inactive.</p>



<pre class="wp-block-code"><code>UNIT                          LOAD   ACTIVE   SUB     DESCRIPTION
media-Disco_120GB.automount   loaded <mark style="background-color:#7bdcb5" class="has-inline-color">inactive</mark> dead    media-Disco_120GB.automount
media-Disco_1TB.automount     loaded active   running media-Disco_1TB.automount</code></pre>



<p class="wp-block-paragraph">Si es así, actívala manualmente:</p>



<pre class="wp-block-code"><code>sudo systemctl start media-Disco_120GB.automount</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota sobre el nombre de la unidad</strong>: systemd nombra las unidades a partir del punto de montaje, sustituyendo <code>/</code> por <code>-</code>. Para <code>/media/Disco_120GB</code> → <code>media-Disco_120GB.automount</code>. Si el nombre tiene espacios o caracteres especiales, systemd los escapa (por ejemplo, espacios → <code>\x20</code>). Puedes listar todas las unidades disponibles con <code>systemctl list-unit-files | grep automount</code>.</p>
</blockquote>



<p class="wp-block-paragraph">Verifica que ahora aparece como <code>active (running)</code>:</p>



<pre class="wp-block-code"><code>systemctl list-units --type=automount --all | grep 120GB</code></pre>



<h2 id="paso-7" class="wp-block-heading">Paso 7: Verificar el montaje.</h2>



<p class="wp-block-paragraph">Con la unidad activa, <strong>dispara el montaje accediendo al directorio</strong>:</p>



<pre class="wp-block-code"><code>ls /media/Disco_120GB /media/Disco_1TB</code></pre>



<p class="wp-block-paragraph">Esto «despierta» la unidad de automontaje y monta la partición en ese instante. Ahora comprueba con:</p>



<pre class="wp-block-code"><code>mount | grep /media
df -h | grep Disco</code></pre>



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



<pre class="wp-block-code"><code>/dev/sdb1 on /media/Disco_120GB type ext4 (rw,relatime,...,x-systemd.automount)</code></pre>



<p class="wp-block-paragraph">¡Listo! El disco está montado y se montará automáticamente cada vez que accedas a él o al arrancar el sistema.</p>



<h2 id="paso-8" class="wp-block-heading">Paso 8: Permisos de usuario:</h2>



<p class="wp-block-paragraph">Cuando montas un sistema de archivos nativo de Linux como <code>ext4</code> mediante <code>fstab</code>, el directorio recién montado en <code>/media/...</code> pertenecerá por defecto al usuario <code>root</code> (<code>root:root</code>).</p>



<p class="wp-block-paragraph">Aunque lo menciones de pasada en la tabla de opciones para exFAT/NTFS (<code>uid=1000,gid=1000</code>), a muchos usuarios les pasa que montan su partición <code>ext4</code>, van a guardar un archivo desde su usuario normal sin privilegios y obtienen un error de <strong>«Permiso denegado»</strong>.</p>



<p class="wp-block-paragraph"><strong>Sugerencia:</strong> Añadir una pequeña nota o un comando rápido al final del proceso para ajustar los permisos si es necesario:</p>



<pre class="wp-block-code"><code><code>sudo chown -R $USER:$USER /media/Disco_120GB</code><code>sudo chown -R $USER:$USER /media/Disco_1TB</code></code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Nota: Esto debe hacerse <strong>con el disco ya montado</strong>, de lo contrario cambiarías los permisos del punto de montaje vacío y al montarse el disco se sobrescribirían con los permisos raíz del sistema de ficheros).</em></p>
</blockquote>



<h2 id="opciones-fstab" class="wp-block-heading">Opciones de <code>fstab</code> explicadas {#opciones-fstab}</h2>



<p class="wp-block-paragraph">Resumen rápido de las opciones más útiles para discos secundarios:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Opción</th><th>Para qué sirve</th><th>¿Cuándo usarla?</th></tr></thead><tbody><tr><td><code>defaults</code></td><td>Opciones estándar (<code>rw</code>, <code>exec</code>, <code>auto</code>…)</td><td>Siempre</td></tr><tr><td><code>nofail</code></td><td>El arranque no se bloquea si el disco no está</td><td>Discos secundarios, USB</td></tr><tr><td><code>x-systemd.automount</code></td><td>Montaje bajo demanda al acceder</td><td>Discos que no se usan siempre</td></tr><tr><td><code>x-systemd.device-timeout=10s</code></td><td>Tiempo máximo de espera al dispositivo</td><td>Siempre con <code>nofail</code></td></tr><tr><td><code>x-systemd.idle-timeout=10min</code></td><td>Desmontaje automático tras inactividad</td><td>Ahorro energético</td></tr><tr><td><code>ro</code></td><td>Solo lectura</td><td>Discos que no deben modificarse</td></tr><tr><td><code>uid=1000,gid=1000</code></td><td>Asignar propietario (para exFAT/NTFS)</td><td>Discos formateados en exFAT/NTFS</td></tr></tbody></table></figure>



<h2 id="troubleshooting" class="wp-block-heading">Solución de problemas.</h2>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f534.png" alt="🔴" class="wp-smiley" style="height: 1em; max-height: 1em;" /> El disco no aparece en <code>lsblk</code> / <code>blkid</code></h3>



<ul class="wp-block-list">
<li>Revisa cable, puerto USB y alimentación.</li>



<li>Ejecuta <code>sudo dmesg | tail -n 30</code> justo después de conectar el disco.</li>



<li>Prueba otro puerto (mejor USB 3.0) u otro cable.</li>



<li>Desconecta y vuelve a conectar el disco.</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <code>systemctl start ...automount</code> da <code>Job failed</code></h3>



<p class="wp-block-paragraph">Obtén el error exacto:</p>



<pre class="wp-block-code"><code>sudo journalctl -u media-Disco_120GB.automount -xe --no-pager</code></pre>



<p class="wp-block-paragraph">Causas más frecuentes:</p>



<ol class="wp-block-list">
<li><strong>UUID incorrecto</strong> en <code>fstab</code>. Compara carácter por carácter con <code>sudo blkid</code>.</li>



<li><strong>Conflicto con una unidad <code>.mount</code> en estado <code>failed</code></strong>. Resetea:<code>sudo systemctl reset-failed media-Disco_120GB.mount sudo systemctl start media-Disco_120GB.automount</code></li>



<li><strong>Punto de montaje con residuos</strong>. Comprueba <code>ls -la /media/Disco_120GB</code>. Si hay archivos, limpia el directorio.</li>



<li><strong>El disco no está listo en el momento del arranque</strong>. Añade o aumenta <code>x-systemd.device-timeout</code> (por ejemplo, <code>30s</code>).</li>
</ol>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> La unidad aparece como <code>inactive (dead)</code></h3>



<p class="wp-block-paragraph">Es el estado normal tras <code>daemon-reload</code> si no se ha hecho <code>start</code>. Solución:</p>



<pre class="wp-block-code"><code>sudo systemctl start media-Disco_120GB.automount</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <code>mount -a</code> no muestra nada y el disco «no se monta»</h3>



<p class="wp-block-paragraph">Con <code>x-systemd.automount</code>, <code>mount -a</code> <strong>no monta el disco de inmediato</strong>, solo valida la configuración. El montaje real ocurre al acceder al directorio:</p>



<pre class="wp-block-code"><code>ls /media/Disco_120GB</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> El arranque tarda mucho (más de un minuto)</h3>



<p class="wp-block-paragraph">Falta <code>x-systemd.device-timeout</code>. Sin él, systemd espera <strong>90 segundos</strong> por defecto al dispositivo. Añade <code>x-systemd.device-timeout=10s</code> (o <code>5s</code> para SSD, <code>15s</code> para HDD USB).</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> «No tengo permisos para escribir en el disco» (exFAT/NTFS)</h3>



<p class="wp-block-paragraph">Añade a las opciones: <code>uid=1000,gid=1000</code> (sustituye por tu <code>id -u</code> e <code>id -g</code>).</p>



<h2 id="resumen" class="wp-block-heading">Resumen del flujo completo.</h2>



<p class="wp-block-paragraph">Para que no se te olvide nada, este es el flujo completo que debes seguir cada vez que añadas un disco nuevo:</p>



<pre class="wp-block-code"><code># 1. Comprobar que el disco está detectado
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT

# 2. Obtener el UUID
sudo blkid /dev/sdX1

# 3. Crear el punto de montaje
sudo mkdir -p /media/Disco_XXX

# 4. Editar /etc/fstab con el UUID y las opciones
sudo nano /etc/fstab
#   → UUID=... /media/Disco_XXX ext4 defaults,nofail,x-systemd.automount,x-systemd.device-timeout=10s 0 2

# 5. Recargar systemd
sudo systemctl daemon-reload

# 6. Activar la unidad de automontaje
sudo systemctl start media-Disco_XXX.automount

# 7. Verificar que está activa
systemctl list-units --type=automount --all | grep XXX

# 8. Disparar el montaje accediendo al directorio
ls /media/Disco_XXX

# 9. Verificar montaje final
mount | grep /media
df -h | grep Disco</code></pre>



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



<p class="wp-block-paragraph">Montar discos al inicio en Debian es una tarea que, bien hecha, no da problemas nunca más. La clave está en:</p>



<ul class="wp-block-list">
<li><strong>Verificar siempre que el disco está detectado</strong> antes de tocar <code>fstab</code>.</li>



<li><strong>Usar <code>UUID</code></strong> y nunca <code>/dev/sdX</code>.</li>



<li><strong>Combinar <code>nofail</code> con <code>x-systemd.device-timeout</code></strong> para no bloquear el arranque.</li>



<li><strong>Activar la unidad de automontaje</strong> manualmente la primera vez.</li>



<li><strong>Tener a mano <code>journalctl</code> y <code>reset-failed</code></strong> cuando algo falle.</li>
</ul>



<p class="wp-block-paragraph">Con estos pasos, tus discos se montarán solos, de forma fiable, y sin sorpresas. Si te has encontrado con algún caso raro que no aparezca aquí, déjalo en los comentarios y lo añadiremos a la guía.</p>



<p class="wp-block-paragraph">¡Feliz montaje! <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;" /></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/guia-completa-montar-discos-y-particiones-al-inicio-en-debian-y-derivados-como-raspberry-pi-os/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo configurar tu WiFi de 5 GHz para máximo rendimiento y velocidad</title>
		<link>https://linuxete.duckdns.org/como-configurar-tu-wifi-de-5-ghz-para-maximo-rendimiento-y-velocidad/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-configurar-tu-wifi-de-5-ghz-para-maximo-rendimiento-y-velocidad</link>
					<comments>https://linuxete.duckdns.org/como-configurar-tu-wifi-de-5-ghz-para-maximo-rendimiento-y-velocidad/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Fri, 23 Oct 2026 21:09:58 +0000</pubDate>
				<category><![CDATA[Domótica]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[Configuración de Router]]></category>
		<category><![CDATA[Optimización WiFi]]></category>
		<category><![CDATA[Redes Inalámbricas]]></category>
		<category><![CDATA[Rendimiento de Red]]></category>
		<category><![CDATA[WiFi 5 GHz]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4786</guid>

					<description><![CDATA[¿Quieres exprimir al máximo la velocidad de tu conexión? La banda de 5 GHz es la clave para descargas ultrarrápidas y gaming sin lag, pero solo si está bien configurada. Analizamos paso a paso las pestañas General y Profesional de tu router para explicarte cómo ajustar el ancho de banda, los canales DFS y optimizar la latencia para que tus dispositivos modernos vuelen.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si la banda de 2.4 GHz es el motor de la domótica y la cobertura, la banda de <strong>5 GHz es la autopista de alta velocidad de tu hogar</strong>. Es la frecuencia que eligen las consolas, los televisores 4K, los ordenadores para descargar archivos pesados y los móviles modernos.</p>



<p class="wp-block-paragraph">A diferencia del 2.4 GHz, el 5 GHz tiene mucho más espectro disponible, lo que significa menos interferencias de los vecinos y la posibilidad de usar canales más anchos para alcanzar velocidades gigabit. Sin embargo, tiene un talón de Aquiles: <strong>su menor capacidad para atravesar paredes</strong>.</p>



<p class="wp-block-paragraph">En esta guía vamos a analizar, opción por opción y basándonos en una configuración real, cómo exprimir al máximo tu red de 5 GHz priorizando la velocidad y la baja latencia.</p>



<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;" /> <strong>Aviso:</strong></strong> Si al aplicar esta configuración notas que algunos dispositivos (como ciertos Android TV o equipos multimedia) no detectan la red de 5 GHz, es muy probable que se deba a que <strong>no son compatibles con los canales DFS</strong> (como el canal 100 recomendado aquí). Si te ocurre esto, puedes solucionarlo fácilmente fijando un canal no-DFS en la parte baja de la banda (del 36 al 48) o conectando dichos dispositivos a la red de 2.4 GHz, la cual ofrece una estabilidad excelente para este tipo de aparatos fijos.</p>
</blockquote>



<h2 class="wp-block-heading">Configuración General (Identidad y Seguridad)</h2>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="757" height="697" src="https://linuxete.duckdns.org/wp-content/uploads/2026/10/Red_5Ghz.png" alt="" class="wp-image-4787" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/10/Red_5Ghz.png 757w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/Red_5Ghz-300x276.png 300w" sizes="(max-width: 757px) 100vw, 757px" /></figure>



<p class="wp-block-paragraph">Esta pestaña define cómo se presenta tu red al mundo y qué nivel de seguridad ofrece.</p>



<ul class="wp-block-list">
<li><strong>Habilitar Smart Connect: OFF (Desactivado)</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> Desactivado (para tener redes separadas).</li>



<li><strong>El porqué:</strong> Smart Connect intenta unir el 2.4 y el 5 GHz bajo el mismo nombre. Esto puede llevar a que dispositivos que necesitan velocidad se conecten al 2.4 GHz (más lento), o que dispositivos alejados intenten agarrarse al 5 GHz (que no llega bien). Al separarlas (Cronos_2.4G y Cronos_5G), tú tienes el control absoluto.</li>
</ul>
</li>



<li><strong>Banda:</strong><code>5 GHz</code>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Es el menú que estamos configurando.</li>
</ul>
</li>



<li><strong>Nombre de red (SSID):</strong><code>Cronos_5G</code>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Añadir el sufijo «_5G» o «_5GHz» es fundamental para identificar la red rápida frente a la de cobertura.</li>
</ul>
</li>



<li><strong>Ocultar SSID: No</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Ocultar la red no aporta seguridad real (cualquier hacker la verá con herramientas básicas) y puede causar problemas de conexión y batería en móviles y portátiles.</li>
</ul>
</li>



<li><strong>Modo Inalámbrico: N/AC mixed</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>N/AC mixed</code> (o <code>AX/N/AC mixed</code> si tu router y dispositivos son Wi-Fi 6).</li>



<li><strong>El porqué:</strong> Asegura la compatibilidad con dispositivos Wi-Fi 4 (N) y Wi-Fi 5 (AC). Si tuvieras un router de última generación (Wi-Fi 6) y dispositivos compatibles, lo ideal sería seleccionar el modo «AX» para aprovechar las ventajas de la nueva tecnología.</li>
</ul>
</li>



<li><strong>Ancho de banda del canal: 80 MHz</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>80 MHz</code>.</li>



<li><strong>El porqué:</strong> Es el <strong>punto dulce</strong> del 5 GHz. Te permite velocidades altísimas (hasta 1.7 Gbps) sin las desventajas de los 160 MHz, que son más propensos a sufrir interferencias y a requerir canales DFS (radar) que a veces causan cortes breves.</li>
</ul>
</li>



<li><strong>Canal: 100</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> Manual (eligiendo un canal libre) o Automático.</li>



<li><strong>El porqué:</strong> El canal 100 pertenece a la banda <strong>DFS</strong> (Selección Dinámica de Frecuencia). Estos canales suelen estar menos saturados por los routers de los vecinos, lo que se traduce en menos interferencias y más velocidad. <em>Nota: Si notas cortes extraños, puede ser porque el router detecta un radar y cambia de canal automáticamente; en ese caso, fija un canal no-DFS (del 36 al 48).</em></li>
</ul>
</li>



<li><strong>Canal de extensión: Automático</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Es el canal secundario que se usa cuando se activa el ancho de banda de 80 MHz. Dejar que el router lo gestione automáticamente es lo más seguro.</li>
</ul>
</li>



<li><strong>Método de autenticación: WPA2-Personal</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>WPA2-Personal</code> (o <code>WPA3-Personal</code> si todos tus dispositivos son modernos).</li>



<li><strong>El porqué:</strong> Es el estándar de seguridad actual. El cifrado WPA2 con AES es obligatorio para poder alcanzar las velocidades del estándar AC.</li>
</ul>
</li>



<li><strong>Cifrado WPA: AES</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>AES</code>.</li>



<li><strong>El porqué:</strong> El cifrado TKIP está obsoleto y limita la velocidad de la red drásticamente. AES es el estándar moderno y seguro.</li>
</ul>
</li>



<li><strong>Clave WPA precompartida:</strong> <code>[Tu contraseña segura]</code></li>



<li><strong>Fotogramas de administración protegidos (PMF): Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>Deshabilitar</code> (o <code>Habilitar</code> si usas WPA3).</li>



<li><strong>El porqué:</strong> El PMF protege contra ataques de desconexión (deauth). Sin embargo, algunos dispositivos antiguos (o incluso algunos electrodomésticos modernos) no lo soportan y no se conectarán si lo activas. Si no usas WPA3, es mejor dejarlo deshabilitado para evitar problemas.</li>
</ul>
</li>



<li><strong>Intervalo de rotación de la clave de red: 3600</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> El router renueva la clave de cifrado interna cada hora (3600 segundos). Es un valor estándar, seguro y no afecta al rendimiento.</li>
</ul>
</li>
</ul>



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



<h2 class="wp-block-heading">Parte 2: Configuración Profesional (Optimización de Red)</h2>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="766" height="1000" src="https://linuxete.duckdns.org/wp-content/uploads/2026/10/Red_5Ghz_pro.png" alt="" class="wp-image-4788" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/10/Red_5Ghz_pro.png 766w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/Red_5Ghz_pro-230x300.png 230w" sizes="(max-width: 766px) 100vw, 766px" /></figure>



<p class="wp-block-paragraph">Aquí es donde se ajusta el comportamiento del router a nivel de radiofrecuencia. Esta pestaña está pensada para exprimir el hardware.</p>



<ul class="wp-block-list">
<li><strong>Habilitar radio: Sí</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Enciende la señal inalámbrica de 5 GHz.</li>
</ul>
</li>



<li><strong>Habilitar programador inalámbrico: No</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Permite programar apagados y encendidos (ej. por la noche). Desactivado significa que la red está encendida 24/7.</li>
</ul>
</li>



<li><strong>Definir AP aislado: No</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Si se activa, los dispositivos conectados no pueden comunicarse entre sí. Es útil para redes de invitados, pero en tu red principal impediría que tu móvil hiciera <em>casting</em> al televisor o controlara dispositivos IoT.</li>
</ul>
</li>



<li><strong>Asistente para itinerancia: Habilitar (-70 dBm)</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>Habilitar</code> (si usas repetidores o Mesh), <code>Deshabilitar</code> (si solo tienes un router).</li>



<li><strong>El porqué:</strong> Esta función «expulsa» a los dispositivos que tienen muy mala señal (por debajo de -70 dBm) para obligarlos a buscar una mejor conexión, por ejemplo, en otro nodo de la red Mesh.</li>
</ul>
</li>



<li><strong>Habilitar indagación IGMP: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> (IGMP Snooping). Esencial si tienes servicios de televisión IPTV o muchos dispositivos enviando tráfico de multidifusión (multicast). Evita que el router sature la red enviando paquetes a dispositivos que no los necesitan.</li>
</ul>
</li>



<li><strong>Tasa de multidifusión (Mbps): Automático</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Deja que el router decida la velocidad óptima para esos paquetes de multidifusión.</li>
</ul>
</li>



<li><strong>AMPDU RTS: Habilitar / Umbral RTS: 2347</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>Habilitar</code> y <code>2347</code>.</li>



<li><strong>El porqué:</strong> El estándar. AMPDU agrupa paquetes para mayor eficiencia. El umbral 2347 indica el tamaño máximo de paquete que se envía sin solicitar permiso al canal. En redes 5 GHz limpias, no hay que tocarlo.</li>
</ul>
</li>



<li><strong>Intervalo DTIM: 3</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Es el tiempo que los dispositivos en modo de bajo consumo (como smartphones) pueden «dormir». Un valor de 3 es un buen equilibrio entre el ahorro de batería y la recepción instantánea de notificaciones (Push).</li>
</ul>
</li>



<li><strong>Intervalo de señalización: 100</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> El router envía una señal de «¡Estoy aquí!» cada 100 ms para que los dispositivos lo encuentren rápido. Es el estándar.</li>
</ul>
</li>



<li><strong>¿Desea habilitar la ráfaga de transmisión? Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>Deshabilitar</code> o <code>Habilitar</code> (prueba).</li>



<li><strong>El porqué:</strong> (TX Bursting). Agrupa paquetes para enviarlos de golpe. En 5 GHz modernos, no suele aportar mejoras significativas y a veces puede generar microcortes con ciertos dispositivos. Dejarlo deshabilitado es más seguro.</li>
</ul>
</li>



<li><strong>Habilitar WMM: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <strong>Obligatorio <code>Habilitar</code></strong>.</li>



<li><strong>El porqué:</strong> (Wi-Fi Multimedia). Es el sistema de Calidad de Servicio (QoS). Sin esto activado, tu router 5 GHz <strong>no pasará de 54 Mbps</strong>, independientemente de la tecnología que tenga. Prioriza el tráfico de voz y vídeo.</li>
</ul>
</li>



<li><strong>Habilitar WMM sin confirmación: Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> Evita que se envíen datos sin esperar confirmación de recepción, lo que podría causar pérdida de paquetes. Mejor asegurar la integridad de los datos.</li>
</ul>
</li>



<li><strong>Habilitar WMM APSD: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> (Automatic Power Save Delivery). Ayuda a los dispositivos móviles (portátiles, tablets) a ahorrar batería gestionando eficientemente el tráfico.</li>
</ul>
</li>



<li><strong>Optimizar la agregación AMPDU: Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>El porqué:</strong> <strong>¡Ojo a este ajuste!</strong> La agregación AMPDU junta varios paquetes en uno solo para enviarlos más rápido. Aumenta el <em>throughput</em> (velocidad bruta de descarga), pero <strong>aumenta la latencia (ping)</strong>. Al tenerlo deshabilitado, estás priorizando una red más reactiva (ideal para gaming o videollamadas) a costa de perder un poco de velocidad punta.</li>
</ul>
</li>



<li><strong>Esquema de modulación (Modulation Scheme): Up to MCS 11 (NitroQAM/1024-QAM)</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> Al máximo posible.</li>



<li><strong>El porqué:</strong> Esto permite la modulación de mayor densidad (1024-QAM), que es una característica del Wi-Fi 6, pero algunos routers la aplican a 5 GHz para exprimir el hardware. Si tus dispositivos son modernos, déjalo así.</li>
</ul>
</li>



<li><strong>Equidad de tiempo de emisión: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>Habilitar</code>.</li>



<li><strong>El porqué:</strong> (Airtime Fairness). Evita que un dispositivo antiguo o lento acapare el tiempo de antena del router. Asegura que todos los dispositivos tengan una oportunidad justa de transmitir, mejorando el rendimiento general de la red.</li>
</ul>
</li>



<li><strong>802.11ac Multi-User MIMO: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>Habilitar</code>.</li>



<li><strong>El porqué:</strong> Permite que el router se comunique con múltiples dispositivos (hasta 4) simultáneamente en la misma frecuencia, en lugar de ir uno por uno.</li>
</ul>
</li>



<li><strong>Beamforming explícito y Formación de haces universal: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>Habilitar</code>.</li>



<li><strong>El porqué:</strong> Dirige la señal WiFi directamente hacia tus dispositivos en lugar de emitirla en todas direcciones. Mejora la intensidad de la señal y el alcance.</li>
</ul>
</li>



<li><strong>Ajuste de la potencia de transmisión: Performance</strong>
<ul class="wp-block-list">
<li><strong>Cómo debe estar:</strong> <code>Performance</code> (Máximo).</li>



<li><strong>El porqué:</strong> Emite con la máxima potencia permitida. Como el 5 GHz tiene menos alcance que el 2.4 GHz, necesitas toda la potencia posible para cubrir bien tu hogar.</li>
</ul>
</li>
</ul>



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



<p class="wp-block-paragraph">Esta configuración de 5 GHz está orientada al <strong>máximo rendimiento</strong>. La elección del ancho de canal de 80 MHz, el uso de un canal DFS (100) para evitar la congestión, y la desactivación de la optimización AMPDU (para priorizar la baja latencia) harán que tu red esté muy por encima de la red estándar de fábrica.</p>



<p class="wp-block-paragraph">Si aplicas estos ajustes, tus consolas descargarán más rápido, tus películas en streaming no se pararán a cargar y la experiencia de navegación en general será mucho más fluida.</p>



<p class="wp-block-paragraph">¿Te han surgido dudas con alguno de los parámetros? ¡Déjamelo en los comentarios!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-configurar-tu-wifi-de-5-ghz-para-maximo-rendimiento-y-velocidad/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo configurar tu red Wifi 2,4Ghz en tu router Asus</title>
		<link>https://linuxete.duckdns.org/como-configurar-tu-red-wifi-24ghz-en-tu-router-asus/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-configurar-tu-red-wifi-24ghz-en-tu-router-asus</link>
					<comments>https://linuxete.duckdns.org/como-configurar-tu-red-wifi-24ghz-en-tu-router-asus/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 20:29:03 +0000</pubDate>
				<category><![CDATA[Domótica]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[Configuración de Router]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[WiFi 2.4 GHz]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4776</guid>

					<description><![CDATA[¿Tus dispositivos de domótica (Tapo, ESP8266, ESP32) se desconectan constantemente del WiFi? La culpa no siempre es del dispositivo, sino de los ajustes de fábrica de tu router. Descubre paso a paso cómo configurar los menús General y Profesional de la banda de 2,4 GHz para lograr una red estable, compatible y libre de caídas.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En cualquier hogar conectado, la banda de 2.4 GHz ha experimentado un cambio de paradigma: ha pasado de ser la autopista principal de datos a convertirse en el cimiento invisible de la domótica. Hoy en día, es la frecuencia que da vida a enchufes e interruptores inteligentes (como los Tapo), relés web, estaciones meteorológicas, inversores solares y dispositivos antiguos o <em>legacy</em>.</p>



<p class="wp-block-paragraph">Aunque el 5 GHz es indiscutiblemente más rápido, el 2.4 GHz sigue siendo el rey de la cobertura y la penetración de paredes. Sin embargo, es una banda muy ruidosa donde los microondas, el Bluetooth y los routers de tus vecinos compiten por el mismo espacio físico.</p>



<p class="wp-block-paragraph">Aquí es donde surge el problema. Los firmwares de routers modernos (como AsusWRT) vienen de fábrica con ciertos parámetros de optimización pensados para redes de alto rendimiento. Estas funciones avanzadas, sumadas a la saturación del entorno, suelen <strong>saturar o confundir a los microcontroladores más económicos</strong> (como los populares ESP8266, ESP32 o chips de domótica simple). El resultado: desconexiones aleatorias, bucles de reconexión infinitos o fallos al intentar emparejar un nuevo dispositivo.</p>



<p class="wp-block-paragraph">Dejar la configuración por defecto no es una opción si buscas una red sólida. En esta guía vamos a repasar paso a paso, y pantalla por pantalla, cada una de las opciones reales de los menús <strong>General</strong> y <strong>Professional</strong> de un router moderno. Utilizaremos una configuración real como ejemplo para explicarte no solo <em>qué</em> hace cada parámetro, sino <strong>por qué</strong> debes configurarlo de una manera específica para lograr una red de 2,4 GHz totalmente estable, reactiva y sin caídas.</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>Aviso:</strong> Es posible que algunos dispositivos IoT (como enchufes o cámaras) o equipos antiguos <strong>no detecten esta red de 2.4 GHz</strong> si no están bien configurados los canales o el modo inalámbrico. En los siguientes pasos explicamos cómo ajustar el router para evitar estos fallos de visibilidad.</p>
</blockquote>



<h3 class="wp-block-heading">Parte 1: Configuración General (Lo básico)</h3>



<p class="wp-block-paragraph">Esta es la primera pestaña que solemos ver. Aquí definimos la identidad y la seguridad de nuestra red.</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="762" height="665" src="https://linuxete.duckdns.org/wp-content/uploads/2026/10/wifi_2.4.png" alt="" class="wp-image-4777" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/10/wifi_2.4.png 762w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/wifi_2.4-300x262.png 300w" sizes="(max-width: 762px) 100vw, 762px" /></figure>



<ul class="wp-block-list">
<li><strong>Habilitar Smart Connect (conexión inteligente): OFF (Desactivado)</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Smart Connect unifica las redes de 2.4 GHz y 5 GHz bajo un mismo nombre, dejando que el dispositivo decida a cuál conectarse. En teoría suena bien, pero en la práctica, muchos dispositivos (especialmente los de domótica baratos) se confunden y se conectan al 5 GHz (que tiene menos alcance), desconectándose. <strong>Separar las bandas con nombres distintos (ej. MiRed_2.4G y MiRed_5G) te da control total.</strong></li>
</ul>
</li>



<li><strong>Banda:</strong> <code>2.4 GHz</code></li>



<li><strong>Nombre de red (SSID):</strong><code>Cronos_2.4G</code>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Es fundamental añadir el sufijo «_2.4G» para que tú y tu familia sepáis a qué red os estáis conectando.</li>
</ul>
</li>



<li><strong>Ocultar SSID: No</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Ocultar la red es un mito de seguridad. No evita que un hacker la encuentre, pero sí hace que tus dispositivos móviles gasten más batería buscándola desesperadamente y que tengas problemas para conectarte a nuevas redes.</li>
</ul>
</li>



<li><strong>Modo Inalámbrico: Automático (con Protección brg y Disable 11b activados)</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> El modo automático permite que el router use el estándar más alto posible (802.11n, ac o ax). Al marcar «Disable 11b» (Deshabilitar 11b), evitas que dispositivos obsoletos de hace 20 años ralenticen toda la red. La «Protección brg» (CTS-to-self) ayuda a que los dispositivos modernos no se pisen entre sí cuando hay dispositivos antiguos cerca.</li>
</ul>
</li>



<li><strong>Ancho de banda del canal: 20 MHz</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Este es <strong>el ajuste más importante de la guía</strong>. Aunque el router te ofrezca 40 MHz (para ir «más rápido»), en 2.4 GHz esto es un error. Hay muy poco espectro. Usar 40 MHz hace que tu señal se solape con la de tus vecinos, creando interferencias masivas. <strong>20 MHz garantiza estabilidad y menos latencia.</strong></li>
</ul>
</li>



<li><strong>Canal: 1 (o 6, u 11)</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> En 2.4 GHz los canales se solapan. Los únicos tres canales que no se pisan entre sí son el 1, el 6 y el 11. Lo ideal es usar una app como <em>WiFi Analyzer</em> en el móvil y elegir de estos tres el que esté más vacío.</li>
</ul>
</li>



<li><strong>Método de autenticación: WPA2-Personal</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Es el estándar de seguridad más compatible y seguro actualmente. (WPA3 es mejor, pero puede dar problemas con dispositivos IoT antiguos).</li>
</ul>
</li>



<li><strong>Cifrado WPA: AES</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> El cifrado TKIP está obsoleto. Usar AES es obligatorio para poder alcanzar las velocidades del estándar N. Además, tu contraseña se ve «Muy intensa», lo cual es perfecto.</li>
</ul>
</li>



<li><strong>Fotogramas de administración protegidos (PMF): Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Esta función (parte de WPA3) evita ataques de «desautenticación» (cuando alguien intenta desconectar tus dispositivos de la red). Si lo deshabilitas, ganas compatibilidad con dispositivos antiguos, aunque pierdes esa capa extra de seguridad. Si no tienes problemas, puedes probar a habilitarlo.</li>
</ul>
</li>



<li><strong>Intervalo de rotación de la clave de red: 3600</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> El router cambia la clave de cifrado interna cada 3600 segundos (1 hora). Esto es muy seguro y no afecta al rendimiento.</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Parte 2: Configuración Profesional (Avanzado)</h3>



<p class="wp-block-paragraph">Aquí es donde se separa a los aficionados de los expertos. Esta pestaña controla cómo el router gestiona el tráfico de radiofrecuencia.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="767" height="1024" src="https://linuxete.duckdns.org/wp-content/uploads/2026/10/wifi_2.4G-767x1024.png" alt="" class="wp-image-4778" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/10/wifi_2.4G-767x1024.png 767w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/wifi_2.4G-225x300.png 225w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/wifi_2.4G-768x1026.png 768w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/wifi_2.4G.png 778w" sizes="auto, (max-width: 767px) 100vw, 767px" /></figure>



<ul class="wp-block-list">
<li><strong>Habilitar radio: Sí</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Obvio, es el interruptor principal del WiFi.</li>
</ul>
</li>



<li><strong>Habilitar programador inalámbrico: No</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Te permitiría apagar el WiFi a ciertas horas (por ejemplo, por la noche). Útil si quieres ahorrar energía o controlar el uso de internet de los niños.</li>
</ul>
</li>



<li><strong>Definir AP aislado: No</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Si lo activaras, los dispositivos conectados al WiFi no podrían comunicarse entre sí (por ejemplo, tu móvil no podría controlar tus bombillas inteligentes). Solo se usa en redes de invitados.</li>
</ul>
</li>



<li><strong>Asistente para itinerancia: Habilitar (Desconectar clientes con RSSI inferior a: -70 dBm)</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Esta es una función de «Malla» (Mesh). Si tienes un dispositivo conectado al router con muy mala señal (por debajo de -70 dBm, que es un límite bastante estricto), el router lo desconectará a la fuerza para obligarlo a buscar una señal mejor (por ejemplo, conectarse a un repetidor o a un nodo Mesh cercano).</li>
</ul>
</li>



<li><strong>Bluetooth Coexistence: Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Si tienes dispositivos Bluetooth muy cerca del router (altavoces, auriculares), el WiFi y el Bluetooth se interfieren porque usan la misma frecuencia. Activarlo hace que el router «ceda el paso». Si no tienes problemas de interferencia Bluetooth, es mejor dejarlo deshabilitado para que el WiFi no pierda rendimiento.</li>
</ul>
</li>



<li><strong>Habilitar indagación IGMP: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Indispensable para gestionar el tráfico de «multidifusión» (Multicast). Si tienes IPTV (televisión por internet) o muchos dispositivos inteligentes, esto evita que el router inunde la red enviando paquetes a dispositivos que no los necesitan.</li>
</ul>
</li>



<li><strong>Tasa de multidifusión: Automático</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Deja que el router decida la velocidad para ese tráfico de multidifusión.</li>
</ul>
</li>



<li><strong>Tipo de preámbulo: Corto</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> El preámbulo es la «cabecera» de los paquetes de datos. Un preámbulo «Corto» (Short Preamble) es más eficiente y reduce la sobrecarga (overhead), mejorando ligeramente el rendimiento en redes modernas. Solo usa «Largo» si tienes dispositivos muy antiguos de 802.11b.</li>
</ul>
</li>



<li><strong>AMPDU RTS: Habilitar / Umbral RTS: 2347</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> El umbral RTS es el tamaño máximo de paquete que se puede enviar sin pedir permiso al aire. 2347 es el valor por defecto y está bien. Si tuvieras una red muy congestionada y con muchos microcortes, podrías bajarlo a 2304 para forzar al router a «pedir turno» antes de enviar paquetes grandes, evitando colisiones.</li>
</ul>
</li>



<li><strong>Intervalo DTIM: 3</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> El DTIM (Delivery Traffic Indication Message) indica a los dispositivos (como tu móvil) cada cuántos «beacons» (señales de baliza) deben despertar para ver si hay datos nuevos. Un valor de 3 significa que el móvil se puede dormir profundamente durante 3 ciclos, ahorrando batería. Si tienes problemas de notificaciones retrasadas en el móvil, bájalo a 2.</li>
</ul>
</li>



<li><strong>Intervalo de señalización: 100</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Cada cuántos milisegundos (ms) el router grita «¡Estoy aquí!» para que los dispositivos lo encuentren. 100 ms es el estándar perfecto.</li>
</ul>
</li>



<li><strong>¿Desea habilitar la ráfaga de transmisión? Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> (Frame Bursting). Permite al router enviar varios paquetes de datos seguidos sin soltar el control del aire, mejorando la velocidad de transferencia.</li>
</ul>
</li>



<li><strong>Habilitar WMM: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> (Wi-Fi Multimedia). Es un sistema de Calidad de Servicio (QoS). Prioriza el tráfico importante (como una videollamada o un juego online) sobre las descargas masivas. <strong>Sin WMM activado, tu WiFi no pasará de 54 Mbps.</strong></li>
</ul>
</li>



<li><strong>Habilitar WMM sin confirmación: Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Enviar datos «sin confirmación» es más rápido pero arriesgado (si el paquete se pierde, se pierde para siempre). Mejor mantenerlo deshabilitado para asegurar que los datos lleguen íntegros.</li>
</ul>
</li>



<li><strong>Habilitar WMM APSD: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> (Automatic Power Save Delivery). Ayuda a los dispositivos móviles a ahorrar batería al gestionar mejor cuándo pueden dormir y cuándo deben recibir datos.</li>
</ul>
</li>



<li><strong>Optimizar la agregación AMPDU: Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> La agregación AMPDU junta varios paquetes en uno solo para enviarlos. Aumenta la velocidad bruta, pero <strong>también aumenta la latencia (ping)</strong>. Como lo tienes deshabilitado, estás priorizando una conexión más reactiva (bueno para gaming), aunque si quieres maximizar la velocidad de descarga en 2.4GHz, podrías probar a habilitarlo.</li>
</ul>
</li>



<li><strong>Modulation Scheme (Esquema de modulación): Up to MCS 11 (NitroQAM/1024-QAM)</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Esto es tecnología Wi-Fi 6 aplicada a 2.4 GHz. Permite meter más datos en la misma onda. Está perfecto si tus dispositivos son modernos. Si tuvieras dispositivos que se desconectan, podrías bajarlo a MCS 9 (256-QAM).</li>
</ul>
</li>



<li><strong>Unidad de tiempo de emisión (TXOP): Deshabilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> El TXOP permite a un dispositivo acaparar el canal durante un tiempo determinado. En 2.4 GHz suele dar más problemas que beneficios, así que está bien deshabilitado.</li>
</ul>
</li>



<li><strong>802.11ac Multi-User MIMO: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> MU-MIMO permite al router hablar con varios dispositivos a la vez. Ojo: <em>El estándar 802.11ac es exclusivo de 5 GHz</em>. En 2.4 GHz esta opción técnicamente no hace nada, pero no molesta dejarla activada. En Wi-Fi 6 (802.11ax) sí que tiene efecto en 2.4 GHz.</li>
</ul>
</li>



<li><strong>Beamforming explícito y Formación de haces universal: Habilitar</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> En lugar de emitir la señal en todas direcciones (como una bombilla), el router detecta dónde está tu móvil y «dirige» un haz de señal concentrado directamente hacia él. Mejora el alcance y la velocidad.</li>
</ul>
</li>



<li><strong>Ajuste de la potencia de transmisión: Performance (Rendimiento)</strong>
<ul class="wp-block-list">
<li><strong>Por qué:</strong> Al ponerlo al máximo (Performance), el router emitirá con toda su potencia. Es lo ideal para cubrir toda la casa. (Nota: Si vives en un piso muy pequeño y la señal es tan fuerte que no te deja cambiar al 5 GHz, podrías bajarlo, pero por norma general, máximo es mejor).</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Resumen de la configuración recomendada</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Parámetro</strong></td><td><strong>Configuración Estándar</strong></td><td><strong>Ajuste Recomendado</strong></td><td><strong>Motivo Principal</strong></td></tr></thead><tbody><tr><td><strong>Ancho de banda</strong></td><td>20/40 MHz</td><td><strong>20 MHz</strong></td><td>Elimina interferencias de redes vecinas.</td></tr><tr><td><strong>Soporte 802.11b</strong></td><td>Habilitado</td><td><strong><code>Disable 11b</code> (Marcado)</strong></td><td>Elimina protocolos obsoletos y lentos.</td></tr><tr><td><strong>Canal</strong></td><td>Auto</td><td><strong>1, 6 o 11 (Fijo)</strong></td><td>Evita desconexiones por saltos de frecuencia.</td></tr><tr><td><strong>Airtime Fairness</strong></td><td>Habilitado</td><td><strong>DESHABILITADO</strong></td><td><strong>Solución definitiva para desconexiones en domótica/Tapo.</strong></td></tr><tr><td><strong>Tipo de preámbulo</strong></td><td>Largo</td><td><strong>Corto</strong></td><td>Reduce la sobrecarga y mejora la latencia.</td></tr><tr><td><strong>Bluetooth Coexistence</strong></td><td>Deshabilitar</td><td><strong>Habilitar</strong> <em>(si hay BT cerca)</em></td><td>Previene colisiones de paquetes con Bluetooth.</td></tr></tbody></table></figure>



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



<p class="wp-block-paragraph">Como has visto, cada ajuste tiene su justificación. Esta configuración es ideal si priorizas la estabilidad frente a la velocidad bruta (ancho de canal de 20 MHz), evitas dispositivos obsoletos (11b deshabilitado) y mantienes la seguridad actualizada (WPA2/AES).</p>



<p class="wp-block-paragraph">Si aplicas estos ajustes, tu red de 2,4 GHz dejará de ser ese «WiFi lento» que todos evitan y se convertirá en una red sólida, fiable y con una cobertura excelente en todos los rincones del hogar.</p>



<p class="wp-block-paragraph">Con estos ajustes en AsusWRT, la banda de 2,4 GHz se convierte en una red muy robusta: eliminamos algoritmos innecesarios que saturan microcontroladores de recursos limitados y garantizamos la máxima estabilidad para la domótica del hogar.</p>



<p class="wp-block-paragraph">¿Tienes dudas sobre algún otro parámetro de tu router? Déjalas en los comentarios.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-configurar-tu-red-wifi-24ghz-en-tu-router-asus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo instalar Transmission Daemon en Debian 13 y MX Linux 25</title>
		<link>https://linuxete.duckdns.org/como-instalar-transmission-daemon-en-debian-13-y-mx-linux-25/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-instalar-transmission-daemon-en-debian-13-y-mx-linux-25</link>
					<comments>https://linuxete.duckdns.org/como-instalar-transmission-daemon-en-debian-13-y-mx-linux-25/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sat, 17 Oct 2026 14:09:17 +0000</pubDate>
				<category><![CDATA[Torrent]]></category>
		<category><![CDATA[Debian 13]]></category>
		<category><![CDATA[MX Linux]]></category>
		<category><![CDATA[Systemd]]></category>
		<category><![CDATA[transmission]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4751</guid>

					<description><![CDATA[Guía actualizada para instalar y configurar Transmission Daemon en Debian 13 (Trixie) y MX Linux 25. Aprende a evitar la versión beta de los repositorios oficiales, arreglar el problema de Type=notify en systemd, aplicar hardening al servicio y configurar el acceso web con autenticación. Todo paso a paso y con las dos rutas de instalación según tu sistema.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Transmission es una de las opciones más ligeras y eficientes para gestionar torrents en un servidor casero, una Raspberry Pi o un centro de descargas 24/7. Su versión <strong>daemon</strong> está pensada para ejecutarse en segundo plano y controlarla desde su interfaz web o cualquier cliente remoto.</p>



<p class="wp-block-paragraph">Esta guía está actualizada para <strong>Debian 13 (Trixie)</strong> y <strong>MX Linux 25</strong>, y tiene en cuenta los cambios importantes que han llegado con la versión 4.x de Transmission. Si seguiste la guía <a href="https://linuxete.duckdns.org/como-iniciar-transmission-daemon-con-systemd/">Inicia transmission-daemon con systemd en Debian 12</a>, es muy probable que te hayas encontrado con que el servicio no arranca correctamente. Aquí te explico paso a paso cómo hacerlo bien, con las mejores prácticas actuales y <strong>dos rutas de instalación según tu sistema operativo</strong>.</p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1. Instalación del paquete (elige tu ruta)</h2>



<p class="wp-block-paragraph">Lo primero es actualizar la lista de paquetes.</p>



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



<p class="wp-block-paragraph">A partir de aquí, el procedimiento cambia según el sistema que uses.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ruta A: Debian 13 puro o Raspberry Pi OS (Trixie) → usa backports</h3>



<p class="wp-block-paragraph">Este es el punto más importante y el que más confusiones genera. <strong>Debian 13 incluye en sus repositorios principales una versión beta de Transmission</strong>, concretamente la <code>4.1.0~beta2</code>. Si instalas el paquete sin más, <code>apt</code> te dará esa beta, que arrastra errores conocidos y puede provocar cuelgues inesperados o problemas al guardar la configuración.</p>



<p class="wp-block-paragraph">La solución oficial es instalar la versión estable desde los <strong>backports</strong> de Debian 13. Allí encontrarás la <strong>versión 4.1.3</strong>, que corrige los problemas de la beta y añade parches importantes. Además, esta versión evita un problema conocido de las versiones 4.1.0 y 4.1.1 que provocaba que algunos trackers bloquearan al cliente por un flujo excesivo de peticiones.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>“Nota para Raspberry Pi OS: aunque los backports de Debian funcionan en la arquitectura <code>arm64</code>, esta combinación no está soportada oficialmente por la Fundación Raspberry Pi. Úsala bajo tu propio riesgo y, si puedes, haz una copia de seguridad antes.”</em></p>
</blockquote>



<p class="wp-block-paragraph"><strong>Paso 1:</strong> Añade el repositorio de backports (si no lo tienes ya).</p>



<pre class="wp-block-code"><code>echo "deb http://ftp.de.debian.org/debian trixie-backports main" | sudo tee /etc/apt/sources.list.d/backports.list
sudo apt update</code></pre>



<p class="wp-block-paragraph"><strong>Paso 2:</strong> Instala el paquete indicando explícitamente que quieres la versión de backports.</p>



<pre class="wp-block-code"><code>sudo apt install -t trixie-backports transmission-daemon</code></pre>



<p class="wp-block-paragraph">Esta es la opción <strong>más recomendada</strong> si usas Debian 13 o Raspberry Pi OS.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ruta B: MX Linux 25 → instala directamente</h3>



<p class="wp-block-paragraph">Si usas <strong>MX Linux 25</strong> (basado en Debian 13), la situación es mucho más sencilla. MX Linux empaqueta su propia versión de Transmission en su repositorio, y la versión actual (<code>4.1.0+dfsg-1~mx25+1</code>) <strong>ya es estable, no es una beta</strong>. No necesitas añadir los backports de Debian, ya que podrías crear conflictos de paquetes con el sistema de MX.</p>



<p class="wp-block-paragraph">Simplemente instala el paquete con normalidad:</p>



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



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Importante:</strong> No mezcles repositorios. Si usas MX Linux, mantente dentro de sus repositorios oficiales. Si usas Debian puro, usa los backports de Debian. Mezclar ambos puede romper dependencias.</p>
</blockquote>



<h2 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;" /> 2. El paso crítico: arreglar el servicio systemd</h2>



<p class="wp-block-paragraph">Aquí está el cambio más importante respecto a guías anteriores, y <strong>afecta tanto a Debian 13 como a MX Linux 25</strong>. La unidad de systemd que viene por defecto usa <code>Type=notify</code>, pero con Transmission 4.x esto ya no funciona bien. El demonio se inicia correctamente, pero no notifica a systemd cuando está listo, por lo que systemd cree que ha fallado y acaba matándolo tras un tiempo de espera (<code>timeout</code>).</p>



<p class="wp-block-paragraph">La solución es crear un archivo de <strong>override</strong> (anulación) para cambiar el tipo de servicio a <code>simple</code>, sin tocar el archivo original del sistema. Es un procedimiento limpio y persistente que sobrevive a las actualizaciones del paquete.</p>



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



<pre class="wp-block-code"><code>sudo systemctl edit transmission-daemon.service</code></pre>



<p class="wp-block-paragraph">Se abrirá un editor. Añade las siguientes líneas:</p>



<pre class="wp-block-code"><code>&#91;Service]
Type=simple</code></pre>



<p class="wp-block-paragraph">Guarda y cierra. Luego recarga systemd para que aplique el cambio:</p>



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



<p class="wp-block-paragraph">Con esto, el servicio ya debería arrancar y mantenerse activo sin problemas.</p>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. Endurecimiento (hardening) del servicio</h2>



<p class="wp-block-paragraph">Transmission 4.x ya incluye algunas opciones de seguridad por defecto, pero podemos añadir más capas de protección. Un demonio que acepta conexiones de red siempre es un objetivo interesante, así que vale la pena blindarlo un poco.</p>



<p class="wp-block-paragraph">Vuelve a abrir el editor de override:</p>



<pre class="wp-block-code"><code>sudo systemctl edit transmission-daemon.service</code></pre>



<p class="wp-block-paragraph">Y añade estas directivas de seguridad dentro de la sección <code>[Service]</code>, <strong>junto al <code>Type=simple</code> que ya pusiste</strong>:</p>



<pre class="wp-block-code"><code># Hardening
NoNewPrivileges=true
PrivateTmp=true
PrivateDevices=true
ProtectSystem=full
ProtectHome=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictRealtime=true</code></pre>



<h3 class="wp-block-heading">¿Qué hace cada directiva?</h3>



<p class="wp-block-paragraph">Cada línea del bloque anterior es una capa de aislamiento que systemd aplica al proceso de Transmission. Ninguna es imprescindible por sí sola, pero juntas reducen drásticamente lo que un atacante podría hacer si encontrara una vulnerabilidad en el demonio.</p>



<ul class="wp-block-list">
<li><strong><code>NoNewPrivileges=true</code></strong>: Impide que el proceso (o cualquiera de sus hijos) pueda obtener privilegios adicionales a través de <code>execve()</code>, como los bits <code>setuid</code>/<code>setgid</code> o las <em>capabilities</em> del sistema de archivos. Es una de las protecciones más básicas y efectivas.<a href="https://www.kicksecure.com/wiki/Systemd" target="_blank" rel="noopener"></a></li>



<li><strong><code>PrivateTmp=true</code></strong>: Crea directorios <code>/tmp</code> y <code>/var/tmp</code> privados para el servicio, aislados del resto del sistema. Así, otros procesos no pueden leer ni manipular los archivos temporales que genere Transmission.<a href="https://www.kicksecure.com/wiki/Systemd" target="_blank" rel="noopener"></a></li>



<li><strong><code>PrivateDevices=true</code></strong>: Proporciona un sistema de archivos <code>/dev</code> mínimo y privado, con solo los dispositivos pseudo-API esenciales (<code>/dev/null</code>, <code>/dev/zero</code>, etc.). El servicio pierde acceso a discos, cámaras, GPUs y cualquier otro dispositivo físico real.</li>



<li><strong><code>ProtectSystem=full</code></strong>: Monta <code>/usr</code>, <code>/boot</code> y <code>/efi</code> como solo lectura, y además hace lo mismo con <code>/etc</code>. Esto significa que el proceso no puede modificar los binarios del sistema ni la configuración global, limitando el daño si se ve comprometido.</li>



<li><strong><code>ProtectHome=true</code></strong>: Hace que los directorios <code>/home</code> y <code>/run/user</code> sean completamente inaccesibles para el servicio. Es la directiva que ya te advertí que puede chocar con tus rutas de descarga si están dentro de una carpeta personal.</li>



<li><strong><code>ProtectKernelTunables=true</code></strong>: Hace que las variables del kernel expuestas en <code>/proc/sys/</code>, <code>/sys/</code> y rutas similares sean de solo lectura para el proceso. Evita que Transmission pueda alterar parámetros críticos del sistema en tiempo de ejecución.<a href="https://www.kicksecure.com/wiki/Systemd" target="_blank" rel="noopener"></a></li>



<li><strong><code>ProtectKernelModules=true</code></strong>: Deniega explícitamente la carga y descarga de módulos del kernel. Un cliente de torrents no necesita cargar controladores, así que esto cierra una vía de escalada de privilegios.<a href="https://www.kicksecure.com/wiki/Systemd" target="_blank" rel="noopener"></a></li>



<li><strong><code>ProtectControlGroups=true</code></strong>: Hace que la jerarquía de <code>cgroups</code> (<code>/sys/fs/cgroup</code>) sea de solo lectura para el servicio. Impide que el proceso manipule los grupos de control del sistema, que son un mecanismo habitual para intentar escapar de un contenedor o de un sandbox.<a href="https://www.kicksecure.com/wiki/Systemd" target="_blank" rel="noopener"></a></li>



<li><strong><code>RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6</code></strong>: Limita los tipos de sockets que el proceso puede crear. Solo se permiten tres familias: <code>AF_UNIX</code> (comunicación local), <code>AF_INET</code> (IPv4) y <code>AF_INET6</code> (IPv6). Se bloquean así familias más exóticas como <code>AF_PACKET</code> (acceso a paquetes en crudo), que a menudo se usan en exploits.</li>



<li><strong><code>RestrictRealtime=true</code></strong>: Rechaza cualquier intento de activar políticas de planificación en tiempo real (<code>SCHED_FIFO</code>, <code>SCHED_RR</code>, etc.). Un cliente de torrents no necesita prioridad de tiempo real, y permitirla podría usarse para agotar la CPU y afectar al resto del sistema.<a href="https://www.kicksecure.com/wiki/Systemd" target="_blank" rel="noopener"></a></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Notas</strong>:<br><code><strong>ProtectSystem=full</strong></code> es un buen equilibrio para Transmission: protege las rutas del sistema pero deja escribibles <code>/var</code> y <code>/srv</code>, donde podrías tener tus descargas. Si prefieres un aislamiento aún mayor y tus descargas están en un disco externo montado aparte, podrías probar <code>ProtectSystem=strict</code>, que monta todo el árbol de archivos como solo lectura salvo <code>/dev</code>, <code>/proc</code> y <code>/sys</code>. Requiere ajustar permisos con <code>ReadWritePaths</code> para las carpetas de descarga.</p>



<p class="wp-block-paragraph"><strong><code>ProtectHome=true</code>:</strong> esta opción impide el acceso a los directorios dentro de <code>/home</code>. Si tus descargas van a una carpeta en tu <code>home</code>, tendrás que ajustar esta opción o usar <code>BindPaths</code> para dar acceso solo a la carpeta concreta. Si tus descargas van a un disco externo montado en <code>/mnt</code>, <code>/srv</code> o similar, no habrá problema.</p>



<p class="wp-block-paragraph"><code><strong><em>NoNewPrivileges=true</em>:</strong></code> Impedirá que Transmission ejecute scripts (por ejemplo, para enviar notificaciones) En ese caso, tendrás que ponerlo a false en el override o buscar una alternativa externa.</p>
</blockquote>



<p class="wp-block-paragraph">Guarda, recarga:</p>



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



<p class="wp-block-paragraph">y luego reinicia:</p>



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



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4. Configuración básica (<code>settings.json</code>)</h2>



<p class="wp-block-paragraph">El archivo de configuración principal está en <code>/etc/transmission-daemon/settings.json</code>. <strong>Nunca lo edites con el servicio en marcha</strong>, porque Transmission sobrescribirá tus cambios al apagarse. Sigue siempre este orden:</p>



<p class="wp-block-paragraph">Para el servicio con:</p>



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



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



<pre class="wp-block-code"><code>sudo nano /etc/transmission-daemon/settings.json</code></pre>



<p class="wp-block-paragraph">Aquí tienes las opciones más importantes que deberías revisar.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Directorios de descarga</h3>



<p class="wp-block-paragraph">Busca las líneas <code>download-dir</code> y, si quieres, <code>incomplete-dir</code>:</p>



<pre class="wp-block-code"><code>"download-dir": "/ruta/a/tus/descargas",
"incomplete-dir": "/ruta/a/tus/descargas/incompletos",
"incomplete-dir-enabled": true,</code></pre>



<p class="wp-block-paragraph">Si prefieres que los archivos se descarguen directamente a su destino final, pon <code>"incomplete-dir-enabled": false</code>.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Interfaz web (RPC)</h3>



<p class="wp-block-paragraph">Para poder controlar Transmission desde el navegador o un cliente remoto, necesitas configurar el RPC. Este es un punto crítico de seguridad: <strong>no expongas el RPC sin autenticación</strong>.</p>



<pre class="wp-block-code"><code>"rpc-enabled": true,
"rpc-bind-address": "0.0.0.0",
"rpc-port": 9091,
"rpc-whitelist-enabled": true,
"rpc-whitelist": "127.0.0.1,192.168.1.*",
"rpc-authentication-required": true,
"rpc-username": "tu_usuario",
"rpc-password": "tu_contraseña",</code></pre>



<h3 class="wp-block-heading">¿Qué hace cada directiva de la interfaz web (RPC)?</h3>



<p class="wp-block-paragraph">Estas opciones controlan cómo se accede a Transmission de forma remota, ya sea desde el navegador o mediante herramientas como <code>transmission-remote</code>. Configurarlas bien es clave para no exponer el servicio sin protección.</p>



<ul class="wp-block-list">
<li><strong><code>"rpc-enabled": true</code></strong><br>Activa o desactiva por completo el servidor RPC (la interfaz de control remoto). Si está en <code>false</code>, nadie podrá conectarse a Transmission desde fuera, aunque el resto de opciones estén configuradas. Es el interruptor maestro.<a href="https://guix.gnu.org/sv/manual/devel/pt-br/guix.pt_BR.pdf#111#64" target="_blank" rel="noopener"></a></li>



<li><strong><code>"rpc-bind-address": "0.0.0.0"</code></strong><br>Define en qué dirección IP de tu máquina “escucha” el servidor RPC. Con <code>"0.0.0.0"</code> escucha en todas las interfaces de red disponibles. Si solo quieres acceso local, usa <code>"127.0.0.1"</code>. Si usas WireGuard, aquí deberías poner la IP de tu interfaz VPN (por ejemplo, <code>"10.0.0.1"</code>).<a href="https://guix.gnu.org/sv/manual/devel/pt-br/guix.pt_BR.pdf#111#64" target="_blank" rel="noopener"></a></li>



<li><strong><code>"rpc-port": 9091</code></strong><br>Es el puerto de red que Transmission usará para el RPC. El valor <code>9091</code> es el estándar, pero puedes cambiarlo si tienes conflictos con otro servicio. Si lo cambias, recuerda usar el nuevo puerto al acceder desde el navegador.<a href="https://guix.gnu.org/sv/manual/devel/pt-br/guix.pt_BR.pdf#111#64" target="_blank" rel="noopener"></a></li>



<li><strong><code>"rpc-whitelist-enabled": true</code></strong><br>Activa o desactiva la “lista blanca” de direcciones IP. Si está en <code>true</code>, solo las IPs que aparezcan en <code>rpc-whitelist</code> podrán conectarse. Es una capa de seguridad importante, incluso si tienes autenticación activada.<a href="https://guix.gnu.org/sv/manual/devel/pt-br/guix.pt_BR.pdf#111#64" target="_blank" rel="noopener"></a></li>



<li><strong><code>"rpc-whitelist": "127.0.0.1,192.168.1.*"</code></strong><br>Es la lista de IPs o rangos de IP permitidos. Admite comodines con <code>*</code>. En el ejemplo, se permite el acceso desde la propia máquina (<code>127.0.0.1</code>) y desde cualquier dispositivo de la red local <code>192.168.1.x</code>. <strong>Nunca uses <code>"*"</code></strong> si el servicio es accesible desde internet.<a href="https://trac.transmissionbt.com/wiki/EditConfigFilesBeta?version=7#L1" target="_blank" rel="noopener"></a></li>



<li><strong><code>"rpc-authentication-required": true</code></strong><br>Obliga a que los clientes se identifiquen con un usuario y contraseña para poder usar el RPC. Es <strong>imprescindible</strong> si vas a acceder desde fuera de tu red local o a través de una VPN, porque la whitelist por sí sola no protege contra alguien que ya esté dentro de tu red (o que falsifique una IP).<a href="https://guix.gnu.org/sv/manual/devel/pt-br/guix.pt_BR.pdf#111#64" target="_blank" rel="noopener"></a></li>



<li><strong><code>"rpc-username": "tu_usuario"</code></strong><br>El nombre de usuario que se pedirá en el formulario de acceso. Elige uno que no sea obvio (evita <code>admin</code> o <code>transmission</code>).<a href="https://guix.gnu.org/sv/manual/devel/pt-br/guix.pt_BR.pdf#111#64" target="_blank" rel="noopener"></a></li>



<li><strong><code>"rpc-password": "tu_contraseña"</code></strong><br>La contraseña asociada a ese usuario. <strong>Importante</strong>: puedes escribirla en texto plano en el archivo, pero Transmission la <strong>cifrará automáticamente</strong> la primera vez que arranque el servicio. A partir de ese momento, en <code>settings.json</code> verás una cadena con un <code>{</code> al principio, no tu contraseña original. Por eso es crucial que hagas los cambios con el servicio detenido: si lo editas mientras corre, al apagarse sobrescribirá el archivo y perderás los cambios.<a href="https://guix.gnu.org/sv/manual/devel/pt-br/guix.pt_BR.pdf#111#64" target="_blank" rel="noopener"></a><a href="https://github-wiki-see.page/m/jgalat/remote-app/wiki/Transmission#1" target="_blank" rel="noopener"></a></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em><strong>Un detalle sobre la seguridad</strong>: la combinación de <code>rpc-whitelist</code> + <code>rpc-authentication-required</code> es la que te da una protección real. La whitelist filtra por origen, y la autenticación añade una barrera incluso si alguien logra saltarse ese filtro (por ejemplo, desde dentro de tu propia red). Para acceso remoto, la opción más segura sigue siendo <strong>WireGuard</strong>, como explicamos en la sección 6.b.</em></p>



<p class="wp-block-paragraph"><em>Si vas a acceder a través de WireGuard (ver sección 6), es más seguro cambiar <code>rpc-bind-address</code> por la IP de tu interfaz VPN (por ejemplo, <code>"10.0.0.1"</code>) en lugar de <code>"0.0.0.0"</code>. Lo explico en detalle en el apartado 6.b.</em></p>
</blockquote>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Otras opciones útiles</h3>



<pre class="wp-block-code"><code>"ratio-limit": 2.0,
"ratio-limit-enabled": true,
"idle-seeding-limit": 30,
"idle-seeding-limit-enabled": true,
"speed-limit-up": 1000,
"speed-limit-up-enabled": true,</code></pre>



<h3 class="wp-block-heading">¿Qué hace cada directiva de límites?</h3>



<p class="wp-block-paragraph">Estas opciones controlan el comportamiento de Transmission una vez que un torrent ha terminado de descargarse, y también cuánto ancho de banda puede usar. Son fundamentales para mantener tu equipo bajo control y no saturar la conexión.</p>



<ul class="wp-block-list">
<li><strong><code>"ratio-limit": 2.0</code></strong><br>Define la <strong>proporción de subida</strong> (ratio) a la que se dejará de sembrar un torrent. El ratio se calcula dividiendo los datos subidos entre los datos descargados. Un valor de <code>2.0</code> significa que subirás el doble de lo que has descargado. Un ratio de <code>1.0</code> es el mínimo para ser un “buen ciudadano” en la red BitTorrent; <code>2.0</code> se considera un buen equilibrio. Por defecto, si no se activa, los torrents se siembran indefinidamente.<a href="https://trac.transmissionbt.com/wiki/MovedToGitHub/ConfigurationParameters?version=4" target="_blank" rel="noopener"></a></li>



<li><strong><code>"ratio-limit-enabled": true</code></strong><br>Activa o desactiva el límite de ratio. Si está en <code>true</code>, el torrent se pausará automáticamente cuando alcance el valor de <code>ratio-limit</code>. Si está en <code>false</code>, el límite se ignora y el torrent seguirá sembrando sin fin (a menos que actúen otros límites como el de inactividad).<a href="https://guix.gnu.org/manual/devel/en/guix.pdf#128#70" target="_blank" rel="noopener"></a></li>



<li><strong><code>"idle-seeding-limit": 30</code></strong><br>Establece el <strong>tiempo máximo de inactividad</strong> (en minutos) que un torrent puede estar sembrando sin subir datos antes de ser pausado. <code>30</code> minutos es un valor razonable para liberar recursos de torrents que ya no interesan a nadie.<a href="https://guix.gnu.org/manual/devel/en/guix.pdf#128#70" target="_blank" rel="noopener"></a></li>



<li><strong><code>"idle-seeding-limit-enabled": true</code></strong><br>Activa o desactiva el límite por inactividad. Si está en <code>true</code>, se aplica el tiempo definido en <code>idle-seeding-limit</code>. Si está en <code>false</code>, el torrent puede estar sembrando sin actividad indefinidamente, sin pausarse por este motivo.<a href="https://guix.gnu.org/manual/devel/en/guix.pdf#128#70" target="_blank" rel="noopener"></a></li>



<li><strong><code>"speed-limit-up": 1000</code></strong><br>Define la <strong>velocidad máxima de subida</strong> en <strong>kilobytes por segundo (KB/s)</strong>. El valor <code>1000</code> equivale aproximadamente a 1 MB/s. Este límite solo se aplica si <code>speed-limit-up-enabled</code> está activado. Es útil para evitar que Transmission acapare todo el ancho de banda de subida de tu conexión y afecte a otros servicios.<a href="https://trac.transmissionbt.com/wiki/MovedToGitHub/ConfigurationParameters?version=4" target="_blank" rel="noopener"></a></li>



<li><strong><code>"speed-limit-up-enabled": true</code></strong><br>Activa o desactiva el límite de velocidad de subida. Si está en <code>true</code>, la velocidad de subida se limitará al valor de <code>speed-limit-up</code>. Si está en <code>false</code>, la subida será ilimitada (hasta el máximo que permita tu conexión y los peers).<a href="https://trac.transmissionbt.com/wiki/MovedToGitHub/ConfigurationParameters?version=4" target="_blank" rel="noopener"></a></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Un detalle importante</strong>: <code>ratio-limit</code> e <code>idle-seeding-limit</code> pueden entrar en conflicto. Si un torrent alcanza el ratio límite, se pausa por ratio; si deja de subir datos, se pausa por inactividad. El primero en alcanzarse es el que se aplica. Configurar ambos te da un control más fino sobre cuándo deja de sembrar Transmission.</p>
</blockquote>



<p class="wp-block-paragraph">Cuando termines de editar, guarda el archivo y arranca el servicio de nuevo:</p>



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



<h2 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;" /> 5. Gestión del servicio</h2>



<p class="wp-block-paragraph">Ahora que todo está configurado, estos son los comandos que usarás habitualmente:</p>



<pre class="wp-block-code"><code># Ver el estado del servicio
sudo systemctl status transmission-daemon

# Detenerlo
sudo systemctl stop transmission-daemon

# Reiniciarlo (por ejemplo, tras editar settings.json)
sudo systemctl restart transmission-daemon</code></pre>



<p class="wp-block-paragraph">Si quieres que se inicie automáticamente al arrancar el sistema:</p>



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



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f513.png" alt="🔓" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 6. Acceso remoto a la interfaz web: router vs. WireGuard</h2>



<p class="wp-block-paragraph">Por defecto, la interfaz web de Transmission (el RPC) solo escucha en <code>127.0.0.1</code>, lo que significa que solo es accesible desde la propia Raspberry Pi. Para poder controlarlo desde otro dispositivo, tienes dos caminos: </p>



<ul class="wp-block-list">
<li><strong>6.a. Exponer el puerto a internet</strong>, Abrir el puerto 9091 en el router.</li>



<li><strong>6.b. Acceder a través de una VPN</strong>. Acceder a través de tu VPN WireGuard.<br>La diferencia en seguridad entre ambos es enorme.</li>
</ul>



<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;" /> 6.a. Abrir el puerto 9091 en el router (no recomendado)</h3>



<p class="wp-block-paragraph">Esta es la vía rápida y la que usaban muchas guías antiguas. Consiste en hacer que Transmission escuche en todas las interfaces y redirigir el puerto 9091 en tu router para que sea accesible desde fuera de tu red local.</p>



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



<p class="wp-block-paragraph">Detén el servicio con:</p>



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



<p class="wp-block-paragraph">Modifica el archivo <code>settings.json</code>:</p>



<pre class="wp-block-code"><code>sudo nano /etc/transmission-daemon/settings.json</code></pre>



<p class="wp-block-paragraph">cambia <code>rpc-bind-address</code> para que escuche en todas las interfaces: </p>



<pre class="wp-block-code"><code><code>"rpc-bind-address": "0.0.0.0",</code></code></pre>



<p class="wp-block-paragraph">La <code>rpc-whitelist</code> es tu única barrera si expones el puerto. Si tu IP pública es dinámica, tendrías que añadirla manualmente cada vez, o <strong>desactivar la whitelist por completo</strong> (<code>"rpc-whitelist-enabled": false</code>), lo cual es muy peligroso. Una alternativa algo más segura es mantener la whitelist activada con los rangos de tu red local y añadir tu IP pública actual, pero no es una solución estable.</p>



<p class="wp-block-paragraph">Guarda, arranca el servicio </p>



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



<p class="wp-block-paragraph">Ahora redirige el puerto <strong>9091/TCP</strong> en tu router hacia la IP local de la Raspberry Pi. La forma exacta depende de cada modelo de router.</p>



<p class="wp-block-paragraph">Accede desde fuera con </p>



<pre class="wp-block-code"><code><code>http://tu-dominio.duckdns.org:9091 (o tu IP pública).</code></code></pre>



<p class="wp-block-paragraph"><strong>¿Por qué no te lo recomiendo?</strong></p>



<ul class="wp-block-list">
<li><strong>Transmission habla HTTP en texto plano</strong> por defecto. Tus credenciales de acceso viajan sin cifrar. Cualquiera que intercepte el tráfico (tu operadora, un WiFi público, un atacante en tu misma red) puede leer tu usuario y contraseña.</li>



<li><strong>Los bots escanean internet constantemente.</strong> En cuanto el puerto 9091 esté abierto, empezarás a recibir intentos de login automatizados. Transmission tiene autenticación, pero no está diseñado para estar expuesto directamente a internet.</li>



<li><strong>Superficie de ataque directa.</strong> Cualquier vulnerabilidad que se descubra en el RPC de Transmission quedará expuesta sin ninguna capa intermedia que filtre.</li>
</ul>



<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;" /> 6.b. Acceder a través de tu VPN WireGuard (recomendado)</h3>



<p class="wp-block-paragraph">Esta es la opción que yo mismo uso y la que te recomiendo sin dudarlo. Si ya tienes montada una VPN WireGuard en tu Raspberry Pi —como expliqué en la entrada <a href="https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/">WireGuard en Raspberry Pi: VPN casera, segura y gratuita</a>—, ya tienes hecha la mitad del trabajo. La idea es muy sencilla: en lugar de exponer Transmission a internet, te conectas primero a tu VPN y luego accedes a la interfaz web como si estuvieras dentro de tu red local. Todo el tráfico viaja cifrado por el túnel de WireGuard.</p>



<p class="wp-block-paragraph"><strong>Ventajas frente a abrir el puerto:</strong></p>



<ul class="wp-block-list">
<li><strong>Cifrado de extremo a extremo.</strong> Todo el tráfico entre tu dispositivo y la Raspberry Pi viaja cifrado por WireGuard.</li>



<li><strong>No expones ningún servicio a internet.</strong> Transmission sigue escuchando únicamente en la interfaz de la VPN. Los bots y escáneres no tienen nada a lo que atacar.</li>



<li><strong>Una sola puerta de entrada.</strong> Ya tienes WireGuard como punto de acceso seguro a tu red doméstica. Aprovecharlo para Transmission es lo lógico.</li>



<li><strong>Funciona desde cualquier dispositivo:</strong> móvil, portátil, tablet… Solo necesitas el cliente WireGuard y tu configuración.</li>
</ul>



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



<p class="wp-block-paragraph">Conéctate a tu VPN desde el dispositivo que vayas a usar.</p>



<p class="wp-block-paragraph">Detén el servicio con:</p>



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



<p class="wp-block-paragraph">En <code>settings.json</code></p>



<pre class="wp-block-code"><code>sudo nano /etc/transmission-daemon/settings.json</code></pre>



<p class="wp-block-paragraph"> Haz que Transmission escuche en la IP de la interfaz de la VPN. Si tu servidor WireGuard usa la IP <code>10.0.0.1</code>, la configuración sería: </p>



<pre class="wp-block-code"><code><code>"rpc-bind-address": "10.0.0.1",</code></code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota:</strong> Podrías usar <code>"0.0.0.0"</code> para escuchar en todas las interfaces, pero limitarlo a la IP de la VPN es más seguro, porque la única vía de acceso será el túnel. El inconveniente es que no podrás entrar localmente desde dispositivos que estén fuera de la VPN.</p>
</blockquote>



<p class="wp-block-paragraph">Ajusta la <code>rpc-whitelist</code> para permitir las IPs de tus clientes VPN. Si tu subred de WireGuard es <code>10.0.0.0/24</code>, puedes usar un comodín: </p>



<pre class="wp-block-code"><code><code>"rpc-whitelist": "10.0.0.*",</code></code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota: También puedes incluir <code>127.0.0.1</code> por si en algún momento necesitas acceso local: <code>"rpc-whitelist": "127.0.0.1,10.0.0.*",</code></p>
</blockquote>



<p class="wp-block-paragraph">Guarda el archivo, arranca el servicio: </p>



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



<p class="wp-block-paragraph">Accede desde el navegador, ya conectado a la VPN, con la dirección privada de tu Raspberry Pi: </p>



<pre class="wp-block-code"><code><code>http://10.0.0.1:9091</code></code></pre>



<p class="wp-block-paragraph">Introduce tus credenciales y tendrás acceso completo a la interfaz web de Transmission. Al ir todo por el túnel de WireGuard, la velocidad dependerá de tu conexión, pero para gestionar descargas y añadir torrents es más que suficiente.</p>



<h2 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;" /> 7. Solución de problemas comunes</h2>



<h3 class="wp-block-heading">El servicio no arranca y da un <code>timeout</code></h3>



<p class="wp-block-paragraph">Ya lo hemos solucionado en el paso 2, pero si te encuentras con esto en otro equipo, la causa casi seguro es el <code>Type=notify</code>. Verifica que tu archivo de override esté correctamente aplicado:</p>



<pre class="wp-block-code"><code>systemctl cat transmission-daemon.service</code></pre>



<p class="wp-block-paragraph">Deberías ver tu <code>override.conf</code> con <code>Type=simple</code> al final de la salida.</p>



<h3 class="wp-block-heading">Error de permisos en <code>settings.json</code></h3>



<p class="wp-block-paragraph">A veces, el usuario <code>debian-transmission</code> no tiene permisos suficientes sobre el archivo. Verifícalo:</p>



<pre class="wp-block-code"><code>ls -la /etc/transmission-daemon/settings.json</code></pre>



<p class="wp-block-paragraph">El propietario debería ser <code>debian-transmission:debian-transmission</code>. Si no lo es, corrígelo:</p>



<pre class="wp-block-code"><code>sudo chown debian-transmission:debian-transmission /etc/transmission-daemon/settings.json</code></pre>



<h3 class="wp-block-heading">No puedo acceder a la interfaz web</h3>



<ul class="wp-block-list">
<li>Verifica que <code>rpc-enabled</code> esté en <code>true</code>.</li>



<li>Comprueba que <code>rpc-bind-address</code> sea <code>"0.0.0.0"</code> si accedes desde otra máquina.</li>



<li>Revisa que tu IP esté en la whitelist. Si instalaste desde backports, es posible que la whitelist esté activada por defecto y tu IP no esté incluida.</li>



<li>Asegúrate de que el puerto 9091 esté abierto en el firewall.</li>



<li>Si ves un error <code>403 Forbidden</code>, casi siempre es la whitelist o la autenticación.</li>
</ul>



<h2 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;" /> Conclusión</h2>



<p class="wp-block-paragraph">Transmission sigue siendo una opción excelente para gestionar torrents en un servidor Debian o MX Linux. Los puntos clave para una instalación sin problemas en 2026 son:</p>



<ol class="wp-block-list">
<li><strong>Elige bien tu ruta de instalación</strong>: si usas Debian 13 puro, instala desde <code>trixie-backports</code> para evitar la beta; si usas MX Linux 25, el paquete por defecto ya es estable.</li>



<li><strong>Crea un override de systemd</strong> para cambiar <code>Type=notify</code> a <code>Type=simple</code>. Esto es imprescindible en ambos sistemas.</li>



<li><strong>Añade opciones de hardening</strong> para proteger el servicio.</li>



<li><strong>Configura bien el RPC</strong> si vas a acceder remotamente, con autenticación y whitelist.</li>
</ol>



<p class="wp-block-paragraph">Con estos pasos, tendrás un demonio de Transmission funcionando de forma estable y segura. Si te surge alguna duda, ¡déjamela en los comentarios!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-instalar-transmission-daemon-en-debian-13-y-mx-linux-25/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Guía de instalación de aMule 3.1.0 con la nueva interfaz web en Raspberry pi</title>
		<link>https://linuxete.duckdns.org/guia-de-instalacion-de-amule-3-1-0-con-la-nueva-interfaz-web-en-raspberry-pi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=guia-de-instalacion-de-amule-3-1-0-con-la-nueva-interfaz-web-en-raspberry-pi</link>
					<comments>https://linuxete.duckdns.org/guia-de-instalacion-de-amule-3-1-0-con-la-nueva-interfaz-web-en-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sun, 11 Oct 2026 20:39:29 +0000</pubDate>
				<category><![CDATA[amule]]></category>
		<category><![CDATA[amule 3.1.0]]></category>
		<category><![CDATA[amule 3.1.0 rasbperry]]></category>
		<category><![CDATA[compilar amule 3.1.0]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4709</guid>

					<description><![CDATA[Compila e instala aMule 3.1.0 en tu Raspberry Pi 5 con Debian 13 Trixie. Guía paso a paso con usuario dedicado, permisos SGID, servicios systemd y la nueva interfaz web amuleapi con acceso seguro por VPN.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Hace ya un tiempo publiqué en este blog una guía para <a href="https://linuxete.duckdns.org/como-compilar-amule-3-0-en-raspberry-pi/">compilar <strong>aMule 3.0.1</strong> en una Raspberry Pi</a>. Aquella entrada sigue siendo válida como referencia, pero el equipo de desarrollo de aMule ha lanzado la versión <strong>3.1.0</strong>, y esta vez sí que estamos ante un salto importante. No es solo un cambio de número: trae un <strong>nuevo daemon con API REST</strong>, una <strong>interfaz web moderna</strong> que reemplaza al antiguo <code>amuleweb</code>, mejoras notables en el motor de descargas y un plus de seguridad que se agradece.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="972" height="719" src="https://linuxete.duckdns.org/wp-content/uploads/2026/10/amule.3.1.png" alt="" class="wp-image-4747" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/10/amule.3.1.png 972w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/amule.3.1-300x222.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/amule.3.1-768x568.png 768w" sizes="auto, (max-width: 972px) 100vw, 972px" /></figure>



<p class="wp-block-paragraph">En esta guía vamos a hacer una <strong>instalación completa desde cero</strong> en una <strong>Raspberry Pi 5 con Debian 13 (Trixie)</strong>, aprovechando todas las mejoras y siguiendo las buenas prácticas que ya aplicábamos antes: usuario dedicado, permisos compartidos mediante SGID y servicios systemd.</p>



<p class="wp-block-paragraph">Si vienes de la guía anterior, verás que el esqueleto es el mismo, pero con las novedades integradas. </p>



<p class="wp-block-paragraph">¡¡Vamos al lío!!</p>



<h2 class="wp-block-heading">¿Qué hay de nuevo en aMule 3.1.0?</h2>



<p class="wp-block-paragraph">Antes de empezar, un repaso rápido a lo más relevante, porque justifica de sobra la actualización:</p>



<ul class="wp-block-list">
<li><strong><code>amuleapi</code></strong>: un nuevo daemon que expone una <strong>API REST</strong> y sirve una <strong>interfaz web completamente nueva</strong>. Es responsive, tiene modo claro/oscuro, actualizaciones en tiempo real vía SSE y permite gestionar todo aMule desde el navegador, incluyendo la descarga directa de archivos terminados.</li>



<li><strong>Modo «Endgame» mejorado</strong>: los bloques finales se solicitan a múltiples fuentes a la vez, evitando el clásico estancamiento al 99%.</li>



<li><strong>Cifrado en las conexiones externas (EC)</strong>: la comunicación entre <code>amuled</code> y los clientes remotos (<code>amulegui</code>, <code>amuleapi</code>) ahora está cifrada con ChaCha20-Poly1305 o AES-128-GCM.</li>



<li><strong>Fuga de memoria corregida</strong> en el daemon, algo que notábamos mucho en ejecuciones prolongadas.</li>



<li><strong>Listas modernas en la GUI</strong> de escritorio, migradas a <code>wxDataViewCtrl</code>.</li>



<li><strong>Límites de Kad aumentados</strong> y profundidad de peticiones ajustada dinámicamente según el ancho de banda.</li>
</ul>



<p class="wp-block-paragraph">Si todo esto te parece suficiente, vamos a instalarlo.</p>



<h3 class="wp-block-heading">Este manual se compone de los siguientes pasos:</h3>



<ol class="wp-block-list">
<li>Instalación de dependencias</li>



<li>Creación del usuario dedicado <code>amule</code></li>



<li>Preparación de directorios y permisos compartidos (SGID)</li>



<li>Descarga del código fuente</li>



<li>Configuración de la compilación con CMake</li>



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



<li>Primer arranque de <code>amuled</code> y generación de configuración</li>



<li>Servicios systemd</li>



<li>Acceso a la nueva interfaz web</li>



<li>Gestión de los servicios</li>
</ol>



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



<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="" 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" /></figure>



<ul class="wp-block-list">
<li><strong>Raspberry Pi 5</strong> con <strong>Debian 13 (Trixie)</strong>.</li>



<li><strong>Disco externo</strong> (en mi caso, un disco mécanico de 1 TB montado en <code>/media/Disco_1TB</code>) donde guardaremos descargas y temporales. Ajusta las rutas a tu caso.</li>



<li>Acceso a terminal con un usuario con privilegios <code>sudo</code> (en mi caso, <code>raspberry</code>).</li>



<li><a href="https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/">WireGuard en Raspberry PI, VPN casera, segura y gratuita</a>. (opcional, pero recomendable)</li>
</ul>



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



<p class="wp-block-paragraph">Lo primero, como siempre, dejar el sistema al día:</p>



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



<p class="wp-block-paragraph">aMule 3.1.0 sigue usando <strong>wxWidgets 3.2</strong> y <strong>Crypto++ 8.1</strong>, así que las dependencias son las mismas que en la versión anterior. Instalamos todo lo necesario para compilar con soporte completo:</p>



<pre class="wp-block-code"><code>sudo apt install -y \
  binutils-dev \
  build-essential \
  cmake \
  gettext \
  git \
  libayatana-appindicator3-dev \
  libboost-all-dev \
  libcrypto++-dev \
  libgd-dev \
  libglib2.0-dev \
  libmaxminddb-dev \
  libreadline-dev \
  libupnp-dev \
  libwxgtk3.2-dev \
  pkg-config \
  wx3.2-headers \
  zlib1g-dev</code></pre>



<p class="wp-block-paragraph">Si tienes cualquier duda sobre las dependencias, la <a href="https://amule-org.github.io/docs/developer/compilation/linux">documentación oficial de compilación</a> las lista todas.</p>



<h2 class="wp-block-heading">2. Creación del usuario dedicado <code>amule</code></h2>



<p class="wp-block-paragraph">Este es un paso <strong>crítico</strong> que ya aplicábamos en la <a href="https://linuxete.duckdns.org/como-compilar-amule-3-0-en-raspberry-pi/">guía anterior</a>: <br>aMule no debe ejecutarse con tu usuario personal. Le creamos una cuenta de sistema dedicada, sin shell de login y con su propio directorio home. <br>Así, si alguien comprometiera el daemon, no tendría acceso al resto del sistema.</p>



<pre class="wp-block-code"><code>sudo adduser --system --group --home /home/amule --shell /usr/sbin/nologin amule</code></pre>



<ul class="wp-block-list">
<li><code>--system</code>: cuenta de sistema, no de persona.</li>



<li><code>--group</code>: crea también el grupo <code>amule</code>.</li>



<li><code>--home /home/amule</code>: home dedicado, donde vivirá toda la configuración de aMule.</li>



<li><code>--shell /usr/sbin/nologin</code>: bloquea cualquier intento de login con esta cuenta.</li>
</ul>



<h2 class="wp-block-heading">3. Preparación de directorios y permisos compartidos (SGID)</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Si vas a usar un disco duro externo para tus descargas, es posible que necesites echar un vistazo a la <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>



<p class="wp-block-paragraph">Para que tú, desde tu usuario <code>raspberry</code>, puedas gestionar las descargas sin pelearte con permisos, usaremos el truco del bit <strong>SGID</strong> sobre las carpetas compartidas. Así todos los archivos que cree aMule heredarán el grupo <code>amule</code> y tú podrás acceder a ellos por pertenencia a ese grupo.</p>



<p class="wp-block-paragraph">Primero, añade tu usuario al grupo <code>amule</code>:</p>



<pre class="wp-block-code"><code>sudo usermod -aG amule raspberry</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Importante</strong>: cierra la sesión y vuelve a entrar, o ejecuta <code>newgrp amule</code> en la terminal, para que el sistema reconozca el nuevo grupo. Si no, los permisos no se aplicarán hasta el próximo login.</p>
</blockquote>



<p class="wp-block-paragraph">Ahora crea las carpetas de descargas en el disco externo (ajusta la ruta <code>/media/Disco_1TB/aMule</code> a tu caso):</p>



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



<p class="wp-block-paragraph">Asigna la propiedad al usuario y grupo <code>amule</code>, aplica permisos <code>775</code> y activa el bit SGID:</p>



<pre class="wp-block-code"><code>sudo chown -R amule:amule /media/Disco_1TB/aMule
sudo chmod -R 775 /media/Disco_1TB/aMule
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>



<p class="wp-block-paragraph">Con esto, cualquier archivo nuevo que se cree dentro heredará automáticamente el grupo <code>amule</code>, y tú podrás gestionarlo sin problemas.</p>



<h2 class="wp-block-heading">4. Descarga del código fuente</h2>



<p class="wp-block-paragraph">Clonamos el repositorio oficial y nos situamos en la rama de la versión 3.1.0:</p>



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



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota</strong>: Git te avisará de que estás en estado «detached HEAD». Es <strong>totalmente normal</strong>: estás apuntando a una etiqueta (tag) concreta, no a una rama. No es un error y no afecta a la compilación.</p>
</blockquote>



<h2 class="wp-block-heading">5. Configuración de la compilación con CMake</h2>



<p class="wp-block-paragraph">Aquí está una de las ventajas de compilar en casa: podemos optimizar el binario específicamente para la arquitectura de la Raspberry Pi 5. Usamos las mismas banderas que ya conoces, que exprimen el <strong>Cortex-A76</strong> y las extensiones criptográficas:</p>



<pre class="wp-block-code"><code>cmake -B build \
  -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_MONOLITHIC=NO \
  -DBUILD_DAEMON=YES \
  -DBUILD_AMULECMD=YES \
  -DBUILD_AMULEAPI=YES \
  -DBUILD_REMOTEGUI=YES \
  -DENABLE_UPNP=YES \
  -DCMAKE_INSTALL_PREFIX=/usr/local</code></pre>



<p class="wp-block-paragraph">Un par de aclaraciones sobre las opciones:</p>



<ul class="wp-block-list">
<li><strong><code>BUILD_MONOLITHIC=NO</code></strong>: no compilamos la GUI de escritorio monolítica, porque en un servidor headless no tiene sentido. Esto ahorra tiempo y recursos.</li>



<li><strong><code>BUILD_AMULEAPI=YES</code></strong>: activamos el nuevo daemon, la joya de esta versión.</li>



<li><strong><code>CMAKE_INSTALL_PREFIX=/usr/local</code></strong>: instalamos los binarios en <code>/usr/local/bin</code>, fuera de los paquetes del sistema.</li>
</ul>



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



<p class="wp-block-paragraph">Lanzamos la compilación usando todos los núcleos disponibles:</p>



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



<p class="wp-block-paragraph">En la Raspberry Pi 5 esto tardará un rato, así que paciencia. </p>



<p class="wp-block-paragraph">Cuando termine:</p>



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



<p class="wp-block-paragraph">Esto instalará los binarios (<code>amuled</code>, <code>amuleapi</code>, <code>amulecmd</code>, <code>amulegui</code>) en <code>/usr/local/bin</code>.</p>



<h2 class="wp-block-heading">7. Primer arranque de <code>amuled</code> y generación de configuración</h2>



<p class="wp-block-paragraph">Ahora vamos a hacer un primer arranque del daemon <strong>como el usuario <code>amule</code></strong> para que genere su configuración por defecto:</p>



<pre class="wp-block-code"><code>sudo -u amule amuled -f</code></pre>



<p class="wp-block-paragraph">Verás que se crea el directorio <code>/home/amule/.aMule/</code> con el archivo <code>amule.conf</code> y otros. </p>



<p class="wp-block-paragraph">En este punto aMule se cerrará solo, es totalmente normal.</p>



<h3 class="wp-block-heading">7.1. Configuración de <code>amule.conf</code></h3>



<p class="wp-block-paragraph">Editamos el archivo de configuración con el usuario correcto para no tener problemas de permisos:</p>



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



<p class="wp-block-paragraph">Los ajustes que necesitas revisar son:</p>



<h4 class="wp-block-heading">Sección <code>[eMule]</code></h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Clave</th><th>Valor recomendado</th><th>Descripción</th></tr></thead><tbody><tr><td><code>Nick</code></td><td><code>MiPi5</code> (o el que prefieras)</td><td>Tu identidad en la red.</td></tr><tr><td><code>Port</code></td><td><code>4662</code></td><td>Puerto TCP de eD2k. Ábrelo en el router para tener <strong>High ID</strong>.</td></tr><tr><td><code>UDPPort</code></td><td><code>4672</code></td><td>Puerto UDP para eD2k y Kad. Ábrelo también.</td></tr><tr><td><code>Address</code></td><td><em>(vacío)</em></td><td>Dirección local a la que se ata. Vacío = cualquier interfaz.</td></tr><tr><td><code>MaxUpload</code></td><td>1024 para un disco SD o entre 100 y 200 si es un disco HD</td><td>Límite de subida en kB/s. <code>0</code> = sin límite.</td></tr><tr><td><code>MaxDownload</code></td><td><code>0</code></td><td>Límite de bajada. <code>0</code> = sin límite.</td></tr><tr><td><code>SlotAllocation</code></td><td><code>10</code></td><td>Velocidad objetivo por cada slot.</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Sección <code>[ExternalConnect]</code></h4>



<p class="wp-block-paragraph">Esta sección es <strong>crítica</strong>: es la que permite que <code>amuleapi</code> y <code>amulegui</code> se comuniquen con <code>amuled</code>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Clave</th><th>Valor</th><th>Descripción</th></tr></thead><tbody><tr><td><code>AcceptExternalConnections</code></td><td><code>1</code></td><td><strong>Imprescindible</strong>. Activa EC.</td></tr><tr><td><code>ECPort</code></td><td><code>4712</code></td><td>Puerto donde <code>amuled</code> escucha a clientes remotos.</td></tr><tr><td><code>ECPassword</code></td><td><em>(hash MD5)</em></td><td>Ver más abajo cómo generarlo.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>Genera el hash MD5</strong> de la contraseña EC con:</p>



<pre class="wp-block-code"><code>echo -n "MiClaveEC" | md5sum | cut -d ' ' -f 1</code></pre>



<p class="wp-block-paragraph">Copia el resultado y pégalo en <code>ECPassword</code>. Guarda bien la contraseña en claro porque la vas a necesitar después.</p>



<h4 class="wp-block-heading">Sección <code>[Directories]</code></h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Clave</th><th>Valor</th></tr></thead><tbody><tr><td><code>IncomingDir</code></td><td><code>/media/Disco_1TB/aMule/Incoming</code></td></tr><tr><td><code>TempDir</code></td><td><code>/media/Disco_1TB/aMule/Temp</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Guarda el archivo y sal.</p>



<h4 class="wp-block-heading">7.2. Configuración de <code>amuleapi</code></h4>



<p class="wp-block-paragraph">Ahora toca configurar el nuevo daemon. Primero establecemos la contraseña de administrador de la interfaz web:</p>



<pre class="wp-block-code"><code>sudo -u amule amuleapi --set-admin-pass="TuContraseñaWeb"</code></pre>



<p class="wp-block-paragraph">Opcionalmente, también podemos crear una de invitado (solo lectura):</p>



<pre class="wp-block-code"><code>sudo -u amule amuleapi --set-guest-pass="OtraContraseña"</code></pre>



<p class="wp-block-paragraph">Ahora editamos la configuración de <code>amuleapi</code>:</p>



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



<p class="wp-block-paragraph">La sección <code>[EC]</code> es la que conecta <code>amuleapi</code> con <code>amuled</code>. <strong>Aquí la contraseña va en texto plano</strong> (la misma que hasheaste antes para <code>amule.conf</code>):</p>



<pre class="wp-block-code"><code>&#91;Server]
BindAddress=127.0.0.1
Port=4713
AllowCORS=0

&#91;EC]
Host=127.0.0.1
Port=4712
Password=MiClaveEC
Encryption=1</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Ojo</strong>: <code>[Server] BindAddress=127.0.0.1</code> deja la web accesible solo desde la propia Raspberry Pi. Eso es lo que queremos si vamos a poner un proxy inverso con TLS delante. Si vas a acceder directamente desde tu red local, cambia a <code>0.0.0.0</code>. Y si vas a exponerla a internet, <strong>imprescindible</strong> usar HTTPS mediante un proxy inverso.</p>
</blockquote>



<h2 class="wp-block-heading">8. Servicios systemd</h2>



<p class="wp-block-paragraph">Creamos dos servicios: uno para <code>amuled</code> y otro para <code>amuleapi</code>. Ambos se ejecutarán como el usuario <code>amule</code>.</p>



<h3 class="wp-block-heading">8.1. Servicio <code>amuled</code></h3>



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



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

&#91;Service]
Type=forking
User=amule
Group=amule
Environment="HOME=/home/amule"
ExecStart=/usr/local/bin/amuled -f
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
KillMode=control-group
KillSignal=SIGTERM

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



<h3 class="wp-block-heading">8.2. Servicio <code>amuleapi</code></h3>



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



<pre class="wp-block-code"><code>&#91;Unit]
Description=aMule API &amp; Web UI
After=network.target amuled.service
Requires=amuled.service

&#91;Service]
Type=simple
User=amule
Group=amule
Environment="HOME=/home/amule"
ExecStartPre=/bin/bash -c 'until (echo &gt; /dev/tcp/127.0.0.1/4712) 2&gt;/dev/null; do sleep 0.5; done'
ExecStart=/usr/local/bin/amuleapi
Restart=on-failure
RestartSec=5

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



<p class="wp-block-paragraph">Habilitamos y arrancamos ambos:</p>



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



<p class="wp-block-paragraph">Verificamos que están corriendo:</p>



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



<p class="wp-block-paragraph">Y si queremos ver logs en vivo:</p>



<pre class="wp-block-code"><code>sudo journalctl -u amuled -f
sudo journalctl -u amuleapi -f</code></pre>



<h2 class="wp-block-heading">9. Acceso a la nueva interfaz web</h2>



<p class="wp-block-paragraph">Desde un navegador en tu red local, visita:</p>



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



<p class="wp-block-paragraph">Introduce la contraseña de administrador que configuraste antes. La interfaz es completamente funcional: gestiona descargas, búsqueda, estadísticas, preferencias, archivos compartidos&#8230; Todo desde el navegador, con actualizaciones en tiempo real.</p>



<p class="wp-block-paragraph">Si quieres probar la API REST desde la terminal:</p>



<pre class="wp-block-code"><code>curl -X POST http://localhost:4713/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"password":"TuContraseñaWeb"}'</code></pre>



<p class="wp-block-paragraph">Recibirás un token JWT que podrás usar en el resto de endpoints.</p>



<h3 class="wp-block-heading">9.1. Acceso desde fuera de casa.</h3>



<p class="wp-block-paragraph">Si quieres controlar aMule desde fuera de tu red local, tienes <strong>dos opciones</strong>:</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;" /> 9.1.a. Abrir el puerto 4713 en el router (no recomendado)</h4>



<p class="wp-block-paragraph">Esta es la vía rápida: la misma que muchos usábamos con el antiguo <code>amuleweb</code>. Consiste en exponer <code>amuleapi</code> directamente a internet abriendo el puerto en el router. Técnicamente funciona, pero tiene un problema serio: <strong><code>amuleapi</code> habla HTTP en texto plano</strong>, sin cifrado.</p>



<p class="wp-block-paragraph">Los pasos serían estos:</p>



<p class="wp-block-paragraph">Edita <code>amuleapi.conf</code> para que escuche en todas las interfaces de red en lugar de solo en localhost:</p>



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



<p class="wp-block-paragraph">Y cambia la sección <code>[Server]</code>:ini</p>



<pre class="wp-block-code"><code>&#91;Server]
BindAddress=0.0.0.0 
Port=4713</code></pre>



<p class="wp-block-paragraph"><strong>Reinicia el servicio</strong> para aplicar el cambio:</p>



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



<p class="wp-block-paragraph"><strong>Redirige el puerto 4713 en tu router</strong>, la forma de hacerlo dependerá de cada modelo de router</p>



<p class="wp-block-paragraph"><strong>Accede desde fuera</strong> (por ejemplo)</p>



<p class="wp-block-paragraph">http://tu-dominio.duckdns.org:4713</p>



<p class="wp-block-paragraph"><strong>¿Por qué no te lo recomiendo?</strong> Por varios motivos que conviene tener claros:</p>



<ul class="wp-block-list">
<li><strong>Tus credenciales viajan en claro</strong>. Cualquiera que intercepte el tráfico (tu operadora, un WiFi público desde el que te conectes, un atacante en tu misma red) puede leer tu contraseña de administrador y tomar el control de tu aMule.</li>



<li><strong>Los bots escanean internet constantemente</strong>. En cuanto abres un puerto, empiezan a llegar intentos de login automatizados. <code>amuleapi</code> tiene protección contra fuerza bruta (<code>LoginFailureThreshold=5</code> en 60 segundos, con bloqueo de 300 segundos), pero no es infalible.</li>



<li><strong>Superficie de ataque directa</strong>. Cualquier vulnerabilidad que se descubra en <code>amuleapi</code> queda expuesta directamente a internet, sin ninguna capa intermedia que filtre.</li>
</ul>



<p class="wp-block-paragraph">En definitiva, es lo que hacíamos con <code>amuleweb</code>, y funcionaba. Pero hoy no tiene sentido asumir ese riesgo cuando existen alternativas mejores y casi igual de cómodas.</p>



<h4 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;" /> 9.1.b. Acceder a través de tu VPN WireGuard (recomendado)</h4>



<p class="wp-block-paragraph">Esta es la opción que yo mismo uso y la que te recomiendo sin dudarlo. Si ya tienes montada una VPN WireGuard en tu Raspberry Pi —como expliqué en la entrada <a href="https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/" target="_blank" rel="noopener">WireGuard en Raspberry Pi: VPN casera, segura y gratuita</a>—, ya tienes hecha la mitad del trabajo.</p>



<p class="wp-block-paragraph">La idea es muy sencilla: en lugar de exponer <code>amuleapi</code> a internet, te conectas primero a tu VPN y luego accedes a la interfaz web como si estuvieras dentro de tu red local. Todo el tráfico viaja cifrado por el túnel de WireGuard, así que no hay ningún riesgo de interceptación.</p>



<p class="wp-block-paragraph"><strong>Ventajas frente a abrir el puerto:</strong></p>



<ul class="wp-block-list">
<li><strong>Cifrado de extremo a extremo</strong>. Todo el tráfico entre tu dispositivo y la Raspberry Pi viaja cifrado por WireGuard, sin necesidad de certificados SSL ni proxies inversos.</li>



<li><strong>No expones ningún servicio a internet</strong>. <code>amuleapi</code> sigue escuchando solo en la interfaz de la VPN. Los bots y escáneres no tienen nada a lo que atacar.</li>



<li><strong>Una sola puerta de entrada</strong>. Ya tienes WireGuard como punto de acceso seguro a tu red doméstica. Aprovecharlo para aMule es lo lógico.</li>



<li><strong>Funciona desde cualquier dispositivo</strong>: móvil, portátil, tablet&#8230; Solo necesitas el cliente WireGuard y tu configuración.</li>
</ul>



<p class="wp-block-paragraph"><strong>Pasos a seguir:</strong></p>



<p class="wp-block-paragraph"><strong>Conéctate a tu VPN</strong> desde el dispositivo que vayas a usar (móvil, portátil&#8230;). Verifica que tienes conexión navegando a cualquier web.</p>



<p class="wp-block-paragraph"><strong>Ajusta <code>amuleapi.conf</code></strong> para que escuche en la interfaz de la VPN. Como tu servidor WireGuard usa la IP <code>10.0.0.1</code>, debes indicarle esa dirección:</p>



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



<p class="wp-block-paragraph">Y deja la sección <code>[Server]</code> así:</p>



<pre class="wp-block-preformatted">[Server]
BindAddress=10.0.0.1
Port=4713</pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota</strong>: Podrías usar <code>BindAddress=0.0.0.0</code> para escuchar en todas las interfaces, pero limitarlo a la IP de la VPN es más seguro, porque la única vía de acceso será el túnel. Lo malo de esto es que no podrás entrar localmente desde ningún dispositivo que esté fuera de la VPN, así que déjalo como mejor se ajuste a tus necesidades</p>
</blockquote>



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



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



<p class="wp-block-paragraph"><strong>Accede desde el navegador</strong>, ya conectado a la VPN, con la dirección privada de tu Raspberry Pi:</p>



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



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="461" height="1024" src="https://linuxete.duckdns.org/wp-content/uploads/2026/10/photo_2026-10-11_22-44-23-461x1024.jpg" alt="" class="wp-image-4730" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/10/photo_2026-10-11_22-44-23-461x1024.jpg 461w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/photo_2026-10-11_22-44-23-135x300.jpg 135w, https://linuxete.duckdns.org/wp-content/uploads/2026/10/photo_2026-10-11_22-44-23.jpg 576w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p class="wp-block-paragraph">Introduce tu contraseña de administrador y tendrás acceso completo a la interfaz web de aMule.</p>



<p class="wp-block-paragraph"><strong>Un detalle práctico</strong>: como todo va por el túnel de WireGuard, la velocidad de acceso a la interfaz dependerá de tu conexión, pero para gestionar descargas y navegar por las listas va más que sobrado.</p>



<h4 class="wp-block-heading">9.1.c. <strong>Alternativa intermedia: túnel SSH</strong></h4>



<p class="wp-block-paragraph">Si en algún momento no quieres (o no puedes) usar la VPN, también puedes crear un túnel SSH desde tu equipo remoto:</p>



<pre class="wp-block-preformatted">ssh -L 4713:localhost:4713 raspberry@ip-de-tu-raspberry</pre>



<p class="wp-block-paragraph">Y después acceder en el navegador a <code>http://localhost:4713</code>. Funciona igual de bien, viaja cifrado dentro del túnel SSH, y no requiere abrir ningún puerto en el router. Es un buen plan B cuando no tengas la VPN a mano.</p>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Opción</th><th>Cifrado</th><th>Puertos abiertos</th><th>Riesgo</th><th>Recomendación</th></tr></thead><tbody><tr><td>Abrir puerto 4713</td><td><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;" /> No</td><td>Sí (4713)</td><td>Alto</td><td><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;" /> No recomendado</td></tr><tr><td>VPN WireGuard</td><td><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;" /> Sí</td><td>No</td><td>Ninguno</td><td><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;" /> Muy recomendado</td></tr><tr><td>Túnel SSH</td><td><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;" /> Sí</td><td>No</td><td>Ninguno</td><td><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;" /> Buen plan B</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Si ya tienes la VPN montada, no hay color: <strong>usa WireGuard</strong>. Es más seguro, más cómodo, y no tienes que abrir ni un solo puerto en el router. Si no la tienes todavía, es el momento perfecto para montarla —te sirve para aMule y para todo lo demás.</p>



<h2 class="wp-block-heading">10. Gestión de los servicios</h2>



<p class="wp-block-paragraph">Una vez que tienes aMule funcionando como servicios de systemd, conviene tener a mano los comandos básicos para controlarlos. La buena noticia es que ahora tienes <strong>dos servicios independientes</strong> (<code>amuled</code> y <code>amuleapi</code>), pero están vinculados por una dependencia que hace que todo sea muy cómodo de gestionar.</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;" /> Cómo se relacionan los dos servicios</h3>



<p class="wp-block-paragraph">En el archivo <code>amuleapi.service</code> incluimos estas líneas:</p>



<pre class="wp-block-code"><code>After=network.target amuled.service
Requires=amuled.service</code></pre>



<p class="wp-block-paragraph">Esa dependencia <code>Requires</code> significa que:</p>



<ul class="wp-block-list">
<li><strong>Si <code>amuled</code> se detiene, <code>amuleapi</code> también se detiene automáticamente.</strong> El sistema considera que <code>amuleapi</code> no tiene sentido sin el daemon.</li>



<li><strong>Si arrancas <code>amuleapi</code>, systemd arranca <code>amuled</code> antes automáticamente.</strong> No tienes que preocuparte por el orden.</li>
</ul>



<p class="wp-block-paragraph">Es decir, en la práctica puedes gestionar casi todo desde un solo comando.</p>



<h4 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;" /> Parar aMule</h4>



<p class="wp-block-paragraph">Para detener todo, basta con parar <code>amuled</code>:</p>



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



<p class="wp-block-paragraph"><code>amuleapi</code> se detendrá solo como consecuencia de la dependencia. Puedes verificarlo con:</p>



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



<p class="wp-block-paragraph">Debería aparecer como <code>inactive (dead)</code>.</p>



<p class="wp-block-paragraph">Si por algún motivo quieres parar <strong>solo la interfaz web</strong> sin cortar las descargas, puedes hacerlo sin afectar a <code>amuled</code>:</p>



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



<p class="wp-block-paragraph">Esto es útil, por ejemplo, si vas a tocar la configuración de <code>amuleapi.conf</code> y no quieres interrumpir las descargas en curso.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25b6.png" alt="▶" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Iniciar aMule</h4>



<p class="wp-block-paragraph">Para arrancar todo de una vez:</p>



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



<p class="wp-block-paragraph">Gracias al <code>Requires</code>, systemd arrancará primero <code>amuled</code> y luego <code>amuleapi</code>. Si prefieres ser explícito con el orden:</p>



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



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Reiniciar aMule</h4>



<p class="wp-block-paragraph">Útil cuando has cambiado algo en la configuración de <code>amule.conf</code> o <code>amuleapi.conf</code> y quieres aplicar los cambios sin parar y arrancar por separado:</p>



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



<p class="wp-block-paragraph">O, si solo has tocado la parte web:</p>



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



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Recuerda</strong>: <code>amuleapi</code> guarda la configuración en <code>amuleapi.conf</code> y la lee al arrancar. Si cambias algo ahí, es necesario reiniciar el servicio para que surta efecto.</p>
</blockquote>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ver el estado</h4>



<p class="wp-block-paragraph">Para comprobar que ambos servicios están corriendo correctamente:</p>



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



<p class="wp-block-paragraph">Verás algo como esto para cada uno:</p>



<pre class="wp-block-code"><code>● amuled.service - aMule Daemon
     Loaded: loaded (/etc/systemd/system/amuled.service; enabled; preset: enabled)
     Active: active (running) since ...</code></pre>



<p class="wp-block-paragraph">Si algo va mal, esta es la primera parada obligatoria. La salida suele dar pistas muy claras sobre el problema.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dc.png" alt="📜" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ver los logs en tiempo real</h4>



<p class="wp-block-paragraph">Cuando algo no funciona o quieres seguir la actividad del daemon, los logs son tu mejor amigo:</p>



<pre class="wp-block-code"><code># Logs de amuled en vivo
sudo journalctl -u amuled -f

# Logs de amuleapi en vivo
sudo journalctl -u amuleapi -f</code></pre>



<p class="wp-block-paragraph">El parámetro <code>-f</code> mantiene el comando abierto y va mostrando las nuevas líneas a medida que se generan. Para salir, pulsa <code>Ctrl+C</code>.</p>



<p class="wp-block-paragraph">Si quieres ver solo las últimas líneas sin quedarte enganchado:</p>



<pre class="wp-block-code"><code>sudo journalctl -u amuled -n 50
sudo journalctl -u amuleapi -n 50</code></pre>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6a6.png" alt="🚦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Arranque automático al iniciar la Raspberry Pi</h4>



<p class="wp-block-paragraph">Ambos servicios están configurados con <code>WantedBy=multi-user.target</code>, lo que significa que arrancarán automáticamente cada vez que enciendas la Raspberry Pi. Si alguna vez quieres desactivar ese comportamiento (por ejemplo, para hacer pruebas):</p>



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



<p class="wp-block-paragraph">Y para volver a activarlo:</p>



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



<p class="wp-block-paragraph">Ten en cuenta que <code>disable</code> no para el servicio si está corriendo; solo impide que arranque automáticamente al inicio. Si quieres desactivarlo y pararlo en un solo paso:</p>



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



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d8.png" alt="🧘" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Resumen práctico</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Acción</th><th>Comando</th></tr></thead><tbody><tr><td>Parar todo</td><td><code>sudo systemctl stop amuled.service</code></td></tr><tr><td>Parar solo la web</td><td><code>sudo systemctl stop amuleapi.service</code></td></tr><tr><td>Arrancar todo</td><td><code>sudo systemctl start amuleapi.service</code></td></tr><tr><td>Reiniciar todo</td><td><code>sudo systemctl restart amuled.service amuleapi.service</code></td></tr><tr><td>Ver estado</td><td><code>sudo systemctl status amuled.service amuleapi.service</code></td></tr><tr><td>Ver logs en vivo</td><td><code>sudo journalctl -u amuled -f</code></td></tr><tr><td>Desactivar arranque automático</td><td><code>sudo systemctl disable --now amuled.service</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Con estos comandos tienes control total sobre aMule. La dependencia entre los dos servicios hace que, en el 90% de los casos, te baste con gestionar <code>amuled</code>, y <code>amuleapi</code> seguirá el ritmo automáticamente.</p>



<p class="wp-block-paragraph">Con esto tienes aMule 3.1.0 funcionando a pleno rendimiento en tu Raspberry Pi 5, con la mejor interfaz de control remoto que ha tenido nunca aMule y todas las ventajas de la nueva versión. Como siempre, si os surge cualquier duda, dejadme un comentario y os echo una mano.</p>



<p class="wp-block-paragraph">¡A disfrutar de las descargas!</p>



<h2 class="wp-block-heading">Miscelánea.</h2>



<p class="wp-block-paragraph">Tal vez te interese <a href="https://linuxete.duckdns.org/como-recibir-notificaciones-de-amule-en-telegram/">como recibir notificaciones de aMule en Telegram</a>.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/guia-de-instalacion-de-amule-3-1-0-con-la-nueva-interfaz-web-en-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Copias de seguridad automáticas de WordPress en Raspberry pi</title>
		<link>https://linuxete.duckdns.org/copias-de-seguridad-automaticas-de-wordpress-en-raspberry-pi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=copias-de-seguridad-automaticas-de-wordpress-en-raspberry-pi</link>
					<comments>https://linuxete.duckdns.org/copias-de-seguridad-automaticas-de-wordpress-en-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sun, 27 Sep 2026 22:58:42 +0000</pubDate>
				<category><![CDATA[Sistema]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[raspberry-pi]]></category>
		<category><![CDATA[Systemd]]></category>
		<category><![CDATA[Telegram]]></category>
		<category><![CDATA[timers]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4698</guid>

					<description><![CDATA[Automatiza la copia de seguridad completa de tu WordPress (archivos y base de datos) en una Raspberry Pi usando Systemd Timers. Incluye preservación estricta de permisos (-p), rotación de archivos antiguos, alertas instantáneas en Telegram y la guía paso a paso para restaurarlo.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En un artículo anterior vimos <a href="https://linuxete.duckdns.org/como-respaldar-tu-blog-de-wordpress-en-raspberry-pi/">cómo realizar respaldos manuales de WordPress en la Raspberry Pi</a>. Hoy daremos el paso definitivo hacia la automatización profesional: sustituiremos <code>cron</code> por <strong>Systemd Timers</strong>, añadiremos <strong>rotación automática de archivos</strong>, garantizaremos la <strong>preservación de usuarios y permisos</strong>, configuraremos un <strong>bot de Telegram</strong> para alertas y explicaremos el <strong>procedimiento exacto para restaurar todo en minutos</strong>.</p>



<h2 class="wp-block-heading">Puntos clave del script</h2>



<ol start="1" class="wp-block-list">
<li><strong>Preservación estricta de permisos (<code>tar -czpf</code>):</strong> La bandera <code>-p</code> (<code>--same-permissions</code>) fuerza a <code>tar</code> a almacenar y respetar los atributos, permisos y propietarios originales (<code>www-data:www-data</code>) de los archivos web y carpetas multimedia.</li>



<li><strong>Control de almacenamiento:</strong> Limpieza automática de respaldos con más de $X$ días mediante <code>find</code> para evitar saturar la tarjeta SD o el SSD.</li>



<li><strong>Notificación en tiempo real:</strong> Reporte de éxito (con tamaño del archivo y rotaciones) o fallo directo a Telegram.</li>
</ol>



<h2 class="wp-block-heading">Paso 1: Crear el script de respaldo (<code>backup_wp.sh</code>)</h2>



<p class="wp-block-paragraph">Crea o edita el script en <code>/usr/local/bin/backup_wp.sh</code>:</p>



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

# ==========================================
# CONFIGURACIÓN GENERAL
# ==========================================
WP_DIR="/var/www/html"                  # Ruta del sitio WordPress
BACKUP_DIR="/var/backups/wordpress"     # Directorio donde se guardará el .tar.gz
DB_USER="wp_user"                       # Usuario de MariaDB/MySQL
DB_PASS="tu_contrasena_db"              # Contraseña de la base de datos
DB_NAME="wordpress_db"                  # Nombre de la base de datos

# Retención (días a conservar los backups)
RETENTION_DAYS=15

# Configuración Telegram
BOT_TOKEN="123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"
CHAT_ID="987654321"

# ==========================================
# PREPARACIÓN Y VARIABLES
# ==========================================
mkdir -p "$BACKUP_DIR"
FECHA=$(date +%Y%m%d_%H%M%S)
ARCHIVE_NAME="wp_backup_${FECHA}.tar.gz"
DESTINO="${BACKUP_DIR}/${ARCHIVE_NAME}"
TEMP_SQL="/tmp/db_${FECHA}.sql"

# Función para enviar notificaciones a Telegram
enviar_telegram() {
    local MENSAJE="$1"
    curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
        -d chat_id="${CHAT_ID}" \
        -d text="${MENSAJE}" \
        -d parse_mode="HTML" &gt; /dev/null
}

# ==========================================
# EJECUCIÓN DEL BACKUP
# ==========================================

# 1. Volcado de la base de datos
if mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" &gt; "$TEMP_SQL" 2&gt;/dev/null; then
    
    # 2. Compresión de archivos + volcado SQL (preservando permisos originales con -p)
    if tar -czpf "$DESTINO" -C "$WP_DIR" . -C /tmp "$(basename "$TEMP_SQL")" 2&gt;/dev/null; then
        TAMANO=$(du -h "$DESTINO" | cut -f1)
        rm -f "$TEMP_SQL"
        
        # 3. Rotación: Eliminar copias de seguridad de más de X días
        BORRADOS=$(find "$BACKUP_DIR" -type f -name "wp_backup_*.tar.gz" -mtime +$RETENTION_DAYS -print -delete | wc -l)
        
        MSG_ROTACION=""
        if &#91; "$BORRADOS" -gt 0 ]; then
            MSG_ROTACION="%0A&lt;b&gt;Rotación:&lt;/b&gt; $BORRADOS archivo(s) antiguo(s) eliminado(s) (+$RETENTION_DAYS días)."
        fi
        
        enviar_telegram "&lt;b&gt;&#x2705; Backup WordPress Exitoso&lt;/b&gt;%0A&lt;b&gt;Host:&lt;/b&gt; $(hostname)%0A&lt;b&gt;Archivo:&lt;/b&gt; &lt;code&gt;$ARCHIVE_NAME&lt;/code&gt;%0A&lt;b&gt;Tamaño:&lt;/b&gt; $TAMANO${MSG_ROTACION}"
    else
        rm -f "$TEMP_SQL"
        enviar_telegram "&lt;b&gt;&#x274c; Error en Backup WordPress&lt;/b&gt;%0A&lt;b&gt;Host:&lt;/b&gt; $(hostname)%0AFalló la compresión tar.gz."
        exit 1
    fi
else
    enviar_telegram "&lt;b&gt;&#x274c; Error en Backup WordPress&lt;/b&gt;%0A&lt;b&gt;Host:&lt;/b&gt; $(hostname)%0AFalló la exportación de la base de datos (mysqldump)."
    exit 1
fi
</code></pre>



<p class="wp-block-paragraph">El script <code>backup_wp.sh</code> es una solución automatizada en Bash para realizar copias de seguridad integrales de WordPress sin intervención manual. Esto es todo lo que ejecuta en segundo plano cada vez que el temporizador lo activa:</p>



<ul class="wp-block-list">
<li><strong>Volcado de la base de datos:</strong> Extrae una copia en limpio de MariaDB/MySQL mediante <code>mysqldump</code> con todas las entradas, páginas, usuarios, comentarios y configuraciones.</li>



<li><strong>Empaquetado y preservación de permisos:</strong> Junta la base de datos y la totalidad del directorio web (<code>/var/www/html</code>) en un archivo comprimido <code>.tar.gz</code>, utilizando la bandera <code>-p</code> para guardar intactos los propietarios (<code>www-data:www-data</code>) y permisos originales.</li>



<li><strong>Rotación automática de almacenamiento:</strong> Examina la carpeta de respaldos y elimina los archivos que superen los días de retención configurados (por ejemplo, 15 días), evitando que la tarjeta SD o disco duro de la Raspberry Pi se llene.</li>



<li><strong>Notificación instantánea por Telegram:</strong> Conecta con la API de Telegram para enviarte un reporte al móvil con el estado del proceso, informando el nombre del archivo, su tamaño final y si se purgaron copias antiguas (o alertando de inmediato si ocurrió algún fallo).</li>
</ul>



<p class="wp-block-paragraph">Ahora que sabes como funciona el script, asigna permisos de ejecución:</p>



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



<h2 class="wp-block-heading">Paso 2: Crear la unidad de servicio Systemd</h2>



<p class="wp-block-paragraph">Crea el archivo <code>/etc/systemd/system/wp-backup.service</code>:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Servicio de copia de seguridad completa de WordPress con rotacion
After=network-online.target mariadb.service
Wants=network-online.target

&#91;Service]
Type=oneshot
ExecStart=/usr/local/bin/backup_wp.sh
User=root</code></pre>



<h2 class="wp-block-heading">Paso 3: Programar el temporizador (Systemd Timer)</h2>



<p class="wp-block-paragraph">Crea el archivo <code>/etc/systemd/system/wp-backup.timer</code>:</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Temporizador diario para el backup de WordPress

&#91;Timer]
OnCalendar=*-*-* 04:00:00
Persistent=true

&#91;Install]
WantedBy=timers.target</code></pre>



<h2 class="wp-block-heading">Paso 4: Activación y verificación</h2>



<p class="wp-block-paragraph">Habilita e inicia el temporizador:</p>



<pre class="wp-block-code"><code>sudo systemctl daemon-reload
sudo systemctl enable --now wp-backup.timer</code></pre>



<ul class="wp-block-list">
<li><strong>Verificar la programación del Timer:</strong><br><code>systemctl list-timers wp-backup.timer</code></li>



<li><strong>Probar la ejecución manual del servicio:</strong><br><code>sudo systemctl start wp-backup.service</code></li>
</ul>



<h2 class="wp-block-heading">Paso 5: Cómo restaurar el WordPress desde un backup</h2>



<p class="wp-block-paragraph">Tener una copia de seguridad no sirve de nada si no sabes cómo restaurarla. En caso de desastre, hackeo o fallo grave al actualizar un plugin, sigue este procedimiento.</p>



<h3 class="wp-block-heading">1. Extraer los archivos del sitio web</h3>



<p class="wp-block-paragraph">Descomprime el archivo <code>.tar.gz</code> directamente en el directorio web (<code>/var/www/html</code>) utilizando <code>sudo</code> y el parámetro <code>-p</code> para conservar los propietarios y permisos originales (<code>www-data:www-data</code>):</p>



<pre class="wp-block-code"><code>sudo tar -xzpf /var/backups/wordpress/wp_backup_20260919_040000.tar.gz -C /var/www/html</code></pre>



<h3 class="wp-block-heading">2. Restaurar la base de datos MySQL / MariaDB</h3>



<p class="wp-block-paragraph">Al descomprimir el paquete se habrá extraído el archivo SQL con el volcado (por ejemplo: <code>db_20260919_040000.sql</code>) dentro de <code>/var/www/html</code>. Según el estado actual de tu sistema, elige una de las dos opciones:</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Opción A: En un servidor nuevo o instalación limpia (Desastre total)</h4>



<p class="wp-block-paragraph">Si estás restaurando en una Raspberry Pi o servidor recién instalado donde la base de datos aún no ha sido creada:</p>



<pre class="wp-block-code"><code># 1. Crear la base de datos si no existe
sudo mysql -e "CREATE DATABASE IF NOT EXISTS wordpress_db;"

# 2. Importar el volcado SQL
sudo mysql -u wp_user -p wordpress_db &lt; /var/www/html/db_20260919_040000.sql</code></pre>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Opción B: En una web en producción / en uso (Sobrescribir o revertir estado)</h4>



<p class="wp-block-paragraph">Si la web está activa pero necesitas volver atrás (por ejemplo, para deshacer una actualización corrupta o una infección de malware), <strong>es fundamental borrar la base de datos previa</strong> antes de importar. De lo contrario, las tablas antiguas, configuraciones corruptas o plugins eliminados seguirán en la base de datos:</p>



<pre class="wp-block-code"><code># 1. Borrar la base de datos actual y recrearla completamente vacía
sudo mysql -e "DROP DATABASE IF EXISTS wordpress_db; CREATE DATABASE wordpress_db;"

# 2. Importar el volcado SQL limpio del respaldo
sudo mysql -u wp_user -p wordpress_db &lt; /var/www/html/db_20260919_040000.sql</code></pre>



<h3 class="wp-block-heading">3. Limpieza y reajuste de seguridad</h3>



<p class="wp-block-paragraph">Para finalizar, elimina el archivo <code>.sql</code> de la carpeta pública de la web para evitar que alguien pueda descargarlo desde el navegador y asegura la propiedad de la instalación:</p>



<pre class="wp-block-code"><code># Eliminar el dump SQL expuesto por seguridad
sudo rm /var/www/html/db_*.sql

# Reasegurar que todo pertenece al usuario del servidor web (www-data)
sudo chown -R www-data:www-data /var/www/html</code></pre>



<p class="wp-block-paragraph">Y con esto y una caña ¡Viva España!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/copias-de-seguridad-automaticas-de-wordpress-en-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Empaquetado y compresión en Linux desde la terminal</title>
		<link>https://linuxete.duckdns.org/empaquetado-y-compresion-en-linux-desde-la-terminal/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=empaquetado-y-compresion-en-linux-desde-la-terminal</link>
					<comments>https://linuxete.duckdns.org/empaquetado-y-compresion-en-linux-desde-la-terminal/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Fri, 18 Sep 2026 21:32:00 +0000</pubDate>
				<category><![CDATA[Sistema]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[compresión]]></category>
		<category><![CDATA[empaquetado]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[tar]]></category>
		<category><![CDATA[Terminal_Linux]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4683</guid>

					<description><![CDATA[Cuando empezamos a gestionar sistemas y servidores Linux, una de las primeras cosas que aprendemos por necesidad es a manejar archivos comprimidos. Ya sea para empaquetar backups de configuraciones, gestionar gigas de logs, o preparar imágenes de sistema, la terminal nos ofrece muchas opciones: tar, gzip, zip&#8230; Hoy vamos a diseccionar los principales compresores, descubrir [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Cuando empezamos a gestionar sistemas y servidores Linux, una de las primeras cosas que aprendemos por necesidad es a manejar archivos comprimidos. Ya sea para empaquetar backups de configuraciones, gestionar gigas de logs, o preparar imágenes de sistema, la terminal nos ofrece muchas opciones: <code>tar</code>, <code>gzip</code>, <code>zip</code>&#8230;</p>



<p class="wp-block-paragraph">Hoy vamos a diseccionar los principales compresores, descubrir cómo sacarles el máximo partido exprimiendo nuestra CPU, y terminaremos montando un sistema de backup automatizado que nos avise por Telegram. ¡Vamos al lío!</p>



<p class="wp-block-paragraph">En sistemas GNU/Linux existe una distinción fundamental que a menudo confunde a quienes empiezan: <strong>empaquetar no es comprimir</strong>.</p>



<ul class="wp-block-list">
<li><strong>Empaquetar (Archivar):</strong> Consiste en juntar múltiples archivos y directorios (junto con sus permisos, propietarios y estructura de carpetas) en un único archivo continuo. El tamaño total casi no varía. El estándar indiscutible es <code>tar</code> (<em>Tape Archive</em>).</li>



<li><strong>Comprimir:</strong> Consiste en aplicar un algoritmo matemático a un único archivo para reducir el espacio que ocupa en disco. Herramientas nativas como <code>gzip</code>, <code>bzip2</code> o <code>xz</code><strong>solo pueden comprimir un único archivo a la vez</strong>.</li>
</ul>



<p class="wp-block-paragraph">Por esta razón se combinan ambas tareas: primero se empaqueta una carpeta con <code>tar</code> y luego se pasa por el compresor (generando archivos <code>.tar.gz</code>, <code>.tar.bz2</code> o <code>.tar.xz</code>).</p>



<h2 class="wp-block-heading">1. El comodín del administrador: El comando <code>tar</code></h2>



<p class="wp-block-paragraph">El comando <code>tar</code> permite empaquetar y comprimir en un solo paso gracias a que integra los motores de compresión directamente mediante modoles o <em>flags</em>.</p>



<h3 class="wp-block-heading">Opciones (flags) principales de <code>tar</code></h3>



<ul class="wp-block-list">
<li><strong>Operaciones básicas (elegir una):</strong>
<ul class="wp-block-list">
<li><code>-c</code> (<code>--create</code>): Crea un nuevo archivo empaquetado.</li>



<li><code>-x</code> (<code>--extract</code>): Extrae el contenido de un archivo empaquetado.</li>



<li><code>-t</code> (<code>--list</code>): Lista el contenido del archivo sin extraerlo.</li>
</ul>
</li>



<li><strong>Selección del algoritmo de compresión:</strong>
<ul class="wp-block-list">
<li><em>(Sin flag)</em>: Solo empaqueta (<code>.tar</code>).</li>



<li><code>-z</code> (<code>--gzip</code>): Filtra a través de <code>gzip</code> (<code>.tar.gz</code> o <code>.tgz</code>).</li>



<li><code>-j</code> (<code>--bzip2</code>): Filtra a través de <code>bzip2</code> (<code>.tar.bz2</code>).</li>



<li><code>-J</code> (<code>--xz</code>): Filtra a través de <code>xz</code> (<code>.tar.xz</code>).</li>
</ul>
</li>



<li><strong>Modificadores esenciales:</strong>
<ul class="wp-block-list">
<li><code>-f</code> (<code>--file</code>): Especifica el nombre del archivo de destino o lectura. <strong>Debe ser el último flag de la lista</strong>.</li>



<li><code>-v</code> (<code>--verbose</code>): Muestra el detalle del proceso en pantalla paso a paso.</li>



<li><code>-C</code> (<code>--directory</code>): Cambia a un directorio específico antes de realizar la extracción.</li>



<li><code>-p</code> (<code>--same-permissions</code>): Mantiene intactos los permisos de archivos y propietarios originales.</li>



<li><code>--exclude=PATRÓN</code>: Excluye archivos o carpetas que coincidan con el patrón indicado (ej. <code>--exclude='.git'</code>).</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Ejemplos prácticos con <code>tar</code></h3>



<pre class="wp-block-code"><code># Empaquetar sin comprimir
tar -cvf backup.tar /var/www/html

# Empaquetar y comprimir con GZIP (rápido y ligero)
tar -czvf backup.tar.gz /var/www/html

# Empaquetar y comprimir con BZIP2 (ratio intermedio)
tar -cjvf backup.tar.bz2 /var/www/html

# Empaquetar y comprimir con XZ (compresión máxima)
tar -cJvf backup.tar.xz /var/www/html

# Extraer en el directorio actual (autodetecta el formato de compresión)
tar -xvf backup.tar.xz

# Extraer el contenido dentro de una carpeta concreta
tar -xvf backup.tar.gz -C /tmp/restauracion

# Listar contenido sin extraer
tar -tvf backup.tar.xz
</code></pre>



<h2 class="wp-block-heading">2. Herramientas de compresión individuales: <code>gzip</code>, <code>bzip2</code> y <code>xz</code></h2>



<p class="wp-block-paragraph">Si trabajas con un solo archivo grande (por ejemplo, un volcado de base de datos <code>.sql</code> o una imagen <code>.img</code>), no necesitas <code>tar</code>. Puedes usar directamente los compresores.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>¡Atención!</strong> Por defecto, estas herramientas <strong>eliminan el archivo original</strong> y dejan únicamente el comprimido, a menos que utilices el flag <code>-k</code> (<code>--keep</code>).</p>
</blockquote>



<h3 class="wp-block-heading"><code>gzip</code> (GNU zip)</h3>



<p class="wp-block-paragraph">Es el estándar por su velocidad.</p>



<ul class="wp-block-list">
<li><strong>Comprimir (conservando el original):</strong><code>gzip -k archivo.txt</code></li>



<li><strong>Descomprimir:</strong><code>gunzip archivo.txt.gz</code> o <code>gzip -d archivo.txt.gz</code></li>



<li><strong>Niveles de compresión:</strong> Del <code>-1</code> (ultra rápido, menos compresión) al <code>-9</code> (máxima compresión). Por defecto aplica <code>-6</code>.</li>
</ul>



<h3 class="wp-block-heading"><code>bzip2</code></h3>



<p class="wp-block-paragraph">Ofrece mejor ratio que <code>gzip</code> a costa de usar más tiempo y CPU.</p>



<ul class="wp-block-list">
<li><strong>Comprimir (conservando el original):</strong><code>bzip2 -k archivo.txt</code></li>



<li><strong>Descomprimir:</strong><code>bunzip2 archivo.txt.bz2</code> o <code>bzip2 -d archivo.txt.bz2</code></li>
</ul>



<h3 class="wp-block-heading"><code>xz</code></h3>



<p class="wp-block-paragraph">Usa el algoritmo LZMA2. Ofrece el máximo ratio de compresión en Linux.</p>



<ul class="wp-block-list">
<li><strong>Comprimir (conservando el original):</strong><code>xz -k archivo.txt</code></li>



<li><strong>Descomprimir:</strong><code>unxz archivo.txt.xz</code> o <code>xz -d archivo.txt.xz</code></li>



<li><strong>Uso de multinúcleo (Multithreading):</strong> Por defecto usa un solo hilo. Con <code>-T0</code> utiliza todos los núcleos disponibles del procesador:<br>Bash<code>xz -k -9 -T0 imagen_sistema.img</code></li>
</ul>



<h2 class="wp-block-heading">3. Intercambio con Windows/macOS: <code>zip</code> y <code>unzip</code></h2>



<p class="wp-block-paragraph">A diferencia de los comandos nativos de Linux, <code>zip</code> empaqueta y comprime en el mismo paso y es el estándar universal para compartir archivos con otros sistemas operativos.</p>



<h3 class="wp-block-heading">Comandos y flags principales</h3>



<h4 class="wp-block-heading">Para crear archivos <code>.zip</code>:</h4>



<ul class="wp-block-list">
<li><code>-r</code> (<code>--recurse-paths</code>): <strong>Imprescindible</strong> para incluir subcarpetas recursivamente.</li>



<li><code>-e</code> (<code>--encrypt</code>): Solicita clave para cifrar el archivo.</li>



<li><code>-9</code>: Aplica compresión máxima.</li>
</ul>



<pre class="wp-block-code"><code># Comprimir una carpeta entera recursivamente
zip -r -9 archivo.zip /ruta/a/carpeta

# Comprimir y proteger con contraseña
zip -r -e seguro.zip /ruta/a/datos_sensibles</code></pre>



<h4 class="wp-block-heading">Para descomprimir <code>.zip</code>:</h4>



<ul class="wp-block-list">
<li><code>-l</code> (<code>--list</code>): Muestra el contenido sin extraer.</li>



<li><code>-d</code> (<code>--directory</code>): Especifica la carpeta de destino.</li>
</ul>



<pre class="wp-block-code"><code># Extraer en una ruta específica
unzip archivo.zip -d /home/usuario/descargas/</code></pre>



<h2 class="wp-block-heading">4. Comparativa visual de rendimiento</h2>



<p class="wp-block-paragraph">A la hora de elegir la herramienta adecuada, hay que sopesar tres factores: <strong>Ratio de compresión</strong>, <strong>Velocidad</strong> y <strong>Consumo de recursos (CPU)</strong>.</p>



<p class="wp-block-paragraph"><em>(A continuación se muestra la tarjeta comparativa global con las métricas fijas de cada herramienta):</em></p>



<div style="background-color: #f8f9fa; padding: 20px; border-radius: 8px; border: 1px solid #dee2e6; max-width: 650px; margin: 20px auto; font-family: system-ui, -apple-system, sans-serif; box-shadow: 0 4px 6px rgba(0,0,0,0.05);">
  <h3 style="margin-top: 0; color: #212529; font-size: 1.2rem; margin-bottom: 20px; text-align: center; font-weight: 700;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Comparativa de Compresores en Linux</h3>
  
  <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 15px;">
    
    <!-- GZIP -->
    <div style="background-color: #ffffff; padding: 15px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 4px rgba(0,0,0,0.02);">
      <div style="font-size: 1.1rem; font-weight: bold; color: #1c2d42; margin-bottom: 10px; border-bottom: 2px solid #0d6efd; padding-bottom: 4px;">gzip (.gz)</div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ratio compresión</span><span>60%</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 60%; height: 100%;"></div></div>
      </div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><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;" /> Velocidad</span><span>90% (Muy Rápido)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #198754; width: 90%; height: 100%;"></div></div>
      </div>

      <div>
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de CPU</span><span>20% (Bajo)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #6c757d; width: 20%; height: 100%;"></div></div>
      </div>
    </div>

    <!-- BZIP2 -->
    <div style="background-color: #ffffff; padding: 15px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 4px rgba(0,0,0,0.02);">
      <div style="font-size: 1.1rem; font-weight: bold; color: #1c2d42; margin-bottom: 10px; border-bottom: 2px solid #0d6efd; padding-bottom: 4px;">bzip2 (.bz2)</div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ratio compresión</span><span>75%</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 75%; height: 100%;"></div></div>
      </div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><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;" /> Velocidad</span><span>50% (Medio)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 50%; height: 100%;"></div></div>
      </div>

      <div>
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de CPU</span><span>50% (Medio)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #6c757d; width: 50%; height: 100%;"></div></div>
      </div>
    </div>

    <!-- XZ -->
    <div style="background-color: #ffffff; padding: 15px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 4px rgba(0,0,0,0.02);">
      <div style="font-size: 1.1rem; font-weight: bold; color: #1c2d42; margin-bottom: 10px; border-bottom: 2px solid #198754; padding-bottom: 4px;">xz (.xz)</div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ratio compresión</span><span>95% (Máximo)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #198754; width: 95%; height: 100%;"></div></div>
      </div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><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;" /> Velocidad</span><span>20% (Lento)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 20%; height: 100%;"></div></div>
      </div>

      <div>
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de CPU</span><span>90% (Alto)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #dc3545; width: 90%; height: 100%;"></div></div>
      </div>
    </div>

    <!-- ZIP -->
    <div style="background-color: #ffffff; padding: 15px; border-radius: 8px; border: 1px solid #e9ecef; box-shadow: 0 2px 4px rgba(0,0,0,0.02);">
      <div style="font-size: 1.1rem; font-weight: bold; color: #1c2d42; margin-bottom: 10px; border-bottom: 2px solid #0d6efd; padding-bottom: 4px;">zip (.zip)</div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ratio compresión</span><span>50%</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 50%; height: 100%;"></div></div>
      </div>
      
      <div style="margin-bottom: 8px;">
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><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;" /> Velocidad</span><span>85% (Rápido)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #0d6efd; width: 85%; height: 100%;"></div></div>
      </div>

      <div>
        <div style="display: flex; justify-content: space-between; font-size: 0.85rem; font-weight: 600; color: #495057; margin-bottom: 3px;">
          <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de CPU</span><span>15% (Muy bajo)</span>
        </div>
        <div style="background-color: #e9ecef; border-radius: 4px; height: 12px; overflow: hidden;"><div style="background-color: #6c757d; width: 15%; height: 100%;"></div></div>
      </div>
    </div>

  </div>
</div>



<h2 class="wp-block-heading">5. Resumen rápido (Cheat Sheet)</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Tarea habitual</strong></td><td><strong>Comando recomendado</strong></td></tr></thead><tbody><tr><td><strong>Empaquetar carpeta (sin comprimir)</strong></td><td><code>tar -cvf salida.tar /carpeta</code></td></tr><tr><td><strong>Comprimir carpeta rápido (<code>gzip</code>)</strong></td><td><code>tar -czvf salida.tar.gz /carpeta</code></td></tr><tr><td><strong>Comprimir carpeta máximo ahorro (<code>xz</code>)</strong></td><td><code>tar -cJvf salida.tar.xz /carpeta</code></td></tr><tr><td><strong>Extraer cualquier <code>.tar.*</code></strong></td><td><code>tar -xvf archivo.tar.*</code></td></tr><tr><td><strong>Extraer <code>.tar.*</code> en carpeta específica</strong></td><td><code>tar -xvf archivo.tar.* -C /ruta/destino</code></td></tr><tr><td><strong>Comprimir un solo archivo conservándolo</strong></td><td><code>xz -k -T0 archivo.log</code> <em>(o <code>gzip -k</code>, <code>bzip2 -k</code>)</em></td></tr><tr><td><strong>Crear zip para Windows</strong></td><td><code>zip -r archivo.zip /carpeta</code></td></tr><tr><td><strong>Descomprimir zip en carpeta</strong></td><td><code>unzip archivo.zip -d /ruta/destino</code></td></tr></tbody></table></figure>



<h2 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;" /> Nivel Pro: Multihilo y Barras de Progreso</h2>



<h3 class="wp-block-heading">1. Exprimiendo la CPU: Compresión Multihilo</h3>



<h4 class="wp-block-heading">¿Por qué la compresión tradicional se siente «lenta»?</h4>



<p class="wp-block-paragraph">Los procesadores modernos (de un ordenador de sobremesa, un servidor o una Raspberry Pi) tienen <strong>varios núcleos o hilos</strong> (4, 8, 16 o más). Sin embargo, herramientas tradicionales como <code>gzip</code>, <code>bzip2</code> o <code>xz</code> fueron creadas hace décadas, cuando los procesadores solo tenían un núcleo.</p>



<p class="wp-block-paragraph">Por defecto, <strong>estos comandos solo utilizan 1 solo núcleo al 100%</strong>, dejando el resto de tu procesador totalmente ocioso. Si tienes un procesador de 8 núcleos y usas <code>gzip</code>, estás aprovechando apenas un 12,5% de la potencia total de tu máquina.</p>



<h4 class="wp-block-heading">Las versiones multihilo al rescate</h4>



<p class="wp-block-paragraph">Para solucionar esto existen versiones <strong>paralelizadas (multihilo)</strong>. Lo que hacen es dividir el archivo gigante en pequeños trozos, repartir cada trozo entre todos los núcleos de tu CPU para comprimirlos simultáneamente y luego juntarlos de nuevo.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Herramienta clásica (1 núcleo)</strong></td><td><strong>Herramienta Multihilo (Todos los núcleos)</strong></td></tr></thead><tbody><tr><td><code>gzip</code></td><td><strong><code>pigz</code></strong> (<em>Parallel Implementation of GZip</em>)</td></tr><tr><td><code>bzip2</code></td><td><strong><code>pbzip2</code></strong> (<em>Parallel BZIP2</em>)</td></tr><tr><td><code>xz</code></td><td><strong><code>pixz</code></strong> <em>(o <code>xz -T0</code> nativo)</em></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Paso 1: Instalación</h3>



<p class="wp-block-paragraph">En la mayoría de distribuciones basadas en Debian, Ubuntu o Raspberry Pi OS, estas herramientas no vienen instaladas por defecto, pero se instalan con un solo comando:</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install pigz pbzip2 pixz pv</code></pre>



<h3 class="wp-block-heading">Paso 2: Uso directo de los comandos multihilo</h3>



<p class="wp-block-paragraph">Funcionan con las mismas banderas básicas que ya conoces (<code>-k</code> para mantener el original, <code>-d</code> para descomprimir, <code>-9</code> para máxima compresión):</p>



<pre class="wp-block-code"><code># Comprimir un archivo usando TODOS los núcleos de la CPU con pigz
pigz -k -9 base_de_datos.sql
# Genera: base_de_datos.sql.gz (mucho más rápido que gzip)

# Descomprimir a máxima velocidad con pigz
pigz -d base_de_datos.sql.gz

# Comprimir con pbzip2 (repartiendo carga entre núcleos)
pbzip2 -k imagen.iso
</code></pre>



<h3 class="wp-block-heading">Paso 3: Usar herramientas multihilo directamente con <code>tar</code></h3>



<p class="wp-block-paragraph">Para que <code>tar</code> no use el <code>gzip</code> tradicional sino <code>pigz</code>, se utiliza el flag <strong><code>-I</code></strong> (o <code>--use-compress-program=</code>), indicándole a <code>tar</code> qué motor de compresión externo debe emplear:</p>



<pre class="wp-block-code"><code># Empaquetar y comprimir una carpeta a la máxima velocidad posible usando pigz:
tar -I pigz -cvf backup_ultrarrapido.tar.gz /var/www/html

# Lo mismo para bzip2 multihilo (pbzip2):
tar -I pbzip2 -cvf backup.tar.bz2 /var/www/html

# Lo mismo para xz multihilo (pixz):
tar -I pixz -cvf backup.tar.xz /var/www/html</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota para XZ:</strong> El comando <code>xz</code> moderno ya incluye soporte multihilo sin instalar nada extra. Solo debes pasarle el flag <code>-T0</code> para usar todos los núcleos disponibles:</p>



<pre class="wp-block-code"><code>tar -I "xz -T0" -cvf backup.tar.xz /var/www/html</code></pre>
</blockquote>



<h3 class="wp-block-heading">2. Barras de progreso en tiempo real con <code>pv</code> (<em>Pipe Viewer</em>)</h3>



<p class="wp-block-paragraph">Cuando comprimes un archivo o carpeta de varios Gigabytes desde la terminal, la pantalla se queda congelada sin mostrar si el proceso va por el 10% o el 90%, ni cuánto tiempo falta.</p>



<p class="wp-block-paragraph">La herramienta <strong><code>pv</code></strong> (<em>Pipe Viewer</em>) intercepta el flujo de datos entre comandos (tuberías o <em>pipes</em><code>|</code>) y muestra una <strong>barra de progreso en tiempo real</strong> con velocidad de transferencia, tiempo transcurrido y tiempo estimado de finalización (ETA).</p>



<pre class="wp-block-code"><code>&#91;===&gt;                                       ] 12% 14.2MB/s ETA 0:04:32</code></pre>



<h3 class="wp-block-heading">Ejemplo 1: Ver el progreso al comprimir un solo archivo grande</h3>



<p class="wp-block-paragraph">En lugar de lanzar <code>gzip archivo.iso</code>, hacemos pasar el archivo a través de <code>pv</code>:</p>



<pre class="wp-block-code"><code>pv archivo.iso | pigz &gt; archivo.iso.gz</code></pre>



<ul class="wp-block-list">
<li><strong>Explicación:</strong><code> </code><code>pv</code> lee <code>archivo.iso</code>, muestra la barra de progreso en pantalla mientras lo pasa por la tubería <code>|</code> a <code>pigz</code>, y el resultado se guarda en <code>archivo.iso.gz</code>.</li>
</ul>



<h3 class="wp-block-heading">Ejemplo 2: Ver el progreso al empaquetar una carpeta con <code>tar</code></h3>



<p class="wp-block-paragraph">Para ver la barra de progreso mientras empaquetas y comprimes una carpeta entera:</p>



<pre class="wp-block-code"><code>tar -cf - /var/www/html | pv | pigz &gt; backup_con_progreso.tar.gz</code></pre>



<ul class="wp-block-list">
<li><strong><code>tar -cf - /var/www/html</code></strong>: Empaqueta la carpeta y, en vez de crear un archivo en disco directamente, manda el resultado a la salida estándar (<code>-</code>).</li>



<li><strong><code>| pv |</code></strong>: Mide los datos que van pasando y dibuja la barra de progreso.</li>



<li><strong><code>| pigz &gt; backup_con_progreso.tar.gz</code></strong>: Recibe el flujo, lo comprime usando todos los núcleos de la CPU y lo guarda finalmente en el archivo de destino.</li>
</ul>



<h3 class="wp-block-heading">Ejemplo 3: Ver el progreso al descomprimir</h3>



<pre class="wp-block-code"><code>pv backup.tar.gz | pigz -d | tar -x</code></pre>



<ul class="wp-block-list">
<li>Lee el comprimido mostrando la barra de progreso (<code>pv</code>), lo descomprime en memoria con todos los núcleos (<code>pigz -d</code>) y lo extrae en el directorio actual (<code>tar -x</code>).</li>
</ul>



<h2 class="wp-block-heading">Conclusión: Pon tu disco duro a dieta</h2>



<p class="wp-block-paragraph">Ahora que ya conoces los entresijos del empaquetamiento y la compresión en la terminal de Linux, no hay archivo grande ni directorio pesado que se te resista. Al final, esto es como un gimnasio de alto rendimiento para tus datos: la clave no está en «sudar» CPU a lo loco, sino en elegir la rutina adecuada para cada caso:</p>



<ul class="wp-block-list">
<li><strong>Si necesitas velocidad pura y cero esperas:</strong> Tira de <code>gzip</code> o, mejor aún, desata toda la potencia multihilo con <code>pigz</code>.</li>



<li><strong>Si el espacio en disco o el ancho de banda son sagrados:</strong> Dale caña con la mancuerna pesada de <code>xz</code> (o <code>pixz</code>) para arañar hasta el último megabyte.</li>



<li><strong>Y no olvides la regla de oro:</strong> <em>Empaquetar</em> junta los archivos ordenadamente con sus permisos; <em>comprimir</em> los encoge.</li>
</ul>



<p class="wp-block-paragraph">Dominar estas herramientas y sus alternativas modernas marca la diferencia entre un administrador que se queda mirando una pantalla congelada y uno que optimiza recursos e infraestructura como un profesional.</p>



<p class="wp-block-paragraph">En la próxima entrada daremos el paso definitivo: cogeremos todo este músculo de compresión multihilo y lo integraremos en un <a href="https://linuxete.duckdns.org/copias-de-seguridad-notificaciones-en-telegram-systemd-timers/"><strong>sistema de backups automatizado con Systemd y avisos directos al móvil por Telegram</strong>.</a></p>



<p class="wp-block-paragraph">¿Cuál es tu combinación favorita en el día a día? ¿Eres más de primar la velocidad o de buscar el máximo ahorro de espacio? ¡Nos leemos en los comentarios!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/empaquetado-y-compresion-en-linux-desde-la-terminal/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como ser invisible con Tor y Proxychains.</title>
		<link>https://linuxete.duckdns.org/como-ser-invisible-con-tor-y-proxychains/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-ser-invisible-con-tor-y-proxychains</link>
					<comments>https://linuxete.duckdns.org/como-ser-invisible-con-tor-y-proxychains/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 18:04:39 +0000</pubDate>
				<category><![CDATA[Seguridad y Privacidad]]></category>
		<category><![CDATA[Tor]]></category>
		<category><![CDATA[IP segura]]></category>
		<category><![CDATA[occultar IP]]></category>
		<category><![CDATA[proxychains]]></category>
		<category><![CDATA[Tor y Proxychains]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4646</guid>

					<description><![CDATA[Cuando hablamos de Tor, la mayoría piensa inmediatamente en el Tor Browser, ese navegador basado en Firefox que nos permite navegar de forma anónima. Y sí, es su herramienta más conocida. Pero la red Tor es mucho más que un navegador: es un protocolo, una red de nodos voluntarios que permite enrutar tráfico de forma [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Cuando hablamos de Tor, la mayoría piensa inmediatamente en el <strong>Tor Browser</strong>, ese navegador basado en Firefox que nos permite navegar de forma anónima. Y sí, es su herramienta más conocida. Pero la red Tor es mucho más que un navegador: es un protocolo, una red de nodos voluntarios que permite enrutar tráfico de forma anónima y cifrada. Y en Linux, tenemos la ventaja de poder aprovechar esta red para prácticamente cualquier aplicación que use TCP, desde un cliente de IRC hasta una herramienta de escaneo como Nmap, pasando por simples peticiones <code>curl</code>. La clave está en una herramienta modesta pero poderosa: <strong>Proxychains</strong>.</p>



<p class="wp-block-paragraph">En esta entrada, te voy a enseñar cómo instalar, configurar y usar Proxychains junto con Tor para que puedas anonimizar el tráfico de cualquier comando en tu terminal. Verás que es más sencillo de lo que imaginas y te abrirá un mundo de posibilidades para pruebas de penetración, investigación o simplemente para mantener tu privacidad.</p>



<p class="wp-block-paragraph">Mediante la combinación de <strong>Tor</strong> y <strong>Proxychains</strong>, podemos dinamizar nuestras conexiones a través de múltiples nodos intermedios cifrados de forma transparente.</p>



<h2 class="wp-block-heading">¿Qué es Proxychains y cómo funciona con Tor?</h2>



<p class="wp-block-paragraph"><strong>Proxychains</strong> es una herramienta que fuerza a cualquier aplicación TCP (que no sea demasiado compleja) a pasar su tráfico a través de una <strong>cadena de proxies</strong>. En su configuración, podemos definir uno o varios proxies, y el tráfico irá saltando de uno a otro secuencialmente. Normalmente, se usa con un único proxy, que es el de Tor.</p>



<p class="wp-block-paragraph">Tor, por su parte, expone un proxy <strong>SOCKS5</strong> en el puerto <code>9050</code> (por defecto) que acepta conexiones. Al configurar Proxychains para que use ese proxy, cualquier comando lanzado con <code>proxychains</code> enviará su tráfico a través del proxy de Tor, y Tor se encargará de enrutarlo a través de su red de nodos (por lo general, 3 saltos). De esta forma, la aplicación final no sabe que está usando Tor, y el tráfico sale de tu máquina cifrado hacia el primer nodo.</p>



<p class="wp-block-paragraph">Lo interesante es que Proxychains puede encadenar múltiples proxies (por ejemplo, SOCKS5, HTTP, etc.), aunque lo más común es usar solo el de Tor.</p>



<h3 class="wp-block-heading">¿Qué necesitamos?</h3>



<p class="wp-block-paragraph">El proceso es sumamente sencillo y no requiere alterar la configuración global de red de nuestro sistema ni del router. Únicamente instalaremos dos herramientas:</p>



<ul class="wp-block-list">
<li><strong>Tor:</strong> El servicio que creará el túnel SOCKS5 local.</li>



<li><strong>Proxychains4:</strong> Un enlazador (<em>dynamically linked library</em>) que intercepta las llamadas de red TCP de cualquier programa y las fuerza a pasar por el proxy elegido.</li>
</ul>



<h3 class="wp-block-heading">Paso 1: Instalación de paquetes</h3>



<p class="wp-block-paragraph">En distribuciones basadas en Debian/Ubuntu:</p>



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



<h3 class="wp-block-heading">Paso 2: Configuración de Proxychains</h3>



<p class="wp-block-paragraph">El archivo de configuración principal de Proxychains se encuentra en <code>/etc/proxychains4.conf</code> (o <code>/etc/proxychains.conf</code>). Lo editaremos con nuestro editor favorito (necesitamos permisos de superusuario).</p>



<pre class="wp-block-preformatted">Para nuestro caso, con un solo proxy (Tor), da igual cual uses. Recomiendo dynamic_chain por si acaso.</pre>



<p class="wp-block-paragraph">Dentro del archivo, hay varias secciones. Las más importantes son:</p>



<h3 class="wp-block-heading">a) Modo de cadena</h3>



<ul class="wp-block-list">
<li><strong><code>strict_chain</code></strong>: todos los proxies deben estar disponibles, y el tráfico pasa por todos en orden.</li>



<li><strong><code>dynamic_chain</code></strong>: igual que strict, pero si algún proxy falla, lo omite (siempre que haya al menos uno funcionando).</li>



<li><strong><code>random_chain</code></strong>: selecciona un orden aleatorio de los proxies listados.</li>
</ul>



<p class="wp-block-paragraph">Para nuestro caso, usaremos <code>dynamic_chain</code> ya que, para nuestro caso, con un único proxy (Tor), da igual usar <code>strict_chain</code> o <code>dynamic_chain</code>. Si en el futuro añades más proxies, <code>random_chain</code> puede ser útil para variar el orden.</p>



<p class="wp-block-paragraph">Busca la línea <code>#dynamic_chain</code> y descoméntala (quita el <code>#</code>). </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Verifica que las opciones <code>strict_chain</code> y <code>random_chain</code> están comentadas. (añade el #).</p>
</blockquote>



<h3 class="wp-block-heading">b) Proxy DNS</h3>



<p class="wp-block-paragraph">Esta sección aborda el gran peligro olvidado de este tipo de configuraciones: <strong>las fugas de DNS (<em>DNS Leaks</em>)</strong>, además de añadir un truco para cambiar de IP a voluntad y una tabla clara de compatibilidad.</p>



<p class="wp-block-paragraph">De nada sirve ocultar tu dirección IP mediante Tor si tu sistema sigue enviando las peticiones de nombres (DNS) a través de tu proveedor de internet habitual o del router de casa. Si esto ocurre, cualquiera que analice el tráfico sabrá exactamente qué dominios estás visitando.</p>



<p class="wp-block-paragraph">Para evitar esto, <code>proxychains4</code> incluye una directiva para forzar a que la resolución de nombres viaje <strong>cifrada por el propio túnel de Tor</strong>.</p>



<p class="wp-block-paragraph">Asegúrate de que en <code>/etc/proxychains4.conf</code> la siguiente línea está activa (sin el <code>#</code> al principio):</p>



<pre class="wp-block-code"><code>proxy_dns</code></pre>



<h4 class="wp-block-heading">¿Cómo verificar que estás 100% protegido?</h4>



<p class="wp-block-paragraph">Abre tu navegador pasando por el proxy:</p>



<pre class="wp-block-code"><code>proxychains firefox https://dnsleaktest.com</code></pre>



<p class="wp-block-paragraph">Haz clic en <strong>Extended test</strong>. Si en los resultados de los servidores DNS únicamente aparecen nodos de la red Tor (y en ningún caso la IP de tu proveedor o de tu servidor local), tu anonimato es <strong>total</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Nota:</strong> <code>proxy_dns</code> funciona con la mayoría de aplicaciones de terminal, pero navegadores como Firefox pueden tener su propia resolución DNS (especialmente si usan DNS sobre HTTPS). Para estos casos, asegúrate de configurar también el proxy DNS dentro del navegador (como se explica en el Método 2).</p>
</blockquote>



<h3 class="wp-block-heading">c) Lista de proxies</h3>



<p class="wp-block-paragraph">Al final del archivo, verás una sección con <code>[ProxyList]</code>. Por defecto, suele haber una línea comentada que dice <code>#socks4 127.0.0.1 9050</code> o similar. Debemos agregar la línea correspondiente a Tor:</p>



<pre class="wp-block-preformatted">socks5 127.0.0.1 9050</pre>



<p class="wp-block-paragraph">Asegúrate de que no haya otras líneas descomentadas que puedan interferir (a menos que quieras una cadena de varios proxies). Guarda el archivo y cierra.</p>



<p class="wp-block-paragraph">Con esto, Proxychains ya está listo para usar.</p>



<p class="wp-block-paragraph">Guarda los cambios y sal del editor.</p>



<h3 class="wp-block-heading">Paso 3: Arrancar el servicio Tor</h3>



<p class="wp-block-paragraph">Iniciamos y habilitamos el servicio Tor en el sistema:</p>



<pre class="wp-block-code"><code>sudo systemctl enable --now tor</code></pre>



<p class="wp-block-paragraph">Puedes verificar que está activo y corriendo con:</p>



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



<p class="wp-block-paragraph">Puedes verificar que Tor está escuchando en el puerto 9050:</p>



<pre class="wp-block-preformatted">sudo netstat -tulpn | grep 9050</pre>



<h4 class="wp-block-heading">Paso 4: Comprobar tu IP pública en la terminal</h4>



<p class="wp-block-paragraph">Prueba a realizar una petición con <code>curl</code> normal y luego mediante <code>proxychains</code>:</p>



<pre class="wp-block-code"><code># Tu IP real:
curl ifconfig.me

# Tu IP anónima (Nodo de salida de Tor):
proxychains curl ifconfig.me</code></pre>



<h2 class="wp-block-heading">¡4 métodos para probar el modo incógnito total en Firefox!</h2>



<p class="wp-block-paragraph">A continuación te detallo cada una de ellas:</p>



<h3 class="wp-block-heading">Método 1: Cierre completo e inyección con Proxychains (Vía Terminal)</h3>



<p class="wp-block-paragraph">Es el método más directo si prefieres no cambiar nada en la configuración interna de Firefox.</p>



<ol start="1" class="wp-block-list">
<li><strong>Cierra completamente Firefox</strong> (asegúrate de que no quede ningún proceso en segundo plano):<br><code>killall firefox-esr || killall firefox</code></li>



<li><strong>Lánzalo mediante Proxychains:</strong><br><code>proxychains firefox</code></li>
</ol>



<ul class="wp-block-list">
<li><strong>Ventaja:</strong> No altera tus ajustes de uso diario. Al cerrar el navegador, todo vuelve a la normalidad.</li>



<li><strong>Inconveniente:</strong> Si abres otra ventana sin usar la terminal, volverá a salir por tu red habitual.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Cualquier comando que ejecutes antecedido por <code>proxychains</code> saldrá a internet a través de la red Tor.</p>
</blockquote>



<h3 class="wp-block-heading">Método 2: Configuración manual en ajustes (El método estándar)</h3>



<p class="wp-block-paragraph">Si vas a usar un equipo o máquina virtual dedicada exclusivamente a la navegación anónima, puedes dejar los ajustes fijados en el propio navegador.</p>



<ol start="1" class="wp-block-list">
<li>Abre Firefox y ve a <strong>Ajustes &gt; General &gt; Configuración de red</strong> (al final de la página) y pulsa en <strong>Ajustes&#8230;</strong></li>



<li>Selecciona <strong>Configuración manual del proxy</strong>.</li>



<li>En <strong>Host SOCKS</strong>, introduce <code>127.0.0.1</code> y en <strong>Puerto</strong><code>9050</code>.</li>



<li>Marca la casilla <strong>SOCKS v5</strong>.</li>



<li><strong>Paso crítico:</strong> Activa la opción <strong>DNS remoto</strong> (<em>Proxy DNS al usar SOCKS v5</em>). Esto evita las temidas fugas de DNS (<em>DNS leaks</em>).</li>
</ol>



<h3 class="wp-block-heading">Método 3: Crear un perfil de Firefox dedicado (Recomendado)</h3>



<p class="wp-block-paragraph">Esta es la solución más limpia si utilizas el mismo ordenador para tu día a día y para tareas de anonimato. Te permite tener un Firefox «normal» y un Firefox «Tor» funcionando <strong>al mismo tiempo</strong> sin que interfieran.</p>



<ol start="1" class="wp-block-list">
<li><strong>Abre el gestor de perfiles de Firefox:</strong><br><code>firefox -P</code></li>



<li>Crea un perfil nuevo llamado, por ejemplo, <code>Anonimo</code>.</li>



<li>Inicia Firefox con ese perfil y aplica la <strong>Configuración manual del proxy SOCKS5</strong> (los pasos del Método 2).</li>



<li><strong>Lanzamiento independiente:</strong> A partir de este momento, puedes lanzar tu perfil anónimo desde la terminal o mediante un acceso directo sin tener que cerrar tu Firefox habitual:<br>Bash<code>firefox -P "Anonimo" --no-remote </code><em>(El parámetro <code>--no-remote</code> es la clave para obligar a Firefox a crear una instancia de proceso totalmente separada en memoria).</em></li>
</ol>



<h3 class="wp-block-heading">Método 4: Extensión conmutadora rápida (FoxyProxy)</h3>



<p class="wp-block-paragraph">Si prefieres alternar entre tu conexión nativa y la red Tor con un solo clic desde la barra de herramientas:</p>



<ol start="1" class="wp-block-list">
<li>Instala la extensión <strong>FoxyProxy Standard</strong> desde la tienda de complementos de Firefox.</li>



<li>Añade un nuevo proxy con los siguientes datos:
<ul class="wp-block-list">
<li><strong>Tipo:</strong> SOCKS5</li>



<li><strong>IP / Host:</strong><code>127.0.0.1</code></li>



<li><strong>Puerto:</strong><code>9050</code></li>



<li><strong>DNS remoto:</strong> Activado</li>
</ul>
</li>



<li>Guarda y activa el perfil de Tor desde el icono de la extensión cuando lo necesites, y desactívalo para volver a tu velocidad nativa.</li>
</ol>



<h3 class="wp-block-heading">Resumen de uso</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Método</strong></td><td><strong>Ideal para&#8230;</strong></td><td><strong>¿Requiere cerrar Firefox?</strong></td></tr></thead><tbody><tr><td><strong>Proxychains + Terminal</strong></td><td>Pruebas puntuales sin guardar ajustes.</td><td><strong>Sí</strong></td></tr><tr><td><strong>Ajustes del sistema</strong></td><td>Equipos dedicados 100 % a privacidad.</td><td>No</td></tr><tr><td><strong>Perfil aislado (<code>--no-remote</code>)</strong></td><td>Mantener sesión personal y anónima simultáneas.</td><td><strong>No</strong></td></tr><tr><td><strong>Extensión FoxyProxy</strong></td><td>Alternar con un clic en tu navegador habitual.</td><td><strong>No</strong></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">¡Valor añadido!</h2>



<h4 class="wp-block-heading">Truco pro: Cambiar la IP de salida: el truco y su alternativa</h4>



<p class="wp-block-paragraph">Cuando usas <code>random_chain</code>, Proxychains alternará la ruta, pero si necesitas refrescar tu identidad de salida de Tor inmediatamente desde la terminal sin reiniciar el servicio, puedes enviarle la señal <code>SIGHUP</code> al demonio de Tor:</p>



<pre class="wp-block-preformatted">sudo killall -HUP tor</pre>



<p class="wp-block-paragraph">Este comando envía una señal a Tor para que recargue su configuración, lo que <strong>puede</strong> renovar el circuito y darte una nueva IP de salida. Sin embargo, <strong>no siempre funciona</strong>: en algunas versiones, <code>HUP</code> solo recarga la configuración sin forzar un nuevo circuito, y es posible que la IP siga siendo la misma.</p>



<p class="wp-block-paragraph">Si necesitas garantía de cambio, la opción más fiable y sencilla es <strong>reiniciar el servicio de Tor</strong>:</p>



<pre class="wp-block-preformatted">sudo systemctl restart tor</pre>



<p class="wp-block-paragraph">Este método es infalible: detiene y arranca Tor, lo que obliga a construir un circuito completamente nuevo y, por tanto, una nueva IP de salida. El único inconveniente es que interrumpe brevemente las conexiones activas que estén usando Tor.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Para usuarios avanzados:</strong> Si quieres un control más fino sin reiniciar el servicio, puedes habilitar el puerto de control de Tor (<code>ControlPort 9051</code>) y usar el comando <code>signal NEWNYM</code> para pedir un nuevo circuito. Pero para la mayoría de los casos, <code>sudo systemctl restart tor</code> es más que suficiente.</p>
</blockquote>



<p class="wp-block-paragraph">Ejecuta de nuevo </p>



<pre class="wp-block-code"><code># Tu IP real:
curl ifconfig.me

# Tu IP anónima (Nodo de salida de Tor):
proxychains curl ifconfig.me</code></pre>



<p class="wp-block-paragraph">y verás que tu IP de salida ha cambiado en cuestión de segundos.</p>



<h3 class="wp-block-heading">Matriz rápida de compatibilidad de herramientas</h3>



<p class="wp-block-paragraph">No todos los comandos reaccionan igual al pasar por un proxy. Aquí tienes una referencia rápida de qué funciona y qué requiere ajustes:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>Herramienta / Protocolo</strong></td><td><strong>¿Funciona con Proxychains?</strong></td><td><strong>Nota de uso</strong></td></tr></thead><tbody><tr><td><strong>HTTP / HTTPS / SOCKS</strong> (<code>curl</code>, <code>wget</code>)</td><td><strong>Sí</strong></td><td>Funcionamiento nativo perfecto.</td></tr><tr><td><strong>Navegadores</strong> (Firefox, Chromium)</td><td><strong>Sí</strong></td><td>Ideal para sesiones aisladas de navegación.</td></tr><tr><td><strong>Control de versiones</strong> (<code>git</code>)</td><td><strong>Sí</strong></td><td>Compatible con clones HTTP/HTTPS.</td></tr><tr><td><strong>Escaneos TCP</strong> (<code>nmap -sT</code>)</td><td><strong>Sí</strong></td><td>Requiere la marca <code>-sT</code> (Connect scan).</td></tr><tr><td><strong>Ping / Tracert</strong> (ICMP)</td><td><strong>No</strong></td><td>Tor no soporta paquetes ICMP RAW.</td></tr><tr><td><strong>Tráfico UDP</strong> (Juegos, VoIP, VPNs)</td><td><strong>No</strong></td><td>Tor solo enruta conexiones TCP.</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Consideraciones importantes</h3>



<ul class="wp-block-list">
<li><strong>Tráfico UDP y RAW:</strong> Tor solo enruta tráfico TCP nativo. Protocolos basados en UDP (como llamadas de voz, streaming en tiempo real o pings ICMP) no funcionarán a través de esta cadena.</li>



<li><strong>Velocidad vs Anonimato:</strong> Al saltar por múltiples nodos cifrados en diferentes partes del mundo, la latencia aumentará. Es una herramienta pensada para <strong>privacidad y anonimato puntual</strong>, no para descargas pesadas del día a día.</li>
</ul>



<p class="wp-block-paragraph">¡Excelente idea para una segunda entrega! Esta segunda parte complementa el primer artículo resolviendo el problema real con el que se topan casi todos los usuarios al intentar tunelizar Firefox hacia Tor.</p>



<h2 class="wp-block-heading">Ejemplos prácticos de uso</h2>



<ul class="wp-block-list">
<li><strong>Navegación desde terminal:</strong><br><code>proxychains lynx https://check.torproject.org</code> o <code>proxychains elinks https://check.torproject.org</code> para navegar por sitios web desde la terminal a través de Tor.</li>



<li><strong>Descarga de archivos:</strong><br><code>proxychains wget https://ejemplo.com/archivo.zip</code> descargará el archivo de forma anónima.</li>



<li><strong>Clientes IRC:</strong><br>Si usas <code>irssi</code> o <code>weechat</code>, puedes lanzarlos con proxychains y así ocultar tu IP real en los chats.</li>



<li><strong>Escaneo de puertos con Nmap:</strong><br><code>proxychains nmap -sT -Pn -p 80,443 192.168.1.1</code> (nota: solo escaneo TCP, y con <code>-Pn</code> para omitir el ping ICMP). Es útil para hacer escaneos externos sin revelar tu IP, aunque ten en cuenta que Tor no está diseñado para escaneos masivos y puede ser lento.</li>



<li><strong>Conexiones SSH:</strong><br><code>proxychains ssh usuario@servidor</code> te permite conectarte a un servidor SSH a través de Tor, aunque la latencia será alta.</li>



<li><strong>Uso con herramientas de pentesting:</strong><br>Muchas herramientas como <code>sqlmap</code>, <code>nikto</code>, etc., se pueden anteponer con <code>proxychains</code> para ocultar el origen.</li>



<li><strong>Clonar repositorios de Git de forma anónima:</strong><br>Descarga el código fuente de un proyecto público (o privado mediante HTTPS) sin dejar rastro de nuestra ubicación ni de nuestra IP pública en los registros (<em>logs</em>) de servidores como GitHub, GitLab o Bitbucket. <br><code>proxychains git clone https://github.com/usuario/proyecto.git</code><br></li>
</ul>



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



<p class="wp-block-paragraph"><strong>Verificación rápida</strong>: ejecuta este comando para confirmar que todo funciona:</p>



<pre class="wp-block-preformatted">proxychains curl https://check.torproject.org/api/ip</pre>



<p class="wp-block-paragraph">Si la respuesta contiene <code>"IsTor": true</code>, todo está correcto.</p>



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



<p class="wp-block-paragraph">Como has visto, combinar Tor con Proxychains en Linux es una forma sencilla y efectiva de anonimizar el tráfico de cualquier aplicación de terminal. Ya sea para proteger tu privacidad al navegar, para realizar pruebas de seguridad o simplemente por curiosidad, esta dupla te ofrece un control total sobre el enrutamiento de tus conexiones.</p>



<p class="wp-block-paragraph">Recuerda siempre mantener Tor actualizado y ser consciente de las limitaciones. La privacidad es un proceso, no un producto, y cada herramienta suma en ese camino.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-ser-invisible-con-tor-y-proxychains/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo respaldar tu blog de WordPress en Raspberry Pi</title>
		<link>https://linuxete.duckdns.org/como-respaldar-tu-blog-de-wordpress-en-raspberry-pi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-respaldar-tu-blog-de-wordpress-en-raspberry-pi</link>
					<comments>https://linuxete.duckdns.org/como-respaldar-tu-blog-de-wordpress-en-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Sun, 05 Jul 2026 17:38:04 +0000</pubDate>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[backup wordpress]]></category>
		<category><![CDATA[Pila Lamp]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress raspberry pi]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4145</guid>

					<description><![CDATA[Este blog estaba alojado bajo MX Linux 23.6 (basado en Debian 12). Si no había actualizado aún a Trixie, era porque llevaba esperando desde agosto de 2025 la nueva versión de MX Linux para Raspberry Pi. Pero el destino es caprichoso: justo ahora, cuando me he hartado de esperar y he migrado a Raspberry Pi [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Este blog estaba alojado bajo MX Linux 23.6 (basado en Debian 12). Si no había actualizado aún a Trixie, era porque llevaba esperando desde agosto de 2025 la nueva versión de MX Linux para Raspberry Pi. Pero el destino es caprichoso: justo ahora, cuando me he hartado de esperar y he migrado a <a href="https://linuxete.duckdns.org/como-instalar-raspberry-pi-os-con-xfce4-en-raspberry-pi/">Raspberry Pi OS con escritorio XFCE4</a>, va y sale la tan esperada versión 25. A pesar del lanzamiento, ya no voy a dar marcha atrás; la migración está hecha y, viendo el excelente rendimiento que me está dando XFCE4 en mi placa, creo que me quedaré aquí al menos hasta la próxima versión de Debian.</p>



<p class="wp-block-paragraph">Migrar un blog, especialmente cuando cambias el sistema operativo de base (en este caso, de un entorno Debian 12 a un Raspberry Pi OS basado en Debian 13), es un proyecto sumamente divertido y una oportunidad excelente para aprender.</p>



<p class="wp-block-paragraph">El proceso es bastante sencillo si se siguen los pasos adecuados. Básicamente, consiste en empaquetar el blog (tanto los archivos como la base de datos) desde el disco antiguo para luego desempaquetarlo en el nuevo. A continuación, te guío paso a paso para que puedas hacerlo tú mismo sin perder absolutamente nada en el camino.</p>



<h3 class="wp-block-heading">Resumen</h3>



<ol class="wp-block-list">
<li><strong>Instalar WordPress:</strong> Hazlo en el nuevo disco, exactamente igual que aquí <a href="https://linuxete.duckdns.org/instala-wordpress-en-tu-raspberry-pi-4/">Instala WordPress en tu Raspberry Pi 4</a>.</li>



<li><strong>Respaldar el Blog Viejo (MX Linux):</strong> Hacer una copia de seguridad de los archivos de WordPress y de la base de datos.</li>



<li><strong>Migrar los Datos al Nuevo Servidor:</strong> Copiar los archivos y la base de datos al disco nuevo.</li>



<li><strong>Ajustar la Configuración:</strong> Revisar el archivo <code>wp-config.php</code> para que use la nueva base de datos.</li>



<li><strong>Dar los Toques Finales:</strong> Aplicar los permisos correctos y listo.</li>
</ol>



<p class="wp-block-paragraph">Ahora, vamos a verlo en detalle.</p>



<h3 class="wp-block-heading">Paso 1: Prepara tu Nuevo Servidor (Raspberry Pi OS)</h3>



<p class="wp-block-paragraph">Como la finalidad de esta entrada no es explicar cómo instalar WordPress desde cero, te recomiendo echar un vistazo a mi artículo <strong>«<a href="https://linuxete.duckdns.org/instala-wordpress-en-tu-raspberry-pi-4/">Instala WordPress en tu Raspberry Pi 4</a>«</strong>. Aunque ya tiene algún tiempo, sigue siendo perfectamente vigente tanto para las nuevas versiones de Linux y de la base de datos, como para el propio CMS.</p>



<h4 class="wp-block-heading">Prepara la Base de Datos: </h4>



<p class="wp-block-paragraph">Antes de crear la base de datos,  toma nota del  nombre y contraseña que usaste anteriormente, ejecutando en tu antiguo WordPress este comando.</p>



<pre class="wp-block-code"><code>sudo nano /var/www/html/wp-config.php</code></pre>



<p class="wp-block-paragraph">Busca las siguientes líneas y toma nota de los datos que ahí aparecen. (especialmente la contraseña):</p>



<pre class="wp-block-code"><code>define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wordpress' );
define( 'DB_PASSWORD', 'tu_contraseña_segura' );
define( 'DB_HOST', 'localhost' );</code></pre>



<p class="wp-block-paragraph">Ahora crea la base de datos con los datos que hemos apuntado. </p>



<p class="wp-block-paragraph">Accede a MariaDB usando los mismos nombres y contraseña que los del antiguo blog para evitar cambios.</p>



<pre class="wp-block-code"><code><strong>sudo mysql -u root -p</strong>
CREATE DATABASE wordpress;
CREATE USER wordpress@localhost IDENTIFIED BY 'tu_contraseña_segura';
GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost;
FLUSH PRIVILEGES;
EXIT;</code></pre>



<h3 class="wp-block-heading">Paso 2: Respaldar el Blog en tu Raspberry Pi Vieja (MX Linux)</h3>



<p class="wp-block-paragraph">Este es el paso más crítico. Vamos a comprimir todos los archivos y a exportar la base de datos.</p>



<p class="wp-block-paragraph"><strong>1- Comprime los archivos de WordPress</strong>: </p>



<p class="wp-block-paragraph">En tu Raspberry Pi vieja, ejecuta:</p>



<pre class="wp-block-code"><code><code># Ve al directorio donde está WordPress</code>
<code>cd /var/www/html/</code>
<code># Comprime TODO el contenido en un archivo llamado 'mi_blog_backup.tar.gz'</code>
<code>sudo tar -czvf mi_blog_backup.tar.gz .</code></code></pre>



<p class="wp-block-paragraph">Este comando creará un archivo comprimido. Te recomiendo que lo muevas a tu carpeta de usuario para poder acceder a él fácilmente más tarde:</p>



<pre class="wp-block-code"><code><code>sudo mv mi_blog_backup.tar.gz /home/tu_usuario/</code></code></pre>



<p class="wp-block-paragraph"><strong>2- Exporta la base de datos: </strong></p>



<p class="wp-block-paragraph">Aún en la terminal de la Raspberry Pi vieja, ejecuta:</p>



<pre class="wp-block-code"><code># Tenemos que ser root para trabajar con esto. No podemos hacerlo con sudo
sudo -i<code># Ahora que eres root, exporta toda la base de datos 'wordpress' a un archivo .sql </code>
<code>mysqldump -u wordpress -p wordpress &gt; wordpress_backup.sql </code>
<code># Te pedirá la contraseña del usuario 'wordpress' de la base de datos que ya viste cuando preparaste la base de datos</code></code></pre>



<p class="wp-block-paragraph"><code>Al igual que con los archivos, si no estás en el directorio /home/tu_usuario/</code>, te recomiendo mover el archivo .sql allí: </p>



<pre class="wp-block-code"><code><code>mv wordpress_backup.sql /home/tu_usuario/</code></code></pre>



<p class="wp-block-paragraph">Ahora ya puedes salir con un <code>exit</code> para volver a ser un plebeyo.</p>



<h3 class="wp-block-heading">Paso 3: Copiar los Respaldos a la Nueva Raspberry Pi</h3>



<p class="wp-block-paragraph">Ahora tienes dos archivos en la Raspberry vieja: <code>mi_blog_backup.tar.gz</code> y <code>wordpress_backup.sql</code>. Vamos a pasarlos a la nueva.</p>



<p class="wp-block-paragraph">El método más sencillo es usar es usar un pendrive o memoria usb, copiarlos y pegarlos en la nueva Raspberry.</p>



<p class="wp-block-paragraph">Pero si por algún extraño motivo, no tienes acceso a la antigua raspberry porque está alojada en el bunker de la Casa Blanca y no quieres ir allí y tropezarte por los pasillos con Donald Trump, existe el modo de utiliizar <code>rsync</code> o <code>scp</code> desde la <strong>nueva Raspberry Pi</strong>.</p>



<p class="wp-block-paragraph">En una terminal de tu <strong>nuevo sistema</strong>, ejecuta:</p>



<pre class="wp-block-code"><code># Copia el archivo comprimido de los temas, plugins y medios
rsync -avz tu_usuario@IP_DE_LA_RASPBERRY_VIEJA:/home/tu_usuario/mi_blog_backup.tar.gz /tmp/

# Copia el archivo .sql de la base de datos
rsync -avz tu_usuario@IP_DE_LA_RASPBERRY_VIEJA:/home/tu_usuario/wordpress_backup.sql /tmp/</code></pre>



<p class="wp-block-paragraph">Recuerda cambiar <code>tu_usuario</code> por tu nombre de usuario y <code>IP_DE_LA_RASPBERRY_VIEJA</code> por su IP.</p>



<h3 class="wp-block-heading">Paso 4: Restaurar los Datos en la Nueva Raspberry Pi</h3>



<p class="wp-block-paragraph">¡Ya estamos en la recta final! Ahora trabajaremos completamente en tu nueva Raspberry Pi.</p>



<p class="wp-block-paragraph">Como siempre voy por el camino mas fácil, he transferido desde un pendrive los archivos a mi directorio home, con lo que trabajaremos desde ahí.</p>



<p class="wp-block-paragraph"><strong>1- Restaura los archivos de WordPress</strong></p>



<p class="wp-block-paragraph">Limpia el directorio por defecto de Apache (por si acaso)</p>



<pre class="wp-block-code"><code>sudo rm -rf /var/www/html/*</code></pre>



<p class="wp-block-paragraph">Ve al directorio donde copiaste el backup, en mi caso en la /home</p>



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



<p class="wp-block-paragraph">Descomprime todo el backup directamente en el directorio web</p>



<pre class="wp-block-code"><code>sudo tar -xzvf mi_blog_backup.tar.gz -C /var/www/html/</code></pre>



<p class="wp-block-paragraph"><strong>2-  Restaura la base de datos.</strong></p>



<p class="wp-block-paragraph">Aún en el directorio /home, importa el archivo .sql a tu nueva base de datos &#8216;wordpress&#8217;. Te pedirá la contraseña que creaste en el Paso 1 para el usuario &#8216;wordpress&#8217; (o la que uses)</p>



<pre class="wp-block-code"><code>mysql -u wordpress -p wordpress &lt; wordpress_backup.sql</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Nota:  Si cambiaste el nombre de la base de datos, el usuario o la contraseña en el Paso 1, debes actualizar el archivo de configuración de WordPress.</p>



<pre class="wp-block-code"><code>sudo nano /var/www/html/wp-config.php</code></pre>



<p class="wp-block-paragraph">Busca las siguientes líneas y asegúrate de que los datos son correctos (especialmente la contraseña):</p>



<pre class="wp-block-code"><code>define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wordpress' );
define( 'DB_PASSWORD', 'tu_contraseña_segura' );
define( 'DB_HOST', 'localhost' );</code></pre>
</blockquote>



<p class="wp-block-paragraph">Guarda el archivo con <code>Ctrl+O</code>, Enter, y luego <code>Ctrl+X</code> para salir.</p>



<p class="wp-block-paragraph">3<strong>&#8211; Configura los permisos correctos</strong>:<br>Para que WordPress pueda funcionar sin problemas (instalar plugins, subir imágenes, etc.), el usuario del servidor web (<code>www-data</code>) debe ser el propietario de los archivos.</p>



<pre class="wp-block-code"><code>sudo chown -R www-data:www-data /var/www/html/</code></pre>



<h3 class="wp-block-heading">Paso 5: Toques Finales</h3>



<p class="wp-block-paragraph">Ya está. Ahora toca la mejor parte: comprobar que todo funciona.</p>



<ol class="wp-block-list">
<li><strong>Prueba tu blog</strong>: Abre un navegador web en la dirección IP de tu <strong>nueva Raspberry Pi</strong> (por ejemplo, <code>http://192.168.1.XX</code>).
<ul class="wp-block-list">
<li>Si ves tu blog con normalidad, ¡la migración ha sido un éxito!</li>



<li>Si ves un error de «Error al establecer la conexión con la base de datos», revisa de nuevo el paso 4.3 (el <code>wp-config.php</code>).</li>



<li>Si ves un error de «404» o «No encontrado» al intentar entrar al panel de administración (<code>/wp-admin</code>), prueba a volver a guardar los enlaces permanentes: ve a <code>Escritorio &gt; Ajustes &gt; Enlaces permanentes</code> y simplemente haz clic en «Guardar cambios». Esto regenerará las reglas de enrutamiento de WordPress .</li>
</ul>
</li>



<li><strong>Redirige el tráfico de Internet (Punto final)</strong>: Cuando estés completamente seguro de que todo funciona en tu nueva Raspberry Pi, ha llegado el momento de hacer el cambio definitivo.
<ul class="wp-block-list">
<li><strong>Actualiza tu DNS Dinámico (DuckDNS)</strong>: Si usas DuckDNS, simplemente actualiza la IP en tu cuenta de DuckDNS para que apunte a la nueva IP de tu Raspberry Pi (esto asumiendo que ambas están en la misma red doméstica y usan la misma IP pública). Si la nueva Pi tiene una IP local diferente, asegúrate de que el reenvío de puertos (80 y 443) de tu router esté apuntando a la nueva IP.</li>



<li><strong>Certificados SSL (Let&#8217;s Encrypt)</strong>: Una vez que el tráfico ya se dirige a la máquina nueva, <strong>renueva el certificado SSL</strong> con Certbot en la nueva Raspberry Pi para que HTTPS siga funcionando. El comando es el mismo que usaste la primera vez:<br><code>bash sudo certbot --apache</code><br>Sigue las instrucciones y, cuando te pregunte sobre redirigir el tráfico, elige la opción 2 para redirigir de HTTP a HTTPS.</li>
</ul>
</li>
</ol>



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



<p class="wp-block-paragraph">Ánimo, que con esta guía paso a paso es muy difícil equivocarse. Es un proceso muy gratificante. Si te surge alguna duda durante el proceso, puedes consultar foros como el de Raspberry Pi, donde hay mucha comunidad y suelen ayudar con estos temas .</p>



<p class="wp-block-paragraph">¡Mucha suerte con la mudanza de tu blog!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-respaldar-tu-blog-de-wordpress-en-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>El manual definitivo para navegar 100% seguro con WireGuard, Pi-hole y Unbound.</title>
		<link>https://linuxete.duckdns.org/el-manual-definitivo-para-navegar-100-seguro-con-wireguard-pi-hole-y-unbound/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=el-manual-definitivo-para-navegar-100-seguro-con-wireguard-pi-hole-y-unbound</link>
					<comments>https://linuxete.duckdns.org/el-manual-definitivo-para-navegar-100-seguro-con-wireguard-pi-hole-y-unbound/#respond</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Fri, 03 Jul 2026 18:03:51 +0000</pubDate>
				<category><![CDATA[Seguridad y Privacidad]]></category>
		<category><![CDATA[Unbound]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[pi-hole]]></category>
		<category><![CDATA[WireGuard]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=4573</guid>

					<description><![CDATA[Comenzamos. Una vez hayas completado todos los manuales anteriores, como vimos en WireGuard en Raspberry PI, VPN casera, segura y gratuita. no deberías usar las DNS de Google (8.8.8.8) que se detallaban en el apartado «6.2. Crear los archivos de configuración de cada cliente«. Porque tu cliente de WireGuard en el móvil tiene grabada a [&#8230;]]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">Este es el último manual de una lista que debes poner en marcha en el siguiente orden. </p>



<ol class="wp-block-list">
<li><a href="https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/"></a><a href="https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/">WireGuard en Raspberry PI, VPN casera, segura y gratuita.</a></li>



<li><a href="https://linuxete.duckdns.org/pi-hole-en-raspberry-pi-instalacion-paso-a-paso/"></a><a href="https://linuxete.duckdns.org/pi-hole-en-raspberry-pi-instalacion-paso-a-paso/">Pi-hole en Raspberry Pi: Instalación paso a paso</a>.</li>



<li><a href="https://linuxete.duckdns.org/configura-tu-propio-servidor-dns-recursivo-con-pi-hole-y-unbound/"></a><a href="https://linuxete.duckdns.org/configura-tu-propio-servidor-dns-recursivo-con-pi-hole-y-unbound/">Configura tu propio servidor DNS recursivo con Pi-hole y Unbound</a></li>



<li>El manual definitivo para navegar 100% seguro con WireGuard, Pi-hole y Unbound.</li>
</ol>
</blockquote>



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



<p class="wp-block-paragraph">Una vez hayas completado todos los manuales anteriores, como vimos en <a href="https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/"></a><a href="https://linuxete.duckdns.org/wireguard-en-raspberry-pi-vpn-casera-segura-y-gratuita/">WireGuard en Raspberry PI, VPN casera, segura y gratuita.</a> <strong>no deberías usar las DNS de Google (8.8.8.8)</strong> que se detallaban en el apartado «<strong>6.2. Crear los archivos de configuración de cada cliente</strong>«.</p>



<p class="wp-block-paragraph">Porque tu cliente de WireGuard en el móvil tiene grabada a fuego la directiva <code>DNS = 8.8.8.8</code> en su perfil actual. Al levantar el túnel, el sistema operativo de tu móvil le hace caso a esa línea y envía las consultas DNS a Google a través del túnel. </p>



<p class="wp-block-paragraph">El objetivo principal de montar tu propia infraestructura es mantener la privacidad y, de paso, aprovechar el bloqueo de publicidad y rastreadores de Pi-hole incluso cuando estás fuera de casa.  Para lograrlo, la dirección IP que debes poner en el apartado <code>DNS</code> de las configuraciones de los clientes varía según cómo quieras resolver las peticiones dentro del túnel:</p>



<h3 class="wp-block-heading">La prueba de dnsleaktest</h3>



<p class="wp-block-paragraph">Cuando estás conectado a la VPN con el DNS de Google (<code>8.8.8.8</code>), las páginas de test verán que tus peticiones vienen de los servidores de Google. Si usas tu servidor recursivo, verán la IP pública de tu casa (la de tu proveedor de internet).</p>



<ol start="1" class="wp-block-list">
<li>Conéctate a la VPN desde fuera de casa (o quita el WiFi y usa datos móviles).</li>



<li>Entra en la página web: <strong><a href="https://www.dnsleaktest.com/" target="_blank" rel="noreferrer noopener">dnsleaktest.com</a></strong></li>



<li>Verás tu IP pública actual. Haz clic en el botón <strong>«Standard test»</strong>.</li>



<li><strong>Analiza el resultado:</strong>
<ul class="wp-block-list">
<li><strong>Si sale Google</strong> (generalmente con banderas de tu país, o donde esté el servidor más cercano) o ves IPs que no te pertenecen: Sigues usando el DNS de Google configurado en la interfaz.</li>



<li><strong>Si sale únicamente tu proveedor de internet</strong> (Movistar, Digi, Orange, etc.) con la IP de tu casa: Significa que tu petición ha viajado por la VPN hasta tu Raspberry Pi, y de ahí Unbound ha salido a internet a resolverla. El sistema recursivo está funcionando.</li>
</ul>
</li>
</ol>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="461" height="1024" src="https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-57-52-461x1024.jpg" alt="" class="wp-image-4549" style="width:297px;height:auto" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-57-52-461x1024.jpg 461w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-57-52-135x300.jpg 135w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-57-52-768x1707.jpg 768w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-57-52-691x1536.jpg 691w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-57-52-922x2048.jpg 922w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-57-52.jpg 1080w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p class="wp-block-paragraph">La captura del test muestra claramente que las peticiones se están resolviendo a través de servidores pertenecientes a <strong>Google</strong> en Madrid. Esto significa que, aunque el resto de tu tráfico (la navegación general) sí vaya cifrado por la VPN, las preguntas de <em>«¿a qué IP pertenece esta web?»</em> se le siguen enviando directamente a Google en el formato tradicional, saltándose por completo tu Raspberry Pi con Pi-hole y Unbound.</p>



<h3 class="wp-block-heading">Cómo solucionar el problema en 3 pasos:</h3>



<p class="wp-block-paragraph">Para solucionarlo y hacer que tu servidor recursivo tome el control total, tienes que actualizar la configuración del cliente.</p>



<p class="wp-block-paragraph">Paso 1. <strong>Modifica el archivo en la Raspberry Pi:</strong> Ve a la ruta donde guardas los perfiles de los clientes:</p>



<pre class="wp-block-code"><code><code>sudo nano /etc/wireguard/clients/phone_dad.conf</code></code></pre>



<p class="wp-block-paragraph"><br>y edita el archivo cambiando la línea del <code>DNS = 8.8.8.8</code> por:</p>



<pre class="wp-block-code"><code>&#91;Interface]
PrivateKey = &#91;clave privadaa]
Address = 10.0.0.2/32
DNS = <mark style="background-color:#7bdcb5" class="has-inline-color">10.0.0.1</mark>

&#91;Peer]
PublicKey = &#91;clave_publica]
Endpoint = linuxete.duckdns.org:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
</code></pre>



<p class="wp-block-paragraph">Paso 2. <strong>Asegura el cambio en Pi-hole:</strong> Confirma que aplicaste el cambio a <strong>«Permit all origins»</strong> en la pestaña DNS de Pi-hole (y dale a <em>Save &amp; Apply</em> si no lo hiciste antes) para que acepte las consultas que le lleguen desde la interfaz de WireGuard.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="422" height="468" src="https://linuxete.duckdns.org/wp-content/uploads/2026/05/all_origins.png" alt="" class="wp-image-4544" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/05/all_origins.png 422w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/all_origins-271x300.png 271w" sizes="auto, (max-width: 422px) 100vw, 422px" /></figure>



<p class="wp-block-paragraph">Paso 3. <strong>Actualiza el perfil en tu móvil:</strong></p>



<p class="wp-block-paragraph">En la terminal de la Pi, vuelve a generar el código QR con el archivo modificado:</p>



<pre class="wp-block-code"><code>sudo cat /etc/wireguard/clients/phone_dad.conf | qrencode -t ansiutf8</code></pre>



<p class="wp-block-paragraph">Escanea el nuevo QR desde la app de WireGuard en el móvil.</p>



<p class="wp-block-paragraph">Una vez hecho esto, activa la VPN con tus datos móviles y vuelve a pasar el <strong>dnsleaktest.com</strong>. Si todo está en orden, los 6 servidores de Google deberían desaparecer y, en su lugar, debería figurar <strong>únicamente tu proveedor de internet</strong> local de casa.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="461" height="1024" src="https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-58-12-461x1024.jpg" alt="" class="wp-image-4550" style="width:280px;height:auto" srcset="https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-58-12-461x1024.jpg 461w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-58-12-135x300.jpg 135w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-58-12-768x1707.jpg 768w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-58-12-691x1536.jpg 691w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-58-12-922x2048.jpg 922w, https://linuxete.duckdns.org/wp-content/uploads/2026/05/photo_2026-07-01_20-58-12.jpg 1080w" sizes="auto, (max-width: 461px) 100vw, 461px" /></figure>



<p class="wp-block-paragraph">Ahora cuando mi móvil solicita resolver un dominio desde la red móvil (o cualquier WiFi pública), la consulta viaja encriptada por el túnel de Wireguard directo a mi Raspberry Pi. Pi-hole la procesa y se la pasa a <strong>Unbound</strong>.</p>



<p class="wp-block-paragraph">Como Unbound es un servidor DNS recursivo propio, no le pregunta a ninguna entidad comercial (ni a Google, ni a Cloudflare, ni a tu operador), sino que sale directamente a los <em>Root Servers</em> de internet usando tu propia conexión física de casa. Por eso de cara al test, el encargado de resolver la petición es, a todos los efectos, tu IP pública fija.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-medium-font-size wp-block-paragraph">Hemos conseguido el combo ideal: <strong>Privacidad absoluta (DNS recursivo sin intermediarios), bloqueo de publicidad en movilidad (Pi-hole) y conexión segura (WireGuard)</strong>. ¡Objetivo cumplido!</p>
</blockquote>



<h2 class="wp-block-heading">¡Hazlo desde la terminal!</h2>



<p class="wp-block-paragraph">Puede ser que no dispongas de un entorno gráfico o un navegador a mano para ir a <code>dnsleaktest.com</code>, pero si tienes una terminal, ¡tienes un tesoro!</p>



<p class="wp-block-paragraph">Para comprobar qué DNS estás utilizando, abre tu consola y lanza un <code>nslookup</code> apuntando a cualquier dominio:</p>



<pre class="wp-block-code"><code>nslookup google.com
</code></pre>



<p class="wp-block-paragraph">Fíjate bien en la <strong>primera línea de la respuesta</strong>, ya que te indicará qué servidor ha resuelto la petición:</p>



<ul class="wp-block-list">
<li>Si muestra <code>Server: 8.8.8.8</code>, estás saliendo a través de los DNS de Google.</li>



<li>Si muestra <code>Server: 127.0.0.1</code> (o la IP local de tu servidor), ¡enhorabuena! Estás usando con éxito tu propio combo de <strong>Pi-hole + Unbound</strong>.</li>
</ul>



<p class="wp-block-paragraph">Si quieres forzar la consulta directamente contra tu servidor para probarlo, puedes añadir su IP al final del comando:</p>



<pre class="wp-block-code"><code>~ $ nslookup google.com 10.0.0.1
Server:		<mark style="background-color:#7bdcb5" class="has-inline-color">10.0.0.1</mark>
Address:	<mark style="background-color:#7bdcb5" class="has-inline-color">10.0.0.1#53</mark>

Non-authoritative answer:
Name:	google.com
Address: 216.58.205.110
</code></pre>



<h3 class="wp-block-heading">El «Efecto Termux»: ¿Por qué no siempre coincide en Android?</h3>



<p class="wp-block-paragraph">Si estás haciendo esta prueba desde un teléfono Android, debes tener en cuenta un detalle importante sobre cómo interactúan las aplicaciones con la red:</p>



<ol start="1" class="wp-block-list">
<li><strong>La app oficial de WireGuard:</strong> Intercepta el tráfico a nivel de <code>VpnService</code> (la capa de red del sistema). Cuando usas el navegador web del móvil, la API de la VPN secuestra esa solicitud DNS y la fuerza a ir por el túnel hacia la IP de tu Pi-hole.</li>



<li><strong>El caso de Termux:</strong> Las herramientas de consola dentro de entornos emulados como Termux a veces se saltan las rutas DNS modificadas por las APIs de la VPN de Android. Debido a esto, pueden saltarse el túnel y exponer los servidores DNS del sistema base (los de tus datos móviles o la red WiFi).</li>
</ol>



<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>En resumen:</strong> Si estás en una terminal nativa de Linux, un simple <code>nslookup google.com</code> bastará. Si estás en Termux dentro de Android y quieres asegurarte de que el túnel responde, fuerza la consulta especificando la IP interna de tu servidor: <code>nslookup google.com 10.0.0.1</code>.</p>
</blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/el-manual-definitivo-para-navegar-100-seguro-con-wireguard-pi-hole-y-unbound/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
