Mac 软件更新不了 – 解决方案

今天打开 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. 从苹果官方论坛那个帖子看,受影响的用户在中国的居多,但是其它国家的似乎也有。

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.