景
似乎出现这种问题的很大一部分是因为用的DigitalOcean的VPS...
这里只针对IPv4和IPv6双栈VPS给出可能的解决方法
问题描述
我用的是架设在DigitalOcean上的Shadowsocks,有时访问Google会被要求输入验证码:
或者访问Google Scholar连验证码都没了直接不让用:
简直了!还能不能好好用Google了!
原因分析
针对DigitalOcean,可能的原因:
- 你的VPS被人用来做爬虫爬Google,IP被封
- 你的IPv4网段有人做爬虫,网段被封,躺枪
- 你的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应该就没问题了。