8.8.8.8 的问题

https://leeweir.github.io/posts/8.8.8.8-problem/

我们的海外站点使用了akamai的海外加速,最近有海外用户报障说访问海外站点缓慢,排查后发现直接访问了国内的源站, 且公共dns使用的是8.8.8.8,可以说非常奇怪。

相信大家都知道8.8.8.8是谷歌的公共dns地址,我们先来看下技术。

8.8.8.8完美支持edns-subnet-client(ecs,其实是谷歌自己提出来的协议),怎么理解呢,国内用户设置了8.8.8.8后不必担心访问会被调度到美国,因为8.8.8.8会将用户的ip以ip段的形式携带在自己向权威dns服务器的请求中,大部分cdn厂商的权威dns都支持解析ecs信息,并针对ecs中的用户ip返回用户地区的cdn节点,可以说ecs对cdn特别友好。

ecs很好,那么海外用户的解析为什么会到国内呢?

我们再看下8.8.8.8的另外一个技术:anycast,谷歌是有自己的AS号,实现了全球8.8.8.8的全球广播,用户的AS和谷歌的AS的网络距离只有一跳,这是其他dns都无法比拟的。从ipip的ping测试来看,在国外时延为16ms左右,在中国大陆时延为50ms,但是有些地区略有丢包现象(恩啊,你懂的)。

anycast实质是一种网络技术,它借助于网络中动态路由协议实现服务的负载均衡和冗余,从实现类型上分,可以分为Subnet Anycast和Global Anycast。

我查看了下谷歌的一些介绍: 谷歌公共DNS,谷歌使用的是Global Anycast,即目标dns server是处于不同网络(自治域)中,用户发送的查询请求会被分配到最优的谷歌边缘网络(Google Edge Network),然后再向权威发起dns查询(这里的优化就不介绍了)。

我们大概了解了一些技术点,我们再看下问题:海外用户的dns解析请求被指向到了国内。

咨询了一些专家,初步猜测是海外的一些访问和国内的的访问被分配在同一个自治域中。国内用户的查询后,cdn返回了国内的ip,同时这个请求被当前自治域的公共dns缓存,那当国外用户查询的时候,公共dns就直接返回了缓存的国内ip,从而导致这个问题。

没有评论: