情景简述

国内用不了 Google 对吧,但是,作为程序员必须要用 Google 对吧(当然,百度啥的也能用,就是有点难用)。所以,咋办呢。

翻墙。不管用什么方法翻墙,总要花钱的对吧。免费的 VPN 一点也不稳定。租国外的服务器,自己搭建 VPN 服务器,你确定,你愿意花那么多钱就为了翻个墙。

所以呢,我有一台服务器对吧,阿里云的 ECS。然后呢,我已经让它支持 IPv6 对吧。然后,之前在给 ECS 配置 IPv6 时,已经确定,在国内,可以使用 IPv6 ping 通 Google 的。那么,使用 IPv6 访问 Google 呢。

分析思路

现在我们已经确定。使用 IPv6 可以访问 Google,那么我们的策略是:本地电脑访问 ECS 的 Nginx 代理,ECS 使用 IPv6 访问 Google,然后将结果返回给本地电脑。

这不就是反向代理吗,Nginx 不是经常这样用吗。平时用 Nginx 反向代理内网的服务,这次是代理外网的而已,都一样嘛。

操作方法

编辑 /etc/nginx/conf.d/ 下的配置文件,我们创建一个 google.conf,添加如下配置

upstream google {
    server [2404:6800:4012:1::2004]:443;
}
server {
    listen 0.0.0.0:80;
    listen [::]:80;

    server_name xxx.xxx.xxx;
    proxy_set_header Host www.google.com.hk;
    proxy_set_header x-forwarded-for $remote_addr;
    location /{
        proxy_pass https://google;
    }
}

首先,我们在 upstream google 字段,配置了一个名为 google 的上游服务,这里把上游服务器指向 Google 服务器的 IPv6 地址,由于 Google 使用了 https 所以,要指定 443 端口。也就是说,所有发向 google 这个上游代理的数据,都会发向 2404:6800:4012:1::2004 的 443 端口。也就是说,我们把上游代理设置成了 Google 的服务器,有点不厚道。

然后,在 server 字段那里,配置了 nginx 的一个监听服务。它会监听 IPv4 和 IPv6 的 80 端口,然后把所有的数据都发向 google 这个上游代理。如果你想使用 https,请添加 ssl 支持。

注意

server_name xxx.xxx.xxx;

这一行,请把 xxx.xxx.xxx 换成你的服务器域名或 IP。

proxy_pass https://google;

这一行,表示,转发所有的数据到 google 这个上游代理。

然后 service nginx restart 吧。

后记

使用了一个星期后,被查封了,现在我的 ECS 已经无法通过 IPv6 访问 Google 了。伟大的祖国啊。