今天打开 iTunes,提示我有更新,是否下载,点了下载之后,Mac 的软件更新程序开始运行。但是过了一会它告诉我,你的软件已经是最新的,刚才明明 iTunes 自己说有更新的!于是我突然想起前几天在 twitter 上好像有人说 Mac 软件更新不了。我第一反应就是软件更新需要连接的 apple 服务器被封掉了 (事实证明不是),决定花点时间弄清楚这个问题。
懒得往下看的直接使用解决办法:
- 在 /etc/hosts 文件添加一行: 80.67.74.160 swcdn.apple.com
有兴趣的请继续……
首先 Google 这个问题,确实已经有不少用户开始在各个论坛上抱怨了,包括苹果的官方论坛,但是似乎没有让人满意的答复,大多数人都说把几个 com.apple.SoftwareUpdate.plist 文件删掉然后重启 Mac 试试 – 你不用试了,没用的。
从苹果官方网站的文章看到,Mac 软件更新需要连接的服务器有:
- http://swscan.apple.com
- http://swquery.apple.com
- http://swdownload.apple.com
- http://swcdn.apple.com
Google swscan.apple.com, 第一条结果即是重要线索,该页面可以正常打开,说明此域名没有问题。页面上有好多 URL,域名都是 swcdn.apple.com,随便复制一个打开,都会首先显示 page not found, 然后跳到该域名的首页。这是一个 domain parking page,顶部还显示“您的域名已经到期,请联系您的服务商续费”。
dig 的结果很有趣:
$ dig swcdn.apple.com
; <<>> DiG 9.6.0-APPLE-P2 <<>> swcdn.apple.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18722
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;swcdn.apple.com. IN A
;; ANSWER SECTION:
swcdn.apple.com. 1178 IN CNAME swcdn.apple.com.akadns.net.
swcdn.apple.com.akadns.net. 279 IN CNAME swcdn.apple.com.edgesuite.net.
swcdn.apple.com.edgesuite.net. 19178 IN CNAME swcdn.apple.com.edgesuite.net.globalredir.akadns.net.
swcdn.apple.com.edgesuite.net.**globalredir**.akadns.net. 279 IN CNAME a1562.ce.w.ytcdn.net.
a1562.ce.w.ytcdn.net. 1179 IN A 74.63.75.122
;; AUTHORITY SECTION:
ytcdn.net. 59910 IN NS **dns6.expirenotification.com**.
ytcdn.net. 59910 IN NS **dns5.expirenotification.com**.
;; ADDITIONAL SECTION:
dns5.expirenotification.com. 2803 IN A 67.159.44.159
dns6.expirenotification.com. 377 IN A 67.159.44.159
;; Query time: 6 msec
;; SERVER: 124.207.160.106#53(124.207.160.106)
;; WHEN: Sat May 15 23:33:33 2010
;; MSG SIZE rcvd: 305
看来应该不是常见的 DNS 投毒。我没搞清楚 ytcdn.net 到底是谁的,可能是属于 akamai 的,也有可能是 Akamai 在中国的合作伙伴。在域名解析之后,我们的请求被分配给 ytcdn.net 的服务器了。注意 dig 结果加粗的部分,然后查 ytcdn.net 的 whois 信息,哇,XIN NET 出现了:
Domain Name: ytcdn.net
Registrar: XIN NET TECHNOLOGY CORPORATION
Whois Server: whois.paycenter.com.cn
Referral URL: http://www.xinnet.com
Status: clientUpdateProhibited
Expiration Date: 2011-04-30
Creation Date: 2008-04-30
Last Update Date: **2010-05-01**
Name Servers:
dns5.expirenotification.com
dns6.expirenotification.com
See ytcdn.net DNS Records
Information Updated: Sat, 15 May 2010 15:40:22 UTC
注意加粗的 Last Update Date,回头看网上 Mac 用户发帖求助的日期,都是 5 月 2 日以后。大家请猜测去吧,ytcdn.net 到底属于谁, expirenotification.com 到底属于谁?我是懒得想了,反正 DNS 解析结果指向 ytcdn.net 就完蛋了,因为最终的 IP 并不是真正的 CDN 服务器。
登录到美国的一台机器(使用的 DNS 服务器跟我的 Mac 不一样),尝试访问在 swscan.apple.com 页面上找到的 swcdn.apple.com 域名的 URL,可以正常下载文件。再看解析 swcdn.apple.com 的结果:
$ dig swcdn.apple.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> swcdn.apple.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62285
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;swcdn.apple.com. IN A
;; ANSWER SECTION:
swcdn.apple.com. 3600 IN CNAME swcdn.apple.com.akadns.net.
swcdn.apple.com.akadns.net. 300 IN CNAME swcdn.apple.com.edgesuite.net.
swcdn.apple.com.edgesuite.net. 21600 IN CNAME swcdn.apple.com.edgesuite.net.globalredir.akadns.net.
swcdn.apple.com.edgesuite.net.globalredir.akadns.net. 300 IN CNAME a950.gi3.akamai.net.
a950.gi3.akamai.net. 20 IN A 80.67.74.176
a950.gi3.akamai.net. 20 IN A 80.67.74.160
;; Query time: 146 msec
;; SERVER: 74.207.241.5#53(74.207.241.5)
;; WHEN: Sat May 15 23:35:05 2010
;; MSG SIZE rcvd: 231
现在修改 Mac 上的 hosts 文件让 swcdn.apple.com 指向这个 80.67.74.176,重新开始检查软件更新,一切正常了。
Apple, 后果很严重,请尽快联系你们的 CDN 服务商解决此问题。其实我看到有一些用户其实已经亲自到 apple store 尝试让 apple 员工帮忙解决了,但是他们也不知道原因。
Update: 后来发现这里有网友说改 DNS 服务器也可以解决,应该是没问题,不过我自己没有测试。改 hosts 文件是短期内绝对保险的做法,除非 akamai 经常变动它的 IP. 从苹果官方论坛那个帖子看,受影响的用户在中国的居多,但是其它国家的似乎也有。