景
似乎出現這種問題的很大一部分是因爲用的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應該就沒問題了。