最近在家里上网突然发现Apple Store不能更新了。重启路由器发现最开始一会是能下载更新的,但是过了一会就完全不能下载更新了。很是奇怪,今天特意分析了一下这个问题。
首先,抓包确定Apple Store的下载域名为:iosapps.itunes.apple.com;
第二步,ping一下下载域名看是否能够ping通,发现连域名都不能解析,确定应该是DNS的问题;
root@Hiwifi:~# ping -c 5 iosapps.itunes.apple.com
ping: bad address 'iosapps.itunes.apple.com'
最后,修复DNS的问题,因为已经安装了*加速功能所以直接在ss加速中的高级设置中将下载域名设置上去,再次ping下载域名已经能ping通了:
root@Hiwifi:~# ping -c 5 iosapps.itunes.apple.com
PING iosapps.itunes.apple.com (17.253.83.206): 56 data bytes
64 bytes from 17.253.83.206: seq=0 ttl=48 time=283.340 ms
64 bytes from 17.253.83.206: seq=1 ttl=48 time=281.420 ms
64 bytes from 17.253.83.206: seq=2 ttl=48 time=282.820 ms
64 bytes from 17.253.83.206: seq=3 ttl=48 time=278.840 ms
64 bytes from 17.253.83.206: seq=4 ttl=48 time=282.360 ms
再次尝试下载更新,Done!
PS:默认是自动获取的DNS,211.148.192.141
后续确认使用SS(*)插件的DNS加速是走的SS的流量,虽然问题解决了但是这个方法不通用,而且流量是走的SS的,对于SS速度慢或者SS流量收费的用户成本很高。
观察发现在每次极路由重启后的几分钟内是能正常ping通下载域名的,而且通过ps|grep dns命令看到只有两个dnsmasq的进程,如下:
root@Hiwifi:/tmp/dnsmasq.d# ps | grep dns
5275 root 1636 S /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf -u root
5277 root 1632 S /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf -u root
5364 root 5116 S /usr/sbin/dns2socks 127.0.0.1 61080 8.8.4.4 127.0.0.1 53535 -d -q
5871 root 1672 S grep dns
过了几分钟后再查看进程发现多了一个pdnsd的进程,如下,这个进程启动后再ping下载域名就失败了:
20886 root 7320 S /usr/sbin/pdnsd -c /etc/app_conf/ccapp/conf/pdnsd_ccapp.conf --daemon
观察pdnsd服务启动前后的变化发现/tmp/dnsmasq.d文件夹多了一个“ccapp_dnsmasq.conf ”的文件
root@Hiwifi:/tmp/dnsmasq.d# ls
ccapp_dnsmasq.conf gw-*.dnslist
ccapp_domain_speedup.conf gw-*.usr.dnslist
vi查看之,里面确实有一项是下载域名:
server=/iosapps.itunes.apple.com/127.0.0.1#1055
确认问题应该是出在这里,应该是这里把解析下载域名的DNS指向了一个特定的DNS,正好那个DNS又不能解析了。确认后通过修改这个文件,删掉下载域名这一行,重启之。
但是重启后发现这个文件又更新了,恢复原样了!因此应该是其他地方还存在该文件的副本,要修改这个真正的副本才能修复这个问题。通过find / -name ccapp命令找到相关的文件:
root@Hiwifi:/tmp/dnsmasq.d# find / -name ccapp
/etc/app_conf/ccapp
/overlay/etc/app_conf/ccapp
/tmp/ccapp
/var/log/ccapp
发现有好几个文件夹,应该是其中一个,且一般是带conf字样的,所以切换到“/etc/app_conf/ccapp”目录,发现有个conf文件夹,进去查看,有一个“pdnsd_ccapp.conf”文件,vi查看之,发现和上面的“ccapp_dnsmasq.conf”文件格式并不一样,但是也是一行一行配置的,并且可以看到下载域名存在于这个文件中的一行,先试着备份该文件并删除下载域名对应的行。重启等待pdnsd进程自动启动后再次尝试着ping下载域名,就发现能Ping通了,就此大功告成!
PS:可以通过crontab -e查看定时任务,发现每隔一段时间15分钟会去检查一下ccapp的状态,查看对应的sh命令,确实是在这个时候启动的pdnsd进程的!
最后更新时间:2016-05-19
使用如上修改后可以暂时解决问题,但是隔两天后却又开始出现异常,最后从极路由的插件开始排查,发现是“汛网12306加速”这个插件在作祟,卸载后就恢复正常了。这个插件说是只对12306加速,其实加速的域名不止12306这一个,还包括苹果的大部分域名和一些其他的域名,就是这个插件对这些域名使用了不同的DNS导致不能下载的问题!总之,大家请谨慎安装此插件吧!