安卓手机无 root 无 hosts 绑定测试域名

3,616 阅读7分钟
原文链接: coderge.com

使用场景

做手机端开发的同学,经常会碰到一个问题——开发过程中使用的测试域名没有DNS,无法直接访问。针对这个问题,目前有两个比较主流的解决方案:

修改手机hosts

最容易想到的就是修改hosts文件了。众所周知,当我们访问一个域名时,系统会首先查找hosts,没找到才会请求DNS,所以修改hosts应该是最简洁方便的办法。

然而,修改hosts需要root权限,GG……

设置代理服务器

既然手机本身无法设置hosts,那么只需要在代理服务器上设置即可。常用的代理服务器比如Charles,网上教程一搜一大堆,不再赘述。

这个方式的缺点是每次需要进行调试,首先要在电脑上启动Charles程序,然后在手机上更改网络设置,使所有流量都代理到Charles上。不需要使用的时候再将手机的网络设置恢复,每次使用及使用完毕需要做的操作太多太繁琐。

实现方式

修改本机hosts不行,设置代理服务器不行,那么就把两者结合起来。问题涉及的是域名解析,那么我们需要一个DNS服务器,把需要绑定的域名指向对应的IP,其他的域名走正常的DNS即可。

搭建DNS服务器

不要以为搭建DNS服务器是个多么复杂多么困难的事情,有了Node.js一切都不是梦!~

我们需要使用的模块叫做XDNS,github地址:github.com/allenm/xdns,npm地址:www.npmjs.com/package/xdn…。官方文档写的很清楚了,我直接粘过来一小段。

XDNS

A DNS server for web / app developers . Easy to config.

安装

npm install xdns -g

使用

在当前用户根目录创建文件 ~/.xdns 作为 xdns 配置文件。 此配置文件完全兼容 hosts 文件的写法,另外还支持通配符以及网卡接口名自动替换,例如:

127.0.0.1 www.baidu.com 127.0.0.1 a.xxcdn.cn b.xxcdn.cn 127.0.0.1 *.yycdn.cn $en0$ www.qq.com

以上的写法都是支持的,www.baidu.com a.xxcdn.cn b.xxcdn.cn 以及根域名为 yycdn.cn 的域名都会被解析到 127.0.0.1

$en0$ 会被替换成当前机器上名为 en0 的网卡接口上的 IPv4 地址。

写好配置文件后,使用 sudo xdns 启动 xdns(因为 DNS Server 运行在 53 端口,所以需要 root 权限)。

当我们请求这个DNS服务的时候,如果域名在~/.xdns配置文件中,就以配置文件中的IP地址进行返回,否则会继续向上级DNS进行请求,刚好符合我们的需求。

设置手机DNS

其实在手机网络设置中是可以改变DNS服务器地址的,但是这需要把手机的IP地址和网关IP都设置为固定值,而有些网络是不允许客户端(尤其是无线客户端)使用静态IP的,所以这一步需要一个额外的软件来完成。

network_config

在GooglePlay上找了一堆修改DNS的软件,通过对比最后选定了DnsChanger这款,没有广告,可以保存配置,使用起来也还算舒服。play.google.com/store/apps/…

https://ooo.0o0.ooo/2017/05/05/590beb10ebb27.jpg

软件启动时会请求一个网络权限,需要创建一个VPN连接,允许即可。然后在DNS 1中填写上面创建的DNS服务器的IP,DNS 2中随便写一个可用的DNS服务器IP,点击START按钮,就可以完成测试域名的绑定了。不需要使用的时候,退出软件或者点击STOP就可以,操作非常简便。

优缺点

优点

手机端配置非常简便,只需要使用一个软件控制开关。并且,在使用的时候不会影响其他地址的解析,网络访问不会受到任何影响。PC端配置也较为简便,不需要每次使用都启动和配置程序。

缺点

需要搭建DNS服务器,且XDNS服务要一直在后台运行。不过相对于比较Charles,这应该算不上是什么缺点吧……

总结

好用!🎉🎉🎉

安卓手机无root无hosts绑定测试域名

使用场景

做手机端开发的同学,经常会碰到一个问题——开发过程中使用的测试域名没有DNS,无法直接访问。针对这个问题,目前有两个比较主流的解决方案:

修改手机hosts

最容易想到的就是修改hosts文件了。众所周知,当我们访问一个域名时,系统会首先查找hosts,没找到才会请求DNS,所以修改hosts应该是最简洁方便的办法。

然而,修改hosts需要root权限,GG……

设置代理服务器

既然手机本身无法设置hosts,那么只需要在代理服务器上设置即可。常用的代理服务器比如Charles,网上教程一搜一大堆,不再赘述。

这个方式的缺点是每次需要进行调试,首先要在电脑上启动Charles程序,然后在手机上更改网络设置,使所有流量都代理到Charles上。不需要使用的时候再将手机的网络设置恢复,每次使用及使用完毕需要做的操作太多太繁琐。

实现方式

修改本机hosts不行,设置代理服务器不行,那么就把两者结合起来。问题涉及的是域名解析,那么我们需要一个DNS服务器,把需要绑定的域名指向对应的IP,其他的域名走正常的DNS即可。

搭建DNS服务器

不要以为搭建DNS服务器是个多么复杂多么困难的事情,有了Node.js一切都不是梦!~

我们需要使用的模块叫做XDNS,github地址:github.com/allenm/xdns,npm地址:www.npmjs.com/package/xdn…。官方文档写的很清楚了,我直接粘过来一小段。

XDNS

A DNS server for web / app developers . Easy to config.

安装

npm install xdns -g

使用

在当前用户根目录创建文件 ~/.xdns 作为 xdns 配置文件。 此配置文件完全兼容 hosts 文件的写法,另外还支持通配符以及网卡接口名自动替换,例如:

127.0.0.1 www.baidu.com 127.0.0.1 a.xxcdn.cn b.xxcdn.cn 127.0.0.1 *.yycdn.cn $en0$ www.qq.com

以上的写法都是支持的,www.baidu.com a.xxcdn.cn b.xxcdn.cn 以及根域名为 yycdn.cn 的域名都会被解析到 127.0.0.1

$en0$ 会被替换成当前机器上名为 en0 的网卡接口上的 IPv4 地址。

写好配置文件后,使用 sudo xdns 启动 xdns(因为 DNS Server 运行在 53 端口,所以需要 root 权限)。

当我们请求这个DNS服务的时候,如果域名在~/.xdns配置文件中,就以配置文件中的IP地址进行返回,否则会继续向上级DNS进行请求,刚好符合我们的需求。

设置手机DNS

其实在手机网络设置中是可以改变DNS服务器地址的,但是这需要把手机的IP地址和网关IP都设置为固定值,而有些网络是不允许客户端(尤其是无线客户端)使用静态IP的,所以这一步需要一个额外的软件来完成。

network_config

在GooglePlay上找了一堆修改DNS的软件,通过对比最后选定了DnsChanger这款,没有广告,可以保存配置,使用起来也还算舒服。play.google.com/store/apps/…

https://ooo.0o0.ooo/2017/05/05/590beb10ebb27.jpg

软件启动时会请求一个网络权限,需要创建一个VPN连接,允许即可。然后在DNS 1中填写上面创建的DNS服务器的IP,DNS 2中随便写一个可用的DNS服务器IP,点击START按钮,就可以完成测试域名的绑定了。不需要使用的时候,退出软件或者点击STOP就可以,操作非常简便。

优缺点

优点

手机端配置非常简便,只需要使用一个软件控制开关。并且,在使用的时候不会影响其他地址的解析,网络访问不会受到任何影响。PC端配置也较为简便,不需要每次使用都启动和配置程序。

相对于Charles,手机的流量并没有被代理,数据是安全可靠的。

缺点

需要搭建DNS服务器,且XDNS服务要一直在后台运行。不过相对于比较Charles,这应该算不上是什么缺点吧……

总结

好用!🎉🎉🎉