如何始终将域名解析为固定IP地址而不需root设备?

8次阅读
没有评论

问题描述

希望通过某种方式始终将特定网站的域名解析为其固定的IP地址(例如:104.25.31.35),而不需要编辑系统文件/etc/hosts。讨论了几种可能的方法,但普遍认为这种方法存在一定的限制。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1:直接输入IP地址

直接在浏览器地址栏输入IP地址(例如:http://104.25.31.35https://104.25.31.35)访问网站。这种方法适用于简单的情况,但如果Web服务器依赖于host头或SNI(服务器名称指示)进行虚拟主机配置,则这种方法不可行。

方案2:使用Android的VpnService API

可以利用Android的VpnService API捕获所有DNS流量,而无需root设备。这种方法可以通过安装某些应用程序(如Cloudflare OneDotOneDotOneDotOneNetGuard)实现。这些应用可以在向上游DNS服务器查询之前,使用自定义的hosts文件。Virtual Hosts是一个开源的应用程序,可以实现这一点。

方案3:设置自定义DNS服务器

可以设置一个自定义的DNS服务器(本地或云端),并通过相应设置让设备使用该DNS服务器。例如,如果使用dnsmasq,可以在dnsmasq.conf中添加address=/wex1.in/104.25.31.35;或者在dnscrypt-proxy中添加wex1.in 104.25.31.35cloaking-rules.txt。大多数DNS服务器都可以配置为返回预定义的IP地址。

方案4:使用代理或VPN

可以配置设备使用代理或VPN服务,并在代理服务器或VPN服务器上添加104.25.31.35 wex1.inhosts文件中。这样即使不root设备,也可以达到目的。

方案5:解锁Bootloader并编辑/system分区

如果设备已经解锁Bootloader并且有定制恢复系统可用,可以在恢复模式下挂载/system分区并编辑hosts文件。确保设置正确的权限(所有权、模式和SELinux标签)。如果不想修改/system分区(例如,避免破坏dm-verity或OTA更新),可以从/data分区绑定挂载一个自定义的hosts文件,但这需要额外的努力,如定义一个init服务、修改SELinux策略等。

方案6:使用Private DNS功能

确保不使用Private DNS(Android 9+),以确保DNS查询总是通过未加密的端口53进行。

以上方法中,最简便的方式是使用VpnService API或自定义DNS服务器。这些方法可以在不root设备的情况下实现域名到固定IP的解析。

正文完