使用场景
做手机端开发的同学,经常会碰到一个问题——开发过程中使用的测试域名没有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的,所以这一步需要一个额外的软件来完成。
在GooglePlay上找了一堆修改DNS的软件,通过对比最后选定了DnsChanger
这款,没有广告,可以保存配置,使用起来也还算舒服。play.google.com/store/apps/…。
软件启动时会请求一个网络权限,需要创建一个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的,所以这一步需要一个额外的软件来完成。
在GooglePlay上找了一堆修改DNS的软件,通过对比最后选定了DnsChanger
这款,没有广告,可以保存配置,使用起来也还算舒服。play.google.com/store/apps/…。
软件启动时会请求一个网络权限,需要创建一个VPN连接,允许即可。然后在DNS 1
中填写上面创建的DNS服务器的IP,DNS 2
中随便写一个可用的DNS服务器IP,点击START
按钮,就可以完成测试域名的绑定了。不需要使用的时候,退出软件或者点击STOP
就可以,操作非常简便。
优缺点
优点
手机端配置非常简便,只需要使用一个软件控制开关。并且,在使用的时候不会影响其他地址的解析,网络访问不会受到任何影响。PC端配置也较为简便,不需要每次使用都启动和配置程序。
相对于Charles,手机的流量并没有被代理,数据是安全可靠的。
缺点
需要搭建DNS服务器,且XDNS
服务要一直在后台运行。不过相对于比较Charles,这应该算不上是什么缺点吧……
总结
好用!🎉🎉🎉