Páginas

Buscar este blog

domingo, 25 de octubre de 2026

Proyecto ax3 (4/4) - Doble túnel WireGuard con Address Lists

Proyecto ax³ (4/4) — Doble túnel WireGuard: España y Marsella
Serie completa: Índice · Parte 1 · Parte 2 · Parte 3 · Parte 4

Referencia de comandos: Cheatsheet RouterOS — Proyecto ax³

Introducción

En la Parte 3 dejamos el hAP ax³ funcionando con un túnel WireGuard apuntando a un servidor de ProtonVPN en Barcelona. En esta cuarta y última parte, vamos a levantar un segundo túnel simultáneo hacia Marsella y usaremos Address Lists para enrutar el tráfico por dispositivo.

Este enfoque no solo nos permite organizar la red de forma granular, sino que separa una configuración doméstica de una infraestructura profesional: podremos añadir decenas de dispositivos y cambiar su país de salida con un solo clic, sin tocar el firewall.

Requisito previo: Esta parte asume que el túnel principal Barcelona de la Parte 3 funciona correctamente. Haz un backup antes de empezar.

Copia de seguridad

/system backup save name=ax3-dual-20261024-vpn-marsella-barcelona-OK 
/export compact file=ax3-dual-20261024-vpn-marsella-barcelona-OK

Fase 8 — El desafío del doble túnel

Configurar dos túneles VPN simultáneos hacia el mismo proveedor (ProtonVPN) nos obligará a sortear tres problemas que, si no se controlan, romperán la red:

  1. Conflicto de IP interna: ProtonVPN asigna la misma IP interna a todos los perfiles (ej. 10.2.0.2/32).
  2. Conflicto de puerto: Dos interfaces WireGuard no pueden usar el mismo puerto de escucha local.
  3. El bucle del retorno: El tráfico de vuelta del nuevo túnel viene desde una subred interna (10.3.0.0/24) que debe ser excluida del enrutamiento.

Paso 1 — Preparar el perfil de Marsella

Descarga el archivo WireGuard de ProtonVPN para Marsella y edítalo con un editor de texto:

# Original
Address = 10.2.0.2/32

# Modificado
Address = 10.3.0.2/32

Paso 2 — Importar y ajustar la interfaz

En WinBox, ve a WireGuard → Interface → + → Import from file y selecciona el archivo de Marsella.

  • Name: proton-vpn-marsella
  • Listen Port: 13232 (distinto al 13231 de Barcelona).
  • MTU: 1380 (ajustado para evitar fragmentación).

Paso 3 - Tabla de enrutamiento personalizada con FIB activado

El parámetro fib es fundamental para que las rutas de esa tabla se instalen en el Forwarding Information Table y el tráfico realmente se enrute.

/routing table add name=via-vpn-marsella fib

Paso 4 - Crear la tabla de rutas y el Kill Switch

/ip route add dst-address=0.0.0.0/0 gateway=proton-vpn-marsella routing-table=via-vpn-marsella distance=1 comment="Salida por Marsella"
/ip route add dst-address=0.0.0.0/0 blackhole=yes routing-table=via-vpn-marsella distance=2 comment="Kill switch Marsella"

Paso 5 - El detalle de oro: Excluir la red interna del túnel

Este es el paso que evita que la red se rompa. Cuando el tráfico vuelve del túnel, llega a través de la IP interna del mismo. Si no le decimos al router que esa red es "tráfico local", intentará enrutarla por el túnel otra vez, creando un bucle.
/ip firewall address-list add list=lan-directa address=10.3.0.0/24 comment="Red interna Marsella"

Paso 6 - Reglas de Firewall y NAT

# NAT (Masquerade para Marsella)
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.88.0/24 out-interface=proton-vpn-marsella comment="NAT para Marsella"

# Filter (Permitir LAN a Marsella)
/ip firewall filter add chain=forward in-interface-list=LAN out-interface=proton-vpn-marsella action=accept comment="Permitir LAN a VPN Marsella" place-before=[find comment="Drop todo lo dems"]

Paso 7 - Address Lists y Mangle (La magia)

En lugar de reglas individuales, agrupamos los dispositivos en listas:

# Lista para Marsella
/ip firewall address-list
add list=vpn-marsella address=192.168.88.100 comment="pc100"
add list=vpn-marsella address=192.168.88.101 comment="movil101"
add list=vpn-marsella address=192.168.88.102 comment="tablet102"
add list=vpn-marsella address=192.168.88.103 comment="portatil103"

# Lista para Barcelona
/ip firewall address-list
add list=vpn-barcelona address=192.168.88.201 comment="portatil201"
add list=vpn-barcelona address=192.168.88.202 comment="movil202"
add list=vpn-barcelona address=192.168.88.203 comment="movil203"

Y creamos las reglas genéricas de Mangle (Marcar primero, Enrutar después):

# --- MARSELLA ---
/ip firewall mangle add chain=prerouting src-address-list=vpn-marsella in-interface=bridge action=mark-connection new-connection-mark=conn-marsella passthrough=yes comment="Mangle: Marcar lista Marsella"
/ip firewall mangle add chain=prerouting connection-mark=conn-marsella action=mark-routing new-routing-mark=via-vpn-marsella passthrough=no comment="Mangle: Enrutar lista Marsella"

# --- BARCELONA (ESPAÑA) ---
/ip firewall mangle add chain=prerouting src-address-list=vpn-barcelona in-interface=bridge action=mark-connection new-connection-mark=conn-barcelona passthrough=yes comment="Mangle: Marcar lista Barcelona"
/ip firewall mangle add chain=prerouting connection-mark=conn-barcelona action=mark-routing new-routing-mark=via-vpn passthrough=no comment="Mangle: Enrutar lista Barcelona"
¡Atención con las IPs dinámicas! Las Address Lists funcionan buscando la IP del dispositivo. Si el servidor DHCP de tu router le asigna mañana una IP diferente al dispositivo (ej. pasa de la .100 a la .105), las reglas de Mangle no lo reconocerán y se saltará la VPN.

Obligatorio: Ve a IP → DHCP Server → Leases, busca los dispositivos de tus listas, haz clic derecho y selecciona "Make Static" (o usa el comando /ip dhcp-server lease make-static [find]). Así te aseguras de que su IP nunca cambie y el enrutamiento sea siempre perfecto.

Paso 8 - Ajustar el MSS (Crucial para el rendimiento)

El cálculo del MSS es crítico. Debe ser siempre 40 bytes menor que el MTU de la interfaz. Si el MTU de Marsella es 1380, el MSS debe ser 1340. Un MSS incorrecto provocará que las webs se queden a medio cargar.
/ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn out-interface=proton-vpn-marsella action=change-mss new-mss=1340 passthrough=yes comment="MSS para tunel Marsella (MTU 1380)"

Paso 9 - Limpiar conexiones y probar

/ip firewall connection remove [find src-address~"192.168.88.10"]
/ip firewall connection remove [find src-address~"192.168.88.20"]

Comandos de verificación (El "Checklist" del Administrador)

Para asegurarte de que todo está fluyendo correctamente, ejecuta estas comprobaciones en el MikroTik:

# 1. ¿Los túneles están vivos y con handshake reciente?
/interface wireguard peers print detail

# 2. ¿Puede el router hacer ping a través de Marsella? (Debe ser 0% packet-loss)
/ping 1.1.1.1 interface=proton-vpn-marsella count=3

# 3. ¿Está la tabla de rutas de Marsella activa y con su Kill Switch?
/ip route print where routing-table=via-vpn-marsella

# 4. ¿Están los dispositivos generando tráfico y con la marca correcta?
/ip firewall connection print where src-address~"192.168.88.10"
# (Fíjate en la columna CONNECTION-MARK: debería decir conn-marsella)

# 5. ¿Están subiendo los contadores de las reglas de Mangle?
/ip firewall mangle print stats

Resolución de problemas (Lo que aprendimos a golpes)

Si el túnel se levanta pero los dispositivos no tienen Internet, revisa estos cinco puntos:

  • El "Peer Fantasma": Si al importar el archivo se creó una interfaz con un asterisco (ej. *D) o un peer duplicado con la misma clave pública, el túnel se volverá loco y perderá paquetes. Elimina cualquier peer que no corresponda con su interfaz.
    /interface wireguard peers remove [find name="peerX"]
  • El conflicto de IP: Comprueba en /ip address print que no existe ninguna interfaz llamada unknown. Si existe, bórrala: /ip address remove [find interface=unknown].
  • El firewall bloquea el retorno: Asegúrate de que tienes la regla de accept para out-interface=proton-vpn-marsella antes del Drop general en la cadena forward.
  • El DNS: Si el ping por IP funciona pero las webs no cargan, es un problema de DNS. Asegúrate de que el dispositivo usa Pi-Hole (192.168.88.244) y que el tráfico hacia esa IP no está siendo enrutado por error hacia la VPN (la regla lan-directa lo evita).
  • Las IPs han cambiado: Si de repente un dispositivo deja de ir por la VPN, comprueba en IP → DHCP Server → Leases que sigue teniendo la misma IP que pusiste en la Address List. Si no lo hiciste en su momento, haz clic derecho y selecciona "Make Static".

El flujo de trabajo para alternar países

La ventaja de las Address Lists es que el cambio es instantáneo. Para pasar un dispositivo de Marsella a Barcelona:

  1. Ve a IP → Firewall → Address Lists.
  2. Busca su IP y cambia la columna List de vpn-marsella a vpn-barcelona.
  3. Borra su sesión en el router para forzar el cambio:
    /ip firewall connection remove [find src-address~"192.168.88.100"]
Muy importante: Orden de las reglas
/ip firewall mangle print
Flags: D - DYNAMIC
 0 D ;;; special dummy rule to show fasttrack counters
     chain=prerouting action=passthrough
 
 1 D ;;; special dummy rule to show fasttrack counters
     chain=forward action=passthrough
 
 2 D ;;; special dummy rule to show fasttrack counters
     chain=postrouting action=passthrough
 
 3   ;;; evita problemas de fragmentacion de paquetes
     chain=forward action=change-mss new-mss=1452 passthrough=yes tcp-flags=syn protocol=tcp out-interface=pppoe-o2 log=no
     log-prefix=""
 
 4   ;;; No marcar Trafico LAN
     chain=prerouting action=return dst-address-list=lan-directa log=no log-prefix=""
 
 5   ;;; Mangle: Marcar lista Barcelona
     chain=prerouting action=mark-connection new-connection-mark=conn-barcelona passthrough=yes src-address-list=vpn-barcelona
     in-interface=bridge
 
 6   ;;; Mangle: Marcar lista Marsella
     chain=prerouting action=mark-connection new-connection-mark=conn-marsella passthrough=yes src-address-list=vpn-marsella
     in-interface=bridge
 
 7   ;;; Mangle: Enrutar lista Marsella
     chain=prerouting action=mark-routing new-routing-mark=via-vpn-marsella passthrough=no connection-mark=conn-marsella
 
 8   ;;; Mangle: Enrutar lista Barcelona
     chain=prerouting action=mark-routing new-routing-mark=via-vpn passthrough=no connection-mark=conn-barcelona
 
 9   ;;; MSS para tunel WireGuard (MTU 1420)
     chain=forward action=change-mss new-mss=1380 passthrough=yes tcp-flags=syn protocol=tcp out-interface=proton-vpn
 
10   ;;; MSS para tunel Marsella (MTU 1380)
     chain=forward action=change-mss new-mss=1340 passthrough=yes tcp-flags=syn protocol=tcp out-interface=proton-vpn-marsella
Consejo de administración: A partir de ahora, añadir un dispositivo nuevo es tan simple como añadirlo a la lista correspondiente. Las reglas de Mangle ya no se tocan nunca. Esto reduce el consumo de CPU del router al evaluar una sola regla por lista.
Conclusión de la serie: Con esta cuarta parte, el hAP ax³ deja de ser un simple router doméstico y se convierte en un verdadero concentrador de enrutamiento avanzado. Hemos eliminado el doble NAT, montado un sistema de VPN multi-región por dispositivo con Address Lists, asegurado el DNS con Pi-Hole y Unbound, y añadido failover (Kill Switch) a cada túnel. Una infraestructura de red de nivel profesional, documentada paso a paso y con un plan de reversión en cada fase.
Serie: este artículo es la Parte 4 de Proyecto ax³. Viene de la Parte 3 — Monopuesto, VPN y corte final.

Volver al índice de la serie · Cheatsheet RouterOS
FreeBSD es genial!.

No hay comentarios:

Publicar un comentario