Bitácora de infraestructura · watchdogs

Cómo app01 quedó aislado de la red del instituto

Nodoapp01 · CT 101
Hostwatchdogs
MecanismoNAT interno (vmbr1)
EstadoOperativo
En una frase, para Emiaj

app01 vive en un contenedor que sale a internet disfrazado de watchdogs — nunca aparece en el cable físico del instituto con su propia identidad, así que no necesitamos que nadie en soporte le abra nada.

01Por qué existe esto

Queríamos un contenedor LXC dedicado para app01, separado del hipervisor por seguridad — si algo dentro de Docker se porta mal, no toca a Proxmox ni a las demás VMs. El plan original era conectarlo directo al mismo cable que usa watchdogs (el bridge vmbr0), con IP por DHCP.

02El primer bloqueo — DHCP no contestaba

Al pedir IP por DHCP, el contenedor mandaba DHCPDISCOVER una y otra vez y no recibía ni una sola oferta. Silencio total — ni error, ni rechazo, nada.

La pista: el puerto de red del instituto donde está enchufado watchdogs solo tiene autorizada una MAC física (la que le dimos a soporte para moverte de VLAN). El contenedor nuevo generó su propia MAC virtual — distinta — y el switch, con port security activo, simplemente ignora cualquier tráfico que no venga de la MAC que ya conoce. Por eso ni siquiera llegaba a pedirle IP a nadie.

03La decisión — NAT interno en vez de pedir otra excepción

Había dos caminos. Pedirle a soporte que autorizara también la MAC del contenedor funciona, pero depende de ellos, hay que repetirlo cada vez que se crea algo nuevo, y les estás pidiendo que aflojen su control de acceso. La otra opción: que el contenedor nunca toque el cable físico — vive en una red que solo existe dentro de watchdogs, y sale a internet a través del host, usando la MAC que ya está autorizada.

✗ Rechazada

Bridge directo a vmbr0 — el contenedor aparece en el cable del instituto con su propia MAC.

Resultado: 0 DHCPOFFERS — port security lo descarta
✓ Elegida

Bridge interno vmbr1 + NAT — el contenedor solo existe dentro del host; hacia afuera, todo sale con la MAC ya autorizada.

Resultado: invisible para el instituto, funciona sin pedir nada

04Topología resultante

Así queda el camino completo, desde tu laptop hasta el contenedor. Dos fronteras distintas: Tailscale te lleva cifrado hasta watchdogs; de ahí, NAT te lleva del host hacia adentro, a una red que el instituto nunca ve.

RED DEL INSTITUTO 192.168.50.0/24 muchos usuarios · una sola MAC autorizada por puerto 18:a9:05:4f:0f:c2 Tu laptop 100.81.196.109 watchdogs 100.104.16.118 vmbr0 192.168.50.151 vmbr1 — red interna 10.10.10.1/24 · sin salida física NAT · MASQUERADE solo respuestas (established) app01 10.10.10.10 · CT 101 Tailscale · cifrado
Dos fronteras: Tailscale cifra el salto hasta watchdogs; NAT traduce el salto de la red interna hacia la red física, para que el instituto solo vea la MAC que ya conoce.

05El segundo bloqueo — FORWARD en modo DROP

Con el NAT ya configurado, seguía sin haber internet dentro del contenedor. La regla de MASQUERADE existía pero marcaba 0 paquetes — nunca la alcanzaba nada. La causa estaba un paso antes: la cadena FORWARD del firewall del host tenía política DROP por defecto, heredada de cuando instalamos Docker directo en watchdogs (Docker cambia esa política al instalarse, y solo abre paso a lo que él mismo administra).

ANTES paquete DOCKER-USER DOCKER-FORWARD ts-forward policy DROP 19 paquetes ✗ DESPUÉS paquete DOCKER-USER DOCKER-FORWARD ts-forward +2 reglas ACCEPT tráfico pasa ✓
El paquete recorre la misma cadena de reglas en ambos casos — lo único que cambió es que ahora hay una regla explícita que lo acepta antes de llegar a la política por defecto.

El arreglo: dos reglas explícitas, una para dejar salir el tráfico de vmbr1 hacia vmbr0, y otra que solo deja regresar respuestas a conexiones ya iniciadas — no abre la red interna a que algo de afuera entre por su cuenta.

iptables -A FORWARD -i vmbr1 -o vmbr0 -j ACCEPT iptables -A FORWARD -i vmbr0 -o vmbr1 -m state --state RELATED,ESTABLISHED -j ACCEPT

06Segmentos de red y cuántas IPs quedan

Tres redes distintas, tres propósitos distintos — no se mezclan entre sí.
SegmentoRangoQuién vive ahíDisponibles
Red del instituto 192.168.50.0/24 watchdogs · .151 Compartida — no conectar nada nuevo aquí directo
Tailscale (overlay) 100.64.0.0/10 watchdogs · 100.104.16.118
tu laptop · 100.81.196.109
Cifrado, solo tus propios dispositivos
Red interna NAT 10.10.10.0/24 gateway · .1
app01 · .10
252 IPs libres para el próximo contenedor

07Cómo entramos

10.10.10.0/24 solo existe dentro de watchdogs — no hay ruta directa desde afuera. Por eso se entra saltando primero por el host:

ssh -J b.amaral@100.104.16.118 b.amaral@10.10.10.10

Y para el próximo contenedor que necesite esta misma protección, la receta ya está probada: cuélgalo de vmbr1 en vez de vmbr0, dale una IP libre del rango 10.10.10.210.10.10.254, y ya sale a internet sin pedirle nada a nadie del instituto.

08Actualización — nueva IP autorizada

Soporte reasignó la IP de watchdogs en vmbr0: pasó de .210 a 192.168.50.151, y le dieron permiso especial a esa IP puntual en el firewall — en vez de moverte a una VLAN nueva, fue más simple para ellos autorizar la IP directo. Confirmado: el bloqueo que teníamos antes con los repositorios ya no aplica, tanto desde el host como desde cualquier contenedor detrás del NAT (todo sale disfrazado de esa misma IP).

Como el NAT de vmbr1 siempre sale por "lo que sea que tenga vmbr0 en ese momento", este cambio no rompió nada — se ajustó solo, sin tocar ni una regla.