# OpenPanel VM123 — DNS público porta 53 (BIND)

**Spec:** 028 — OpenPanel CE Ligbox Re-engenharia  
**Data incidente/resolução:** 2026-06-22  
**Solicitante:** Roger  
**Status:** ✅ Resolvido e persistido  
**VM:** VM123 (`10.10.10.123`) · **IP DNS público:** `95.216.14.162:53`

> Relatório operacional completo: [`../../exec-reports/EXEC_DNS53_PROXMOX_20260622_v3_FINAL.md`](../../exec-reports/EXEC_DNS53_PROXMOX_20260622_v3_FINAL.md)  
> Runbook rede Proxmox: [`../../docs/network/ORIENTACAO_DNS53_PROXMOX_20260622.md`](../../docs/network/ORIENTACAO_DNS53_PROXMOX_20260622.md)

---

## 1. Papel do OpenPanel / BIND na VM123

O OpenPanel gere zonas DNS autoritativas dos clientes Ligbox. O serviço público corre em Docker:

| Item | Valor |
|------|-------|
| Container | `openpanel_dns` |
| Imagem | `ubuntu/bind9:latest` |
| Porta host | `0.0.0.0:53` (UDP/TCP) via `docker-proxy` |
| IP LAN | `10.10.10.123` |
| Rede Docker | `root_openpanel_network` · container `172.20.0.2` |
| Tipo | **Autoritativo** (não recursivo) |

**Zonas validadas (exemplos):**

| Zona | Teste | Resultado |
|------|-------|-----------|
| `betinplace.com` | `dig @10.10.10.123 betinplace.com MX` | `10 mail.betinplace.com.` |
| `diarissima.com` | `dig @10.10.10.123 diarissima.com MX` | `0 diarissima.com.` |
| `ligbox.com.br` | `dig @10.10.10.123 ligbox.com.br NS` | registos autoritativos OK |
| `google.com` | `dig @10.10.10.123 google.com` | **REFUSED** (esperado) |

Glue Cloudflare (delegação Ligbox):

| NS | A |
|----|---|
| `ns1.ligbox.com.br` | `95.216.14.162` |
| `ns2.ligbox.com.br` | `95.216.14.162` |

---

## 2. Arquitectura end-to-end (OpenPanel + Proxmox)

```text
Cliente / Internet
       │
       ▼
95.216.14.162:53  ← IP público (Proxmox big1, glue DNS)
       │  PREROUTING DNAT (Proxmox vmbr0)
       ▼
10.10.10.123:53   ← VM123 openpanel_dns (BIND Docker)
       │  resposta para 10.10.10.254 (SNAT ida Proxmox)
       ▼
reverse NAT → cliente recebe resposta de 95.216.14.162 ✅

OpenPanel UI (:2083) ──► gere zonas ──► openpanel_dns (:53)
pfSense VM100 WAN 95.216.14.146 — NÃO é origem correcta do DNS público
```

**Importante para OpenPanel:** o painel e o BIND partilham a VM123, mas o **acesso público à porta 53** é terminado no **Proxmox** (DNAT + SNAT). Problemas de timeout externo são quase sempre **rede/NAT**, não configuração de zona no OpenPanel.

---

## 3. Sintoma (2026-06-22)

| Observação | Detalhe |
|------------|---------|
| Externo | `nslookup betinplace.com 95.216.14.162` → **timeout** (Windows Roger) |
| LAN directo BIND | `dig @10.10.10.123` → **OK** |
| OpenPanel / zonas | Correctas no BIND |
| Causa | Resposta DNS saía com IP **95.216.14.146** (pfSense) em vez de **95.216.14.162** |

---

## 4. Tentativas incorrectas (não repetir)

| Tentativa | Impacto OpenPanel/DNS |
|-----------|------------------------|
| DNAT Proxmox → `10.0.0.2:53` | Timeout — WAN pfSense legada inactiva |
| DNAT → `10.10.10.1:53` | Respostas Unbound LAN, não BIND OpenPanel |
| DNAT directo + `MASQUERADE -d 10.10.10.123:53` | Timeout — retorno quebrado |
| DNAT → `95.216.14.146:53` (pfSense) | Resposta com src 146, cliente descarta |
| Policy routing VM123 (Docker) | Ineficaz — tráfego BIND passa pela bridge Docker |

---

## 5. Solução final (activa)

### 5.1 Proxmox (`/etc/network/interfaces`)

```bash
# Entrada :53 → VM123 OpenPanel BIND
iptables -t nat -A PREROUTING -i vmbr0 -d 95.216.14.162 -p udp --dport 53 \
  -j DNAT --to-destination 10.10.10.123:53
iptables -t nat -A PREROUTING -i vmbr0 -d 95.216.14.162 -p tcp --dport 53 \
  -j DNAT --to-destination 10.10.10.123:53

# SNAT ida — permite retorno como 95.216.14.162
iptables -t nat -A POSTROUTING -d 10.10.10.123 -p udp --dport 53 ! -s 10.10.10.0/24 \
  -j SNAT --to-source 10.10.10.254
iptables -t nat -A POSTROUTING -d 10.10.10.123 -p tcp --dport 53 ! -s 10.10.10.0/24 \
  -j SNAT --to-source 10.10.10.254

# FORWARD retorno BIND → Internet
iptables -I FORWARD 4 -s 10.10.10.123 -p udp --sport 53 ! -d 10.10.10.0/24 -j ACCEPT
iptables -I FORWARD 5 -s 10.10.10.123 -p tcp --sport 53 ! -d 10.10.10.0/24 -j ACCEPT
```

### 5.2 Regra removida (crítica)

Em `/etc/iptables/rules.v4` — **não reactivar**:

```bash
#-A POSTROUTING -o vmbr4000 -j MASQUERADE
```

### 5.3 VM123 — sem alteração permanente necessária

O container `openpanel_dns` mantém-se standard. Default gateway VM123 = `10.10.10.1` (pfSense) para tráfego geral; o retorno DNS público é tratado pelo conntrack Proxmox após SNAT ida `10.10.10.254`.

---

## 6. Validação (pós-fix)

```bash
# Directo BIND OpenPanel
dig @10.10.10.123 betinplace.com MX +short

# Via IP público (como cliente externo)
dig @95.216.14.162 betinplace.com MX +short
dig @95.216.14.162 diarissima.com MX +short

# Windows
nslookup betinplace.com 95.216.14.162
nslookup -type=mx diarissima.com 95.216.14.162
```

**Resultado Roger (Windows 2026-06-22):** ✅ respostas recebidas.

---

## 7. Diagnóstico rápido (OpenPanel / porta 53)

```bash
# 1. Container BIND activo?
ssh root@10.10.10.123 "docker ps --filter name=openpanel_dns"

# 2. BIND responde local?
ssh root@10.10.10.123 "dig @127.0.0.1 betinplace.com MX +short"

# 3. Tráfego externo chega?
ssh root@10.10.10.123 "timeout 10 tcpdump -ni eth0 udp port 53 -c 5"

# 4. SNAT Proxmox activo?
iptables -t nat -L POSTROUTING -n -v | grep "10.10.10.123.*53"

# 5. Resposta sai de 162 (não 146)?
tcpdump -ni vmbr4000 udp port 53 and host 10.10.10.123
```

| Sintoma | Provável causa | Acção |
|---------|----------------|-------|
| `@10.10.10.123` OK, `@162` timeout | NAT Proxmox | Rever DNAT + SNAT ida |
| Container down | OpenPanel stack | `docker restart openpanel_dns` |
| Zona wrong | OpenPanel DNS UI | Rever zona no painel, não NAT |
| REFUSED google.com | Normal | BIND autoritativo only |

---

## 8. Pendências OpenPanel / delegação

| Item | Estado | Acção |
|------|--------|-------|
| Glue `ns1/ns2.ligbox.com.br` → 162 | ✅ | Cloudflare |
| `betinplace.com` NS no registrador | ⚠️ Pendente | Apontar para `ns1/ns2.ligbox.com.br` |
| pfSense port forward WAN :53 → 123 | Redundante | Limpeza opcional (IDs 63–66) |
| Documentação Spec 028 | ✅ | Este ficheiro |

---

## 9. Impacto no fluxo OpenPanel

| Fluxo | Porta 53 |
|-------|----------|
| Cliente consulta site via DNS público | Depende de `@95.216.14.162` |
| OpenPanel `domains-add` / gestão zona | Escreve no BIND local (`openpanel_dns`) |
| FOSSBilling → bridge → hosting | Não afectado directamente |
| Email / MX records | Servidos pelo mesmo BIND — validar MX após fix |

Ao provisionar **novo domínio** no OpenPanel:

1. Criar zona no painel (comportamento normal OpenPanel)
2. Validar: `dig @10.10.10.123 novo-dominio.com MX`
3. Validar público: `dig @95.216.14.162 novo-dominio.com MX`
4. No registrador: NS → `ns1.ligbox.com.br` / `ns2.ligbox.com.br`

---

## 10. Referências Spec 028

| Documento | Conteúdo |
|-----------|----------|
| `spec.md` | OpenPanel CE re-engenharia geral |
| `DNS53_OPENPANEL_PORTA53.md` | **Este documento** |
| `CONFIRMACAO-TESTE-API.md` | Teste API multidomínio |
| `../../exec-reports/EXEC_DNS53_PROXMOX_20260622_v3_FINAL.md` | Incidente completo Proxmox |
| `../../docs/network/ORIENTACAO_DNS53_PROXMOX_20260622.md` | Runbook rede |
| Spec **037** | DNS multi-conta Cloudflare (orquestração) |

---

## 11. Regras de ouro (OpenPanel + DNS53)

1. DNS público Ligbox/OpenPanel = **`95.216.14.162:53`** → VM123 BIND
2. Nunca assumir pfSense WAN `10.0.0.2` — usar **`95.216.14.146`** (vmbr0)
3. SNAT ida **`10.10.10.254`** no Proxmox é **obrigatório**
4. Não usar `MASQUERADE -o vmbr4000` nem `MASQUERADE -d 10.10.10.123:53`
5. Testar zonas **autoritativas** do OpenPanel, não domínios recursivos
6. Alterar `/etc/network/interfaces` Proxmox só com backup + aprovação Roger

---

*Spec 028 · VM130 spec-hub · OpenPanel DNS porta 53 · 2026-06-22*
