O problema

O problema

O problema

Tenho uma VPC na qual preciso acessar os servidores usando FQDNs privados. A VPC é acessível por meio de uma VPN wireguard. O servidor VPN também serve como servidor DNS executando BIND9. Eu configurei o servidor DNS com uma zona privada de acordo com istotutorial. De dentro da VPC, o DNS funciona conforme o esperado e consigo acessar os servidores pelos FQDNs definidos na zona DNS.

Ao conectar-me à VPC por meio do túnel VPN, não consigo resolver esses FQDNs, embora tenha configurado meu cliente VPN para usar meu servidor DNS privado. Eu sei que o cliente VPN usa meu servidor DNS privado porque quando executo nslookup google.comvejo o endereço IP do meu DNS, como você pode ver o resultado abaixo:

Server:     10.118.0.2
Address:    10.118.0.2#53
...

Se eu executar o nslookup myprivate.domain.comde uma máquina conectada ao VPC através do túnel VPN, recebo um NXDOMAIN, o mesmo vale para o ping, ele falha com o erro Name or service not known. No entanto, se eu executar o ping no endereço IP privado da VPC, ele funcionará. Portanto, se myprivate.domain.comestiver hospedado no servidor em 10.118.0.3, o ping será bem-sucedido no endereço IP, mas falhará no FQDN.

Além disso, veja os resultados da escavação quando estiver dentro da VPC e quando estiver em uma máquina conectada por meio da VPN:: dig dev.myprivatedomain.com nsFROM VPC:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51703
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 9dccc02158dee7f70100000061a7e0a1ce2597e377b9c301 (good)
;; QUESTION SECTION:
;dev.myprivatedomain.com.       IN  NS

;; AUTHORITY SECTION:
nabuinternal.com.   604800  IN  SOA ns1.myprivatedomain.com. ...

;; Query time: 0 msec
;; SERVER: 10.118.0.2#53(10.118.0.2)
;; WHEN: Wed Dec 01 20:52:49 UTC 2021
;; MSG SIZE  rcvd: 93

DA VPN:

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 57158
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;dev.myprivatedomain.com.       IN  NS

;; AUTHORITY SECTION:
com.            900 IN  SOA a.gtld-servers.net. nstld.verisign-grs.com. 1638392201 1800 900 604800 86400

;; Query time: 44 msec
;; SERVER: 10.118.0.2#53(10.118.0.2)
;; WHEN: Wed Dec 01 15:57:05 EST 2021
;; MSG SIZE  rcvd: 122

Percebo que ambos usam o mesmo servidor DNS, mas quando solicitado pela VPN, a autoridade do meu domínio privado não é retornada.

Para concluir, após várias horas de pesquisa, não consigo descobrir o que está faltando para os clientes que se conectam à VPC por meio da VPN conseguirem resolver os FQDNs definidos pelo meu DNS privado.

Informações adicionais

  • O servidor é Ubuntu 20.04 LTS
  • Vincular 9:BIND 9.16.1-Ubuntu (Stable Release)
  • wireguard: wireguard-tools v1.0.20200513instalado através de wirespeed
  • UFW ativado

O IP do servidor VPN e DNS na VPC é 10.118.0.2.

O pool de endereços VPN é 10.99.0.0/16e eu defini as configurações do BIND9 da seguinte maneira:

acl "trusted" {
    10.118.0.2;    # the vpn and dns server
    ...
    10.99.0.0/16;  # vpn address pool
    
};
options {
    directory "/var/cache/bind";
    listen-on-v6 { any; };
    recursion yes;
    allow-recursion { trusted; };
    listen-on { 10.118.0.0/20; 10.99.0.0/16; };  
    allow-transfer { none; };
    forwarders {
            8.8.8.8;
            8.8.4.4;
    };
};

A zona está configurada desta forma:

$TTL    604800
@       IN      SOA     ns1.myprivatedomain.com. admin.myprivatedomain.com. (
                              9         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;                         
; name servers - NS records
    IN      NS      ns1.myprivatedomain.com.

; name servers - A records
ns1.myprivatedomain.com.          IN      A       10.118.0.2

; 10.118.0.0/20 - A records
dev.myprivatedomain.com.            IN      A      10.118.0.4
staging.myprivatedomain.com.         IN      A      10.118.0.3

e o arquivo da zona reversa:

$TTL    604800
@       IN      SOA     ns1.myprivatedomain.com. admin.myprivatedomain.com. (
                              7         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
; name servers - NS records
    IN      NS      ns1.myprivatedomain.com.

; PTR Records
2.0   IN      PTR     ns1.myprivatedomain.com.         ; 10.118.0.2
4.0   IN      PTR     dev.myprivatedomain.com.         ; 10.118.0.4
3.0   IN      PTR     staging.myprivatedomain.com.      ; 10.118.0.3

O UFW está configurado para permitir a porta 53 para TCP e UDP.

Além disso, o UFW possui regras anteriores para permitir o tráfego da VPN:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.99.0.0/16 -o eth1 -j MASQUERADE

A regra anterior foi configurada para permitir que um cliente se conectasse ao túnel VPN e usasse o servidor DNS privado. Sem essa regra, não consigo acessar a Internet, a menos que defina o endereço DNS como público, como o do Google. Encontrei essa regra durante minha pesquisa, porém ainda não estou muito familiarizado com as configurações de firewall e ainda não entendo completamente suas implicações. Isso me ajudou a chegar mais perto de meu objetivo, mas preciso ler mais sobre isso.

Abaixo está a configuração do cliente VPN wireguard:

[Interface]
...
DNS = 10.118.0.2
Address = 10.99.0.2/16

[Peer]
...
AllowedIPs = 10.99.0.0/16, 10.118.0.0/20

ATUALIZAÇÃO: TRABALHO

O servidor wireguard foi instalado através de outro software que o empacotou e forneceu serviços adicionais (interface web, configuração facilitada). A desvantagem é que eu tinha pouco controle sobre a configuração do servidor wireguard.

Conseqüentemente, acabei removendo o software e instalando o wireguard manualmente, o que me permitiu configurar corretamente a VPN, principalmente para que as regras de roteamento funcionassem com a configuração da minha VPC. Eu precisava rotear o tráfego no túnel VPN da interface VPN para a interface privada da VPC em vez da interface pública. Isso acabou resolvendo meu problema sem precisar modificar as configurações do servidor DNS e da zona.

informação relacionada