Resolver la solicitud de una interfaz (wlan0) usando DNS en la red de otra interfaz (VPN)

Resolver la solicitud de una interfaz (wlan0) usando DNS en la red de otra interfaz (VPN)

Lo que estoy tratando de lograr:

Tengo una configuración de VPN inversa WireGuard que no enruta mi tráfico, pero me permite conectarme a mi raspberry pi desde Internet utilizando un servidor público como "puente".

Instalé pihole en la Raspberry Pi. Ahora, quiero usar pi como DNS (a través de WireGuard) mientras envío la solicitud HTTP real desde mi dispositivo real.

Básicamente, quiero que funcione así:

192.168.0.x (wlan0@localhost) solicita una URL. El DNS @192.168.66.z (pihole) resuelve la URL y envía la IP de regreso a 192.168.66.y (wg0@localhost). Luego, esta respuesta se utiliza para enviar la solicitud HTTP desde 192.168.0.x (wlan0@localhost).

Lo que he probado:

Obviamente, intenté ingresar la VPN-IP del pi en NetworkManager. Esto me ha dado algunos dolores de cabeza ya que mi Ubuntu ( 5.4.0-42-generic #46~18.04.1-Ubuntu) siempre recurría a su DNS predeterminado (lo que no quería incluso si el DNS de VPN funcionaba). Encontré una solución proporcionada por user2427436en unAsí que hilo aquí.

Cuál es el problema:

Si bien puedo forzar el uso del DNS (sin recurrir a los enrutadores/DNS predeterminado), no puedo usar el pihole como DNS. Puedo conectarme al pi a través de un túnel (por ejemplo, HTTP, SSH, ...) y el puerto 53 (para DNS) está abierto en el firewall. Todavía no puedo resolver ningún nombre de dominio. Además, verificar journalctl -xeel pi no muestra ningún indicio de que el dispositivo haya intentado conectarse/resolverse.

Realmente me gustaría entender por qué esto no funciona y cómo se supone que debe funcionar. Siento que me falta algo sobre cómo funciona el DNS.

¿Cuál sería el archivo de registro correcto para verificar aquí? ¿Tiene alguna sugerencia sobre lo que debería probar a continuación?

EDITAR:

El DNS se configura por dispositivo de red. ¿Mi dispositivo wlan0 @192.168.0.0\24 conoce el dispositivo wg0 y su espacio de direcciones @192.168.66.0\24? ¿Puede ser esta la causa del problema, que intento resolver una solicitud de wlan0 usando un DNS a través de wg0? En caso afirmativo, ¿cómo solucionaría esto?

Respuesta1

Hay varios aspectos para solucionar este problema.

  1. Agregar reglas de IP para un enrutamiento correcto
  2. prueba de resolución de nombres
  3. deshabilitar / ajustar resuelto

paso a paso:

El primer paso es ver si se puede alcanzar el Pi. Es necesario comprobar por qué interfaz pasa el enrutamiento. Se pueden utilizar las siguientes pruebas:

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

reemplácelo con las interfaces disponibles en el sistema. Resultado esperado: traceroute funcionará en la interfaz wg0, pero presumiblemente no en las demás.

Se puede realizar la misma prueba utilizando la IP de origen:

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

reemplácela con una IP local en su localhost Resultado esperado: traceroute presumiblemente funcionará con la dirección IP del wg0 pero no con la dirección IP de cualquier otra interfaz

Si los dos anteriores no funcionan con ninguna interfaz o dirección, entonces la parte de enrutamiento de su "puente" público está defectuosa.

Suponiendo que el primer paso funcione como se esperaba, el siguiente paso es indicarle al sistema operativo que enrute el tráfico para las solicitudes de DNS a través de la interfaz correcta. Reemplácelo con el nombre de la interfaz que proporciona una ruta de trabajo a su agujero en el paso anterior.

cree una nueva tabla de enrutamiento para solicitudes de DNS, por ejemplo, "dns" y dígale al sistema operativo que enrute todas las solicitudes de DNS (puerto de destino 53) para que pasen por una interfaz 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

Primero vea si la resolución DNS funciona especificando explícitamente la dirección pihole:

nslookup www.serverfault.com 192.168.66.z

Resultado esperado: la consulta DNS va bien. Si no es así, debe volver a verificar las interfaces y direcciones IP anteriores y sus reglas de enrutamiento en el VPS.

Por último, debemos manejarlo resuelto. Mi sugerencia es desactivar la resolución y usar el DNS pihole directamente:

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

agregar

dns=default

bajo [main]en/etc/NetworkManager/NetworkManager.conf

systemctl restart NetworkManager

Cambie la IP del servidor DNS en la propiedad de su interfaz de red a la dirección pihole

probar la resolución DNS:

nslookup www.serverfault.com

Se han realizado los siguientes cambios en su sistema:

  1. Las solicitudes DNS (puerto de destino 53) se enrutan a través de una interfaz diferente
  2. Resuelto está deshabilitado, la resolución DNS va directamente a un servidor DNS
  3. El servidor DNS está configurado para ser la IP de piHole.

Déjame saber si funciona.

información relacionada