我有一个连接到 Wi-Fi 热点的 Windows 客户端:
Wireless LAN adapter Wireless Network Connection 2:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Atheros Wireless Network Adapter
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IPv4 Address. . . . . . . . . . . : 192.168.43.110(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.43.1
DHCP Server . . . . . . . . . . . : 192.168.43.1
DNS Servers . . . . . . . . . . . : 192.168.43.1
NetBIOS over Tcpip. . . . . . . . : Disabled
Wi-Fi 热点有自己的 DNS(如上所示),它会将任何 NXDOMAIN 解析为广告“搜索页面”——这是不受欢迎的行为。这个恶意 DNS 服务器最初需要绕过 Wi-Fi 的强制门户,所以我不能只设置静态 DNS 来覆盖它。
然后我使用 OpenVPN 连接到我的家庭网络。服务器配置:
server 10.1.1.0 255.255.255.0
proto udp
dev tun21
push "route 10.1.0.0 255.255.254.0" (my home IP subnet)
push "dhcp-option DOMAIN local"
push "dhcp-option DNS 10.1.0.8"
client-to-client
OpenVPN 服务器位于10.1.0.1
,我的家庭网关上。
DNS 服务器是 pihole on 10.1.0.8
。
客户端配置:
client
dev tun
proto udp
remote mydynip.net
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
dhcp-option DNS 10.1.0.8 (I tried adding this for redundancy, has no effect)
OpenVPN连接成功:
Ethernet adapter Local Area Connection 3:
Connection-specific DNS Suffix . : local
Description . . . . . . . . . . . : TAP-Windows Adapter V9
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IPv4 Address. . . . . . . . . . . : 10.1.1.6(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.252
Default Gateway . . . . . . . . . :
DHCP Server . . . . . . . . . . . : 10.1.1.5
DNS Servers . . . . . . . . . . . : 10.1.0.8
现在,如果 Windows 客户端查找一个域做存在,一切都按预期运行。例如:
>ping mypc.local
Pinging mypc.local [10.1.0.2] with 32 bytes of data:
Reply from 10.1.0.2: bytes=32 time=60ms TTL=127
...
...我在 pihole 查询日志中看到了这一点(一切正常):
Time Type Domain Client Status Reply
2019-07-16... A mypc.local gateway.local OK (forwarded) IP (2.5ms)
但是,如果我查找一个不存在的域名,即使有前缀.local
,该域名也会解析为广告页面(!):
>ping nonexist.local
Pinging nonexist.local [198.xx.xx.xx (!!!)] with 32 bytes of data:
...
查询做先穿过小孔:
Time Type Domain Client Status Reply
2019-07-16... A nonexist.local gateway.local OK (forwarded) NXDOMAIN (2.5ms)
...但似乎在收到 NXDOMAIN 后,Windows 客户端会尝试 Wi-Fi 热点的恶意 DNS 服务器!我该如何阻止这种行为?
我尝试过的方法:添加redirect-gateway def1
到客户端 OpenVPN 配置可以很好地将所有流量重定向到 VPN,但不对上面描述的 DNS 行为没有任何影响。它有效地使我的家庭网关(gateway.local)
连接到广告“搜索页面”,并通过 OpenVPN 隧道将其转发到 Windows 客户端。但此时,DNS 查询已经泄露到 Wi-Fi 热点的 DNS 服务器。
以下看起来是一个可能的解决方案:
如果我让 Windows 客户端查找一个域受阻在 pihole 上,Windows 不会将请求转发到 Wi-Fi 热点的 DNS:
>ping googletagservices.com
Ping request could not find host...
...在 pihole 查询日志中:
Time Type Domain Client Status Reply
2019-07-16... A goo....com gateway.local Blocked (gravity) - (0.5ms)
这是因为 pihole 解析了地址0.0.0.0
并且 Windows 客户端似乎对此感到满意。
问题是,我如何让 pihole 使用 而0.0.0.0
不是来回复所有不存在的域NXDOMAIN
?我在 dnsmasq 中找不到可以做到这一点的任何选项...
答案1
哎呀,再搜索几分钟我就能找到它了!
添加block-outside-dns
到 OpenVPN 客户端配置可修复此行为。