0x00 需求

周末基佬打开了吃灰N久的xbox,发现有几十个G的更新,而更新速度只有两三兆,应该是默认走了科学线路,因为路由器的性能限制,最多也就这个速度了

这么更新不行啊,一方面慢;另一方面,流量也撑不住。所以直接加白名单,绕过科学线路,走直连试了下,结果不出所料,根本下不动了

但是按照以往的经验,在中国移动网络下,是可以达到很高的速度的,但是现在换成电信就不行了。到网上查了一圈,试了一堆方法,最后觉得还是域名的问题

xbox连下载服务器默认用的.com域名,理想情况,会走cdn,连到附近的服务器,然而从tcpdump的数据看,都是连到国外服务器去了,换了几个dns都不行

0x01 解决办法

这种问题我肯定不是第一个遇到的,很多人都有同样的麻烦,也提供了各种各样的解决办法,最终看到一个比较靠谱的方案:把.com换成.cn

xbox下载相关的域名如下:

assets1.xboxlive.com

assets2.xboxlive.com

dlassets.xboxlive.com

只需要把这几个域名的.com改成.cn就行了,这里我们用nginx 302代理的方式来做,不用伪造dns的原因是路由器上的dnsmasq好像不支持直接返回一个cname

这个方案的原理是:

  1. xbox请求域名解析(例如assets1.xboxlive.com)
  2. 路由器拦截请求,把域名解析到一台我们自己的nginx服务器上
  3. xbox向nginx发送http请求下载数据
  4. nginx返回302报错,并把assets1.xboxlive.cn返回给xbox
  5. xbox走常规流程,解析assets1.xboxlive.cn,下载数据

0x02 nginx配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  if ($host = 'assets1.xboxlive.com' ) {
     rewrite ^/(.*)$ http://assets1.xboxlive.cn/$1 redirect;
  }

  if ($host = 'assets2.xboxlive.com' ) {
     rewrite ^/(.*)$ http://assets2.xboxlive.cn/$1 redirect;
  }

  if ($host = 'dlassets.xboxlive.com' ) {
     rewrite ^/(.*)$ http://dlassets.xboxlive.cn/$1 redirect;
  }