V2Ray使用Cloudflare绕过IP封禁

发布时间:

最后更新:

正直某大事前夕,网络的审查越来越严,再加上我一直用IP直连我的般瓦工服务器,这下可好,直接被检测到并封禁了IP。

般瓦工是不能在IP被封禁的情况下迁移服务器的(真垃圾,我怀疑它们的业务是不是只有梯子,这么关心IP被封)。虽然可以给钱换IP,但这治标不治本,换了还会再封。

在等了三天之后仍无丝毫解封迹象,我决定自己动手解决这问题,于是便有了此文。

实现原理 #

简单说一下这种方案的原理,首先 Cloudflare 是全球最大的CDN厂商,它的IP肯定是不会被封,因为有太多正规网站都用它,为了拆梯子把它封了是得不偿失的。

Cloudflare 有免费套餐,可以把自己的域名给它解析,之后所有的访问都会转到它的代理服务器上,它在把这些访问转发到真正的服务器。Cloudflare的线路很丰富,不可能被你封禁IP所影响,所以这么绕一下即可规避掉IP封锁。

当然,除了IP人家还能污染你域名……不过只要把Cloudflare的服务器IP加到Hosts文件里即可解决。

不过Cloudflare能到里面来做生意,自然要遵守一些规矩的,比如它只能接受80和443端口的访问,其它端口全被封了……这要求我们的代理软件必须支持HTTP相关协议的连接,SS肯定不行,但V2Ray支持丰富的协议正好能够解决这个问题。

Cloudflare配置 #

首先去Cloudflare注册一个账号(这就不讲解了),然后点右上角的Add site。如果它的网站没有出新版,那么你应该看见这个界面:

添加网站添加网站

这里输入你的域名就好,注意必须输入一级域,就算你只想让v2ray.xxx.com走Cloudflare代理,你也得让Cloudflare接管整个xxx.com

之后选择套餐,你要有钱可以选贵的,我倒是只用那个$0的。

第三步是修改域名解析服务器,让Cloudflare接管域名的解析。

nameserver setupnameserver setup

在Replace with Cloudflare's nameservers部分会给两个域名,把它们填入域名。我这域名是在NameSilo注册的,结果如下图,注意原本的服务器有三个,但Cloudflare只给了俩,多余的要删掉

change nameserverschange nameservers

改完了点下面的 Re-check 按钮,它会让你等它检查完,一般来说生效都挺快的,你可以等几分钟刷新一下看看,如果好了就会显示下图:

register okregister ok

之后进入控制面板,点上面的DNS,然后点击Add Record,在出来的面板里填上子域名和IP之后保存,到这里Cloudflare的设置就完成了。

有几个教程里说要先把云朵点灰然后再点回来,这是为了让此期间服务器的IP还是原始的,可以直连。但我这情况已经是IP被封无法直连(至于怎么操作服务器见附录),所以没有必要做这些。

Add DNSAdd DNS

V2Ray配置 #

下载安装我就不说了官网就有,官网被墙了就看GitHub上的教程(不要告诉我GitHub也被墙了)。这里就说下V2Ray的配置文件,首先是服务端的配置:

json
{
	"inbounds": [
		{
			"port": 80,
			"protocol": "vmess",
			"settings": {
				"clients": [
					{
						"id": "<GUID>",
						"alterId": 64
					}
				]
			},
			"streamSettings": {
				"network":"ws"
			}
		},
	],
	"outbounds": [
		{
			"protocol": "freedom",
			"settings": {}
		}
	]
}

端口设置为80,因为Cloudflare服务器的80端口会自动代理到你的服务器上的80端口,当然要是想用TLS的话就是443了。其中的<GUID>你得自己生成一个。

需要提醒下的是Cloudflare免费版不支持自定义端口,比如它的80端口转发到你的6666端口。这让我很意外,我觉得这应该是个很容易实现又很基础的功能,结果还必须要商业版才有,不得不佩服Cloudflare的阉割刀法。这也意味着服务器的端口肯定是要占用的,如果在80端口上还跑了网站的话就得做反向代理。

接着是客户端的配置:

json
{
	"inbounds": [
		{
			"port": 1080,
			"listen": "127.0.0.1",
			"protocol": "http"
		}
	],
	"outbounds": [
		{
			"protocol": "vmess",
			"settings": {
				"vnext": [
					{
						"address": "<域名>",
						"port": 80,
						"users": [
							{
								"id": "<GUID>",
								"alterId": 64
							}
						]
					}
				]
			},
			"streamSettings": {
				"network": "ws"
			}
		}
	]
}

客户端基本上跟服务端一样,这里inbounds可以根据自己的情况改改,outbounds里填上自己的域名,GUID记得跟服务端的一样即可。

接下来启动V2Ray试试能不能访问国际网站,如果成功就大功告成了!

其它注意事项 #

关于TLS #

很多教程里都推荐使用 TLS + WebSocket,但V2Ray的Vmess协议本身就是加密传输的,再套一层并不能提高数据的安全性,反而还增加解密消耗。而且我用了俩月的非TLS还没出任何问题。

不过加上TLS的话连WebSocket握手部分也是加密的,可以暴露更少的信息,至于是不是用还看你自己的喜好了。

IP被封如何操作服务器 #

有一台没被封IP的机子做代理让SSH连接是最好的,但不幸的是我正好只有这一台,所以只能用点技巧了……

VPS服务商提供的控制面板里有个简单的控制台,用它来安装V2Ray并启动。可惜这控制台运行不了Vim,于是只能在本地先写好配置文件,然后上传到GitHub等公共平台上,再用wget来下载。如果上传的文件公开可见就别忘了成功之后把GUID给改一下,以免泄露。

评论加载中