背景
前段时间境外的一台VPS的IP被封了,由于有免费换IP的政策,就换了下,结果没用两天又被封了,这下热闹了,彻底报废了,要等5周才能再次免费换IP,当然花钱也是可以换IP的,但对于我们来说就不是很划算了,毕竟不是每个人都是土豪。于是做了这个域名+CDN+服务器的上网组合,既可以避开GFW的封锁,还能CDN加速网站,上网的话也是灵活方便,IP直连服务器,或者域名+CDN连接服务器。(也可以另外申请个域名,直接用ws,可以不走CDN,避免减速,直接用IP的话还是比较暴露的)
我们再说一下什么是CDN,CDN全称是内容分发网络,比如我人在上海,想访问北京的一个网站,通常情况下,我们是要连接到北京的服务器,然后从北京的服务器上下载图片视频音频等素材,大家都知道,占用流量的都是这些媒体素材,真正的程序只占用很少的一部分,再加上这个距离太远,中间传输的不确定因素太多,所以访问速度很慢;CDN呢就是在全国各个地方都搭建CDN服务器,然后把你网站上的素材,比如视频音频图片等,都拷贝到这个CDN服务器上,当我们的客户在上海访问我们的网站时,就会就近的搜寻有你网站素材的CDN服务器,恰好呢,杭州有一台CDN服务器上有你的网站素材,这时候我们需要的素材就不会再去北京官网服务器下载了,而是从就近的杭州CDN服务器下载,下载的同时呢会和逛网服务器同步查询,有不一样的才会从官网服务器下载,这样一来,我们浏览网站的速度就快了很多。当然怎么把网站上的素材拷贝到CDN服务器上就是另外一个话题了,我们这里不做解释。
原理:我们用的是V2ray的WebSocket协议,这个协议我们可以简单理解为tcp协议的封装版本,和HTTP是差不多的就可以了,这样的话我们正常搭建一个网站,就可以很好的伪装我们的流量了。我先大致的介绍下网络的工作原理,当我们要访问一个网站的时候,我们输入的是网站的域名,这个域名不是唯一的,比如我们一个域名可以指向很多的网站,就拿我们比较熟悉的腾讯来说,官网是www.qq.com,邮箱是mail.qq.com,腾讯视频却是v.qq.com,他们所指向的服务器都是不一样的,所以我们访问一个网站的时候,电脑会把我们的域名发送给DNS服务器,问一下这个域名所对应的IP是多少,DNS服务器查到记录就会把IP地址返回给你,这时候电脑会拿着这个IP地址去访问你的网站了,连接上之后你就可以正常访问了。这期间,如果DNS服务器给你一个假的地址,那么你就没法正常的访问你要访问的网站了,比如我想访问的是腾讯的网站,结果DNS服务器返回给我一个百度的IP,那么我所打开的网站就成了百度的网站了,这种现象就叫做DNS劫持,这个原理也是墙的一种手段。
事前准备
一台VPS(系统随便,推荐Debian或者centos),一个域名(提前做好DNS解析,推荐直接用CDN解析,后期直接打开CDN加速即可),SSH工具
部署过程
项目地址:https://github.com/v2fly/fhs-install-v2raySSH连接上远程VPS后,下载安装脚本:
bash <(curl -L -s https://install.direct/go.sh)
这里推荐用官方的安装脚本,不是其他大神做的脚本不好用,而是脚本有些冲突,比如233大神的脚本,安装快捷管理方便,但是会自动安装Caddy服务器,这无疑会和我们需要的lnmp环境相冲突。如果需要一键脚本的请看下面的教程
最好用的 V2Ray 一键安装脚本 & 管理脚本
在安装完V2Ray之后,会有一个PORT和UUID,即表示安装成功,

设为开机启动
systemctl enable v2ray
开启V2RAY服务
systemctl start v2ray
Centos安装命令:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh
Debian安装命令:
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh
安装时,一路默认即可,该输入Y的输入Y,没什么难度
安装完成,会出现面板地址及默认账号与密码。(注意新版本在端口号后面还有一个字符串,一定要全部保存)

访问BT-Panel的地址,输入账号与密码即可使用宝塔
登录BT面板后,可一键部署源码,选择安装LNMP环境;耐心等待,速度很慢
一切都安装完后,点击「网站」——「添加站点」

成功添加完站点后,点击「设置」——SSL——Let’s Encrypt,成功申请SSL后,保存

再点击站点「设置」的「配置文件」选项,在最后一个“ } ”前添加如下代码:

location /ws { // ws不是固定的,可以根据自己的情况修改,只要和v2ray的配置文件config.json中一致即可
proxy_redirect off;
proxy_pass http://127.0.0.1:8080; //端口号不是固定的,自定义
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
大家可以直接复制,最后把 //汉字 全部删掉,不然有的提示无法保存
回到「首页」,重启「Nignx服务」,有的首页没有显示安装了那些程序,可以到[软件管理]中管理

BT面板「安全」,防火墙端口放行,新增你的V2Ray端口,如果下面端口号改变,这里也相应的添加

由于我们安装了BT面板,所以在面板里面编辑v2ray的配置文件config.json即可
打开面板「文件」,在路径中输入/etc/v2ray/,编辑文件,复制下面代码做适当修改并保存,新版路径在/usr/local/etc/v2ray
{
"log" : {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbound": {
"port": 8080, #自动生成的端口,须与Nignx设置的相一致,可自定义
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "85b4aeab-5b53-475b-b9ad-dd18b4dd4ceb", #自动生成的UUID,不是随便写的,可以到https://intmainreturn0.com/v2ray-config-gen/#生成
"level": 1,
"alterId": 64 #额外ID 自定义,理论上 alterId 越大越好,但越大就约占内存,0 到 100 之间应该是比较合适的
}
]
},
"streamSettings": {
"network":"ws",
"wsSettings": {
"path": "/ws", #path可自定义,这里是/ws,须与Nginx和客户端的path相一致
"headers": {
"Host": " " #Host可自定于任意域名,此处没有添加
}
}
}
},
//ss服务设置开始 如果不需要ss连接,可以删掉
"inboundDetour": [
{
"protocol": "shadowsocks",
"port": 8081,#端口自己修改
"settings": {
"method": "chacha20", #加密协议自己选择aes-256-cfb、aes-128-cfb、chacha20、chacha20-ietf、aes-256-gcm、aes-128-gcm、chacha20-poly1305 或称 chacha20-ietf-poly1305
"password": "password",#密码自己修改
"udp": false
}
}
],
//ss服务设置结束
"outbound": {
"protocol": "freedom",
"settings": {}
},
"routing": {
"strategy": "rules",
"settings": {
"rules": [
{
"type": "field",
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "blocked"
}
]
}
}
}
这里也可以直接复制,但是复制之后把#和汉字全部删掉,不然会报错,无法运行
service v2ray restart #重启
service v2ray status #通过该命令,可查看v2ray是否运行成功(出现绿色的running即允许成功)

其他管理命令
停止运行 V2Ray:
$ sudo systemctl stop v2ray
卸载V2ray(没有找到官方卸载教程,我一直用的这个)
source <(curl -sL https://git.io/fNgqx) --remove
安装加速
开启CDN,推荐CloudFlare
优点:隐藏真实IP地址,同时可以绕过GFW的封锁,即使你的IP已经被封,同样可以使用
缺点:国内解析速度较慢,会影响速度
安装BBR:推荐一键安装最新内核并开启BBR脚本
客户端使用
根据自己的配置填写,如果使用域名+CDN的话地址填写域名即可,端口为443,因为TLS的端口是443,加密方式等根据自己的配置添加,伪装域名就是你的域名,因为这个域名确实是有网站的,路径和V2ray配置文件中的保持一致,注意底层传输要选择tls,不然连不上的,这种方式网速和CDN息息相关,如果IP没有被墙,可以直接使用V2ray配置文件中的IP+端口直接连接

附件
最后附上一个带电报代理的配置,自己酌情修改,记得不要有汉字,不要有汉字,不要有汉字,两个//也要删掉!!!别傻傻的直接复制。
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbounds": [
{
"port": 8080,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "8d094b8f-86b1-41e1-aaa3-e5410c5ba43f", //换成自己的,可以去https://www.veekxt.com/utils/v2ray_gen生成
"level": 1,
"alterId": 98
}
]
},
"streamSettings": {
"network":"ws",
"wsSettings": {
"path": "/ws", //地址一定要和网站配置中的一致
"headers": {
"Host": "你自己的域名 "
}
}
}
}
,
{
"protocol": "shadowsocks",
"port": 8081,//换成自己的端口
"settings": {
"method": "chacha20", //换成自己的加密方式
"password": "密码", //换成自己的密码
"network": "tcp,udp",
"level": 1,
"ota": false
}
}
//include_socks
,
{
"protocol": "mtproto",
"port": 8089, //换成自己的端口
"tag": "tg-in",
"settings": {
"users": [
{
"secret": "2b8edd1857fe1939446afccb6700a523" //换成自己的,可以去https://www.veekxt.com/utils/v2ray_gen生成
}
]
}
}
//include_in_config
//
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
},
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "mtproto",
"settings": {},
"tag": "tg-out"
}
//include_out_config
//
],
"dns": {
"server": [
"1.1.1.1",
"1.0.0.1",
"8.8.8.8",
"8.8.4.4",
"localhost"
]
},
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "blocked"
},
{
"type": "field",
"inboundTag": ["tg-in"],
"outboundTag": "tg-out"
}
,
{
"type": "field",
"domain": [
"domain:epochtimes.com",
"domain:epochtimes.com.tw",
"domain:epochtimes.fr",
"domain:epochtimes.de",
"domain:epochtimes.jp",
"domain:epochtimes.ru",
"domain:epochtimes.co.il",
"domain:epochtimes.co.kr",
"domain:epochtimes-romania.com",
"domain:erabaru.net",
"domain:lagranepoca.com",
"domain:theepochtimes.com",
"domain:ntdtv.com",
"domain:ntd.tv",
"domain:ntdtv-dc.com",
"domain:ntdtv.com.tw",
"domain:minghui.org",
"domain:renminbao.com",
"domain:dafahao.com",
"domain:dongtaiwang.com",
"domain:falundafa.org",
"domain:wujieliulan.com",
"domain:ninecommentaries.com",
"domain:shenyun.com"
],
"outboundTag": "blocked"
} ,
{
"type": "field",
"protocol": [
"bittorrent"
],
"outboundTag": "blocked"
}
//include_ban_ad
//include_rules
//
]
},
"transport": {
"kcpSettings": {
"uplinkCapacity": 100,
"downlinkCapacity": 100,
"congestion": true
},
"sockopt": {
"tcpFastOpen": true
}
}
}
v2ray启动报code=exited, status=218/CAPABILITIES错误的解决方法
如果通过service v2ray start命令启动后,没有提示任何错误。但是通过service v2ray status查看状态后,发现启动失败,报这个错误:code=exited, status=218/CAPABILITIES
解决方法如下:
1、编辑v2ray的服务配置文件
vi /etc/systemd/system/v2ray.service
2、对文件内容做如下修改:
将:
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
改为:
CapabilityBoundingSet=~
AmbientCapabilities=