设置
我的设置中至少涉及 3 个设备:
- raspberry pi:这已配置 dnsmasq,仅用于作为我的 LAN 的 DNS 服务器,我可以选择使用它而不是路由器的上游服务器。
- 个人笔记本电脑:我在这里从闪存驱动器运行 Web 服务器,并且需要 LAN 的其余部分可以访问它,因此需要 RPI。
- 数量可变的 Windows 笔记本电脑:这些笔记本电脑正在配置中,并且网页用于指导我完成整个过程并提供安装资源。
问题
我正在配置的 Windows 笔记本电脑无法通过其 FQDN 找到我的个人笔记本电脑,因此需要我使用 IP 地址。在将 RPI 设置为 DNS 服务器后尝试使用我的 Android 手机进行测试时也是如此。这是我第一次配置 dnsmasq,但我对 DNS 或网络并不是特别陌生。
我在这里遗漏了什么,没有让我的 Windows/Android 客户端通过将其设置为其 DNS 服务器来连接到我的 RPI 主机?
测试
从运行 dnsmasq 的 RPI 主机,我可以使用 nslookup 来查找我的笔记本电脑。
# by its host name
pi@pi:~ $ nslookup nwirp
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: nwirp
Address: 10.0.0.210
# by its FQDN
pi@pi:~ $ nslookup nwirp.tools.localhost
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: nwirp.tools.localhost
Address: 10.0.0.210
在我的个人笔记本电脑上运行 Linux 的 VM 中,我将 RPI 设置为其 DNS 服务器后就能找到我的笔记本电脑:
owner@owo:~$ nslookup nwirp
Server: 10.0.0.100
Address: 10.0.0.100#53
Name: nwirp
Address: 10.0.0.210
owner@owo:~$ nslookup nwirp.tools.localhost
Server: 10.0.0.100
Address: 10.0.0.100#53
Name: nwirp.tools.localhost
Address: 10.0.0.210
但是当我进入 Windows 时并尝试这样做,尽管已经设置了 DNS 服务器,但它似乎从未默认或推迟到它,而是选择了康卡斯特服务器。
> nslookup nwirp
Server: cdns01.comcast.net
Address: 2001:558:feed::1
*** cdns01.comcast.net can't find nwirp: Non-existent domain
> nslookup nwirp.tools.localhost
Server: cdns01.comcast.net
Address: 2001:558:feed::1
*** cdns01.comcast.net can't find nwirp.tools.localhost: Non-existent domain
我知道我可以通过在命令末尾添加 IP 地址来强制 nslookup 使用我的服务器,如下所示
> nslookup nwirp.tools.localhost 10.0.0.100
Server: tools.localhost
Address: 10.0.0.100
Name: nwirp.tools.localhost
Address: 10.0.0.210
但问题是这只是在 nslookup 的范围内,我需要浏览器使用 DNS 服务器。
尝试让 Windows 使用 Dnsmasq
我试过了:
- 通过我的 wifi 连接设置,通过静态 IP 设置来设置 DNS 服务器
- 通过控制面板 > 网络和共享中心 > 连接 > Wi-Fi 属性在 IPv4 配置中进行设置
- (编辑)从上一点开始,禁用 IPv6 配置以强制使用我的 IPv4 DNS 服务器。这使得 nslookup 可以在 Windows 上按预期工作,而无需指定我的 IP,但不会延续到浏览器,无论我使用哪种浏览器(FF、基于 Chrome/Chromium 的浏览器),浏览器都会告诉我连接被拒绝。有趣的是,禁用 IPv6 后,我可以使用 curl/Invoke-WebRequest 成功发送 GET 请求。
- 通过 PowerShell 设置
set-dnsclientserveraddress -interfacealias "wi-fi" -serveraddress ("10.0.0.100")
- (编辑)在浏览器中将我的 RPI 指定为 DNS over HTTPS 提供程序。
- (编辑)在浏览器中禁用 HTTPS 上的 DNS。
我部分地相信这是因为 Windows 需要做更多的工作来配置,而 Linux 在更新 /etc/resolv.conf 后似乎可以立即工作 - 但在指定 DNS 服务器后也有关于我的手机找不到它的说明,所以我不能排除 dnsmasq 配置不正确。
Dnsmasq 配置
/etc/hosts
pi@pi:~ $ cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 raspberrypi
10.0.0.210 nwirp
10.0.0.100 tools.localhost
/etc/resolv.conf
# This file is immutable
pi@pi:~ $ cat /etc/resolv.conf
# Generated by resolvconf
nameserver 127.0.0.1
/etc/dnsmasq.conf
pi@pi:~ $ cat /etc/dnsmasq.conf
expand-hosts
server=1.1.1.1
resolv-file=/etc/resolv.conf
log-queries
log-facility=/var/log/dnsmasq.log
domain=tools.localhost
local=/local./
Dnsmasq 日志
相关日志文件行
# RPI nslookup
pi@pi:~ $ sudo egrep "(nwirp|tools)" /var/log/dnsmasq.log
Jul 14 18:15:11 dnsmasq[7007]: query[A] nwirp from 127.0.0.1
Jul 14 18:15:11 dnsmasq[7007]: /etc/hosts nwirp is 10.0.0.210
Jul 14 18:15:11 dnsmasq[7007]: query[AAAA] nwirp from 127.0.0.1
Jul 14 18:15:11 dnsmasq[7007]: forwarded nwirp to 1.1.1.1
Jul 14 18:15:11 dnsmasq[7007]: reply nwirp is NODATA-IPv6
# RPI nslookup
Jul 14 18:16:57 dnsmasq[7007]: query[A] nwirp.tools.localhost from 127.0.0.1
Jul 14 18:16:57 dnsmasq[7007]: /etc/hosts nwirp.tools.localhost is 10.0.0.210
Jul 14 18:16:57 dnsmasq[7007]: query[AAAA] nwirp.tools.localhost from 127.0.0.1
Jul 14 18:16:57 dnsmasq[7007]: forwarded nwirp.tools.localhost to 1.1.1.1
Jul 14 18:16:57 dnsmasq[7007]: reply nwirp.tools.localhost is NODATA-IPv6
# Windows nslookup
Jul 14 18:17:57 dnsmasq[7007]: query[A] nwirp.hsd1.wa.comcast.net from 10.0.0.210
Jul 14 18:17:57 dnsmasq[7007]: forwarded nwirp.hsd1.wa.comcast.net to 1.1.1.1
Jul 14 18:17:57 dnsmasq[7007]: reply nwirp.hsd1.wa.comcast.net is NXDOMAIN
# Windows nslookup
Jul 14 18:17:57 dnsmasq[7007]: query[A] nwirp.hsd1.wa.comcast.net from 10.0.0.210
Jul 14 18:17:57 dnsmasq[7007]: cached nwirp.hsd1.wa.comcast.net is NXDOMAIN
Jul 14 18:19:48 dnsmasq[7007]: query[A] nwirp.hsd1.wa.comcast.net from 10.0.0.210
Jul 14 18:19:48 dnsmasq[7007]: cached nwirp.hsd1.wa.comcast.net is NXDOMAIN
# VM nslookup
Jul 14 18:19:48 dnsmasq[7007]: query[A] nwirp from 10.0.0.210
Jul 14 18:19:48 dnsmasq[7007]: /etc/hosts nwirp is 10.0.0.210
Jul 14 18:19:48 dnsmasq[7007]: query[AAAA] nwirp from 10.0.0.210
Jul 14 18:19:48 dnsmasq[7007]: cached nwirp is NODATA-IPv6
# VM nslookup
Jul 14 18:19:54 dnsmasq[7007]: query[A] nwirp.tools.localhost from 10.0.0.210
Jul 14 18:19:54 dnsmasq[7007]: /etc/hosts nwirp.tools.localhost is 10.0.0.210
Jul 14 18:19:54 dnsmasq[7007]: query[AAAA] nwirp.tools.localhost from 10.0.0.210
Jul 14 18:19:54 dnsmasq[7007]: cached nwirp.tools.localhost is NODATA-IPv6
更新:在 Linux 上测试类似的浏览器
我刚刚在我的 Linux VM + Firefox 上安装了一个 GUI,并确认 Linux 上的浏览器使用 dnsmasq 没有问题,但 Windows 上的浏览器却很难使用。至少有了这个,我很确定 (?) dnsmasq 设置正确,但我不知道该如何处理 Windows。
答案1
你在domain=tools.localhost
domain=tools.localhost.