I'm not sure if that "push" is necessary, as I don't use DHCP client-side.
O OpenVPN já recebe seu endereço IP e outras configurações do servidor, por isso entende certas "opções de DHCP", mesmo que não sejam enviadas tecnicamente via DHCP.
I presume I must set up my (VPN) server to also be a DNS server in order for that to work. But is that necessary?
Sim, é. (Especificamente, você precisa de um resolvedor - Unbound, dnsmasq, Bind9 funcionará, mas NSD não será, como é somente autoridade.)
Why can't the VPN server handle forwarded DNS queries via it's resolv.conf (without being a DNS server, just as it handles everything else without being an everything else server)?
Isso não chega nem perto da mesma coisa - o servidor VPN não manipula "todo o resto", mas apenas encaminha os pacotes IP.
Por exemplo, se um cliente se conecta ao Google ou usa 8.8.8.8
como seu servidor DNS, o servidor VPN só vê que é um pacote IPv4 para o endereço IP de outra pessoa. Assim, o servidor VPN não tenta entender o conteúdo do pacote - apenas o envia para o próximo roteador, e assim por diante, até que o pacote chegue ao destino real.
Mas se você quiser que o servidor VPN honre seu resolv.conf
, ele deve entender como ele está relacionado aos pacotes que recebe e quais respostas devem ser geradas - e precisa de duas coisas para isso:
-
Para começar, seus clientes devem usar o próprio endereço do servidor VPN como seu "servidor DNS", para que o servidor se veja como o destino final dos pacotes e realmente interprete seu conteúdo (como UDP) em vez de encaminhá-los para algum lugar mais.
(Isso significa que "resolv.conf do lado do cliente (manualmente, nunca muda)" é um problema. Se você
push
a opção dns-server, o cliente OpenVPN vai entendê-lo e deve tente atualizar oresolv.conf
do cliente, mas isso depende do sistema. -
Agora, o servidor VPN está recebendo pacotes para a porta UDP 53, mas ainda não entende automaticamente os dados que eles contêm. Assim como você precisa de um servidor da Web para entender as solicitações HTTP, você também precisa de um servidor DNS para entender as solicitações de DNS e responder adequadamente a elas.
Tecnicamente, você pode contornar o primeiro requisito usando iptables no servidor VPN para redirecionar todos os pacotes UDP / 53 para si mesmo - eu acho que isso é chamado de "proxy transparente" ou -j REDIRECT
em vários tutoriais.
Mas sugiro fazer isso apenas uma vez que você tenha uma boa noção da distinção entre os pacotes de encaminhamento do seu servidor e o manuseamento deles. Caso contrário, isso só aumentaria a confusão.