Tener una VPN en el mundo actual es una necesidad, y no puedo recomendar Mullvad VPN lo suficiente. Lo he estado usando durante años y estoy muy satisfecho (publicidad no pagada).

Mullvad VPN se toma en serio la privacidad, zero-knowledge, no requiere registro de correo electrónico, y puedes pagar con cripto (y aún mejor, Monero).

mullvad-vpn.webp



Clientes Mullvad

Cliente Linux: Mullvad tiene un cliente Linux que funciona genial en Fedora (y cualquier otra distro). Es simple de usar y funciona genial. Buena GUI para configuraciones normales y un cliente CLI para ajustes avanzados.

Cliente Android: Mullvad también tiene una aplicación cliente Android realmente buena (no me gusta la cárcel del ecosistema Apple), que funciona genial, simple y con todas las funciones.



Ejecutar Múltiples VPNs

Normalmente, usarías solo una VPN para todo el tráfico, sin embargo necesito usar 2 VPNs a la vez.

  1. Mullvad para proteger todo mi tráfico de red
  2. Tailscale para acceder a mis servicios privados disponibles en un VPS público. El VPS ejecuta un servidor Headscale que permite conexiones solo desde clientes Tailscale autenticados.

Usualmente, tendrías problemas ejecutando 2 VPNs simultáneamente. Una toma el control del enrutamiento, y la otra se rompe. Mullvad permite túnel dividido para que el tráfico de una aplicación específica evite la VPN y se conecte directamente, pero esto es basado en aplicaciones, lo cual no funciona con Tailscale.

mullvad-tailscale.webp



Usando Tanto Mullvad como Tailscale

Investigué en línea una solución y encontré que Tailscale ofrece un complemento pagado para permitir tráfico Tailscale sobre Mullvad a través de nodos de salida, así que, decidí crear una regla simple de nftables para permitir ambas conexiones en Linux.


Cómo Funciona

La función de túnel dividido de Mullvad usa marcado de paquetes nftables. Etiqueta el tráfico excluido con:

  • 0x00000f41 para seguimiento de conexiones
  • 0x6d6f6c65 para enrutamiento

Al aplicar estas marcas al tráfico Tailscale (identificado por el rango IP 100.64.0.0/10 y la marca 0x80000 de Tailscale), el kernel lo enruta fuera del túnel Mullvad. En otras palabras, conéctate vía Tailscale a cualquier servidor Headscale/Tailscale mientras usas Mullvad VPN en todo el otro tráfico.


Configuración

Crear la Configuración nftables

# Crear el directorio nftables si no existe
sudo mkdir -p /etc/nftables

# Crear archivo de configuración
sudo vim /etc/nftables/mullvad-tailscale.nft
# Contenidos de mullvad-tailscale.nft
table inet mullvad-tailscale {
    chain prerouting {
        type filter hook prerouting priority -100; policy accept;
        # Marcar tráfico Tailscale entrante (usando la subred Tailscale predeterminada)
        ip saddr 100.64.0.0/10 ct mark set 0x00000f41 meta mark set 0x6d6f6c65;
    }
       
    chain outgoing {
        type route hook output priority -100; policy accept;
        # Marcar tráfico saliente con la marca de Tailscale
        meta mark 0x80000 ct mark set 0x00000f41 meta mark set 0x6d6f6c65;
        # Marcar tráfico hacia IPs Tailscale (usando la subred Tailscale predeterminada)
        ip daddr 100.64.0.0/10 ct mark set 0x00000f41 meta mark set 0x6d6f6c65;
    }
}

Cargar las Reglas

sudo nft -f /etc/nftables/mullvad-tailscale.nft

Hacer los Cambios Persistentes

# Habilitar e iniciar servicio
sudo systemctl enable --now nftables

Verificar que la Tabla Está Cargada

sudo nft list table inet mullvad-tailscale

Hecho. No se necesitan reinicios.



Pruebas

Esto debería ser suficiente. No se necesita configuración compleja. El tráfico regular pasa a través de Mullvad y las conexiones Tailscale evitan Mullvad (lo que hace posible el acceso al servidor Headscale).



Cuándo Tiene Sentido Esto

Esto es útil si necesitas acceder a servicios protegidos por VPN Headscale/Tailscale mientras también necesitas enrutar todo tu tráfico a través de Mullvad VPN. Ha funcionado para mí durante muchos meses y no he tenido problemas. Así que lo comparto con el mundo.