# Rede Proxmox — Interfaces e Bridges

**Host:** `big1` · Proxmox VE 9.1.4  
**Data:** 2026-06-08  
**Ficheiro fonte:** `/etc/network/interfaces`  
**Âmbito:** documentação de referência para Spec Kit / constitution Ligbox

---

## Visão geral das bridges

| Bridge | Papel | IPv4 no host | Portas físicas | Rede |
|--------|-------|--------------|----------------|------|
| **vmbr0** | WAN pública (Hetzner) | `95.216.14.162/26` | `eno1` | Internet |
| **vmbr2** | Link pfSense WAN | `10.0.0.1/30` | nenhuma | `10.0.0.0/30` |
| **vmbr1** | **LAN interna L2** (modelo alvo) | **sem IPv4 no host** | nenhuma | `10.10.10.0/24` |
| **vmbr4000** | LAN Hetzner vSwitch (VLAN 4000) | `10.10.10.254/24` | `eno1.4000` | `10.10.10.0/24` |

### Princípio: vmbr1 — bridge interna sem IPv4 no host

A **vmbr1** é a bridge **puramente L2** para a LAN das VMs (`10.10.10.0/24`):

- `bridge-ports none` — isolada do hardware físico
- **O host Proxmox não deve ter endereço IPv4 nesta bridge**
- Função: transportar tráfego entre VMs na mesma sub-rede, sem o host actuar como gateway
- Regras iptables de proteção anti-scan ficam associadas a esta secção no `interfaces`

```text
auto vmbr1
iface vmbr1 inet manual          # alvo: sem address no host
    bridge-ports none
    bridge-stp off
    bridge-fd 0
    # post-up/down: FORWARD vmbr1↔vmbr0 + proteção 10.10.10.0/24
```

### Estado actual (drift documentado — 2026-06-08)

| Item | Alvo (constitution) | Estado actual |
|------|---------------------|---------------|
| vmbr1 IPv4 no host | **nenhum** | `10.10.10.2/24` configurado |
| VMs ligadas a vmbr1 | todas na LAN L2 | **0 VMs** — todas usam `vmbr4000` |
| Gateway LAN VMs | pfSense `10.10.10.1` | misto: alguns CTs usam `10.10.10.254` |
| Bridge operacional | vmbr1 (modelo) | **vmbr4000** (Hetzner vSwitch) |

> **Nota:** alterações em `/etc/network/interfaces` exigem aprovação explícita tripla (regra de governança Ligbox). Este documento **não altera** o ficheiro — apenas regista o modelo e o drift.

---

## Diagrama lógico

```text
Internet
    │
    ▼
[eno1] ──► vmbr0 (95.216.14.162/26) ──► DNAT portas 80,443,25,587... ──► pfSense WAN 10.0.0.2
    │
    └── eno1.4000 (VLAN 4000, mtu 1400)
              │
              ▼
         vmbr4000 (10.10.10.254/24)  ◄── ESTADO ACTUAL: todas as VMs/CTs
              │
              ▼
         VMs 10.10.10.x (101–122, CTs 107–120)

vmbr2 (10.0.0.1/30) ◄──► pfSense WAN segment
vmbr1 (L2 puro, alvo sem IP) ◄── MODELO ALVO para LAN isolada
```

---

## Secções do `/etc/network/interfaces`

### vmbr0 — rede pública

| Parâmetro | Valor |
|-----------|-------|
| IP | `95.216.14.162/26` |
| Gateway | `95.216.14.129` |
| Bridge | `eno1` |
| SSH host | portas 22, 55679 |

**Regras relevantes:**
- FORWARD para `10.0.0.201–210:22` (SSH legado)
- MASQUERADE SSH para `10.10.10.0/24:22`
- DNAT em PREROUTING (portas mail/web → `10.0.0.2` pfSense WAN)

### vmbr2 — segmento pfSense

| Parâmetro | Valor |
|-----------|-------|
| IP host | `10.0.0.1/30` |
| Função | NAT + forward vmbr2 ↔ vmbr0 |
| Destino WAN pfSense | `10.0.0.2` |

### vmbr1 — LAN interna (modelo + regras de segurança)

**Configuração actual no ficheiro:**

```text
auto vmbr1
iface vmbr1 inet static
    address 10.10.10.2/24        # ← DRIFT: deve ser removido no alvo
    bridge-ports none
```

**Regras iptables obrigatórias (secção vmbr1):**

| Regra | Função |
|-------|--------|
| `FORWARD -i vmbr1 -o vmbr0 -j ACCEPT` | Saída controlada LAN → WAN |
| `FORWARD -i vmbr0 -o vmbr1 -m state ESTABLISHED,RELATED -j ACCEPT` | Retorno |
| `FORWARD -s 10.10.10.254 -d 10.0.0.2:22 -j ACCEPT` | SSH admin host → pfSense |
| `FORWARD -s 10.10.10.0/24 ! -d 10.10.10.0/24 -j DROP` | **Anti-scan obrigatório** |
| `FORWARD -s 10.10.10.0/24 ! -d 10.10.10.0/24 -p udp --dport 53 -j ACCEPT` | Excepção DNS |

### vmbr4000 — Hetzner Private Network (estado operacional)

| Parâmetro | Valor |
|-----------|-------|
| Interface física | `eno1.4000` (VLAN 4000) |
| IP host | `10.10.10.254/24` |
| MTU | 1400 |
| VMs/CTs | **100% dos convidados activos** |

---

## Tabela VMs — bridge e IP (2026-06-08)

| ID | Nome | Bridge | IP LAN | SSH WAN |
|----|------|--------|--------|---------|
| 100 | pfsense | vmbr4000 | 10.10.10.1 | 2500 |
| 101 | odoo17 | vmbr4000 | 10.10.10.101 | 2501 |
| 102 | vm102-clone | vmbr4000 | 10.10.10.102 | 2502 |
| 103 | ops-hub | vmbr4000 | 10.10.10.103 | 2503 |
| 104 | wazuh | vmbr4000 | 10.10.10.104 | 2504 |
| 105 | portainer | vmbr4000 | 10.10.10.105 | 2505 |
| 106 | mini | vmbr4000 | 10.10.10.4 | 2506 |
| 107 | fluxus-107 (CT) | vmbr4000 | 10.10.10.107 | 2507 |
| 108 | mail.ligbox | vmbr4000 | 10.10.10.108 | 2508 |
| 109 | debian-clone-109 | vmbr4000 | 10.10.10.109 | 2509 |
| 112 | vm112-mail-ibytera | vmbr4000 | 10.10.10.112 | 2512 |
| 113 | pmg-mail-gateway | vmbr4000 | 10.10.10.113 | 2513 |
| 119 | qtm-uploader (CT) | vmbr4000 | 10.10.10.119 | — |
| 121 | arrears-app-vm | vmbr4000 | 10.10.10.121 | — |
| **122** | **ligbox-ops** | vmbr4000 | **10.10.10.122** | **2522** |

**SSH WAN:** `ssh -p PORTA root@95.216.14.146` (pfSense NAT, não IP do host Proxmox).

---

## Verificações de segurança (diárias / pós-alteração)

```bash
# 1. Anti-scan activo (deve mostrar DROP + DNS ACCEPT)
iptables -S FORWARD | grep '10.10.10.0/24'

# 2. Proibido: MASQUERADE geral da LAN (risco abuse Hetzner)
iptables -t nat -L POSTROUTING -n | grep '10.10.10.0/24'

# 3. DNAT só para pfSense WAN (10.0.0.2), nunca LAN
iptables -t nat -L PREROUTING -n | grep DNAT

# 4. Duplicatas
iptables -t nat -L PREROUTING -n | sort | uniq -c | sort -rn | head
```

---

## Referências

- Inventário completo: `obsidian-infra/docs/TABELA_VMS_INVENTARIO_ATUALIZADA_2026-03-30.md`
- Segurança Hetzner: `obsidian-infra/docs/VERIFICACAO_ROLES_SEGURANCA_HETZNER.md`
- Constitution: `.specify/memory/constitution.md`

---

## DNS53 público — VM123 BIND (2026-06-22)

**IP público:** `95.216.14.162:53` · **Backend:** `10.10.10.123:53`

Documentação completa:
- `ORIENTACAO_DNS53_PROXMOX_20260622.md`
- `../../exec-reports/EXEC_DNS53_PROXMOX_20260622_v3_FINAL.md`

**Solução activa:** DNAT vmbr0 → VM123 + SNAT ida `10.10.10.254` (conntrack retorno `95.216.14.162`).

**Não usar:** DNAT `10.0.0.2`, `MASQUERADE -o vmbr4000`, `MASQUERADE -d 10.10.10.123:53`.

**Drift vmbr2:** pfSense WAN real = `95.216.14.146` em vmbr0; link `10.0.0.2` (vmbr2) inactivo.
