背景

似乎出现这种问题的很大一部分是因为用的DigitalOcean的VPS...

这里只针对IPv4和IPv6双栈VPS给出可能的解决方法

问题描述

我用的是架设在DigitalOcean上的Shadowsocks,有时访问Google会被要求输入验证码:

google.png

或者访问Google Scholar连验证码都没了直接不让用:

google scholar.png

简直了!还能不能好好用Google了!

原因分析

针对DigitalOcean,可能的原因:

  1. 你的VPS被人用来做爬虫爬Google,IP被封
  2. 你的IPv4网段有人做爬虫,网段被封,躺枪
  3. 你的IPv6网段有人做爬虫,网段被封,躺枪

不过呢,Google一般不会把你的IPv4和IPv6地址全都封掉的。

解决方法

对于第一种情况,还是老老实实做好安全策略吧...第二和第三种情况我们可以换用没有被封的IP协议来解决

确定被封的IP

在通过如Shadowsocks使用Google时,如果出现验证码,那么页面下方会告知此时访问Google的IP地址,你就能看到具体是IPv4被封还是IPv6被封啦。

强制IPv4

如果是IPv6地址被封,我们可以强制VPS使用IPv4访问Google。

我的情况是VPS支持IPv4/IPv6双栈,但默认会采用IPv4访问,所以你最好检查一下是不是VPS的hosts设置的Google的IPv6地址,如果这样只需要把hosts注释掉就好了

禁止VPS的IPv6访问:
编辑/etc/sysctl.conf,在文件末尾加入:

# disable ipv6
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

重启Shadowsocks再访问Google应该就没问题了。

强制IPv6

如果是IPv4地址被封,我们可以强制VPS使用IPv6访问Google。

方法很简单,VPS的hosts中指定Google的IPv6地址就好了。编辑/etc/hosts,加入:

2607:f8b0:4005:801::200e google.com
2607:f8b0:4005:801::200e www.google.com
2607:f8b0:4007:805::100f scholar.google.cn
2607:f8b0:4007:805::100f scholar.google.com
2607:f8b0:4007:805::100f scholar.google.com.hk
2607:f8b0:4007:805::100f scholar.l.google.com

注意如上IPv6地址可能已失效,请参考ipv6-hosts/hosts at master · lennylxx/ipv6-hosts中提供的最新IPv6地址。

重启Shadowsocks再访问Google应该就没问题了。