<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Pablo González Troyano]]></title><description><![CDATA[Estudiante de Informática intentando aprender cada día una cosita nueva]]></description><link>https://blog.gonzaleztroyano.es/</link><image><url>https://blog.gonzaleztroyano.es/favicon.png</url><title>Pablo González Troyano</title><link>https://blog.gonzaleztroyano.es/</link></image><generator>Ghost 5.78</generator><lastBuildDate>Thu, 11 Jun 2026 01:05:11 GMT</lastBuildDate><atom:link href="https://blog.gonzaleztroyano.es/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[¡Apoya los proyectos de código abierto!]]></title><description><![CDATA[<p>El concepto de <em>sostenibilidad</em> del <em>software libre y de c&#xF3;digo abierto</em> (<a href="https://fosssustainability.com/?ref=blog.gonzaleztroyano.es" rel="noreferrer">FOSS Sustainability</a>, en ingl&#xE9;s) es algo que cada cierto tiempo resuena por los foros de <em>frikis</em> y siempre es buena oportunidad para recalcar la importancia.<br>FOSS = <em>Free and Open-Source Software</em></p><p>Frente a los que piensan</p>]]></description><link>https://blog.gonzaleztroyano.es/apoya-los-proyectos-opensource/</link><guid isPermaLink="false">6a17157924efd2000132b270</guid><category><![CDATA[Open Source]]></category><category><![CDATA[pensamientos]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Wed, 27 May 2026 16:35:57 GMT</pubDate><content:encoded><![CDATA[<p>El concepto de <em>sostenibilidad</em> del <em>software libre y de c&#xF3;digo abierto</em> (<a href="https://fosssustainability.com/?ref=blog.gonzaleztroyano.es" rel="noreferrer">FOSS Sustainability</a>, en ingl&#xE9;s) es algo que cada cierto tiempo resuena por los foros de <em>frikis</em> y siempre es buena oportunidad para recalcar la importancia.<br>FOSS = <em>Free and Open-Source Software</em></p><p>Frente a los que piensan que el <strong><em>free</em> </strong>en <em>free and open source software<strong> </strong></em>significa que es gratis, conviene recordar la expresi&#xF3;n:</p><blockquote>&#x201C;free speech,&#x201D; not &#x201C;free beer.&#x201D;</blockquote><p>+info sobre esta expresi&#xF3;n <a href="https://www.gnu.org/philosophy/open-source-misses-the-point.en.html?ref=blog.gonzaleztroyano.es" rel="noreferrer">aqu&#xED;</a>.</p><p>Tras ese software que tanto te ayuda en el d&#xED;a a d&#xED;a, <strong>hay personas</strong> que, &#xA1;sorpresa!, necesitan comer y merecen cobrar por su trabajo.<br>Eso no significa que todo el mundo tenga que pagar por utilizarlo, pues perder&#xED;amos una de las <a href="https://fsfe.org/freesoftware/?ref=blog.gonzaleztroyano.es" rel="noreferrer">4 libertades</a> del software libre: la libertad de usar.</p><p>Pero s&#xED; significa que, en la medida en que algunas personas podamos permitirnos <strong>unos pocos euros</strong>, de vez en cuando, debemos hacerlo. La continuidad, el mantenimiento y la seguridad de los proyectos est&#xE1;n en juego. Y sabemos lo que ocurre cuando los mantenedores tienen presi&#xF3;n y falta de apoyo (<a href="https://www.akamai.com/es/blog/security-research/critical-linux-backdoor-xz-utils-discovered-what-to-know?ref=blog.gonzaleztroyano.es" rel="noreferrer">XZ utils</a>)&#x2026;</p><p>Y, por supuesto, si no puedes o prefieres <strong>no colaborar econ&#xF3;micamente</strong>, siempre puedes ayudar en muchas otras cuestiones: t&#xE9;cnicas (programaci&#xF3;n, revisi&#xF3;n de cambios propuestos) o no t&#xE9;cnicas (traducci&#xF3;n, aportaci&#xF3;n de ideas, difundir el proyecto, etc.). &#xA1;Cada granito cuenta!</p><p>Por si buscas inspiraci&#xF3;n para apoyar o usar algunos proyectos, a continuaci&#xF3;n comparto en los que he aportado. No es mucho, pero por algo se empieza, &#xBF;no?</p><p>Mis aportaciones econ&#xF3;micas:</p><ol>
<li><a href="https://github.com/pi-hole?ref=blog.gonzaleztroyano.es">Pihole</a>: seguramente hayas o&#xED;do hablar de este fant&#xE1;stico proyecto. Si no, en resumidas cuentas: es un bloqueador de publicidad (y rastreadores, y lo que quieras) a nivel DNS. Es decir, no depende de una extensi&#xF3;n o herramienta externa. A nivel de red evita que tus dispositivos puedan comunicarse con los sitios a los que env&#xED;an datos. &#xA1;Inst&#xE1;lalo, te vas a quedar flipando de la cantidad de conexiones solo para vender tus datos!</li>
<li><a href="https://github.com/TryGhost?ref=blog.gonzaleztroyano.es">Ghost</a>: es la plataforma que hace funcionar este blog. Procede apoyar el proyecto ;)</li>
<li><a href="https://github.com/jocmp?ref=blog.gonzaleztroyano.es">CapyReader</a>: es el lector de RSS que uso en el m&#xF3;vil. Simple, sencillo, potente y fiable. &#xA1;No se puede pedir m&#xE1;s!</li>
<li><a href="https://jwallet.github.io/spy-spotify/faq.html?ref=blog.gonzaleztroyano.es">Spytify</a>: <em>if buying isnt owning, then pirating isnt stealing</em>. Nada m&#xE1;s que a&#xF1;adir.</li>
</ol>
<p>En cuanto a aportaciones no econ&#xF3;micas, principalmente de tiempo (tanto o m&#xE1;s releventes):</p><ol>
<li><a href="https://www.openstreetmap.org/?ref=blog.gonzaleztroyano.es">OpenStreetMap</a>: lo has usado sin darte cuenta. Es la alternativa abierta a Google/Apple/Bing/xxx Maps. Crece y se mejora a partir de las contribuciones de personas como t&#xFA; y como yo. &#xBF;A qu&#xE9; esperas para mapear tu barrio?</li>
<li>Traducci&#xF3;n al espa&#xF1;ol de <a href="https://framadate.org/abc/es/?ref=blog.gonzaleztroyano.es">Polaris/Framadate</a>, la alternativa abierta a Doodle.</li>
<li>Correcci&#xF3;n de alguna documentaci&#xF3;n en <a href="https://www.glpi-project.org/es/?ref=blog.gonzaleztroyano.es">GLPI</a></li>
<li>Traducciones, reporte de errores y correcciones menores de otro software libre, como <a href="https://github.com/kalvn/freshrss-mark-previous-as-read/commit/81e369b527576c5737438b27672635b9a685874f?ref=blog.gonzaleztroyano.es">este</a> complemento de FreshRSS o <a href="https://github.com/ctt-gob-es/clienteafirma/issues/382?ref=blog.gonzaleztroyano.es">AutoFirma</a>.</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[La gente quiere bancos. La gente quiere socializar.]]></title><description><![CDATA[<p>Hace unos d&#xED;as, paseando por el barrio, vi los siguientes bancos juntos en una zona ajardinada/arbolada (que, de momento, quedan por Madrid).</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2026/05/post_la-gente_quiere_bancos.jpg" class="kg-image" alt loading="lazy" width="578" height="768"></figure><p>Y uno no puede parar de pensar en lo hostiles que son las ciudades, en lo dif&#xED;cil que es encontrar un sitio de</p>]]></description><link>https://blog.gonzaleztroyano.es/la-gente-quiere-bancos-la-gente-quiere-solializar/</link><guid isPermaLink="false">6a01fc1724efd2000132b245</guid><category><![CDATA[pensamientos]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Tue, 12 May 2026 16:30:56 GMT</pubDate><content:encoded><![CDATA[<p>Hace unos d&#xED;as, paseando por el barrio, vi los siguientes bancos juntos en una zona ajardinada/arbolada (que, de momento, quedan por Madrid).</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2026/05/post_la-gente_quiere_bancos.jpg" class="kg-image" alt loading="lazy" width="578" height="768"></figure><p>Y uno no puede parar de pensar en lo hostiles que son las ciudades, en lo dif&#xED;cil que es encontrar un sitio de sombra, tranquilo, en el que sentarse sin tener que consumir o sentir que se te juzga. Un sitio en el que reunirte, hacer barrio y, al fin y al cabo, vivir.</p><p>Lecturas ligeras para profundizar (y enfadarse):</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://es.wikipedia.org/wiki/Arquitectura_hostil?ref=blog.gonzaleztroyano.es"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Arquitectura hostil - Wikipedia, la enciclopedia libre</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://es.wikipedia.org/static/apple-touch/wikipedia.png" alt><span class="kg-bookmark-author">Wikimedia Foundation, Inc.</span><span class="kg-bookmark-publisher">Colaboradores de los proyectos Wikimedia</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://upload.wikimedia.org/wikipedia/commons/7/77/Freemasons%27_Hall%2C_London_-_Camden_benches.jpg" alt></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://dialnet.unirioja.es/servlet/articulo?codigo=9953272&amp;ref=blog.gonzaleztroyano.es"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Arquitectura hostil y privaci&#xF3;n del espacio p&#xFA;blico juvenil en Madrid: estudio cualitativo con Photovoice</div><div class="kg-bookmark-description">Autor&#xED;as: Beatriz Payo de la Cuerda, Teresa Cuerdo Vilches, Miguel &#xC1;ngel Navas Mart&#xED;n.
Localizaci&#xF3;n: Revista de Arquitectura (Bogot&#xE1;). N&#xBA;. 1, 2025.
Art&#xED;culo de Revista en Dialnet.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://dialnet.unirioja.es/imagen/favicon16x16.png" alt><span class="kg-bookmark-author">Dialnet</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://dialnet.unirioja.es/imagen/dialnet_mg.png" alt></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://elpais.com/sociedad/2018/09/05/actualidad/1536157307_408801.html?ref=blog.gonzaleztroyano.es"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Una gu&#xED;a de la arquitectura contra los pobres en Espa&#xF1;a</div><div class="kg-bookmark-description">Las calles est&#xE1;n salpicadas de obst&#xE1;culos que impiden el descanso de las personas sin hogar que casi siempre pasan desapercibidos para el resto de ciudadanos. Este es un recorrido por la llamada &#x2018;arquitectura hostil&#x2019; en una treintena de ciudades espa&#xF1;olas</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://static.elpais.com/dist/resources/images/apple-touch-icon.png" alt><span class="kg-bookmark-author">Ediciones EL PA&#xCD;S S.L.</span><span class="kg-bookmark-publisher">Jos&#xE9; Manuel Abad Li&#xF1;&#xE1;n, David Alameda, Javier Gal&#xE1;n</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://imagenes.elpais.com/resizer/v2/MLQI3ZMPG3DA36262FXEQSBEX4.jpg?auth=a3201bfab19123d42023c2e8b7247e2f7aa04586b4af426a0f8f912db74054af&amp;width=1200" alt></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Iniciar sesión en Xen-Orchestra con el SSO de Pocket-ID]]></title><description><![CDATA[Cómo configurar el inicio de sesión único en Xen-Orchestra utilizando el proveedor de identidades Pocket-ID.]]></description><link>https://blog.gonzaleztroyano.es/iniciar-sesion-en-xen-orchestra-con-el-sso-de-pocket-id/</link><guid isPermaLink="false">69c6a3fef959ac0001e010ab</guid><category><![CDATA[xen-orchestra]]></category><category><![CDATA[Pocket-ID]]></category><category><![CDATA[homelab]]></category><category><![CDATA[xcp-ng]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Sat, 28 Mar 2026 11:44:28 GMT</pubDate><media:content url="https://blog.gonzaleztroyano.es/content/images/2026/03/cover_xo_sso_pocket-id.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.gonzaleztroyano.es/content/images/2026/03/cover_xo_sso_pocket-id.png" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID"><p>En <em>homelab</em> gestiono la virtualizaci&#xF3;n con <a href="https://xcp-ng.org/?ref=blog.gonzaleztroyano.es" rel="noreferrer">XCP-NG</a> y <a href="https://xen-orchestra.com/?ref=blog.gonzaleztroyano.es#!/xo-home" rel="noreferrer">Xen-Orchestra</a> (XO). La realidad es que funciona muy bien, es muy estable y &#xA1;son soluciones europeas! &#xA1;Ole ah&#xED; esa soberan&#xED;a tecnol&#xF3;gica buena!</p><p>Recientemente he instalado y configurado <a href="https://pocket-id.org/?ref=blog.gonzaleztroyano.es" rel="noreferrer">Pocket-ID</a> para intentar centralizar la identidad a lo largo de todos los servicios que tengo desplegados. Que, si bien no son much&#xED;simos, es preferible no tener una contrase&#xF1;a diferente para cada servicio.</p><h2 id="creaci%C3%B3n-cliente-oidc-en-pocket-id">Creaci&#xF3;n cliente OIDC en Pocket-ID</h2><p>Desde el panel de administraci&#xF3;n de Pocket-ID, buscamos la opci&#xF3;n para crear un nuevo cliente:</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-4.png" class="kg-image" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" loading="lazy" width="944" height="459" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/imagen-4.png 600w, https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-4.png 944w" sizes="(min-width: 720px) 720px"></figure><p>En esta nueva pantalla, rellenaremos los datos necesarios:</p><ul>
<li><em>Name</em>: ``Xen-Orchestra` (o lo que decidamos)</li>
<li><em>Client Launch URL</em>: La URL desde la que nuestra instancia de XO es accesible.</li>
<li><em>Callback URLs</em>: <code>host-xo/signin/oidc/callback</code> (siendo <code>host-xo</code> la URL de nuestra instancia, diferenciando entre HTTP y HTTPS).</li>
<li>El resto de datos podemos editarlos al gusto: imagen, client id, etc.</li>
</ul>
<p>Al guardar la configuraci&#xF3;n se mostrar&#xE1;n los detalles:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-5.png" class="kg-image" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" loading="lazy" width="938" height="735" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/imagen-5.png 600w, https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-5.png 938w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Detalles del nuevo </span><i><em class="italic" style="white-space: pre-wrap;">OIDC client </em></i><span style="white-space: pre-wrap;">creado para Xen-Orchestra. Algunos detalles han sido difuminados, por privacidad.</span></figcaption></figure><p>Depende de c&#xF3;mo tengamos configurado el entorno, puede ser necesario a&#xF1;adir grupos o usuarios autorizados para usar esta aplicaci&#xF3;n.</p><h2 id="configuraci%C3%B3n-xen-orchestra">Configuraci&#xF3;n Xen-Orchestra</h2><h3 id="previo-usuario-admin-local">PREVIO: Usuario admin local</h3><p>En este momento se asume que ya hay un usuario local como administrador en el entorno de Xen-Orchestra. En mi caso, y creo que es una buena pr&#xE1;ctica, voy a <strong>mantener el usuario local</strong>, para seguir teniendo acceso al sistema si fallara la autenticaci&#xF3;n centralizada.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-1.png" class="kg-image" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" loading="lazy" width="1920" height="581" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/imagen-1.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2026/03/imagen-1.png 1000w, https://blog.gonzaleztroyano.es/content/images/size/w1600/2026/03/imagen-1.png 1600w, https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-1.png 1920w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Captura de pantalla de la interfaz web (en ingl&#xE9;s) de administraci&#xF3;n de Xen-Orchestra. Se ven los ajustes de usuarios, 1 usuario mostrado con permisos de administrador.</span></figcaption></figure><h3 id="opcional-creaci%C3%B3n-de-usuarios-oidc">Opcional: creaci&#xF3;n de usuarios OIDC</h3><p>Los usuarios que no existan en el sistema de XO, pero que se hayan podido autenticar con Pocket-ID (o el sistema OIDC en uso), se crear&#xE1;n en XO. Por seguridad, se crear&#xE1;n sin permisos.</p><p>Si conocemos los <em>usernames</em> de los usuarios a generar en el sistema, podemos crearlos y asignar los permisos y pertenencia a grupos adecuados. Al hacerlo, al iniciar sesi&#xF3;n con el SSO, ya podr&#xE1;n disfrutar de los permisos adecuados.</p><h3 id="configuraci%C3%B3n-y-activaci%C3%B3n-plugin-auth-oidc">Configuraci&#xF3;n y activaci&#xF3;n plugin <em>auth-oidc</em></h3><p>La funcionalidad de iniciar sesi&#xF3;n SSO con OIDC en XO es provista por el plugin <em>auth-oidc</em>. Lo encontraremos en <em>Settings </em>&gt; <em>Plugins.</em></p><p>Antes de activarlo, hemos de configurarlo, con los datos datos mostrados en Pocket-ID y las caracter&#xED;sticas de nuestro entorno (en mi caso, tomo el campo <em>preferred_username</em> de Pocket-ID como username en XO).</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">Si editamos los detalles avanzados y el inicio de sesi&#xF3;n da problemas, es mejor dejar los valores por defecto para empezar a buscar el motivo del error (eliminando as&#xED; un adicional posible error de configuraci&#xF3;n).</div></div><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-6.png" class="kg-image" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" loading="lazy" width="953" height="910" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/imagen-6.png 600w, https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-6.png 953w" sizes="(min-width: 720px) 720px"></figure><p>Tras guardar la configuraci&#xF3;n, hemos de activar el plugin.</p><h2 id="probar-el-sso">Probar el SSO</h2><p>Una vez guardados los cambios en XO, si abrimos una ventana privada (para que nuestras cookies de inicio de sesi&#xF3;n no interfieran) veremos dos formas de iniciar sesi&#xF3;n:</p><ul>
<li><em>Sign in with OpenID Connect</em> (nuevo)</li>
<li>Inicio de sesi&#xF3;n con usuario y contrase&#xF1;a (como hasta ahora)</li>
</ul>
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-7.png" class="kg-image" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" loading="lazy" width="1136" height="830" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/imagen-7.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2026/03/imagen-7.png 1000w, https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-7.png 1136w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Pantalla de inicio de sesi&#xF3;n de Xen-Orchestra, en la que se pueden ver dos m&#xE9;todos de inicio de sesi&#xF3;n: OIDC o usuario y contrase&#xF1;a.</span></figcaption></figure><p>Al hacer clic en la primera opci&#xF3;n, nos aparecer&#xE1; la pantalla de Pocket-ID para iniciar sesi&#xF3;n:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-9.png" class="kg-image" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" loading="lazy" width="833" height="455" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/imagen-9.png 600w, https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-9.png 833w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Pantalla de Pocket-ID en la que se solicita configuraci&#xF3;n al usuario para iniciar sesi&#xF3;n en XO.</span></figcaption></figure><p>Si todo ha funcionado correctamente, se iniciar&#xE1; sesi&#xF3;n en XO. Si el usuario es nuevo, se crear&#xE1; en XO (sin permisos). Al no tener permisos, no podr&#xE1; realizar ninguna acci&#xF3;n:</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/Captura-de-pantalla-2026-03-28-122642.png" width="1919" height="653" loading="lazy" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/Captura-de-pantalla-2026-03-28-122642.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2026/03/Captura-de-pantalla-2026-03-28-122642.png 1000w, https://blog.gonzaleztroyano.es/content/images/size/w1600/2026/03/Captura-de-pantalla-2026-03-28-122642.png 1600w, https://blog.gonzaleztroyano.es/content/images/2026/03/Captura-de-pantalla-2026-03-28-122642.png 1919w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/Captura-de-pantalla-2026-03-28-122620.png" width="1916" height="758" loading="lazy" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/Captura-de-pantalla-2026-03-28-122620.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2026/03/Captura-de-pantalla-2026-03-28-122620.png 1000w, https://blog.gonzaleztroyano.es/content/images/size/w1600/2026/03/Captura-de-pantalla-2026-03-28-122620.png 1600w, https://blog.gonzaleztroyano.es/content/images/2026/03/Captura-de-pantalla-2026-03-28-122620.png 1916w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">Capturas de pantalla de la interfaz de XO, en la que se puede ver c&#xF3;mo se ha iniciado sesi&#xF3;n con el usuario </span><i><em class="italic" style="white-space: pre-wrap;">pablo. A</em></i><span style="white-space: pre-wrap;">l no tener permisos, no se muestran MV.</span></p></figcaption></figure><h3 id="asignar-permisos-a-los-nuevos-usuarios">Asignar permisos a los nuevos usuarios</h3><p>Como se ha comentado anteriormente, se pueden crear los usuarios de forma previa al primer inicio de sesi&#xF3;n y asignarles los permisos adecuados.</p><p>Si no, siempre se puede, una vez creado el usuario (autom&#xE1;ticamente con el primer inicio de sesi&#xF3;n v&#xED;a OIDC), actuando como un usuario que sea administrador, buscar el usuario en <em>Settings</em> &gt; <em>Users</em> y asignarle los permisos adecuados:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-11.png" class="kg-image" alt="Iniciar sesi&#xF3;n en Xen-Orchestra con el SSO de Pocket-ID" loading="lazy" width="954" height="535" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/imagen-11.png 600w, https://blog.gonzaleztroyano.es/content/images/2026/03/imagen-11.png 954w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Captura de pantalla de la secci&#xF3;n </span><i><em class="italic" style="white-space: pre-wrap;">Users</em></i><span style="white-space: pre-wrap;"> de la configuraci&#xF3;n de XO, en la que se destaca que el usuario </span><i><em class="italic" style="white-space: pre-wrap;">pablo</em></i><span style="white-space: pre-wrap;"> tiene permisos de </span><i><em class="italic" style="white-space: pre-wrap;">User</em></i><span style="white-space: pre-wrap;"> y no pertenece a ning&#xFA;n grupo</span></figcaption></figure><h2 id="%C2%A1hemos-terminado">&#xA1;Hemos terminado!</h2><p>En este momento hemos terminado de configurar el inicio de sesi&#xF3;n &#xFA;nico en Xen-Orchestra contra Pocket-ID, y hemos comprobado que funciona correctamente.</p><h4 id="%C2%BFalguna-duda">&#xBF;Alguna duda?</h4><p>No dudes en <a href="https://blog.gonzaleztroyano.es/sobre-mi/#%C2%BFalguna-duda">ponerte en contacto conmigo</a> para cualquier duda, sugerencia, queja o aclaraci&#xF3;n que creas necesaria. &#xA1;Ser&#xE1; un placer hablar contigo!</p>]]></content:encoded></item><item><title><![CDATA[Sobre la inexistente y sencilla simplificación administrativa]]></title><description><![CDATA[<p>Cualquier persona que me conozca sabe que me gustan, entre muchas otras, dos cosas:</p><ul>
<li>Quejarme, de forma constructiva, de muchas cosas.</li>
<li>Quejarme del procedimiento de gesti&#xF3;n de quejas.</li>
</ul>
<p>&#xA1;Y aqu&#xED; estamos, otra vez, con la misma cantinela!</p><p>A trav&#xE9;s de la <a href="https://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Transformacion-Digital/Madrid-Movil/?vgnextfmt=default&amp;vgnextchannel=1827d33f92eab810VgnVCM2000001f4a900aRCRD&amp;ref=blog.gonzaleztroyano.es">App Madrid M&</a></p>]]></description><link>https://blog.gonzaleztroyano.es/sobre-la-inexistente-y-sencilla-simplificacion-administrativa/</link><guid isPermaLink="false">69b44f4bf959ac0001e01041</guid><category><![CDATA[Administración Pública]]></category><category><![CDATA[Ayuntamiento de Madrid]]></category><category><![CDATA[Procesos]]></category><category><![CDATA[Ingeniería de Servicios]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Fri, 13 Mar 2026 18:36:52 GMT</pubDate><media:content url="https://blog.gonzaleztroyano.es/content/images/2026/03/header_alcantarillas.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.gonzaleztroyano.es/content/images/2026/03/header_alcantarillas.png" alt="Sobre la inexistente y sencilla simplificaci&#xF3;n administrativa"><p>Cualquier persona que me conozca sabe que me gustan, entre muchas otras, dos cosas:</p><ul>
<li>Quejarme, de forma constructiva, de muchas cosas.</li>
<li>Quejarme del procedimiento de gesti&#xF3;n de quejas.</li>
</ul>
<p>&#xA1;Y aqu&#xED; estamos, otra vez, con la misma cantinela!</p><p>A trav&#xE9;s de la <a href="https://www.madrid.es/portales/munimadrid/es/Inicio/El-Ayuntamiento/Transformacion-Digital/Madrid-Movil/?vgnextfmt=default&amp;vgnextchannel=1827d33f92eab810VgnVCM2000001f4a900aRCRD&amp;ref=blog.gonzaleztroyano.es">App Madrid M&#xF3;vil</a> la ciudadan&#xED;a puede, entre otras cuestiones, plantear avisos. Es la evoluci&#xF3;n del tel&#xE9;fono 010<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
<p>Entre estos avisos, se pueden plantear avisos relativos a desperfectos en las calzadas y aceras, como pueden ser alcantarillas sueltas.</p>
<p>Sin embargo, el Ayuntamiento no tiene competencia para intervenir en aquellos registros (alcantarillas) que gestiona el Canal de Isabel II<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Fuera de Madrid y en aquellas operadoras que tengan restringidas las llamadas especiales, se puede usar el tel&#xE9;fono 914 800 010, <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
<li id="fn2" class="footnote-item"><p>El Canal de Isabel II es la empresa p&#xFA;blica espa&#xF1;ola que acomete la gesti&#xF3;n del ciclo integral del agua en casi la totalidad de la Comunidad de Madrid. Fuente: <a href="https://es.wikipedia.org/wiki/Canal_de_Isabel_II?ref=blog.gonzaleztroyano.es">Wikipedia</a>, <a href="#fnref2" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<p>Estos son algunos ejemplos de alcantarillas que gestiona el Canal de Isabel II (en adelante, CYII):</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/alcantarilla2.png" width="1083" height="723" loading="lazy" alt="Sobre la inexistente y sencilla simplificaci&#xF3;n administrativa" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/alcantarilla2.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2026/03/alcantarilla2.png 1000w, https://blog.gonzaleztroyano.es/content/images/2026/03/alcantarilla2.png 1083w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/alcantarilla1.png" width="898" height="696" loading="lazy" alt="Sobre la inexistente y sencilla simplificaci&#xF3;n administrativa" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/03/alcantarilla1.png 600w, https://blog.gonzaleztroyano.es/content/images/2026/03/alcantarilla1.png 898w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">Ejemplos de alcantarillas con desperfectos. En la primera imagen, registros en los que se puede ver &#xAB;Canal de Isabel II&#xBB; (hay 2, uno rectangular y otro cuadrado; se puede ver c&#xF3;mo se est&#xE1;n hundiendo y existen desperfectos en los adoquines de alrededor). En la segunda imagen, una alcantarilla/tapa de registro circular en la que se puede leer &#xAB;Ayuntamiento de Madrid Alcantarillado - Registro&#xBB;; se puede ver c&#xF3;mo tambi&#xE9;n se est&#xE1; hundiendo por uno de sus lados.</span></p></figcaption></figure><p>Si bien en la imagen de la izquierda se puede ver claramente la <strong>identificaci&#xF3;n </strong>del CYII, no ocurre lo mismo con la imagen de la alcantarilla circular, en la que pone claramente &#xAB;Ayuntamiento de Madrid&#xBB;.</p><p>Cualquiera podr&#xED;a pensar, como yo inicialmente pens&#xE9;, que si hay alg&#xFA;n problema con este elemento, habr&#xED;a que notificarlo al Ayuntamiento; aunque finalmente no sea as&#xED;.</p><p>Pero, &#xBF;qu&#xE9; pasa si se reporta el aviso al Ayuntamiento para una alcantarilla que no es competencia suya?</p><p>El Ayuntamiento, amablemente, responde al aviso indicando lo siguiente:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2026/03/imagen.png" class="kg-image" alt="Sobre la inexistente y sencilla simplificaci&#xF3;n administrativa" loading="lazy" width="513" height="934"><figcaption><span style="white-space: pre-wrap;">Captura de pantalla de la </span><i><em class="italic" style="white-space: pre-wrap;">App </em></i><span style="white-space: pre-wrap;">Madrid M&#xF3;vil con la respuesta del Ayuntamiento.</span></figcaption></figure><p>Sinceramente, creo que es buen aviso: te explica el motivo de la cancelaci&#xF3;n y te facilita la v&#xED;a de contacto para comunicarlo al CYII a trav&#xE9;s del tel&#xE9;fono y a trav&#xE9;s de la <a href="https://oficinavirtual.canaldeisabelsegunda.es/?ref=blog.gonzaleztroyano.es" rel="noreferrer">Oficina Virtual</a> del Canal de Isabel II.</p><p>Pero, &#xBF;y si pudiera <strong>mejorarse el proceso</strong>? Aunque no tengo cifras oficiales para sustentar mi opini&#xF3;n, estoy bastante seguro de que para este tipo de avisos (desperfectos en calzada o acera/alcantarilla), muchos se acaban cancelando por ser responsabilidad de CYII.</p><p>Quiz&#xE1; se podr&#xED;a a&#xF1;adir una casilla para que la ciudadan&#xED;a autorizase al Ayuntamiento, en el caso de que no sea el responsable de la reparaci&#xF3;n, a comunicarla en su nombre a la entidad responsable de su gesti&#xF3;n. Es una casilla para el usuario, y estoy seguro de que la comunicaci&#xF3;n Ayto-CYII no ser&#xED;a complicada.</p><p>En mi opini&#xF3;n, redundar&#xED;a en menor frustraci&#xF3;n y fricci&#xF3;n y en un mejor servicio p&#xFA;blico. M&#xE1;s cuando el propio Ayuntamiento de Madrid recoge en su <a href="https://www.madrid.es/UnidadWeb/UGNormativas/Normativa/Normativa2020/PlanCalidadInstitucional/Ficheros/PlandeCalidadInstitucional_2023-2027.pdf?ref=blog.gonzaleztroyano.es">Plan de Calidad Institucional 2023-2027</a> este objetivo<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Por supuesto que no estoy defendiendo la simplificaci&#xF3;n administrativa del Ayuntamiento, que ha supuesto una merma en las garant&#xED;as y protecci&#xF3;n de los consumidores, el abuso de las <em>declaraciones responsables</em>, y con <a href="https://okdiario.com/sucesos/ayuntamiento-madrid-paso-alto-que-restaurante-del-incendio-uso-decoracion-prohibida-10816613?ref=blog.gonzaleztroyano.es">resultados realmente negativos</a>. Sobre esto, por &#xFA;ltimo: m&#xE1;s funcionarios, m&#xE1;s protecci&#xF3;n. <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<p>P.D.: Como las quejas, adem&#xE1;s de en el bar, hay que plantearlas donde corresponde, ya est&#xE1; planteada la sugerencia 502/2026/013648 ante el Ayuntamiento para su toma en consideraci&#xF3;n.</p>]]></content:encoded></item><item><title><![CDATA[Solicitar credenciales completas durante la elevación de privilegios en Windows (UAC)]]></title><description><![CDATA[El objetivo deseado es que se solicite no solo la confirmación, sino también la autenticación del usuario cada vez, para aumentar la seguridad.]]></description><link>https://blog.gonzaleztroyano.es/solicitar-credenciales-completas-uac-windows/</link><guid isPermaLink="false">678e4d840496330001722aeb</guid><category><![CDATA[tech-notes]]></category><category><![CDATA[Windows]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Wed, 07 Jan 2026 19:29:58 GMT</pubDate><media:content url="https://blog.gonzaleztroyano.es/content/images/2026/01/uac-prompt_ss.png" medium="image"/><content:encoded><![CDATA[<h2 id="motivaci%C3%B3n-y-resultado-deseado">Motivaci&#xF3;n y resultado deseado</h2><img src="https://blog.gonzaleztroyano.es/content/images/2026/01/uac-prompt_ss.png" alt="Solicitar credenciales completas durante la elevaci&#xF3;n de privilegios en Windows (UAC)"><p>Cuando una aplicaci&#xF3;n necesita elevaci&#xF3;n de privilegios (permisos de Administrador) para ejecutarse, suele aparecer una pantalla similar a la siguiente:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2025/01/image.png" class="kg-image" alt="Solicitar credenciales completas durante la elevaci&#xF3;n de privilegios en Windows (UAC)" loading="lazy" width="587" height="517"><figcaption><span style="white-space: pre-wrap;">Captura de pantalla de elevaci&#xF3;n para instalar AutoFirma, con dos botones: S&#xED; y No.</span></figcaption></figure><p>El objetivo deseado es que se solicite no solo la confirmaci&#xF3;n, sino tambi&#xE9;n la autenticaci&#xF3;n del usuario cada vez, para aumentar la seguridad (siempre teniendo en cuenta que es recomendable no trabajar con un usuario con permisos de Administrador sobre el equipo). Tal que as&#xED;:</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2026/01/imagen-1.png" class="kg-image" alt="Solicitar credenciales completas durante la elevaci&#xF3;n de privilegios en Windows (UAC)" loading="lazy" width="570" height="825"></figure><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">Si el equipo dispone de lector de huella dactilar u otro m&#xE9;todo biom&#xE9;trico compatible con Windows Hello, este podr&#xE1; usarse; no siendo necesario introducir usuario+contrase&#xF1;a.</div></div><h2 id="proceso">Proceso</h2><h3 id="1-evitar-que-se-muestren-las-cuentas-durante-la-elevaci%C3%B3n">1-Evitar que se muestren las cuentas durante la elevaci&#xF3;n</h3><p>Hemos de usar el editor de directivas de grupo local (Win+R, gpedit.msc), y editar la clave <em>Enumerar las cuentas de administraci&#xF3;n al realizar una elevaci&#xF3;n</em>, en la ruta: <em>Configuraci&#xF3;n del equipo &gt; Plantillas Administrativas &gt; Componentes de Windows &gt; Interfaz de usuario de credenciales</em>.</p><p>Se ha de marcar la opci&#xF3;n <em>deshabilitada</em>. De esta forma, <em>los usuarios siempre deber&#xE1;n escribir un nombre de usuario y una contrase&#xF1;a para realizar la elevaci&#xF3;n</em>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2025/01/image-1.png" class="kg-image" alt="Solicitar credenciales completas durante la elevaci&#xF3;n de privilegios en Windows (UAC)" loading="lazy" width="1917" height="1016" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/01/image-1.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/01/image-1.png 1000w, https://blog.gonzaleztroyano.es/content/images/size/w1600/2025/01/image-1.png 1600w, https://blog.gonzaleztroyano.es/content/images/2025/01/image-1.png 1917w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Captura de pantalla del Editor GPO</span></figcaption></figure><h3 id="2-requerir-usuario-y-contrase%C3%B1a-durante-la-elevaci%C3%B3n">2-Requerir usuario y contrase&#xF1;a durante la elevaci&#xF3;n</h3><p>Adem&#xE1;s de no mostrar el nombre de usuario, al activar esta opci&#xF3;n hacemos que sea necesaria la autenticaci&#xF3;n completa:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2026/01/imagen-2.png" class="kg-image" alt="Solicitar credenciales completas durante la elevaci&#xF3;n de privilegios en Windows (UAC)" loading="lazy" width="760" height="434" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2026/01/imagen-2.png 600w, https://blog.gonzaleztroyano.es/content/images/2026/01/imagen-2.png 760w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Captura del Editor de Registro mostrando la opci&#xF3;n ConsentPromptBehaviorAdmin</span></figcaption></figure><p>Hemos de abrir el Editor de Registro (Win+R &gt; <code>regedit</code>) y buscar la clave <code>SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin</code>. Esta entrada <a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gpsb/341747f5-6b5d-4d30-85fc-fa1cc04038d4?redirectedfrom=MSDN&amp;ref=blog.gonzaleztroyano.es">permite</a> definir 6 valores distintos.</p>
<p>En nuestro caso, se establecer&#xE1; el valor 1: <em>This option prompts the Consent Admin to enter his or her user name and password (or another valid admin) when an operation requires elevation of privilege. This operation occurs on the secure desktop.</em></p>
<hr><h3 id="%C2%BFalguna-duda">&#xBF;Alguna duda?</h3><p>No dudes en <a href="https://blog.gonzaleztroyano.es/sobre-mi/#%C2%BFalguna-duda">ponerte en contacto conmigo</a> para cualquier duda, sugerencia, queja o aclaraci&#xF3;n que creas necesaria. &#xA1;Ser&#xE1; un placer hablar contigo!</p><hr><p>Nota: para realizar las capturas de pantalla de la ventana de credenciales UAC ha sido necesario definir el valor de la clave <em>ConsentPromptBehaviorAdmin</em> en <a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gpsb/341747f5-6b5d-4d30-85fc-fa1cc04038d4?redirectedfrom=MSDN&amp;ref=blog.gonzaleztroyano.es" rel="noreferrer">3</a>, para evitar que esta abriera en el <a href="https://security.stackexchange.com/questions/3759/how-does-the-windows-secure-desktop-mode-work?ref=blog.gonzaleztroyano.es" rel="noreferrer">Escritorio</a> <a href="https://stackoverflow.com/questions/4046940/how-to-screen-shot-a-uac-prompt?ref=blog.gonzaleztroyano.es" rel="noreferrer">Seguro</a>.</p>]]></content:encoded></item><item><title><![CDATA[How a Docker Network Overlap Broke My VPN Connectivity]]></title><description><![CDATA[<p>Recently, I faced a puzzling issue: a VPN client could reach my Linux server (packets arrived at the interface), but no responses were sent back. Services running in Docker were unreachable, even though ports appeared open in <code>nmap</code>.</p><h3 id="root-cause">Root Cause</h3><p>A newly deployed Docker stack automatically created a network using</p>]]></description><link>https://blog.gonzaleztroyano.es/how-a-docker-network-overlap-broke-my-vpn-connectivity/</link><guid isPermaLink="false">69596082f959ac0001e00f98</guid><category><![CDATA[Docker]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Sat, 03 Jan 2026 18:43:26 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1639322537504-6427a16b0a28?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI5fHxuZXR3b3JrfGVufDB8fHx8MTc2NzQ2NTc1OXww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1639322537504-6427a16b0a28?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI5fHxuZXR3b3JrfGVufDB8fHx8MTc2NzQ2NTc1OXww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="How a Docker Network Overlap Broke My VPN Connectivity"><p>Recently, I faced a puzzling issue: a VPN client could reach my Linux server (packets arrived at the interface), but no responses were sent back. Services running in Docker were unreachable, even though ports appeared open in <code>nmap</code>.</p><h3 id="root-cause">Root Cause</h3><p>A newly deployed Docker stack automatically created a network using the range <code>192.168.0.0/20</code>. This overlapped with my VPN subnet (<code>192.168.3.0/24</code>). As a result:</p><ul><li>Incoming packets from the VPN were routed correctly to the server.</li><li>The server&#x2019;s response packets were routed through the Docker bridge (because of the overlapping range), causing asymmetric routing.</li><li>Linux&#x2019;s <em>rp_filter </em>and firewall dropped these responses silently.</li></ul><h3 id="symptoms">Symptoms</h3><ul>
<li>tcpdump showed ICMP requests arriving, but no replies leaving.</li>
<li>ip route get <code>VPN-client-IP</code> revealed the wrong egress interface (br-xxxx instead of the VPN interface).</li>
</ul>
<h3 id="solution">Solution</h3><p>Update Docker network to avoid conflicts. In the docker-compose.yml:</p><pre><code class="language-docker-compose">services:
  service_name:
  [...]
    networks:
      - custom_net
[...]
networks:
  custom_net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.30.1.0/24
          gateway: 172.30.1.1
</code></pre>
<p>And then restart the compose stack.</p><h3 id="lesson-learned">Lesson Learned</h3><p>Always define custom IP ranges for Docker networks or configure default-address-pools to avoid automatic allocation in common ranges like 192.168.x.x. Overlapping subnets can silently break routing and connectivity.</p><h2 id="any-doubts">Any doubts?</h2><p>Do not hesitate to <a href="https://blog.gonzaleztroyano.es/sobre-mi/#%C2%BFalguna-duda">contact me</a> with any questions, suggestions, complaints, or clarifications you may have; I&apos;ll be happy to talk to you!</p>]]></content:encoded></item><item><title><![CDATA[Kafkiano y surrealista: mucha IA, pero poco enlace…]]></title><description><![CDATA[Malabares de PDF y QR: ¡todo en lugar de poner un enlace como Berners Lee manda!]]></description><link>https://blog.gonzaleztroyano.es/mucha-ia-pero-poco-enlace/</link><guid isPermaLink="false">68efce3657a2a70001179492</guid><category><![CDATA[pensamientos]]></category><category><![CDATA[Administración Pública]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Wed, 15 Oct 2025 16:54:11 GMT</pubDate><media:content url="https://blog.gonzaleztroyano.es/content/images/2025/10/Captura-de-pantalla-2025-10-15-183935.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.gonzaleztroyano.es/content/images/2025/10/Captura-de-pantalla-2025-10-15-183935.png" alt="Kafkiano y surrealista: mucha IA, pero poco enlace&#x2026;"><p>Recientemente he llegado a esta nota de prensa del Ministerio para la <strong>Transformaci&#xF3;n Digital</strong> y de la Funci&#xF3;n P&#xFA;blica:</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4F0;</div><div class="kg-callout-text"><a href="https://digital.gob.es/comunicacion/notas-prensa/mtdfp/2025/07/2025-07-21?ref=blog.gonzaleztroyano.es">&#xD3;scar L&#xF3;pez anuncia una reforma de la Administraci&#xF3;n que simplificar&#xE1; tr&#xE1;mites con la IA y cambiar&#xE1; el modelo de acceso a la funci&#xF3;n p&#xFA;blica</a></div></div><p>La entrada en la web dice as&#xED;:</p><!--kg-card-begin: markdown--><blockquote>
<p><em>El ministro para la Transformaci&#xF3;n Digital y de la Funci&#xF3;n P&#xFA;blica, &#xD3;scar L&#xF3;pez, acompa&#xF1;ado por la secretaria de Estado de Funci&#xF3;n P&#xFA;blica, Clara Mapelli, ha presentado &#x2018;<strong>Consenso por una Administraci&#xF3;n Abierta</strong>&#x2019;</em>, la estrategia de transformaci&#xF3;n de la Administraci&#xF3;n con la que se pretende dar el salto hacia una Administraci&#xF3;n de altas capacidades.<br>
[...]<br>
El proyecto de transformaci&#xF3;n se inici&#xF3; en marzo de 2024 con la publicaci&#xF3;n del documento marco &#x2018;<strong>Consenso por una Administraci&#xF3;n Abierta</strong>&#x2019;; posteriormente, se ha ido desarrollando en los laboratorios de la Administraci&#xF3;n y se ha construido gracias a un proceso participativo en el que se han implicado m&#xE1;s de 400 personas de la sociedad civil, sindicatos, empresarios, universidades y resto de administraciones. Ese trabajo de consenso da como resultado una estrategia de transformaci&#xF3;n que se asienta sobre cuatro ejes y que engloba 18 proyectos, algunos de los cuales ya est&#xE1;n en marcha.</p>
</blockquote>
<!--kg-card-end: markdown--><p>Por tanto, el documento marco, <em>Consenso por una Administraci&#xF3;n Abierta,</em> parece la piedra angular de la publicaci&#xF3;n, &#xBF;cierto? Pero&#x2026; &#xBF;C&#xF3;mo se accede al mismo? Deber&#xED;a haber alg&#xFA;n enlace por alg&#xFA;n lado&#x2026;</p><p>&#xA1;Pero no! Al final de la publicaci&#xF3;n en la web se puede leer lo siguiente:</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/10/imagen.png" class="kg-image" alt="Kafkiano y surrealista: mucha IA, pero poco enlace&#x2026;" loading="lazy" width="1019" height="171" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/10/imagen.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/10/imagen.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/10/imagen.png 1019w" sizes="(min-width: 720px) 720px"></figure><p>Si el lector/a quiere acceder al documento, debe:</p><ol><li>Navegar hasta el final de la p&#xE1;gina.</li><li>Hacer clic en el enlace <em>Nota de prensa.</em></li><li>Desplazarse, en el PDF de la nota de prensa, hasta la p&#xE1;gina 6 del documento (&#xFA;ltima).</li><li>Sacar el m&#xF3;vil</li><li>Abrir la c&#xE1;mara</li><li>Apuntar al QR y leerlo</li><li>Y ya, si quiere leerlo en el ordenador, compartir el enlace por cualquier otra v&#xED;a.</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/10/imagen-1.png" class="kg-image" alt="Kafkiano y surrealista: mucha IA, pero poco enlace&#x2026;" loading="lazy" width="1028" height="406" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/10/imagen-1.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/10/imagen-1.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/10/imagen-1.png 1028w" sizes="(min-width: 720px) 720px"></figure><p>&#xBF;Existen v&#xED;as alternativas? Bueno, pues siempre se puede <a href="https://digital.gob.es/consenso-por-una-administracion-abierta.html?ref=blog.gonzaleztroyano.es">poner un enlace</a>. S&#xED;, como el anterior, que lleva a <a href="https://digital.gob.es/consenso-por-una-administracion-abierta.html?ref=blog.gonzaleztroyano.es">la p&#xE1;gina del M&#xBA; que trata sobre la estrategia/documento </a><em><a href="https://digital.gob.es/consenso-por-una-administracion-abierta.html?ref=blog.gonzaleztroyano.es">Consenso por una Administraci&#xF3;n Abierta.</a></em></p><p>En fin, hablemos de IA... &#x1F62D;&#x1F62D;</p>]]></content:encoded></item><item><title><![CDATA[Parsing Caddy Logs to get IP and ASN Analytics (including Cloudflare-proxied)]]></title><description><![CDATA[A powerful Python utility for analyzing Caddy web server logs to summarize IP addresses and ASN information from requests.]]></description><link>https://blog.gonzaleztroyano.es/parsing-caddy-logs-to-get-ip-and-asn-analytics-including-cloudflare-proxied/</link><guid isPermaLink="false">68ee947f57a2a70001179464</guid><category><![CDATA[tech-notes]]></category><category><![CDATA[Cloudflare]]></category><category><![CDATA[Web Analytics]]></category><category><![CDATA[Networking]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Tue, 14 Oct 2025 18:29:27 GMT</pubDate><media:content url="https://blog.gonzaleztroyano.es/content/images/2025/10/Captura-de-pantalla-2025-10-14-202553.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.gonzaleztroyano.es/content/images/2025/10/Captura-de-pantalla-2025-10-14-202553.png" alt="Parsing Caddy Logs to get IP and ASN Analytics (including Cloudflare-proxied)"><p>Inspired by this post by <a href="anarc.at">Anarcat</a>, I&apos;ve developed a Python script to parse Caddy (a web server and reverse proxy) logs to get information about the top IP and ASN visiting the sites behind Caddy.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://anarc.at/blog/2025-05-30-asncounter/?ref=blog.gonzaleztroyano.es"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Traffic meter per ASN without logs</div><div class="kg-bookmark-description">anarcat</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://anarc.at/apple-touch-icon.png" alt="Parsing Caddy Logs to get IP and ASN Analytics (including Cloudflare-proxied)"><span class="kg-bookmark-author">anarcat</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://anarc.at/apple-touch-icon.png" alt="Parsing Caddy Logs to get IP and ASN Analytics (including Cloudflare-proxied)"></div></a></figure><!--kg-card-begin: markdown--><p>This tool analyzes Caddy web server logs to:</p>
<ol>
<li>Extract client IP addresses (handling <strong>both direct connections and Cloudflare-proxied requests</strong>)</li>
<li>Count request frequency per IP address</li>
<li>Look up ASN (Autonomous System Number) information for each IP</li>
<li>Generate summaries and statistics about traffic patterns</li>
<li>Export data to JSON for further analysis</li>
<li>Load previously saved data for review without reprocessing logs</li>
</ol>
<!--kg-card-end: markdown--><h2 id="python-script-code">Python script code</h2><!--kg-card-begin: markdown--><p>The key difference with other similar tools is that it allows you to see the real visitor IP behind Cloudflare (using <code>X-Forwarded-For</code> header) when present, instead of the base <code>client_ip</code> present on Caddy Logs</p>
<!--kg-card-end: markdown--><p>The Python script is published on Github, below I detail the features:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/gonzaleztroyano/asn-counters-caddy?ref=blog.gonzaleztroyano.es"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - gonzaleztroyano/asn-counters-caddy: A powerful Python utility for analyzing Caddy web server logs to summarize IP addresses and ASN information from requests.</div><div class="kg-bookmark-description">A powerful Python utility for analyzing Caddy web server logs to summarize IP addresses and ASN information from requests. - gonzaleztroyano/asn-counters-caddy</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Parsing Caddy Logs to get IP and ASN Analytics (including Cloudflare-proxied)"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">gonzaleztroyano</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/daaa56fa02501fba6f05dceae771af16fed30f955c9242b89dc1571cc0d8f821/gonzaleztroyano/asn-counters-caddy" alt="Parsing Caddy Logs to get IP and ASN Analytics (including Cloudflare-proxied)"></div></a></figure><h2 id="features">Features</h2><!--kg-card-begin: markdown--><ul>
<li>
<p><strong>IP Detection Logic</strong>:</p>
<ul>
<li>Extracts original client IPs from Cloudflare <code>X-Forwarded-For</code> headers</li>
<li>Uses <code>remote_ip</code> for direct connections</li>
<li>Handles both IPv4 and IPv6 addresses</li>
</ul>
</li>
<li>
<p><strong>ASN Lookup</strong>:</p>
<ul>
<li>Identifies the network/organization behind each IP address</li>
<li>Uses MaxMind MMDB format databases (compatible with GeoIP2, IPinfo, DB-IP)</li>
<li>Shows ASN numbers and organization names</li>
</ul>
</li>
<li>
<p><strong>Multiple Input Options</strong>:</p>
<ul>
<li>Process individual log files</li>
<li>Process multiple log files at once</li>
<li>Use glob patterns to match logs (e.g., <code>logs/caddy-2025-*.log</code>)</li>
<li>Read from stdin for piped input</li>
<li>Support for compressed (.gz) log files</li>
</ul>
</li>
<li>
<p><strong>Data Management</strong>:</p>
<ul>
<li>Save results to JSON files for later analysis</li>
<li>Load previously saved data without reprocessing logs</li>
<li>Append new data to existing analysis</li>
<li>Overwrite existing files with new results</li>
</ul>
</li>
<li>
<p><strong>Analysis Output</strong>:</p>
<ul>
<li>Shows top N IPs by request count (customizable)</li>
<li>Shows top N ASNs by request count</li>
<li>Provides percentage statistics for ASNs</li>
<li>Formatted tables for easy reading</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><h2 id="any-doubts">Any doubts?</h2><p>Do not hesitate to <a href="https://blog.gonzaleztroyano.es/sobre-mi/#%C2%BFalguna-duda">contact me</a> with any questions, suggestions, complaints or clarifications you may have, I&apos;ll be happy to talk to you!</p>]]></content:encoded></item><item><title><![CDATA[Breaking Free: How to Fix LanguageTool's Overleaf Block (A Technical Deep-Dive)]]></title><description><![CDATA[LanguageTool started blocking Overleaf with a "temporarily disabled" message. We reverse-engineered the extension, found the culprit, and created a client-side patch that bypasses the restriction entirely. Here's how we did it and how you can fix it too.]]></description><link>https://blog.gonzaleztroyano.es/how-to-fix-languagetool-overleaf-block-temporal-a-technical-deep-dive/</link><guid isPermaLink="false">68dd65e235a8620001f2e3c2</guid><category><![CDATA[tech-notes]]></category><category><![CDATA[LaTeX]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Wed, 01 Oct 2025 18:19:11 GMT</pubDate><media:content url="https://blog.gonzaleztroyano.es/content/images/2025/10/language_tool_error-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.gonzaleztroyano.es/content/images/2025/10/language_tool_error-1.png" alt="Breaking Free: How to Fix LanguageTool&apos;s Overleaf Block (A Technical Deep-Dive)"><p><em>When your favorite grammar checker decides to ghost your favorite LaTeX editor</em> &#x1F4DD;<br></p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F916;</div><div class="kg-callout-text">This article, in contrast to all the other posts in this blog, has been <strong>mostly written by AI</strong> to provide immediate help to any other person in the same situation.</div></div><!--kg-card-begin: markdown--><h2 id="tldr">TL;DR</h2>
<p>LanguageTool started blocking Overleaf with a &quot;temporarily disabled&quot; message. We reverse-engineered the extension, found the culprit, and created a client-side patch that bypasses the restriction entirely. Here&apos;s how we did it and how you can fix it too.</p>
<hr>
<h2 id="the-problem-when-extensions-go-rogue">The problem: When extensions go rogue</h2>
<p>If you&apos;re a LaTeX user who relies on LanguageTool for grammar checking, you&apos;ve probably hit this frustrating wall:</p>
<pre><code>Lo sentimos, LanguageTool ha deshabilitado temporalmente el soporte 
para este sitio web. Estamos trabajando en una soluci&#xF3;n. 
Deber&#xED;a ser cuesti&#xF3;n de d&#xED;as.
</code></pre>
<p>Translation: &quot;<em>Sorry, LanguageTool has temporarily disabled support for this website. We&apos;re working on a solution. It should be a matter of days.</em>&quot;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2025/10/language_tool_error.png" class="kg-image" alt="Breaking Free: How to Fix LanguageTool&apos;s Overleaf Block (A Technical Deep-Dive)" loading="lazy" width="1010" height="318" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/10/language_tool_error.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/10/language_tool_error.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/10/language_tool_error.png 1010w" sizes="(min-width: 720px) 720px"><figcaption>Screenshot of the error (in Spanish)</figcaption></figure><!--kg-card-begin: markdown--><h2 id="the-investigation-going-down-the-rabbit-hole">The Investigation: Going Down the Rabbit Hole</h2>
<h3 id="step-0-asking-for-support">Step 0: Asking for support</h3>
<p>As a LanguageTool user and suscriber I have access to the support team. I reached them with some screenshoots and, after some interactions, they replied me that they were aware of the issue and the haven&apos;t had and ETA.<br>
The offered me a reimbursement, but I&apos;d like to keep using Language Tool, as I found it really useful!</p>
<h3 id="step-1-finding-the-smoking-gun">Step 1: Finding the Smoking Gun</h3>
<p>First, I dug into the extension&apos;s localization files to trace where this message comes from. In <code>_locales/es/messages.json</code>, there it was:</p>
<pre><code class="language-json">{
  &quot;siteTemporarilyUnsupported&quot;: {
    &quot;message&quot;: &quot;Lo sentimos, LanguageTool ha deshabilitado temporalmente...&quot;
  }
}
</code></pre>
<p>The message key <code>siteTemporarilyUnsupported</code> was our first clue.</p>
<h3 id="step-2-following-the-breadcrumbs">Step 2: Following the Breadcrumbs</h3>
<p>Using grep to search through the minified JavaScript files, I found this logic in <code>popup.js</code>:</p>
<pre><code class="language-javascript">ff.isDomainSupported(Z_) ? 
  ff.isDomainExcludedByGroupPolicy(Z_) &amp;&amp; (d.supported=!1, d.unsupportedMessage=In.getMessage(&quot;siteDisabledPerGroupPolicy&quot;)) : 
  (d.supported=!1, d.unsupportedMessage=In.getMessage(&quot;siteTemporarilyUnsupported&quot;))
</code></pre>
<p>Bingo! When <code>isDomainSupported()</code> returns false, it triggers our dreaded error message.</p>
<h3 id="step-3-the-remote-config-revelation">Step 3: The Remote Config Revelation</h3>
<p>Digging deeper, I discovered that LanguageTool uses a remote configuration system. The extension fetches domain blacklists from:</p>
<pre><code>https://languagetool.org/webextension_config.json
</code></pre>
<p>The <code>isDomainSupported</code> function checks against this dynamically updated list:</p>
<pre><code class="language-javascript">isDomainSupported(e) {
  return !this._configuration || 
         !this._configuration.unsupportedDomains.includes(&quot;*&quot;) &amp;&amp; 
         !Hr._isListContainsDomain(this._configuration.unsupportedDomains, e)
}
</code></pre>
<p>The thing here is that overleaf.com was not on this list! Only &quot;seleniumbase.io&quot; appears at the moment of writing.</p>
<h3 id="step-4-the-domain-matching-logic">Step 4: The Domain Matching Logic</h3>
<p>The <code>_isListContainsDomain</code> function is particularly clever&#x2014;it supports wildcard subdomain matching:</p>
<pre><code class="language-javascript">function Mt(e,t) {
  const r = Ut(t);  // Normalize domain
  return (e||[]).some(e =&gt; {
    const t = Ut(e);
    return t === r || r.endsWith(&quot;.&quot; + t)  // Exact OR subdomain match
  });
}
</code></pre>
<p>This means if <code>overleaf.com</code> is blocked, so are <code>www.overleaf.com</code>, <code>v2.overleaf.com</code>, etc.</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="the-solution-client-side-liberation">The Solution: Client-Side Liberation</h2>
<h3 id="the-strategy">The Strategy</h3>
<p>Instead of trying to fight the remote configuration (which we can&apos;t control), we implement a <strong>client-side override</strong>. The beauty of browser extensions is that once you have the code, you can modify it.</p>
<h3 id="the-implementation">The Implementation</h3>
<p>The fix is elegantly simple. We modify the <code>isDomainSupported</code> function to always return <code>true</code> for Overleaf domains, regardless of what the remote config says:</p>
<pre><code class="language-javascript">isDomainSupported(e) {
    // Always allow overleaf.com and its subdomains
    if(e &amp;&amp; (e.includes(&apos;overleaf.com&apos;) || e.endsWith(&apos;overleaf.com&apos;))) {
        return true;
    }
    // Original logic continues...
    return !this._configuration || 
           !this._configuration.unsupportedDomains.includes(&quot;*&quot;) &amp;&amp; 
           !Hr._isListContainsDomain(this._configuration.unsupportedDomains, e)
}
</code></pre>
<h3 id="files-that-need-patching">Files That Need Patching</h3>
<p>LanguageTool&apos;s architecture spreads this function across multiple contexts:</p>
<ul>
<li><code>background.js</code> - Main extension logic</li>
<li><code>content.js</code> - Injected page scripts</li>
<li><code>popup.js</code> - Extension popup interface</li>
<li><code>validator/validator.js</code> - Grammar validation engine</li>
<li><code>toolbox/toolbox.js</code> - Writing tools interface</li>
<li><code>options/options.js</code> - Settings management</li>
<li>And several others...</li>
</ul>
<p>Each file contains its own minified version of the domain checking logic, so they all need the same patch.</p>
<!--kg-card-end: markdown--><h2></h2><p><strong>Happy LaTeX writing, everyone!</strong> &#x1F389;<br></p>]]></content:encoded></item><item><title><![CDATA[CIVIO tenía razón: el código fuente de BOSCO ha de ser público]]></title><description><![CDATA[<p>BOSCO es el programa inform&#xE1;tico (<em>software</em>) que decid&#xED;a sobre si una persona era, o no, beneficiaria del bono social.</p><p>Tras recibir las quejas de muchas personas, la Fundaci&#xF3;n Ciudadana <a href="https://civio.es/?ref=blog.gonzaleztroyano.es#top?utm_source=blog.gonzaleztroyano.es">Civio</a> (unas personas maravillosas a las que recomiendo <a href="https://civio.es/suscribete-a-nuestro-boletin/?utm_source=blog.gonzaleztroyano.es">seguir</a> y, si puedes permit&#xED;rtelo,</p>]]></description><link>https://blog.gonzaleztroyano.es/civio-sentencia-codigo-fuente-bosco/</link><guid isPermaLink="false">68cd698835a8620001f2e353</guid><category><![CDATA[pensamientos]]></category><category><![CDATA[Administración Pública]]></category><category><![CDATA[Transparencia]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Fri, 19 Sep 2025 14:51:49 GMT</pubDate><media:content url="https://blog.gonzaleztroyano.es/content/images/2025/10/Captura-de-pantalla-2025-10-01-202501.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.gonzaleztroyano.es/content/images/2025/10/Captura-de-pantalla-2025-10-01-202501.png" alt="CIVIO ten&#xED;a raz&#xF3;n: el c&#xF3;digo fuente de BOSCO ha de ser p&#xFA;blico"><p>BOSCO es el programa inform&#xE1;tico (<em>software</em>) que decid&#xED;a sobre si una persona era, o no, beneficiaria del bono social.</p><p>Tras recibir las quejas de muchas personas, la Fundaci&#xF3;n Ciudadana <a href="https://civio.es/?ref=blog.gonzaleztroyano.es#top?utm_source=blog.gonzaleztroyano.es">Civio</a> (unas personas maravillosas a las que recomiendo <a href="https://civio.es/suscribete-a-nuestro-boletin/?utm_source=blog.gonzaleztroyano.es">seguir</a> y, si puedes permit&#xED;rtelo, <a href="https://civio.es/socios/?utm_source=blog.gonzaleztroyano.es">hacerte socio</a>) comprob&#xF3; que <strong>este programa estaba denegando el bono social a personas que s&#xED; que ten&#xED;an derecho a recibirlo</strong>.</p><p>Al detectar este problema, Civio solicit&#xF3;, ampar&#xE1;ndose en la Ley de Transparencia, el acceso al c&#xF3;digo fuente del programa para poder comprobar su funcionamiento, su l&#xF3;gica y, en definitiva, entender el funcionamiento de esta pieza de <em>software</em> (desarrollada con dinero p&#xFA;blico) para poder arreglarlo.</p><p>Este proceso comenz&#xF3; en 2018 y es ahora, 7 a&#xF1;os despu&#xE9;s, cuando el Tribunal Supremo ha fallado en favor de Civio, obligando al Ministerio para la Transici&#xF3;n Ecol&#xF3;gica a dar acceso a Civio al c&#xF3;digo fuente del programa BOSCO.</p><!--kg-card-begin: markdown--><p>No ha sido un camino f&#xE1;cil, la Transparencia <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> nunca suele serlo lamentablemente: desde su sulicitud hasta el actual resultado favorable han tenido que pasar silencios administrativos, reclamaciones al Consejo de Transparencia y Buen Gobierno, y 3 sentencias judiciales de por medio (Juzgado Central de lo Contencioso-Administrativo n.&#xBA; 8, Audiencia Nacional y Tribunal Supremo).</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>S&#xED;, con may&#xFA;scula <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown--><p>Esta <a href="https://www.documentcloud.org/documents/26100518-sentencia-tribunal-supremo-bosco-civio/?ref=blog.gonzaleztroyano.es">sentencia</a> <em>crea jurisprudencia y establece que conocer las tripas de los programas y algoritmos que usan las administraciones p&#xFA;blicas es un derecho democr&#xE1;tico. </em><br>Estima que los riesgos de publicar un <em>software </em>(y en general aplicable a cualquier tipo de solicitud de Transparencia) han de ser ponderados cada caso (como ya ha estimado en otras ocasiones).</p><p>La transparencia algor&#xED;tmica y la Transparencia de las AAPP en este sentido es importante, y una obligaci&#xF3;n, como afirma la sentencia, pues permiten <em>&#x201C;explicar de forma comprensible el funcionamiento de los algoritmos que se emplean en la toma de decisiones que afectan a los ciudadanos para permitirles conocer, fiscalizar y participar en la gesti&#xF3;n p&#xFA;blica&#x201D;</em>. </p><p>La propiedad intelectual ni la seguridad no pueden suponer una opci&#xF3;n de <em>carta blanca</em> para permitir a las AAPP denegar acceso a informaci&#xF3;n p&#xFA;blica, en definitiva.</p><p>Desde aqu&#xED; no puedo m&#xE1;s que felicitar a Civio por su trabajo, por su insistencia y por creer, y luchar por, un mundo mejor.</p><p>Puedes acceder a su web, donde lo explican infinitamente mejor que yo a trav&#xE9;s del siguiente enlace:</p><p><strong><a href="https://civio.es/novedades/2025/09/17/civio-abre-camino-en-la-transparencia-algoritmica-el-supremo-condena-al-gobierno-a-entregar-el-codigo-fuente-de-bosco/?utm_source=blog.gonzaleztroyano.es">https://civio.es/novedades/2025/09/17/civio-abre-camino-en-la-transparencia-algoritmica-el-supremo-condena-al-gobierno-a-entregar-el-codigo-fuente-de-bosco/</a></strong></p><p>Y, de nuevo, te invito a apoyarles de la mejor forma que puedas. &#x1F913;&#x1F643;</p>]]></content:encoded></item><item><title><![CDATA[¿Hay validación de información en ISPA24 por parte de Función Pública?]]></title><description><![CDATA[¿¿Un alcalde de un pueblo de 338 personas cobrando 146.325€?? ¡No, más bien un error de introducción de datos!]]></description><link>https://blog.gonzaleztroyano.es/hay-validacion-de-informacion-en-ispa24-por-parte-de-funcion-publica/</link><guid isPermaLink="false">68c415535d33dc0001303f12</guid><category><![CDATA[pensamientos]]></category><category><![CDATA[Transparencia]]></category><category><![CDATA[Administración Pública]]></category><category><![CDATA[ISPA]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Fri, 12 Sep 2025 15:53:10 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1516382799247-87df95d790b7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGNoZWNrJTIwfGVufDB8fHx8MTc1OTM0MzE4MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<h2 id="error-detectado-en-datos">Error detectado en datos</h2><img src="https://images.unsplash.com/photo-1516382799247-87df95d790b7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGNoZWNrJTIwfGVufDB8fHx8MTc1OTM0MzE4MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="&#xBF;Hay validaci&#xF3;n de informaci&#xF3;n en ISPA24 por parte de Funci&#xF3;n P&#xFA;blica?"><p>Preparando informes con los datos publicados como parte del informe ISPA 2024, me he topado con un valor curioso:</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F911;</div><div class="kg-callout-text">&#xA1;El alcalde de Dos Aguas (Comunitat Valenciana) ha pasado de cobrar 1.000 a 146.328,00 &#x20AC;! &#xA1;Eso s&#xED; que es un aumento!</div></div><p>La siguiente tabla est&#xE1; ordenada por la columna <em>percibido_periodo2</em>, que es el sueldo del alcalde/alcaldesa a partir de las <a href="https://es.wikipedia.org/wiki/Elecciones_municipales_de_Espa%C3%B1a_de_2023?ref=blog.gonzaleztroyano.es">elecciones municipales de 2023</a>. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-4.png" class="kg-image" alt="&#xBF;Hay validaci&#xF3;n de informaci&#xF3;n en ISPA24 por parte de Funci&#xF3;n P&#xFA;blica?" loading="lazy" width="1475" height="371" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/09/imagen-4.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/09/imagen-4.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-4.png 1475w" sizes="(min-width: 720px) 720px"><figcaption>Captura de pantalla de la herramienta <em>Power Query</em>, en la que se puede ver el resultado de ordenar los datos de ISPA24 por la columna &#xAB;<em>dedicacion_periodo2</em>&#xBB;: Dos Aguas es el primer municipio en orden descendente.</figcaption></figure><p>Obviamente, para cualquier persona que (1) sepa un poco de an&#xE1;lisis de datos y (2) conozca nuestro pa&#xED;s, sabe que es altamente improbable que un municipio como Dos Aguas, con una poblaci&#xF3;n de 338 personas, seg&#xFA;n el <a href="https://www.ine.es/jaxiT3/Datos.htm?t=2903&amp;ref=blog.gonzaleztroyano.es#_tabs-tabla">INE</a>, pague a su alcalde tal cantidad de dinero. </p><p>Se trata de un error presente en los datos que el <a href="https://digital.gob.es/funcion-publica/dgfp/espacio-ispa/estadisticas/informac_estad_2023?ref=blog.gonzaleztroyano.es">M&#xBA; de Transformaci&#xF3;n Digital y de la Funci&#xF3;n P&#xFA;blica</a> ha <a href="https://digital.gob.es/content/dam/portal-mtdfp/funcion-publica/dgfp/ispa/ispa2024/retrib_2023/retribuciones_alcaldes.pdf?ref=blog.gonzaleztroyano.es#P160">publicado</a>, tal y como se puede ver en la siguiente captura del PDF:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-5.png" class="kg-image" alt="&#xBF;Hay validaci&#xF3;n de informaci&#xF3;n en ISPA24 por parte de Funci&#xF3;n P&#xFA;blica?" loading="lazy" width="1427" height="425" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/09/imagen-5.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/09/imagen-5.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-5.png 1427w" sizes="(min-width: 720px) 720px"><figcaption>Captura de la p&#xE1;gina 160 del PDF de datos de ISPA24, con la entrada de &quot;Dos Aguas&quot; resaltada con un recuadro de borde rojo. Se puede ver &quot;1463.28&quot; en la columna de percibido.</figcaption></figure><p>Este error nos recuerda la importancia de validar la introducci&#xF3;n de datos y aplicar restricciones en este tipo de <em>inputs</em>.</p><p>Por supuesto, este error ya ha sido notificado a trav&#xE9;s del buz&#xF3;n de sugerencias y mejoras del Espacio ISPA. </p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F605;</div><div class="kg-callout-text">&#xBF;Qu&#xE9; m&#xE1;s datos ser&#xE1;n incorrectos?</div></div><h2 id="%C2%A1datos-corregidos">&#xA1;Datos corregidos!</h2><p>Tras ponerlo en conocimiento de la unidad competente, la informaci&#xF3;n publicada ya ha sido corregida. &#xA1;&#xA1;Bien!!</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-6.png" class="kg-image" alt="&#xBF;Hay validaci&#xF3;n de informaci&#xF3;n en ISPA24 por parte de Funci&#xF3;n P&#xFA;blica?" loading="lazy" width="1559" height="96" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/09/imagen-6.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/09/imagen-6.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-6.png 1559w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[Using Pi-hole as local NTP server]]></title><description><![CDATA[<p>We can think about the Pi-hole as a local NTP <em>cache</em>. Or, more <a href="https://datatracker.ietf.org/doc/html/rfc2030?ref=blog.gonzaleztroyano.es#:~:Stratum:%20This%20is%20a%20eight-bit%20unsigned%20integer%20indicating%20the%20stratumlevel%20of%20the%20local%20clock,%20with%20values%20defined%20as%20follows:">RFC2030-compliant</a>, a lower stratum NTP server. In our home scenario, the added delay (much lower than a second) is almost negligible.</p><p>On the other hand, thinking about the common good of the Internet (and also on the</p>]]></description><link>https://blog.gonzaleztroyano.es/using-pi-hole-as-local-ntp-server/</link><guid isPermaLink="false">68b765925d33dc0001303ea0</guid><category><![CDATA[tech-notes]]></category><category><![CDATA[ntp]]></category><category><![CDATA[sysadmin]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Tue, 02 Sep 2025 22:43:04 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1524671470795-c7d181eca26e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDl8fHRpbWV8ZW58MHx8fHwxNzU2ODUyOTkyfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1524671470795-c7d181eca26e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDl8fHRpbWV8ZW58MHx8fHwxNzU2ODUyOTkyfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Using Pi-hole as local NTP server"><p>We can think about the Pi-hole as a local NTP <em>cache</em>. Or, more <a href="https://datatracker.ietf.org/doc/html/rfc2030?ref=blog.gonzaleztroyano.es#:~:Stratum:%20This%20is%20a%20eight-bit%20unsigned%20integer%20indicating%20the%20stratumlevel%20of%20the%20local%20clock,%20with%20values%20defined%20as%20follows:">RFC2030-compliant</a>, a lower stratum NTP server. In our home scenario, the added delay (much lower than a second) is almost negligible.</p><p>On the other hand, thinking about the common good of the Internet (and also on the NTP server admin team &amp; service), having a <em>NTP cache </em>is a really efficient, as the stratum 1 server only receive request from one device (Pi-hole server) instead of all the devices that you have (can be tens of them).</p><p>On the following diagram can be seen graphically:</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/09/pihole-as-ntp.drawio-1.png" class="kg-image" alt="Using Pi-hole as local NTP server" loading="lazy" width="1330" height="1002" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/09/pihole-as-ntp.drawio-1.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/09/pihole-as-ntp.drawio-1.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/09/pihole-as-ntp.drawio-1.png 1330w" sizes="(min-width: 720px) 720px"></figure><h2 id="activating-pi-holes-ntp-server">Activating Pi-hole&apos;s NTP server</h2><p>On the Pi-hole admin panel, we&apos;ve to activate <em>Expert settings, </em>clicking on the toggle on the top right corner of the <em>Settings &gt; System </em>page.</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-1.png" class="kg-image" alt="Using Pi-hole as local NTP server" loading="lazy" width="1261" height="871" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/09/imagen-1.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/09/imagen-1.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-1.png 1261w" sizes="(min-width: 720px) 720px"></figure><p>After doing so, a new option appears on the <em>Settings</em> submenu (marked as 5 on the capture below):</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-2.png" class="kg-image" alt="Using Pi-hole as local NTP server" loading="lazy" width="1282" height="831" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/09/imagen-2.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/09/imagen-2.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-2.png 1282w" sizes="(min-width: 720px) 720px"></figure><h2 id="setting-upstream-ntp-server">Setting upstream NTP server</h2><p><a href="https://blog.gonzaleztroyano.es/tech-notes/servidores-de-tiempo-ntp-para-espana/">As I&apos;ve stated before</a>, here in Spain the official time is distributed by the Army Royal Observatory (<a href="https://armada.defensa.gob.es/ArmadaPortal/page/Portal/ArmadaEspannola/cienciaobservatorio/prefLang-es/?ref=blog.gonzaleztroyano.es">ROA, </a><em><a href="https://armada.defensa.gob.es/ArmadaPortal/page/Portal/ArmadaEspannola/cienciaobservatorio/prefLang-es/?ref=blog.gonzaleztroyano.es">Real Observatorio de la Armada</a></em>), so to configure Pi-hole to query this Stratum 1 server, we must set the following option/variable [6 on the following image]:</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-3.png" class="kg-image" alt="Using Pi-hole as local NTP server" loading="lazy" width="1132" height="882" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/09/imagen-3.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/09/imagen-3.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/09/imagen-3.png 1132w" sizes="(min-width: 720px) 720px"></figure><h2 id="configure-clients">Configure clients:</h2><p>It&apos;s recommended to set the DHCP options, if available, as it&apos;s practical. The problem is that most of the clients ignore this option to choose the one hardcoded or default (time.windows.com on Windows, for example).</p><p>So to set the Pi-hole as NTP server for local clients, just follow the instructions on <a href="https://blog.gonzaleztroyano.es/tech-notes/servidores-de-tiempo-ntp-para-espana/">Windows</a> or <a href="https://blog.gonzaleztroyano.es/tech-notes/configurar-ntp-con-chrony-conf/">Linux</a>.</p><h2 id="any-doubts">Any doubts?</h2><p>Do not hesitate to <a href="https://blog.gonzaleztroyano.es/sobre-mi/#%C2%BFalguna-duda">contact me</a> with any questions, suggestions, complaints or clarifications you may have, I&apos;ll be happy to talk to you!</p>]]></content:encoded></item><item><title><![CDATA[Certificates are not trusted on Firefox: ¡send full chain! (on Caddy)]]></title><description><![CDATA[<h2 id="intro">Intro</h2><p>As a Caddy Server user, I faced a strange error today<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
<p>I&apos;m on my way to change my browser (previously Chrome and Edge) to <a href="https://www.firefox.com/es-ES/?ref=blog.gonzaleztroyano.es">Firefox</a> and when trying to access some of my sites (the ones not proxied by Cloudflare) the following error appeared on Firefox:</p>]]></description><link>https://blog.gonzaleztroyano.es/certificates-are-not-trusted-on-firefox-send-full-chain-caddy/</link><guid isPermaLink="false">68a30d175831b400010910ac</guid><category><![CDATA[tech-notes]]></category><category><![CDATA[caddy]]></category><category><![CDATA[Let's Encrypt]]></category><category><![CDATA[SSL/TLS]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Mon, 18 Aug 2025 12:04:01 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1542407931-2fe6d5b417d5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGNoYWlufGVufDB8fHx8MTc1NTUxODY1N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<h2 id="intro">Intro</h2><img src="https://images.unsplash.com/photo-1542407931-2fe6d5b417d5?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fGNoYWlufGVufDB8fHx8MTc1NTUxODY1N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Certificates are not trusted on Firefox: &#xA1;send full chain! (on Caddy)"><p>As a Caddy Server user, I faced a strange error today<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
<p>I&apos;m on my way to change my browser (previously Chrome and Edge) to <a href="https://www.firefox.com/es-ES/?ref=blog.gonzaleztroyano.es">Firefox</a> and when trying to access some of my sites (the ones not proxied by Cloudflare) the following error appeared on Firefox:</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Well, not really strange once understood and solved, but you know ;) <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/08/image-3.png" class="kg-image" alt="Certificates are not trusted on Firefox: &#xA1;send full chain! (on Caddy)" loading="lazy" width="1093" height="707" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/08/image-3.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/08/image-3.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/08/image-3.png 1093w" sizes="(min-width: 720px) 720px"></figure><h2 id="problem">Problem</h2><p>Of course, if not DNS, it&apos;s certificate chain trust ;(.</p><p>If tried to connect to the server/page/domain with the <code>echo &quot;&quot; | openssl s_client -showcerts -servername *****.glez.cloud -connect *****..glez.cloud:443</code> command, I receive the following errors:</p>
<figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/08/imagen.png" class="kg-image" alt="Certificates are not trusted on Firefox: &#xA1;send full chain! (on Caddy)" loading="lazy" width="1101" height="716" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/08/imagen.png 600w, https://blog.gonzaleztroyano.es/content/images/size/w1000/2025/08/imagen.png 1000w, https://blog.gonzaleztroyano.es/content/images/2025/08/imagen.png 1101w" sizes="(min-width: 720px) 720px"></figure><pre><code class="language-plain">verify error:num=20:unable to get local issuer certificate [...]
verify error:num=21:unable to verify the first certificate [...]
Verification error: unable to verify the first certificate [...]
Secure Renegotiation IS NOT supported [...]
Verify return code: 21 (unable to verify the first certificate) [...]
</code></pre>
<h2 id="solution">Solution</h2><p>Although I would be the only user facing this error, these kinds of things are the ones that have to be solved when encountered. If not, the <em>debt</em> could be worse next time. </p><p>So, to solve this problem, we have to identify it first: the server is not sending the <a href="https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/?ref=blog.gonzaleztroyano.es">full certificate chain</a>, only the <a href="https://cert-manager.io/docs/reference/tls-terminology/?ref=blog.gonzaleztroyano.es#leaf-certificates">leaf certificate</a>. </p><p>To make Caddy send the full certificate, the certificate file path on the <a href="https://caddyserver.com/docs/caddyfile/directives/tls?ref=blog.gonzaleztroyano.es#tls">tls directive</a> of the CaddyFile has to point not to the leaf certificate, but to the fullchain file. In case you are using Let&apos;s Encrypt, the paths will be:</p><p>Change <code>tls /etc/letsencrypt/live/*domain*/cert.pem</code> to <code>tls /etc/letsencrypt/live/*domain*/fullchain.pem</code></p>
<h2 id="any-doubts">Any doubts?</h2><p>Do not hesitate to <a href="https://blog.gonzaleztroyano.es/sobre-mi/#%C2%BFalguna-duda">contact me</a> with any questions, suggestions, complaints or clarifications you may have, I&apos;ll be happy to talk to you!</p><p></p>]]></content:encoded></item><item><title><![CDATA[/etc/ntp.conf puede no existir: mira en /etc/chrony.conf !]]></title><description><![CDATA[<p>A la hora de configurar NTP en Linux (&amp; Co.) parece a primera vista que la &#xFA;nica opci&#xF3;n es usar <a href="https://www.ntp.org/documentation/4.2.8-series/ntpd/?ref=blog.gonzaleztroyano.es">ntpd</a>.</p><p>En mis equipos me gusta indicar los servidores NTP a usar para la sincronizaci&#xF3;n de hora. Pero como la mayor&#xED;a de los</p>]]></description><link>https://blog.gonzaleztroyano.es/configurar-ntp-con-chrony-conf/</link><guid isPermaLink="false">68a1b4ca5831b4000109105c</guid><category><![CDATA[tech-notes]]></category><category><![CDATA[sysadmin]]></category><category><![CDATA[ntp]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Sun, 17 Aug 2025 11:24:53 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1643424975787-f134e78ecbc8?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEzfHxjbG9ja3xlbnwwfHx8fDE3NTU0Mjk4MzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1643424975787-f134e78ecbc8?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDEzfHxjbG9ja3xlbnwwfHx8fDE3NTU0Mjk4MzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="/etc/ntp.conf puede no existir: mira en /etc/chrony.conf !"><p>A la hora de configurar NTP en Linux (&amp; Co.) parece a primera vista que la &#xFA;nica opci&#xF3;n es usar <a href="https://www.ntp.org/documentation/4.2.8-series/ntpd/?ref=blog.gonzaleztroyano.es">ntpd</a>.</p><p>En mis equipos me gusta indicar los servidores NTP a usar para la sincronizaci&#xF3;n de hora. Pero como la mayor&#xED;a de los tuturiales est&#xE1;n enfocados a ntpd, si este <em>daemon</em> no est&#xE1; instalado, al ir a editar el archivo <a href="https://manpages.ubuntu.com/manpages/focal/man5/ntp.conf.5.html?ref=blog.gonzaleztroyano.es">/etc/ntp.conf</a>, recibir&#xE1;s un error de archivo inexistente. ;(</p><p>Sin embargo, en muchos sistemas, por su <a href="https://chrony-project.org/comparison.html?ref=blog.gonzaleztroyano.es">mayor simplicidad y reducido tama&#xF1;o</a> es <a href="https://chrony-project.org/?ref=blog.gonzaleztroyano.es">chrony</a> el <em>daemon</em> instalado por defecto. La configuraci&#xF3;n es realmente sencilla, y se gestiona a trav&#xE9;s del archivo <em>/etc/chrony.conf</em></p><p>Para configurar <a href="https://blog.gonzaleztroyano.es/tech-notes/servidores-de-tiempo-ntp-para-espana/">servidores de tiempo (NTP) para Espa&#xF1;a</a> (en mi caso, uso los del <a href="https://armada.defensa.gob.es/ArmadaPortal/page/Portal/ArmadaEspannola/cienciaobservatorio/prefLang-es/?ref=blog.gonzaleztroyano.es">ROA </a>y <a href="https://rediris.es/servicios/conectividad/ntp/index.html.es?ref=blog.gonzaleztroyano.es">RedIRIS</a>), basta con editar el <a href="https://chrony-project.org/doc/4.7/chrony.conf.html?ref=blog.gonzaleztroyano.es">archivo </a>a&#xF1;adiendo lo siguiente, y eliminando las otras referencias existentes a otros servidores:</p><!--kg-card-begin: markdown--><pre><code class="language-plain">pool ntp.roa.es
pool hora.rediris.es
</code></pre>
<!--kg-card-end: markdown--><p>Quedando de la siguiente manera el archivo:</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/08/image.png" class="kg-image" alt="/etc/ntp.conf puede no existir: mira en /etc/chrony.conf !" loading="lazy" width="653" height="183" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/08/image.png 600w, https://blog.gonzaleztroyano.es/content/images/2025/08/image.png 653w"></figure><p>Una vez editado el archivo, basta con reiniciar el servicio:</p><!--kg-card-begin: markdown--><pre><code class="language-linux">service chronyd restart
</code></pre>
<!--kg-card-end: markdown--><p>Y para ver el estado de sincronizaci&#xF3;n podemos usar:</p><pre><code class="language-cmd">chronyc sources</code></pre><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/08/image-1.png" class="kg-image" alt="/etc/ntp.conf puede no existir: mira en /etc/chrony.conf !" loading="lazy" width="664" height="121" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/08/image-1.png 600w, https://blog.gonzaleztroyano.es/content/images/2025/08/image-1.png 664w"></figure><p>En la <a href="https://chrony-project.org/doc/4.7/chronyc.html?ref=blog.gonzaleztroyano.es">docmentaci&#xF3;n de chronyc</a> podemos ver qu&#xE9; significa cada valor de salida del comando.</p><!--kg-card-begin: markdown--><p>Igualmente, con <code>chronyc tracking</code> podemos ver el detalle de la sincronizaci&#xF3;n del reloj:</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/08/image-2.png" class="kg-image" alt="/etc/ntp.conf puede no existir: mira en /etc/chrony.conf !" loading="lazy" width="441" height="214"></figure>]]></content:encoded></item><item><title><![CDATA[Servidores de tiempo (NTP) para España]]></title><description><![CDATA[<p>Si bien hay ciertas recomendaciones de usar pool.ntp.org y sus <a href="https://www.ntppool.org/zone/es?ref=blog.gonzaleztroyano.es">variantes locales</a>, en mi caso me gusta usar:</p><!--kg-card-begin: markdown--><ul>
<li>
<p>El NTP del <a href="https://armada.defensa.gob.es/ArmadaPortal/page/Portal/ArmadaEspannola/cienciaobservatorio/prefLang-es/?ref=blog.gonzaleztroyano.es">Real Observatorio de la Armada</a> (ROA), <code>ntp.roa.es</code>, o sus direcciones:</p>
<ul>
<li><code>150.214.94.5</code> (en FQDN, <em>hora.roa.es</em>)</li>
<li><code>150.214.94.10</code> (en FQDN,</li></ul></li></ul>]]></description><link>https://blog.gonzaleztroyano.es/servidores-de-tiempo-ntp-para-espana/</link><guid isPermaLink="false">6894a7b25831b4000109100e</guid><category><![CDATA[tech-notes]]></category><dc:creator><![CDATA[Pablo González Troyano]]></dc:creator><pubDate>Thu, 07 Aug 2025 13:40:35 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1456574808786-d2ba7a6aa654?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDZ8fHRpbWV8ZW58MHx8fHwxNzU1NTE4NzI5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1456574808786-d2ba7a6aa654?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDZ8fHRpbWV8ZW58MHx8fHwxNzU1NTE4NzI5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" alt="Servidores de tiempo (NTP) para Espa&#xF1;a"><p>Si bien hay ciertas recomendaciones de usar pool.ntp.org y sus <a href="https://www.ntppool.org/zone/es?ref=blog.gonzaleztroyano.es">variantes locales</a>, en mi caso me gusta usar:</p><!--kg-card-begin: markdown--><ul>
<li>
<p>El NTP del <a href="https://armada.defensa.gob.es/ArmadaPortal/page/Portal/ArmadaEspannola/cienciaobservatorio/prefLang-es/?ref=blog.gonzaleztroyano.es">Real Observatorio de la Armada</a> (ROA), <code>ntp.roa.es</code>, o sus direcciones:</p>
<ul>
<li><code>150.214.94.5</code> (en FQDN, <em>hora.roa.es</em>)</li>
<li><code>150.214.94.10</code> (en FQDN, <em>minuto.roa.es</em>)</li>
<li>Sin IPv6 &#x1F62B;</li>
</ul>
<p>El ROA es la instituci&#xF3;n encargada de proporcionar el tiempo oficial dentro de Espa&#xF1;a. V&#xE9;ase <a href="https://www.boe.es/diario_boe/txt.php?id=BOE-A-1992-26093&amp;ref=blog.gonzaleztroyano.es">Real Decreto 1308/1992</a> y <a href="https://www.boe.es/buscar/act.php?id=BOE-A-2014-13359&amp;ref=blog.gonzaleztroyano.es#a4">Ley 32/2014</a></p>
</li>
<li>
<p>El <a href="https://rediris.es/servicios/conectividad/ntp/index.html.es?ref=blog.gonzaleztroyano.es">NTP de RedIRIS</a> (<a href="https://www.rediris.es/rediris/?ref=blog.gonzaleztroyano.es">Red Acad&#xE9;mica y de Investigaci&#xF3;n espa&#xF1;ola</a>), que toma como referencia el anterior, <code>hora.rediris.es</code>, o sus direcciones:</p>
<ul>
<li><code>130.206.3.166</code></li>
<li><code>2001:720:418:cafa::166</code></li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><h2 id="actualizaci%C3%B3n-otros-servidores">(Actualizaci&#xF3;n) Otros servidores</h2><!--kg-card-begin: markdown--><p>Los servidores arriba indicados son, quiz&#xE1;, demasiado <em>opinionated</em><sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, as&#xED; que por aqu&#xED; comparto otros m&#xE1;s comunes:</p>
<ul>
<li><code>time.windows.com</code>, es el predeterminado de Windows.</li>
<li><code>time.google.com</code>, <a href="https://developers.google.com/time?hl=es-419&amp;ref=blog.gonzaleztroyano.es">ofrecido por Google</a>.</li>
<li><code>time.cloudflare.com</code>, <a href="https://blog.cloudflare.com/secure-time/?ref=blog.gonzaleztroyano.es">ofrecido</a> por <a href="https://www.cloudflare.com/es-es/time/?ref=blog.gonzaleztroyano.es">Cloudflare</a></li>
<li><code>es.pool.ntp.org.</code>, direcci&#xF3;n de los servidores NTP para Espa&#xF1;a dados de alta en el <a href="https://www.ntppool.org/es/zone/es?ref=blog.gonzaleztroyano.es">proyecto NTPpool.org</a>.</li>
</ul>
<p>Implicaciones de privacidad y geopol&#xED;tica aparte, se pueden usar cualquiera; &#xA1;y combinarlos, claro!</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>O, en castellano simple, que son una elecci&#xF3;n muy personal y concreta <a href="#fnref1" class="footnote-backref">&#x21A9;&#xFE0E;</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown--><p></p><h2 id="configurar-ntp-en-windows">Configurar NTP en Windows</h2><p>Por defecto, windows usa ``time.windows.net``, que si bien funciona puede no ser lo m&#xE1;s deseable. </p><p>Para cambiarlo a los indicados anteriormente, es necesario abrir una consola de Powershell (con privilegios de administraci&#xF3;n) y ejecutar:</p><!--kg-card-begin: markdown--><pre><code class="language-cmd">w32tm /config /manualpeerlist:&quot;ntp.roa.es hora.rediris.es&quot; /syncfromflags:manual /update
</code></pre>
<!--kg-card-end: markdown--><p>&#x1F4A1; Es posible indicar un servidor con prioridad sobre otro, modificando levemente el comando anterior. En el siguiente ejemplo, el servidor predeterminado es ``hora.roa.es`` y se utiliza ``time.cloudflare.com`` como servidor de respaldo:</p><!--kg-card-begin: markdown--><pre><code>w32tm /config /syncfromflags:manual /manualpeerlist:&quot;hora.roa.es,0x8 time.cloudflare.com,0x2&quot; /update
</code></pre>
<!--kg-card-end: markdown--><p>Para reiniciar el servicio:</p><!--kg-card-begin: markdown--><pre><code>Stop-Service w32time
Start-Service w32time
</code></pre>
<!--kg-card-end: markdown--><h3 id="comandos-%C3%BAtiles">Comandos &#xFA;tiles</h3><h4 id="comprobar-aplicaci%C3%B3n">Comprobar aplicaci&#xF3;n</h4><p>Podemos comprobar si los cambios se han guardado correctamente ejecutando el comando:</p><!--kg-card-begin: markdown--><pre><code>w32tm /dumpreg /subkey:parameters
</code></pre>
<!--kg-card-end: markdown--><p>Dar&#xE1; como resultado:</p><figure class="kg-card kg-image-card"><img src="https://blog.gonzaleztroyano.es/content/images/2025/09/imagen.png" class="kg-image" alt="Servidores de tiempo (NTP) para Espa&#xF1;a" loading="lazy" width="745" height="198" srcset="https://blog.gonzaleztroyano.es/content/images/size/w600/2025/09/imagen.png 600w, https://blog.gonzaleztroyano.es/content/images/2025/09/imagen.png 745w" sizes="(min-width: 720px) 720px"></figure><h4 id="forzar-sincronizaci%C3%B3n">Forzar sincronizaci&#xF3;n</h4><!--kg-card-begin: markdown--><pre><code>w32tm /resync
</code></pre>
<!--kg-card-end: markdown--><p>Fuente: <a href="https://learn.microsoft.com/es-es/windows-server/networking/windows-time-service/windows-time-service-tools-and-settings?tabs=config&amp;ref=blog.gonzaleztroyano.es">Documentaci&#xF3;n oficial de Microsft</a></p><h2 id="configurar-ntp-en-linux-con-chrony">Configurar NTP en Linux con Chrony</h2><p><a href="https://blog.gonzaleztroyano.es/tech-notes/configurar-ntp-con-chrony-conf/">https://blog.gonzaleztroyano.es/tech-notes/configurar-ntp-con-chrony-conf/</a></p>]]></content:encoded></item></channel></rss>