VPN 为什么不能用 IPv6 访问 Google 等
•
这是我们故意封锁的。这些站点是被墙的,因此需要走国外隧道出去,Google/Facebook 看到的是国外 VPS 的 IPv6 地址。由于这些站点的反机器人措施对 IPv6 的限制比 IPv4 要严厉,也就是这么多用户使用同一个 IPv6 地址,会被认为是机器人,频繁提示输入验证码。因此,我们早在半年前,就封锁了 Google、FB、Wikipedia 所在的 IPv6 地址段,对其返回 “ICMPv6 No route to destination (Type 1, Code 0)” 消息。浏览器收到这种消息后一般会切换回 IPv4,不影响正常访问,就像下面这样:
$ curl -vv http://google.com
* STATE: INIT => CONNECT handle 0x80047758; line 1034 (connection #-5000)
* Rebuilt URL to: http://google.com/
* Hostname was NOT found in DNS cache
* Trying 2404:6800:4003:802::1000...
* STATE: CONNECT => WAITCONNECT handle 0x80047758; line 1087 (connection #0)
* Trying 74.125.200.113...
* Connected to google.com (74.125.200.113) port 80 (#0)
* STATE: WAITCONNECT => DO handle 0x80047758; line 1233 (connection #0)
> GET / HTTP/1.1
...
不过,Qijiang Fan 今天反映 GCM (Google Cloud Messaging) 不会在 IPv6 中断时切换回 IPv4,这会导致 GCM 中断。考虑到我们是为了绕过 Google 的反机器人措施(这是主要针对网页访问的,而 ping6 和 GCM 所依赖的 XMPP 等协议不会受到影响),我们对 Google、FB、Wikipedia 所在 IPv6 地址段的 TCP 80/443 端口返回了 “ICMPv6 Port Unreachable (Type 1, Code 4)” 消息,其他端口或协议通过国外隧道 NAT 访问。这样 ping6 google.com 就能通了。