我有一台 Windows 机器,上面运行着 WSL 和 WSL 的 nginx 服务器。服务器在本地网络上运行良好,其他设备可以使用Windows机器网络接口的IP地址看到该网站。其他设备主要是安卓智能手机。我的问题是:这是否可能,如果可以,那么究竟如何设置在 WSL 上运行的简单本地 DNS 服务器?我不想在客户端设备上编辑主机文件(这很麻烦,而且我可能无法访问所有这些设备,并且地址可以更改),并且我不想在家庭路由器上设置自定义固件(此选项可能有风险甚至根本不可能)。我可以设置双启动,但我真的不喜欢这个主意。我对这个想法抱有微弱的希望,因为我的 http 服务器正在以某种方式工作。我听说过bind9,但就我而言,这里的配置更加复杂。基本上,问题是:
可以运行该配置吗?如果不是,到底为什么?还有什么替代方案?如果是的话,具体如何?我尝试在 WSL 上设置 dnsmasq,但它仅适用于主机。我尝试使用 WSL 的默认 NAT 网络模式(使用侦听端口 80 和 53 的端口代理接口)以及镜像网络模式来实现此目的。Windows 防火墙中打开端口 80 TCP 和 53 TCP/UDP。我想在 WSL 上使用本地 DNS 服务器。我希望能够在我的网站上使用某个地址(例如 local.site),不仅在我的主机上,而且也在我的本地网络上的其他设备上。所有其他地址都应重定向到某个 DNS 服务(例如 8.8.8.8),或重定向到我的家庭路由器,后者又将该请求重定向到我的 ISP,以便网络可以正常工作,除了我的特定地址(以及其他一些地址)。可能)。我的 /etc/hosts 文件包含我的主机网络接口的 IP 地址,并且在 /etc/wsl.conf 中禁用了自动生成。文件 /etc/resolv.conf 会自动生成。如果我的想法可行,我想了解配置的详细信息,包括 IP 地址、它们的位置以及其他配置详细信息,例如 WSL 网络模式和防火墙配置。如果不是,我想知道原因和可能的替代方案。
是的,只要您可以将端口 53(TCP和UDP)的数据包传送到服务即可。
就网络要求而言,设置 HTTP 服务器和设置 DNS 服务器之间几乎没有什么区别。您需要有可用的 UDP(不仅仅是 TCP),并且无法选择端口号(始终为 53),但除此之外,一切都是一样的;不需要特定的 VM 网络模式。
不要忘记,您的路由器仍然需要配置为通过 DHCP通告新的 DNS 服务器地址(或者所有客户端都需要手动配置才能使用它)。
对于软件,我实际上会从 BIND9 开始——它的配置并不比 Nginx 更复杂,并且它支持充当权威服务器(即托管本地域)和解析器(即查找外部域的查询) 。它可以通过转发到另一个 DNS 服务器来完成后者,也可以完全独立完成。
其他流行的选项是 Unbound(主要是解析器,但最近获得了托管完整区域的能力)、Dnsmasq(对于小型 LAN 非常常见,并且实际上被多种型号的家庭路由器使用)和 Microsoft DNS Server(随所有 Windows Server 版本一起提供) )。
(请注意,某些 DNS 服务器仅具有权威性,并且需要与单独的解析器配对;例如,如果您要使用 Knot 或 PowerDNS 来托管域,您仍然需要 BIND/Unbound/Dnsmasq 作为“前端”将请求转发到 Knot 或 8.8.8.8。这很像 Web 服务器 – 有些可以托管网站并作为反向代理,有些不能代理,有些仅用于代理。)
我开始检查事情。之前的回答中提到了 UDP 上的端口 53。当然,正如我在问题中提到的,这个端口在 Windows 防火墙中是开放的。但有一个问题,我最近才发现。
为了将请求从我的主机重定向到 WSL,我使用端口代理接口(Microsoft post 中推荐的技术),它侦听对我的主机的请求并将它们重定向到我的 WSL。
但正如我刚才发现的,这个接口仅在 TCP 上可用。因此,即使请求可以到达我的主机,并且即使它们可以穿过防火墙,它们也不会定向到我的 WSL。
Windows 不知道如何处理它们,因此它们只是没有响应。我会尝试使用镜像网络模式,也许会有帮助。