Bienvenidos a la página personal de José Domingo Muñoz Rodríguez, aquí podrás encontrar…
Accede a las entradas de mi blog donde escribo de Informática y Educación.
Accede a los materiales de los cursos que he impartido.
Accede a los contenido de los módulos de FP que estoy impartiendo en la actualidad.
Microblog
Historia de Linux
Habilitar IP Forwarding en Debian 13
En Debian 13 (Trixie) el IP forwarding ya no se configura en /etc/sysctl.conf, sino en un archivo bajo /etc/sysctl.d/.
-
Crea
/etc/sysctl.d/99-forward.confcon:net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 -
Aplica y reinicia servicios:
sudo sysctl --system sudo systemctl restart systemd-sysctl
Con esto el reenvío queda habilitado de forma persistente.
DetallePublicado Debian 13 Trixie
Hoy, 9 de agosto, se ha publicado la última versión de mi distribución favorita: Debian 13 Trixie. Habrá que pensar en ir actualizando. Os dejo las Notas de publicación.

Blog
Configuración del enrutamiento y DNS en una VPN tailscale/headscale

En el post anterior, Construcción de VPN mesh con tailscale/headscale, logramos conectar varios dispositivos mediante una VPN mesh.
En este artículo, profundizaremos en tres capacidades críticas que transforman una red privada virtual en una solución de conectividad integral:
- Subnet Routers: Implementaremos el concepto de VPN Site-to-Site, permitiendo que nodos específicos actúen como gateways para exponer subredes completas (LAN) a la malla, integrando así dispositivos sin capacidad de instalar software (como impresoras, servidores NAS,…).
- Exit Nodes: Configuraremos nodos de salida para centralizar el tráfico de internet de la red mesh, permitiendo una navegación segura y controlada a través de un punto de confianza (similar a una VPN de acceso remoto tradicional).
- Split DNS y Global Nameservers: Optimizaremos la resolución de nombres dentro de la red mediante la integración de DNS internos, facilitando el acceso a servicios mediante FQDNs en lugar de direcciones IP estáticas.
Subnet Router
Un Subnet Router es un nodo de nuestra red que actúa como pasarela, permitiendo que el resto de los dispositivos de la VPN “salten” a una red local física (por ejemplo, la red de tu oficina o de tu casa). Cualquier nodo Linux en el que ya tengas Tailscale funcionando puede servir como Subnet Router.
El escenario desde el que partimos es el siguiente:
docker exec headscale headscale nodes list
ID | Hostname | Name | MachineKey | NodeKey | User | Tags | IP addresses | Ephemeral | Last seen | Expiration | Connected | Expired
1 | nodo1 | nodo1 | [qatKd] | [fMe1N] | vpn1 | | 100.64.0.1, fd7a:115c:a1e0::1 | false | 2026-02-13 18:09:45 | N/A | online | no
2 | nodo2 | nodo2 | [G1VUT] | [9wBm+] | vpn1 | | 100.64.0.2, fd7a:115c:a1e0::2 | false | 2026-02-13 18:30:17 | 0001-01-01 00:00:00 | online | no
3 | nodo3 | nodo3 | [asFdw] | [8qDba] | vpn1 | | 100.64.0.3, fd7a:115c:a1e0::3 | false | 2026-02-13 18:35:17 | 0001-01-01 00:00:00 | online | no
Construcción de VPN mesh con tailscale/headscale

Tailscale es una VPN de red en malla (mesh) basada en el protocolo WireGuard. A diferencia de las VPN tradicionales (donde todo el tráfico pasa por un servidor central), en una red mesh los dispositivos establecen conexiones directas punto a punto () entre sí. Para lograr esto, utiliza técnicas de NAT Traversal, permitiendo que los nodos se comuniquen aunque estén detrás de firewalls o routers sin necesidad de abrir puertos manualmente.
La arquitectura de Tailscale se divide en dos capas:
- Control Plane: Es el “cerebro” de la red. No toca tus datos; su función es autenticar usuarios, intercambiar las llaves públicas de cifrado y distribuir la tabla de rutas a todos los nodos.
- Data Plane: Es el tráfico real cifrado que fluye directamente entre los dispositivos una vez que el Control Plane los ha “presentado”.
Tailscale opera bajo un modelo Open Core: el software del cliente (lo que instalas en tus dispositivos) es de código abierto, pero el servidor de coordinación (Control Plane) es software propietario alojado en su nube.
Headscale es la alternativa libre y autoalojable (self-hosted) al Control Plane oficial. Es un proyecto de código abierto que implementa las mismas APIs, permitiéndote:
- Mantener la soberanía total sobre tus metadatos y la gestión de la red.
- Utilizar los clientes oficiales de Tailscale simplemente apuntándolos a tu propia instancia.
- Eliminar los límites de usuarios o dispositivos de los planes comerciales.
Instalación de Headscale
Para que Headscale pueda coordinar las conexiones entre todos tus dispositivos, necesitamos alojarlo en una máquina que actúe como punto de encuentro permanente. A diferencia de los nodos de la VPN, que pueden entrar y salir de la red o cambiar de ubicación, el servidor de Headscale debe ser el ancla de la infraestructura.
Características de la máquina
El servidor donde instales Headscale (normalmente un VPS o un servidor dedicado) debe cumplir con tres condiciones fundamentales para garantizar la estabilidad de la red:
- Accesibilidad Global: La máquina debe tener una IP pública estática o un nombre de dominio (FQDN) asociado. Esto permite que cualquier nodo, esté donde esté, pueda localizar el Control Plane para solicitar instrucciones de conexión.
- Seguridad mediante HTTPS: Es obligatorio que el tráfico entre los clientes y Headscale viaje cifrado. Necesitarás un certificado SSL (puedes usar Let’s Encrypt) para que la comunicación se realice de forma segura a través del puerto 443.
- Disponibilidad (Uptime): Si el servidor de Headscale se apaga, los nodos nuevos no podrán unirse y los existentes no podrán actualizar sus tablas de rutas si hay cambios en la red.
Para una configuración básica y funcional, no es necesario complicar el firewall. Según la documentación oficial de requisitos de Headscale, solo necesitas asegurar la apertura de los siguientes puertos:
- 443/tcp:Tráfico de control (API) y autenticación mediante HTTPS.
- 80/tcp: Generalmente usado para la validación de certificados (Let’s Encrypt).
Headscale es extremadamente ligero. Para una red pequeña o mediana, una máquina con 1 vCPU y 1 GB de RAM es más que suficiente para gestionar el panel de control.
Seguir leyendo...Cursos de virtualziación con KVM/libvirt

Este año también he tenido la oportunidad de desarrollar y publicar en OpenWebinars dos cursos centrados en la virtualización con KVM y libvirt, abordando tanto una introducción accesible para principiantes como una profundización orientada a un uso más avanzado y profesional.
Ambos cursos forman parte de un itinerario pensado para entender la virtualización en sistemas Linux desde una perspectiva práctica, progresiva y alineada con el uso real en servidores y entornos de producción.
¿Qué es la virtualización con KVM y libvirt?
KVM (Kernel-based Virtual Machine) es la tecnología de virtualización integrada en el kernel de Linux que permite convertirlo en un hipervisor de tipo 1. Gracias a KVM, un sistema Linux puede ejecutar máquinas virtuales con un rendimiento muy cercano al nativo, aprovechando las extensiones de virtualización por hardware (Intel VT-x / AMD-V).
Por su parte, libvirt es una capa de abstracción que facilita la gestión de máquinas virtuales y otros recursos de virtualización. Proporciona una API unificada y herramientas tanto gráficas como de línea de comandos para administrar hipervisores como KVM de forma coherente y segura.
En conjunto, KVM + libvirt constituyen una de las soluciones de virtualización más utilizadas en entornos Linux, tanto en laboratorios como en infraestructuras profesionales.
Cursos publicados
Para cubrir distintos niveles de experiencia, he preparado dos cursos complementarios, publicados en OpenWebinars y acompañados de material práctico en GitHub.
Curso 1: Introducción a la virtualización con KVM/libvirt usando virt-manager
- Repositorio del curso: https://github.com/josedom24/curso_kvm_ow/blob/main/curso1
Este primer curso está orientado a principiantes que desean iniciarse en la virtualización sobre Linux sin necesidad de conocimientos previos avanzados.
Características principales del curso:
- Introducción a los conceptos básicos de virtualización
- Instalación y configuración de KVM y libvirt
- Uso de virt-manager como herramienta gráfica
- Creación y gestión básica de máquinas virtuales
- Redes y almacenamiento a nivel introductorio
Es un curso ideal para romper la barrera de entrada y comenzar a trabajar con máquinas virtuales de forma visual e intuitiva.
Curso 2: Profundización en la virtualización con KVM/libvirt
- Repositorio del curso: https://github.com/josedom24/curso_kvm_ow/blob/main/curso2
El segundo curso está pensado para quienes ya conocen los fundamentos y desean profundizar en la virtualización usando herramientas de línea de comandos.
En este curso se trabaja, entre otros aspectos:
- Gestión avanzada de máquinas virtuales con
virsh - Definición y modificación de dominios mediante XML
- Redes virtuales avanzadas
- Gestión de almacenamiento con libvirt
- Automatización y administración más cercana a entornos de servidor
Este enfoque resulta especialmente útil para administradores de sistemas, laboratorios avanzados o escenarios donde no se dispone de entorno gráfico.
Seguir leyendo...Más posts en el Blog...
- Cursos de preparación para obtener las certificaciones Python PCEP y PCAP (26-12-2025)
- Contenedores Docker para la creación de páginas web estáticas usando Jekyll (01-10-2025)
- Creación de un box para vagrant (20-09-2025)
- El problema del enrutamiento asimétrico (11-06-2025)
- Despliegue automatizado de máquinas virtuales en KVM/libvirt usando cloud-init (21-05-2025)
- Docker Routing: Práctica routing y nating con docker (07-05-2025)
Más post en el Microblog...
- Mi última camiseta... (01-06-2025)
- Me ha encantado... muchas gracias (25-05-2025)
- Eloquente JavaScript (09-03-2025)
- Correos de notificación de Lets Encrypt (04-02-2025)
- Listar imágenes Docker que no tienen contenedor asociado (29-01-2025)
- Hoja de trucos sobre Git (15-01-2025)
Licencia
Licencia: Puedes copiar y modificar todos los contenidos, pero siempre respetando los términos de la licencia CC-BY-SA.
