使用另一个接口 (VPN) 网络中的 DNS 解析一个接口 (wlan0) 的请求

使用另一个接口 (VPN) 网络中的 DNS 解析一个接口 (wlan0) 的请求

我想要实现的目标:

我有一个 WireGuard 反向 VPN 设置,它不会路由我的流量,但允许我使用公共服务器作为“桥梁”从互联网内部连接到我的树莓派。

我在树莓派上安装了 pihole。现在,我想将树莓派用作 DNS(通过 WireGuard),同时从我的实际设备发送实际 HTTP 请求。

基本上,我希望它像这样工作:

192.168.0.x (wlan0@localhost) 请求 URL。DNS @192.168.66.z (pihole) 解析 URL 并将 IP 发送回 192.168.66.y (wg0@localhost)。然后使用此答案从 192.168.0.x (wlan0@localhost) 发送 HTTP 请求。

我尝试过的:

显然,我曾尝试将 pi 的 VPN-IP 输入 NetworkManager。这让我有些头疼,因为我的 Ubuntu ( ) 总是回到其默认 DNS(即使 VPN DNS 有效,我也不希望这样)。我在 上5.4.0-42-generic #46~18.04.1-Ubuntu找到了一个解决方法user2427436SO线程在这里

问题是什么:

虽然我可以强制使用 DNS(无需回退到路由器/默认 DNS),但我无法将 pihole 用作 DNS。我可以通过隧道(例如 HTTP、SSH 等)连接到 pi,并且防火墙中打开了端口 53(用于 DNS)。我仍然无法解析任何域名。此外,检查journalctl -xepi 并没有显示任何提示表明设备尝试连接/解析。

我真的很想了解为什么这不起作用以及它应该如何工作。我感觉我错过了一些有关 DNS 工作原理的知识。

这里应该检查哪个日志文件?你对我下一步应该尝试什么有什么建议吗?

编辑:

DNS 是针对每个网络设备设置的。我的 wlan0 设备 @192.168.0.0\24 是否知道 wg0 设备及其地址空间 @192.168.66.0\24?这可能是导致问题的原因吗?我尝试使用 wg0 上的 DNS 解析来自 wlan0 的请求?如果是,我该如何解决这个问题?

答案1

解决此问题有多个方面。

  1. 添加 IP 规则以实现正确路由
  2. 测试名称解析
  3. 禁用/调整已解决

一步步:

第一步是查看是否可以访问 Pi。需要检查路由经过哪个接口。可以使用以下测试:

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

用系统上可用的接口替换。预期结果:traceroute 将在 wg0 接口上工作,但可能在其他接口上不起作用。

可以使用源IP进行同样的测试:

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

用本地主机上的本地 IP 替换预期结果:traceroute 大概会使用 wg0 的 IP 地址,但不会使用任何其他接口的 IP 地址

如果上述两个不适用于任何接口或地址,则公共“网桥”上的路由部分有故障。

假设第一步按预期工作,下一步是告诉操作系统通过正确的接口路由 DNS 请求的流量。将其替换为上一步中为您的 pihole 提供工作路由的接口的名称。

为 DNS 请求创建一个新的路由表,例如“dns”,并告诉操作系统将所有 DNS 请求(目标端口 53)路由到不同的接口

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

首先通过明确指定 pihole 地址来查看 DNS 解析是否有效:

nslookup www.serverfault.com 192.168.66.z

预期结果:DNS 查询顺利。如果不顺利,您需要仔细检查上面的接口和 IP 地址以及 VPS 上的路由规则。

最后我们需要处理解析。我的建议是关闭解析并直接使用 pihole DNS:

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

添加

dns=default

在下[main]/etc/NetworkManager/NetworkManager.conf

systemctl restart NetworkManager

将网络接口属性上的 DNS 服务器 IP 更改为 pihole 地址

测试DNS解析:

nslookup www.serverfault.com

您的系统现已做出以下更改:

  1. DNS 请求(目标端口 53)通过不同的接口路由
  2. 已禁用解析,DNS 解析直接转到 DNS 服务器
  3. DNS 服务器设置为 piHole 的 IP

如果有效请告诉我。

相关内容