谷歌频繁人机验证

1. 问题

由于百度的价值观跟我不一致,所以会经常使用到谷歌。顺带,媳妇也会经常需要查美国的一些学校的信息,所以谷歌对我们都是必要的。但是,但是突然,某一天,发现用谷歌的时候,频繁出现人间验证的提示(自己忘了截图,偷盗的别人的,如果侵权,请联系我删除,谢谢啦~~~):

google-robot-img

还会让你一直选一个图片,选到没有了为止,真的是很烦人。关键是我的两台小水管代理的时候,都出现这种情况啦。。。
发生这个事情的原因也就几个:

  1. VPS 被人黑了,当作爬虫,爬谷歌的数据了
  2. 这个 IP 段被谷歌加入黑名单了,我们的IP属于被误杀(同个机房有人干坏事)。

第 1 个简单,去 VPS 看下流量,都正常的,排除。剩下的也就是 IP 误杀的原因了。

网上查了一下,解决办法就是使用 IPv6 访问谷歌(换 IP 是不现实的,提供商有的要花钱呢哇,穷逼一个!)就好了。但问题又来了:

  1. VPS 有没有自带 IPv6 的地址,如果没有带怎么办?
  2. 两个小水管,一个是 KVM,一个是 OpenVZ 的, 是不是一样的办法呢?

2. VPS 自带 IPv6

这个简单,理论上,理论上,因为我没有自带 IPv6 的 VPS,所以,只能说理论上修改 /etc/hosts 文件,再对谷歌的域名设置 v2ray 走 IPv6 即可。

/etc/hosts 文件添加如下内容:

1
2
3
2607:f8b0:4007:80e::2003 www.google.com.hk
2607:f8b0:4007:808::2004 google.com
2607:f8b0:4005:801::200e www.google.com

v2ray 添加如下的规则: 绑定一个 IPv6 的出口规则,然后添加一个路由,设置谷歌的域名通过 IPv6 的出口规则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
.........
"outbounds": [
{
"protocol": "freedom",
"settings": {
"domainStrategy": "UseIPv6"
},
"tag": "IP6-out"
},
..............
],
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"domain": [
"domain:google.com",
"domain:google.com.hk"
],
"outboundTag": "IP6-out" // 这个地方的要和 outbounds 里面的 tag 相同
},
........
]
},
..........

}

重启 v2ray。 访问一下: https://www.google.com/sorry/index 地址
google-sorry-index

看一下 IP 地址是不是 IPv6 的地址。

3. KVM VPS 不带 IPv6

自带的 VPS 没有 IPv6 地址怎么办呢?网上谷歌了一圈,发现可以使用 IPv6 的隧道。可以去 https://tunnelbroker.net/ 申请 IPv6 的隧道来使用(一个账号可以申请 5 个隧道)。

  1. 注册登陆。
  2. 在左侧的 User Functions 中,点击 Create Regular Tunnel.
  3. IPv4 Endpoint (Your side) 这里输入你的 IPv4 的地址,下面的区域选择你的 VPS 所在的区域,然后点击下面的 Create Tunnel 完成创建。
  4. 进入 Tunnel Details 页面(也可以点击 左侧的 Main Page,然后选择刚刚创建的 tunnel 进入)
  5. 点击 Example Configurations 选择你的 VPS 的操作系统,然后 根据提示做就可以了。

hurricane-tunnel-detail

重启网络: service networking restart,通过 ifconfig 查看是否是多了个一 he-IPv6 的信息.

1
2
3
4
5
6
7
8
9
root@CreepyWry-VM:~# service networking restart
root@CreepyWry-VM:~# ifconfig
he-IPv6: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1480
inet6 xxx:xx:x:x::x prefixlen 64 scopeid 0x0<global>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 74968 bytes 64905107 (61.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 50121 bytes 9070011 (8.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

根据前面的配置修改 /etc/hosts 和 v2ray 的配置文件。

测试一下 IPv6 是否生效。

1
2
3
4
5
6
7
8
9
10
11
root@CreepyWry-VM:~# ping IPv6.google.com
PING IPv6.google.com(lax28s10-in-x0e.1e100.net (2607:f8b0:4007:80d::200e)) 56 data bytes
64 bytes from lax28s10-in-x0e.1e100.net (2607:f8b0:4007:80d::200e): icmp_seq=1 ttl=57 time=4.86 ms
64 bytes from lax28s10-in-x0e.1e100.net (2607:f8b0:4007:80d::200e): icmp_seq=2 ttl=57 time=3.75 ms
64 bytes from lax28s10-in-x0e.1e100.net (2607:f8b0:4007:80d::200e): icmp_seq=3 ttl=57 time=1.02 ms
64 bytes from lax28s10-in-x0e.1e100.net (2607:f8b0:4007:80d::200e): icmp_seq=4 ttl=57 time=1.56 ms
64 bytes from lax28s10-in-x0e.1e100.net (2607:f8b0:4007:80d::200e): icmp_seq=5 ttl=57 time=0.960 ms
^C
--- IPv6.google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 0.960/2.434/4.866/1.586 ms

速度很不错,杠杠的。重启 v2ray 服务后, 通过上一步提到的 sorry/index 页面检查是否使用了 IPv6 的方式访问了 谷歌。

4. OpenVZ VPS 不带 IPv6

在 VPS 的管理页面,打开 tun/tap 开关。
tun/tap-switch

打开后,在 VPS 输入 cat /dev/net/tun 查看输出:
dev-net-tun

OpenVZ VPS 限制会比较多,在 https://tunnelbroker.net/ 上面创建 tunnel 的步骤不变,但是在重启网卡:service networking restart 过后,ifconfig 并没有添加的新网卡 he-IPv6 信息(忘记了重启有没有报错了,忘了截图)。猜测应该是 OpenVZ 的问题。网上查了一下,是因为 VPS 不支持通过 modprobe 载入 IPv6 模块,需要改用 tb-tun。

执行如下命令,注意,需要根据创建的 tunnel 的详细修改下面的 配置:
[server IPv4 addr]
[client IPv4 addr]
[client IPv6 addr]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apt-get install gcc
mkdir tb-tun
cd tb-tun/
wget https://codeload.github.com/acgrid/tb-tun/zIP/master
unzIP master
cd tb-tun-master/
gcc tb_userspace.c -l pthread -o tb_userspace


setsid ./tb_userspace he-IPv6 [server IPv4 addr] [client IPv4 addr] sit > /dev/null
ifconfig he-IPv6 inet6 add [client IPv6 addr]
ifconfig he-IPv6 mtu 1480
ifconfig he-IPv6 up
route -A inet6 add ::/0 dev he-IPv6
IP -6 route del default dev venet0

完成后,ifconfig 检查网卡是不是多了一个 he-IPv6 的配置。

根据前面的配置修改 /etc/hosts 和 v2ray 的配置文件。

测试一下 IPv6 是否生效。

这个配置是一次性的,一旦重启就会失效了,如果要持久化,参考: https://www.cybermilitia.net/2013/07/22/IPv6-tunnel-on-openvz/

创建启动后自动添加的脚本:

1
vim /etc/init.d/IPv6tb

添加如下内容,注意需要配置 tb_userspace 的路径,还有 server/client IPv4 和 client IPv4 的地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#! /bin/sh

### BEGIN INIT INFO
# Provides: IPv6
# Required-Start: $local_fs $all
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-DescrIPtion: starts the IPv6 tunnel
# DescrIPtion: IPv6 tunnel start-stop-daemon
### END INIT INFO

# /etc/init.d/IPv6tb

touch /var/lock/IPv6tb

case "$1" in
start)
echo "Starting IPv6tb "
setsid [dir]/tb_userspace he-IPv6 [server IPv4 addr] [client IPv4 addr] sit > /dev/null 2>&1 &
###ugly, but doesn't seem to work at startup otherwise
sleep 3s
#Add as many of these as you need from your routed /64 allocation
ifconfig he-IPv6 inet6 add [client IPv6 addr]
ifconfig he-IPv6 mtu 1480
ifconfig he-IPv6 up
route -A inet6 add ::/0 dev he-IPv6
IP -6 route del default dev venet0
;;
stop)
echo "Stopping IPv6tb"
ifconfig tb down
route -A inet6 del ::/0 dev he-IPv6
killall tb_userspace
;;
*)
echo "Usage: /etc/init.d/IPv6tb {start|stop}"
exit 1
;;
esac

修改脚本的权限:

1
2
chmod 755 /etc/init.d/IPv6tb
update-rc.d IPv6tb defaults

重启,再测试看看 ping IPv6.google.com。

Just for my love !!