Resolvendo a solicitação de uma interface (wlan0) usando DNS na rede de outra interface (VPN)

Resolvendo a solicitação de uma interface (wlan0) usando DNS na rede de outra interface (VPN)

O que estou tentando realizar:

Eu tenho uma configuração de VPN reversa WireGuard que não roteia meu tráfego, mas permite conectar-me ao meu Raspberry Pi de dentro da Internet usando um servidor público como "ponte".

Instalei o pihole no Raspberry Pi. Agora, quero usar o pi como DNS (por WireGuard) ao enviar a solicitação HTTP real do meu dispositivo real.

Basicamente, quero que funcione assim:

192.168.0.x (wlan0@localhost) solicita uma URL. O DNS @192.168.66.z (pihole) resolve a URL e envia o IP de volta para 192.168.66.y (wg0@localhost). Esta resposta é então usada para enviar a solicitação HTTP de 192.168.0.x (wlan0@localhost).

O que eu tentei:

Obviamente, tentei inserir o VPN-IP do pi no NetworkManager. Isso me deu alguma dor de cabeça, pois meu Ubuntu ( 5.4.0-42-generic #46~18.04.1-Ubuntu) sempre voltava ao DNS padrão (o que eu não queria, mesmo que o DNS da VPN funcionasse). Encontrei uma solução alternativa fornecida por user2427436umEntão tópico aqui.

Qual é o problema:

Embora eu possa forçar o uso do DNS (sem voltar aos roteadores/DNS padrão), não consigo usar o pihole como DNS. Posso me conectar ao pi via túnel (por exemplo, HTTP, SSH, ..), e a porta 53 (para DNS) é aberta no firewall. Ainda não consigo resolver nenhum nome de domínio. Além disso, a verificação journalctl -xedo pi não mostra nenhuma indicação de que o dispositivo tentou se conectar/resolver.

Eu realmente gostaria de entender por que isso não está funcionando e como deveria funcionar. Sinto que estou faltando alguma coisa sobre como o DNS funciona.

Qual seria o arquivo de log correto para verificar aqui? Você tem alguma sugestão do que devo tentar a seguir?

EDITAR:

O DNS é configurado por dispositivo de rede. Meu dispositivo wlan0 @192.168.0.0\24 conhece o dispositivo wg0 e seu espaço de endereço @192.168.66.0\24? Pode ser esta a causa do problema, tentar resolver uma solicitação do wlan0 usando um DNS sobre wg0? Se sim, como eu resolveria isso?

Responder1

Existem vários aspectos para solucionar esse problema.

  1. adicionando regras de IP para roteamento correto
  2. testando resolução de nomes
  3. desativação/ajustes resolvidos

passo a passo:

O primeiro passo é ver se o Pi pode ser alcançado. É preciso verificar por qual interface o roteamento passa. Os seguintes testes podem ser usados:

traceroute -i <interface name> -p 53 192.168.66.z

substitua pelas interfaces disponíveis no sistema. Resultado esperado: traceroute funcionará na interface wg0, mas provavelmente não nas outras.

O mesmo teste pode ser feito usando o IP de origem:

traceroute -s <sourceIP> -p 53 192.168.66.z

substitua por um IP local em seu host local Resultado esperado: o traceroute provavelmente funcionará com o endereço IP do wg0, mas não com o endereço IP de qualquer outra interface

Se os dois acima não funcionarem com nenhuma interface ou endereço, então a parte de roteamento da sua “ponte” pública está com defeito.

Supondo que a primeira etapa funcione conforme o esperado, a próxima etapa é informar ao sistema operacional para rotear o tráfego para solicitações de DNS por meio da interface correta. Substitua pelo nome da interface que fornece uma rota funcional para seu furo na etapa anterior.

crie uma nova tabela de roteamento para solicitações de DNS, por exemplo, "dns" e diga ao sistema operacional para rotear todas as solicitações de DNS (porta de destino 53) para passar por uma interface diferente

echo "10 dns" >>/etc/iproute2/rt_tables
ip rule add pref 10 dport 53 table dns
ip route add default via 192.168.66.z dev <DNSInterface> table dns
ip route flush cache

Primeiro, veja se a resolução DNS funciona especificando explicitamente o endereço pihole:

nslookup www.serverfault.com 192.168.66.z

Resultado esperado: a consulta DNS corre bem. Caso contrário, você precisará verificar novamente as interfaces e endereços IP acima e suas regras de roteamento no VPS.

Por último, precisamos resolver o problema. Minha sugestão é desligar o resolvido e usar o DNS pihole diretamente:

systemctl stop systemd-resolved
systemctl disable systemd-resolved.service
mv /etc/resolv.conf /etc/resolv.conf.securitycopy

adicionar

dns=default

sob [main]a/etc/NetworkManager/NetworkManager.conf

systemctl restart NetworkManager

Altere o IP do servidor DNS na propriedade da sua interface de rede para o endereço pihole

testar a resolução DNS:

nslookup www.serverfault.com

As seguintes alterações foram feitas em seu sistema:

  1. Solicitações de DNS (porta de destino 53) são roteadas por uma interface diferente
  2. Resolvido está desabilitado, a resolução DNS vai diretamente para um servidor DNS
  3. O servidor DNS está configurado para ser o IP do piHole

Deixe-me saber se funciona.

informação relacionada