# SPEC — Architecture B: Rede Privada Proxmox BIG (vmbr0/vmbr1/vmbr2)

**Data:** 2026-07-08  
**Responsável:** Roger / iTecnologys  
**Host:** Dell R630 BIG — `big-itecnologys-wardrobe`  
**Status:** Implementado (fase 1)

---

## 1. Objetivo

Proteger **infraestrutura de servidores** no BIG sem alterar o Sagemcom (`.254`):

- Rede **casa** (`192.168.1.0/24`) — gestão e uplink
- Rede **privada** (`10.10.10.0/24`) — VMs, Traefik, Tunnel, Wazuh, mail
- **pfSense VM 100** — firewall entre zonas
- **Cloudflare Tunnel** — acesso externo sem expor IP (fase 2)

**Não objetivo:** firewall de toda a casa (TV, telemóveis, PCs no Sagemcom).

---

## 2. Topologia física

```
Internet
    │
Sagemcom (.254)  ← inalterado (DHCP, firewall ISP)
    ├── Smart TV, PCs, IoT
    └── R8000 (.115) → R7000 DD-WRT (.1) → eno3 (1 cabo)
                                              │
                                         Dell R630 BIG
```

| Regra física | Detalhe |
|--------------|---------|
| **1 cabo** | eno3 → porta LAN R7000 |
| **eno4 DOWN** | Evitar loop L2 (STP off no DD-WRT) |
| **Sem VLAN no R8000** | Stock não faz trunk — isolamento é virtual no Proxmox |

---

## 3. Switches virtuais (Proxmox bridges)

| Bridge | Rede | Porta física | Função |
|--------|------|--------------|--------|
| **vmbr0** | `192.168.1.0/24` | eno3 | Casa — host `.137`, uplink internet |
| **vmbr1** | `10.10.10.0/24` | nenhuma | **Privada** — VMs serviços |
| **vmbr2** | `10.0.0.0/30` | nenhuma | Link interno host ↔ pfSense WAN |

### Host BIG

| Campo | Valor |
|-------|-------|
| IP gestão (vmbr0) | `192.168.1.137/24` |
| Gateway | `192.168.1.254` |
| IP privado (vmbr1) | `10.10.10.1/24` |
| pfSense WAN (vmbr2) | `10.0.0.1/30` → pfSense `10.0.0.2` |
| Tailscale | `100.90.196.58` |
| SSH remoto | `tailscale ssh root@big-itecnologys-wardrobe` |
| Proxmox GUI | `https://192.168.1.137:8006` |

---

## 4. pfSense VM 100 (`pfsense-firewall`)

| NIC | Bridge | Função |
|-----|--------|--------|
| net0 | vmbr1 | LAN privada `10.10.10.0/24` |
| net1 | vmbr2 | WAN interna `10.0.0.0/30` |
| net2 | vmbr0 | Interface casa (opcional/gestão) |

### Configuração pfSense (GUI)

| Interface | IP | Notas |
|-----------|-----|-------|
| LAN (vmbr1) | `10.10.10.1/24` | DHCP `10.10.10.100-200` |
| WAN (vmbr2) | `10.0.0.2/30` | Gateway `10.0.0.1` |
| DNS | `192.168.1.254` ou `1.1.1.1` | Via NAT host |

### Regras firewall essenciais

| Regra | Ação |
|-------|------|
| LAN → Internet | ALLOW |
| LAN → `192.168.1.0/24` | BLOCK (isolamento) |
| Casa → LAN | ALLOW só portas gestão necessárias |
| Inbound WAN casa → VMs | BLOCK (usar Cloudflare Tunnel) |

---

## 5. VMs e serviços por bridge

| VMID | Nome | Bridge | IP típico |
|------|------|--------|-----------|
| 100 | pfsense-firewall | vmbr1+vmbr2+vmbr0 | `10.10.10.1` |
| 120 (LXC) | web-traefik | vmbr1 | `10.10.10.120` |
| 101-108, 500, 600, 700 | serviços | vmbr1 | `10.10.10.x` |

**Regra:** VMs sensíveis (Traefik, Tunnel, Wazuh, mail) **só em vmbr1**.

---

## 6. Isolamento host (iptables)

Já aplicado em `/etc/network/interfaces` (vmbr1 post-up):

```
FORWARD: DROP 10.10.10.0/24 → !10.10.10.0/24
FORWARD: ACCEPT 10.10.10.0/24 → UDP/53 (DNS)
```

Persistência: `/etc/network/interfaces.d/99-arch-b-private`

---

## 7. Nginx reverse proxy (host BIG)

Domínios `*.myvexx.com` no host nginx (`:80` / `192.168.1.137:443`):

```
server.myvexx.com → proxy_pass http://10.10.10.120:80 (Traefik CT120)
```

| Ficheiro | Função |
|----------|--------|
| `myvexx-proxy` | HTTP :80 → Traefik |
| `myvexx-landing-https` | HTTPS server/mycloud → Traefik |
| `myvexx-proxmox` | proxmox.myvexx.com → :8006 |

---

## 8. Cloudflare Tunnel (fase 2)

| Item | Valor |
|------|-------|
| Objetivo | Acesso externo sem port forward |
| Instalar em | LXC/VM só em vmbr1 |
| DNS | Cloudflare zone `myvexx.com` |
| Token | Configurar em CT120 ou VM dedicada |

---

## 9. Equipamentos LAN

| Device | IP | Doc |
|--------|-----|-----|
| Sagemcom | `.254` | Gateway casa |
| R8000 | `.115` | `SPEC_R8000_CREDENTIALS.md` |
| R7000 DD-WRT | `.1` | `SPEC_R7000_DDWRT_CREDENTIALS.md` |
| BIG | `.137` | Este documento |

---

## 10. Validação

```bash
# No BIG (via Tailscale)
ip addr show vmbr1 | grep 10.10.10.1
ip link show eno4 | grep DOWN
ping -c2 10.10.10.120
ping -c2 8.8.8.8
qm list | grep pfsense
iptables -L FORWARD -n | grep 10.10.10

# Teste local nginx
curl -sI -H 'Host: server.myvexx.com' http://127.0.0.1/
```

---

## 11. Fases de implementação

| Fase | Estado | Conteúdo |
|------|--------|----------|
| **1** | ✅ Feito | vmbr1 `10.10.10.1`, eno4 down, iptables, persistência |
| **2** | Pendente | pfSense GUI — DHCP LAN, regras finais |
| **3** | Pendente | Cloudflare Tunnel (substituir port forward) |
| **4** | Opcional | Proxmox `:8006` só via Tailscale/vmbr1 |
| **5** | Opcional | VLAN física se R8000 DD-WRT no futuro |

---

## 12. Troubleshooting

| Sintoma | Causa provável | Ação |
|---------|----------------|------|
| Rede cai ao ligar 2º cabo | Loop L2 eno3+eno4 | eno4 DOWN, 1 cabo |
| SSH LAN falha | Tailscale SSH ativo | `tailscale set --ssh=false` |
| server.myvexx.com fora | DNS → IP casa + port forward | Ver secção DNS abaixo |
| VMs sem internet | pfSense WAN/LAN | Verificar VM100 |

---

## 13. DNS server.myvexx.com

| Campo | Valor |
|-------|-------|
| DNS público | `server.myvexx.com` → `51.171.219.218` (IP casa) |
| myvexx.com | → `95.216.14.146` (Hetzner) |
| Backend local | nginx → `10.10.10.120` (OK internamente) |
| Acesso externo | Requer port forward Sagemcom :80/:443 → `.137` |

---

*Documento gerado automaticamente — Architecture B BIG Proxmox*
