因为做课题需要用到谷歌,以前一直用的clash
,买的别人搭建好的订阅链接。最近写文章要用到谷歌学术,买的订阅链接这个时候全都挂了…..不如自己配置个更稳定的节点,于是在RackNerd买了一台VPS,准备自己折腾折腾访问谷歌学术和github
用。
以前用国内的服务器搭建过校园网的反向代理,当时用的frp
这个反代软件,可以看底下这篇博客:
校园网代理服务器的搭建 - 我的小破站 (shelven.com)
这次的目的不一样,想要绕过GFW访问谷歌,需要有一台可以在国内访问公网ip的海外服务器。将我们(客户端)发出的http请求发送到代理服务器(服务端),代理服务器转发给目标服务器,再将响应返回到我们手上。整个过程隐藏了我们客户端的ip,也就是一个正向代理的过程。
1. 服务器
1.1 购买海外服务器
海外服务器比较有名的是RackNerd,在多个主机论坛里都有相关测评对比。主打一个价格便宜,KVM虚拟,纯SSD raid10阵列,solusvm面板,自带一个IPV4,1Gbps带宽,多个机房可选。
年费超过14美元才可以选洛杉矶的机房,洛杉矶和纽约都是美国服务器主要的节点,几乎所有国外服务器商在这两个地方都有节点。对于国内而言,洛杉矶机房在地理位置上更近,意味着网络延迟(ping值)较小。
说的太多有打广告的嫌疑,具体可以在RackNerd
官网查看:RackNerd - Introducing Infrastructure Stability
顺便提一下在RackNerd
购买的服务器72小时内可以更换一次ipv4,之后再次更换需要收3美刀。因为我搭建这个节点是为了访问谷歌学术,如果ip被封了会提示:
Your client does not have permission to get URL
连人机验证都没有,说明以前有人用这个ip干过爬虫一类的被谷歌学术直接封了。这个时候就要赶紧提工单换ip,或者申请ipv6(RackNerd似乎没有免费提供ipv6),谷歌学术一般封的是ipv4,这是后话。
购买的VPS可以通过SolusVM
面板进行控制,邮件中有用户名和密码:https://nerdvm.racknerd.com/
1.2 测试服务器性能
这一步不是必要的,毕竟你在选配置的时候信息对性能也有个预估。这里就简单记几个测试的脚本:
VPS规格测试:
1 | # 测试linux系统信息、IO读写和全球下载速度 |
GB6跑分:
1 | # 和上面类似 |
三网和教育网测速:
1 | bash <(curl -sL bash.icu/speedtest) |
回程路由:
1 | wget -qO- git.io/besttrace | bash |
流媒体解锁:
1 | bash <(curl -L -s media.ispvps.com) |
其他测试:
1 | # ping测试 |
2. V2Ray
虽然直接用nginx
就可以实现http正向代理的过程(https代理需要安装插件),但是为了数据安全,以及防止被墙检测,还是用更成熟的代理软件更为合适。常用的代理软件一个是clash
,另一个就是V2Ray
。clash
的配置比较灵活,支持规则、代理组和混淆等功能;V2Ray
配置相对简单(我觉得),更适合我这种小白。
V2Ray
有非常详细的中文部署文档和白话文教程:新手上路 · Project V 官方网站 (v2ray.com)
没有必要重复造轮子了,只是提一下客户端(自己的电脑)和服务端(海外服务器)部署的时候需要注意的地方
客户端和服务端时区可以不同,但是转换时区后的时间差要小于90秒
https://install.direct/go.sh
这个linux一键安装脚本已经不能用了,需要运行如下命令安装和更新V2Ray
:1
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
服务端设置完成之后记得放行对应的防火墙端口,并重载防火墙使其生效,常用的相关命令:
1
2
3
4
5
6
7
8
9
10# 放行16823端口:
firewall-cmd --add-port=16823/tcp --zone=public --permanent
# 重载防火墙:
systemctl restart firewalld
# 查看放行的端口:
firewall-cmd --list-port
# 查看进程:
ps -ef | grep v2ray
# 启动v2ray:
systemctl start v2ray客户端和服务端的
"alterId"
都设置为0,用户手册说可以指定额外ID数量,但是我这里不为0的话流量只能走直连,写的其他规则全都无法生效(不知道算不算bug)。用户ID使用的是UUID格式,不推荐手打!可能会引发未知错误,推荐工具Online UUID Generator Tool
以我的配置简单做个示范。
服务端配置:
1 | { |
客户端配置:
1 | { |
官网给的客户端例子是走的socks
协议,只有火狐(firefox)浏览器才可以设置socks
协议代理,其他浏览器像是edge、chrome都是直接跳转计算机中的代理设置(不用插件的话)。因此直接在客户端的inbound
设置http
协议,然后在客户端直接设置代理地址127.0.0.1
,端口1080
即可。
3. 优化
把服务端和客户端的V2Ray
都设置好之后,就可以在客户端运行v2ray.exe
,正常浏览谷歌学术了(ip没被封的话)。
细心的你可能会发现,现在浏览网页的速度非常慢,完全不像是刚开始给VPS做三网测速的速度好吗喂!
在测速网站测试一下代理速度:https://www.speedtest.net/
这个下载速度有点过于绝望了,别说浏览网页,下载个文献都费劲。
另外,TCP连接本身不提供数据加密,传输的数据在网络上可能会被窃听或篡改。这里介绍下主流的V2Ray优化方案:WebSocket + TLS + Nginx(Web) + cloudflare(CDN)
总的来说,WebSocket
监听服务端V2Ray
的inbounds
端口,转发流量到HTTP
服务器(同一个服务器),再由HTTP
服务器经过TLS
加密传数据到cloudflare CDN
服务器。隐蔽性比直接tcp
连接更高,cloudflare
加速也十分给力。
3.1 cloudflare
cloudflare要求有域名。我是在阿里云注册了一个.com
的域名,先在域名注册商那里解析域名到服务器ip地址。
在cloudflare官网右侧点击ADD a site
,输入注册的二级域名,点击不要钱的那个plan。之后会让你在域名注册商那里修改DNS服务器(Name Server),注意有两个DNS服务器。
修改好之后回到cloudflare,就会发现之前添加的二级域名状态变成了activate
,并且两条DNS解析记录也被提取了出来(没有两条可以自己手动添加,一条www,一条二级域名)。
这个时候就可以在自己电脑上ping域名,可以ping成功说明设置没有问题。
在DNS里先关闭代理状态(橙色的云改成灰色的云)。
3.2 nginx
用其他的web服务软件比如apache
之类的都是可以的,我的博客服务器用的apache
,这里稍微折腾下nginx
,以后就都有经验了,嗯。
在nginx
官网下载稳定版本,这里以1.25.5
为例。
1 | # 解压,编译,安装nginx,一定要装ssl模块!除非你不用TLS |
这个时候访问ip:80
端口就可以成功访问到nginx
的初始界面了。
因为我们后面要改nginx
的配置,所以这里先关掉….
1 | # 查找80端口被什么进程占用,这里nginx默认使用80端口 |
3.3 TLS证书(SSL)
这部分和我之前再apache服务器申请SSL证书一模一样….TLS是SSL的继任者,理解成一个意思就行。
3.3.1 zerossl证书
1 | # 安装一些软件包和脚本,刷新环境变量 |
回到cloudflare
,搜索API界面,点击生成全局的cloudflare API key
:
1 | # 添加环境变量 |
以上操作会在/root/.acme.sh/
路径下生成TLS证书,安装证书换一个方便自己找的地方。
1 | # 安装证书,自定义证书的路径和名称 |
zerossl证书有效期是90天,不过acme
会创建一个cronjob自动更新证书,还是挺省心的(据说zerossl不支持免费ssl证书更换了,为了避免未来可能存在的问题,我还是用了下面方法)。
3.3.2 cloudflare证书
还有种比较简单的证书,就是cloudflare自己的Orign CA,证书免费,周期15年。
回到cloudflare
,搜索SSL/TLS界面,选择Create Certificate
,直接创建并上传到服务器就可以了。
不管用哪种方式申请的证书,需要在SSL/TLS界面将加密模式修改为Full
或者Full(strict)
,这个时候再在DNS设置中打开代理状态(灰色的云改成橙色的云)。
这样修改后你的服务器到CDN服务器之间也采用了ssl/tls
加密的方式传输数据,更不容易被检测。
3.4 修改nginx配置
1 | # 修改nginx.conf内容 |
这个时候启动nginx
,以你的域名去访问也可以正常显示页面(地址栏没有红锁头),说明TSL
就设置成功了。
3.5 修改v2ray设置
服务端修改配置并重启:
1 | { |
与前面相比只是多了一个"streamSettings"
,设置的是WebSocket
转发的规则,注意路径要与nginx
中设置的一样。实际运行的时候我这有个小bug,设置别的路径都会报错404,只有"/"
可以正常代理。
客户端只需要在原来的基础上,在"outbounds"
添加"streamSettings"
相关内容,以及修改"settings"
端口和域名地址,如下(只展示部分):
1 | "outbounds": [{ |
客户端运行时记得打开计算机代理!
3.6 优化后的下载速度对比
不管是从数据安全性还是下载速度上,优化后的比之前纯v2ray
搭建的节点要强很多。
我这里校园网带宽只有20Mbps,测不到这个节点的下载速度上限;开了手机热点,测的等效带宽是50Mbps,比之前3Mbps提高了20倍,实际上还没有测到上限。这下下载文献是没问题了。