![使用另一个接口 (VPN) 网络中的 DNS 解析一个接口 (wlan0) 的请求](https://linux22.com/image/756827/%E4%BD%BF%E7%94%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%8E%A5%E5%8F%A3%20(VPN)%20%E7%BD%91%E7%BB%9C%E4%B8%AD%E7%9A%84%20DNS%20%E8%A7%A3%E6%9E%90%E4%B8%80%E4%B8%AA%E6%8E%A5%E5%8F%A3%20(wlan0)%20%E7%9A%84%E8%AF%B7%E6%B1%82.png)
我想要实现的目标:
我有一个 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
找到了一个解决方法user2427436
SO线程在这里。
问题是什么:
虽然我可以强制使用 DNS(无需回退到路由器/默认 DNS),但我无法将 pihole 用作 DNS。我可以通过隧道(例如 HTTP、SSH 等)连接到 pi,并且防火墙中打开了端口 53(用于 DNS)。我仍然无法解析任何域名。此外,检查journalctl -xe
pi 并没有显示任何提示表明设备尝试连接/解析。
我真的很想了解为什么这不起作用以及它应该如何工作。我感觉我错过了一些有关 DNS 工作原理的知识。
这里应该检查哪个日志文件?你对我下一步应该尝试什么有什么建议吗?
编辑:
DNS 是针对每个网络设备设置的。我的 wlan0 设备 @192.168.0.0\24 是否知道 wg0 设备及其地址空间 @192.168.66.0\24?这可能是导致问题的原因吗?我尝试使用 wg0 上的 DNS 解析来自 wlan0 的请求?如果是,我该如何解决这个问题?
答案1
解决此问题有多个方面。
- 添加 IP 规则以实现正确路由
- 测试名称解析
- 禁用/调整已解决
一步步:
第一步是查看是否可以访问 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
您的系统现已做出以下更改:
- DNS 请求(目标端口 53)通过不同的接口路由
- 已禁用解析,DNS 解析直接转到 DNS 服务器
- DNS 服务器设置为 piHole 的 IP
如果有效请告诉我。