Adopt nanoDNS-style INI config for the guide gateway

Replace the gateway's env-var DNS policy with docker/nanodns.ini, modelled on
https://github.com/drakmor/nanoDNS#config: [general] (redirect_url,
allowed_clients), [upstream] (ordered resolver list + timeout_ms), [overrides]
(mask = IPv4 spoof) and [exceptions] (masks forwarded upstream). Masks use
shell-style wildcards and match case-insensitively; resolution order is
exceptions -> overrides -> NXDOMAIN.

The unmatched-name behaviour is deliberately inverted from upstream nanoDNS:
names matching no rule return NXDOMAIN (default-deny) instead of being forwarded,
so PSN, updates and telemetry stay blocked. The source-client allowlist now lives
in [general] allowed_clients. The INI is baked into the image; CONFIG_FILE can
point at a mounted file for per-host overrides.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
2026-10-11 13:38:29 +01:00
co-authored by Claude Opus 4.8
parent 9f28b8e2a1
commit 50dd2d8266
7 changed files with 237 additions and 72 deletions
+26 -13
View File
@@ -154,6 +154,17 @@ O Compose inclui um DNS controlado no `net-utils01` que:
- apresente um gateway HTTPS local e redirecione o browser para o exploit em
`http://192.168.20.30:8000/`.
A política de DNS segue o modelo de configuração do nanoDNS
(<https://github.com/drakmor/nanoDNS#config>), mas com o comportamento para nomes
não correspondidos invertido para **default-deny** (NXDOMAIN em vez de reencaminhar).
Vive no ficheiro `docker/nanodns.ini`, incluído na imagem, com as secções
`[general]` (`redirect_url`, `allowed_clients`), `[upstream]` (`server`,
`timeout_ms`), `[overrides]` (`máscara = IPv4`, faz spoof) e `[exceptions]` (uma
máscara por linha, reencaminha para o upstream). As máscaras aceitam wildcards
shell (`*`, `?`, `[abc]`, `[a-z]`, `[!0-9]`) e a ordem de resolução é
exceptions → overrides → NXDOMAIN. Para alterar a política, editar o INI e
reconstruir a imagem (ou apontar `CONFIG_FILE` para um ficheiro montado).
Nesse cenário, a PS5 usaria:
```text
@@ -171,20 +182,22 @@ definir `GATEWAY_BIND_IP`, `GATEWAY_IP` e `GUIDE_REDIRECT_URL` antes de executar
Compose. Também é possível bloquear o acesso WAN da PS5 no router, mantendo apenas
a comunicação LAN; esta continua a ser uma camada adicional mais forte do que DNS.
O resolvedor upstream predefinido é `1.1.1.1`. Pode ser substituído por um endereço
DNS controlado na rede através de `UPSTREAM_DNS`; o valor deve ser um endereço IP,
não um hostname. A firewall deve permitir UDP e TCP `53` de `net-utils01` para esse
resolvedor. A consola continua a precisar apenas de UDP/TCP `53` para
`192.168.20.30`; não deve consultar diretamente um DNS público.
O resolvedor upstream predefinido é `1.1.1.1`, definido em `[upstream] server` no
`docker/nanodns.ini`. Podem listar-se vários (separados por vírgulas/espaços/linhas),
tentados por ordem; os valores devem ser endereços IP, não hostnames. A firewall deve
permitir UDP e TCP `53` de `net-utils01` para esse resolvedor. A consola continua a
precisar apenas de UDP/TCP `53` para `192.168.20.30`; não deve consultar diretamente
um DNS público.
O gateway só responde a consultas DNS vindas das redes listadas em `ALLOWED_CLIENTS`.
Por defeito inclui a VLAN das consolas `192.168.40.0/28`, a VLAN de servers
`192.168.20.0/24` e a VLAN de gestão/confiança `192.168.10.0/27` (estas duas últimas
para o operador poder testar e administrar). O valor aceita uma lista separada por
vírgulas de endereços individuais e/ou intervalos CIDR — por exemplo,
`192.168.40.13,192.168.40.14` para trancar apenas às duas PS5 autorizadas (PS5FAT e
PS5PRO). Um valor vazio desativa o filtro e serve todos os clientes. Consultas de
origens não permitidas são descartadas e registadas como `denied`.
O gateway só responde a consultas DNS vindas das redes listadas em
`[general] allowed_clients`. Por defeito inclui a VLAN das consolas
`192.168.40.0/28`, a VLAN de servers `192.168.20.0/24` e a VLAN de gestão/confiança
`192.168.10.0/27` (estas duas últimas para o operador poder testar e administrar). O
valor aceita uma lista separada por vírgulas/espaços de endereços individuais e/ou
intervalos CIDR — por exemplo, `192.168.40.13 192.168.40.14` para trancar apenas às
duas PS5 autorizadas (PS5FAT e PS5PRO). Um valor vazio desativa o filtro e serve todos
os clientes. Consultas de origens não permitidas são descartadas e registadas como
`denied`.
O acesso WAN da consola pode ficar limitado a TCP `443` para os domínios
permitidos. Não são necessárias regras WAN de entrada. Se faltarem ícones, consultar