配置 Android 7.1 设备以使用本地 DNS 服务器

Mic*_*ael 5 router dns wireless-networking android ip

我试图让 Android 设备使用 LAN 上的 DNS 服务器将服务器主机名解析为本地地址,但它不起作用。

我以某种方式欺骗(*)路由器在分发 DHCP 地址时传递 DNS 服务器的本地 IP 地址 (192.168.1.99)。在运行 Windows 10 的设备上,我看到了这种情况,因为当我查看网络属性时,我看到它正在使用我想要的主要和辅助 DNS IP 地址,并且它可以正确地将本地服务器从世界可见的主机名解析为本地地址。

(*)基本上,路由器不会让我设置 DNS 服务器,单选框不会选择。检查 javascript 允许我设置一个断点,这样我就可以绕过逻辑,该逻辑显然只允许在你有一个我没有的静态 IP 地址时设置 DNS 服务器(并且设置静态 IP 的单选框可以'无论如何都不会被选中!)。当我提交表单时,似乎没有进行更改,但有些设备现在获得了正确的 DNS 服务器!更新:我发现了一个不同的路由器,在分配 DHCP 地址时不需要任何技巧就可以让它通过 DNS 服务器,但 Android仍然不使用它返回的 DNS 服务器!

但在 Android 上它不起作用,它将主机名解析为世界可见的 IP 地址,这表明它没有使用 DHCP 分发的 DNS 服务器。(令人费解的是,通过外部 IP 地址访问服务器停止工作,这就是需要将主机名解析为内部地址的全部原因!)

我正在使用Termux尝试解决问题,发现getprop net.dns1getprop net.dns2返回了 IPv6 地址,进一步挖掘显示路由器中的这些地址是 ISP 提供的 DNS 地址。所以我想也许由于某种原因我在路由器上使用的技巧在 Android 上不起作用。

所以我尝试手动为设备配置DNS服务器。使用Settings -> WiFi -> (long press network name) -> Modify network -> IP settings: Static我输入的网络配置与设备通过 DHCP 获取的网络配置相同,例如

IP address: 192.168.1.2
Gateway: 192.16.8.1.1
Network prefix length: 24
DNS 1: 192.168.1.99
DNS 2: 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

但通过这种手动配置,我根本无法访问 LAN 上的任何内容!例如,我无法访问本地路由器网页192.168.1.1,浏览器说无法访问。我无法在 Termux 中 ping 通相同的 IP 地址,它显示“网络无法访问”。如果我在 termux 中运行ifconfig wlan0route输出看起来与我将 IP 设置设置为通过 DHCP 配置时的输出相同。但是,getprop net.dns1仍然返回 IPv6 地址,所以现在我不确定我是否相信该命令会返回有效数据。更新:好的,实际上有四个 DNS 地址:前两个是来自我的 ISP 的 IPv6 地址,它们以某种方式泄漏,最后两个是我设置的两个 IPv4 地址。

这似乎特定于较新的 Android 版本,较旧的 Android 4.3 设备没有问题(它甚至不需要静态 IP 配置来正确解析主机名)。

我还可以尝试哪些其他方法来解决此问题并使 DNS 正常工作?

更新:我发现这篇文章提到了一个案例:

  • 有两台 DNS 服务器,一台本地 IPv4 服务器 (192.168.1.230) 和一台 ISP IPv6 服务器 (2a01:e00::1)
  • IPv4 DNS 服务器知道本地域,而 IPv6 服务器则不知道。
  • Android恰好使用IPv6 DNS服务器,因此无法解析本地网络中的主机。

这与我所看到的配置相符。但后来海报声称“这是按设计工作的”,我对此有疑问。然后它列出了四种可能的解决方法:

  • 将 IPv6 地址添加到本地 DNS 服务器,并配置路由器以将该地址公布为 IPv6 DNS 服务器(如果可能)。 这不起作用,因为路由器不允许我为 DNS 指定 IPv6 地址。
  • 如果可能的话,在路由器上配置本地名称。 我不确定这意味着什么。路由器本身不提供任何DNS功能
  • 使用公共域,以便 ISP 路由器能够解析内部名称。我也不知道这意味着什么 - 公共域如何能够引用内部 IP 地址???
  • 在路由器上禁用 IPv6 DNS(或禁用 IPv6)。 路由器不提供任何禁用或以其他方式配置 IPv6 相关内容的方法

所以我仍然坚持使用一个有效的 DOA 系统,因为网络上的某些设备无法看到它们运行所需的资源。

更新:我设置了一个单独的 DHCP 服务器并禁用了路由器上的服务器,但 Android 设备仍然在其列表中获取两个 IPv6 DNS 服务器 - DHCP 服务器报告 DNS 后似乎有一两秒的延迟服务器出现在 IPv6 地址之前,并且它们始终插入到服务器报告的地址之前。我尝试增加报告的 DNS 服务器数量,试图填满 Android 可能拥有的任何表,但即使有 32 个其他 DNS 服务器,它仍然在开头插入两个以上,总共 34 个!Android 如何获取这些地址,以及如何强制它关闭它?这真让我抓狂!

更新:我发现一个名为“DNS Changer”的应用程序似乎可以解决该问题,尽管我对它是否不仅仅是一个解决方法有一些疑问,直到找到真正的解决方案。它似乎创建了某种 VPN,但我想更多地了解它是如何工作的。它将流量路由到我的防火墙之外吗?去哪里?我想知道它是否将所有内容路由出去,因为与使用 IP 地址而不是主机名运行相同的测试相比,对我自己的服务器进行的速度测试产生的平均传输速率约为 20%。我使用了另一个应用程序,该应用程序报告大约 7 个不同的外部主机名,并声称整个传输通过每个主机名。此外,如果网络出现故障,此解决方法就会失败!

更新:我还在运行 Android 5.1 的 root 设备中看到了这个问题...我设置了一个静态 IP 地址和指向内部服务器的 DNS,甚至将每个setpropDNS 服务器设置为以下 IP 地址:我的内部 DNS 服务器...但是在 termux 中,当我使用 nslookup 时,它仍然坚持使用 8.8.8.8 来查找名称。如何让 Android 实际使用我指定的 DNS 服务器?

小智 0

\n

从 Android 6.1.x 开始,您只能更改系留设备的 DNS,而不能更改其他任何内容。无论您设置什么或使用哪个应用程序,其他所有内容都会被忽略

\n
\n\n

来自DNS 问题

\n\n

\xef\xbc\x88,其中 Android 6.1.x,我认为是 Android 6.0.x\xef\xbc\x89

\n