公司工作中遇到的一个问题。Mac端可以修改hosts文件实现访问域名的切换,而对于未越狱的iPhone来说,这是无法实现的。安卓可以通过Root的方式开启修改hosts文件的权限。
起初,我想到的是,利用Mac mini共享WiFi, Mac mini修改了hosts。然后,用iPhone连接Mac mini共享的wifi。iPhone上装了ping工具,当我ping指定域名的时候,发现hosts并没有生效。后来咨询同事,他说是因为DNS的问题。
解决问题的思路是,将Mac mini作为DNS解析服务器,iPhone连接Mac mini共享的Wifi时,设置DNS为我的Mac mini的IP地址。方法如下:
- 将Mac mini作为DNS解析服务器
- 安装Brew。
- 安装dnsmasq
- 安装完成后,在/usr/local/文件下新建一个etc文件夹。
- 把/usr/local/opt/dnsmasq/dnsmasq.conf.example文件拷贝至并重命名为/usr/local/etc/dnsmasq.conf。
- 编辑dnsmasq.conf,内容如下:
resolv-file=/etc/resolv.conf
strict-order
addn-hosts=/etc/hosts
cache-size=32768
listen-address=127.0.0.1,192.168.xx.154
其中,listen-address后面的可以是多个IP用英文逗号隔开。这里以我自己的IP地址为例,192.168.xx.154是我的Mac mini的内网IP,这样就可以实现同一个局域网内的设备,通过设置DNS为这个IP,来实现都通过我的Mac mini上的dnsmasq来查询dns,即局域网范围内的DNS泛解析。
- 重启dnsmasq应用
sudo launchctl stop homebrew.mxcl.dnsmasq
sudo launchctl start homebrew.mxcl.dnsmasq
sudo killall -HUP mDNSResponder
- 可通过以下代码设置开机自动运行dnsmasq:
sudo cp -fv /usr/local/opt/dnsmasq/*.plist /Library/LaunchDaemons
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
2. 最后,使用iPhone连接Mac mini共享的wifi,同时设置dns为我的Mac mini的内网IP地址,即192.168.xx.154。这样再ping以下,你就能看到效果啦。
参考:http://blog.netsh.org/posts/mac-os-x-dnsmasq_1762.netsh.html