
Estou usando o pfSense com OpenVPN há mais de uma década. Também usei intensamente muitos serviços do pfSense (resolvedor de DNS, DHCP, HA Proxy, SquidGuard, firewall, é claro...) Resumindo - tenho alguma experiência. Mas agora decidi tentar substituir o OpenVPN pelo WireGuard...
Criei um túnel no lado do pfSense, configurei o cliente Windows e ele se conecta com sucesso. Consigo acessar (quase) todos os servidores por trás do pfSense. Mas então notei algo muito, muito estranho no comportamento do DNS. Terei que descrever rapidamente meu ambiente para explicar o problema. Então eu tenho:
- Configuração de DNS dividido (DNS interno resolve para endereços privados enquanto o DNS público resolve para endereços públicos).
- Os servidores DNS internos são dois controladores de domínio Zentyal (na rede atrás do pfSense). Eles são servidores de nomes autorizados para o domínio principal “meudominio.com”.
- Esses dois estão configurados para encaminhar consultas DNS de outros domínios para o DNS Resolver no pfSense. (Tenho mais alguns domínios configurados no DNS Resolver porque é muito, muito mais fácil de usar e melhor que o Zentyal DNS.)
- Por fim, o DNS Resolver encaminha consultas de domínios que não foram resolvidos para um DNS externo.
DNS request -> Zentyal DNS (172.16.0.1) -> pfSense DNS Resolver (172.16.1.1) -> External DNS
Configuração um pouco estranha, eu admito, mas já estava funcionando há anos.
Quando conecto minha máquina Windows 11 usando OpenVPN, posso fazer isso nslookup
para qualquer domínio (principal ou outro) sem nenhum problema. Mas quando eu desconecto o OpenVPN e conecto o WireGuard, só posso consultaro principaldomínio:
nslookup web.mydomain.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
Name: web.mydomain.com
Address: 172.16.2.5
Mas quando eu consulto qualquer outro domínio (tratado pelo DNS Resolver ou DNS externo), recebo o erro "consulta recusada":
nslookup google.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
*** zentyal-1.mydomain.com can't find google.com: Query refused
A mesma solicitação quando estou conectado usando OpenVPN:
nslookup google.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
Non-authoritative answer:
Name: google.com
Addresses: 2a00:1450:4001:80f::200e
142.250.185.142
Obviamente em ambos os casos o mesmo servidor DNS (zentyal-1) recebe a solicitação e o mesmo servidor responde. Uma vez com "consulta recusada" e uma vez com resposta bem-sucedida. Parece que o DNS Resolver se recusa a responder ao Zentyal quando estou conectado via WireGuard.
Minha configuração do cliente WireGuard:
[Interface]
PrivateKey = XXXX=
Address = 172.16.26.2/24
DNS = 172.16.0.1
[Peer]
PublicKey = YYYYY=
AllowedIPs = 172.16.0.0/16
Endpoint = 1.2.3.4:51820
E este não é o fim do comportamento estranho. Estou enfrentando o problema de "consulta recusada" apenas no prompt de comando, com nslookup
. Parece que os navegadores não são afetados por esse problema. ( nslookup
não consigo acessar o google.com, mas o Firefox o abre sem problemas.) Primeiro pensei que fosse algum tipo de vazamento de DNS e que os navegadores estivessem consultando algum DNS local. Mas, para minha total surpresa, parece que não é esse o caso. O navegador está recebendo resposta DNS para um domínio gerenciado pelo DNS Resolver, com IP privado, o que significa que a respostatinha que virpor trás do pfSense (do DNS Resolver)...
Huhhhhhhh
Alguma ideia? Desculpe pelo texto longo... Obrigado!