准备工作
- 服务器:具有root权限且全球通,没有的看这里
- 系统:linux(以Debian 11为例)
- V2ray客户端
建立结点
安装v2ray
更新包信息
apt update
安装curl
apt install curl
安装v2ray
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
安装完毕后,控制台输出中有说明配置文件所在位置:
ExecStart=/usr/local/bin/v2ray run -config /usr/local/etc/v2ray/config.json
配置v2ray
打开配置文件
vi /usr/local/etc/v2ray/config.json
将文件替换为以下配置信息,并(输入命令:wq
)保存:
提示:shell中可按ctrl
+insert
复制,并按shift
+insert
粘贴
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbounds": [{
"port": 11055,
"protocol": "vmess",
"settings": {
"clients": [{
"id": "27848739-7e62-4138-9fd3-098a63964b6b",
"level": 1,
"alterId": 0
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/tech"
}
}
}
],
"outbounds": [{
"protocol": "freedom"
}
]
}
其中:
– port
为连接的端口,可随意选择未使用的端口
– id
将用作连接“密码”,可随机一个新的等长字段代替
– path
可修改为自己想要的路径
当然,如果觉得麻烦,也可以直接复制不做修改。
启动v2ray
启动并开机自启动:
systemctl start v2ray;systemctl enable v2ray
此时输入以下命令查看服务状态,应显示active(running)
:
systemctl status v2ray
连接服务器
在本地下载并打开v2ray客户端。新建v2ray结点,其中:
– 地址(address)
:服务器的公网IP
– 端口(port)
:配置文件中的port
– 用户ID(id)
:配置文件中的id
– 传输协议(network)
:配置文件中的network,为ws
– 路径(path)
:配置文件中的path,如果没改过则是/tech
设置完毕后,打开 www.google.com 应该可以看到回应。
开启BBR加速
BBR是一种新的拥塞控制算法,可以显著提升带宽与降低时延。
编辑系统配置文件
vi /etc/sysctl.conf
在文件最后,加入以下两行代码。
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
刷新系统配置文件
sysctl -p
最后,输入以下指令,验证输出分别为fq
和bbr
即可:
sysctl net.core.default_qdisc
sysctl net.ipv4.tcp_congestion_control
反向代理v2ray
反向代理可以避免服务直接暴露至公网,而经过反向代理服务器控制转发。由于反向代理程序位于服务器本机,因此基本不会产生时延,也不会影响带宽。
建议申请一个域名进行反代(网上有免费域名申请,可以谷歌一下),否则反代的作用将大打折扣。
下载nginx服务器
apt install -y nginx
配置站点文件
可以配置一个静态(甚至动态)的网站,让我们的服务器看起来更Coooool一些!(才不是为了伪装涅)
创建服务器站点文件
在任意文件夹下,新建名为index.html的文件并打开,此处以/var/www/html
为例:
vi /var/www/html/index.html
为站点编写主页文件
在打开的index.html中,加入以下代码。
此处可以自由发挥,只要是有效html文档即可:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>KarsonJo妙妙屋</title>
<style>
body {
margin: 0;
}
.ctn {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
.link {
background: #0007;
padding: 20px;
border-radius: 8px;
color: pink;
font-size: 72px;
}
.link:not(:hover) {
text-decoration: none;
}
</style>
</head>
<body>
<div class="ctn">
<a class="link" href="https://www.karsonjo.com">
欢迎访问我的博客!
</a>
</div>
</body>
</html>
设置nginx配置文件
先干掉默认的配置文件,我们不需要它,而且不希望它引起冲突!!
rm /etc/nginx/sites-enabled/default
新建nginx站点配置文件,名称随意,此处为v2ray.conf
vi /etc/nginx/conf.d/v2ray.conf
加入以下server
块
server{
listen 80;
server_name your.domain.com;
index index.html;
root /var/www/html/;
}
其中:
– server_name
为你的域名,如果没有域名,可以改为:_
– root
是站点的根目录,需要与站点文件路径匹配
注意!如果你的站点目录需要权限(比如位于
/root
文件夹下),需要打开主配置文件/etc/nginx/nginx.conf
,并将第一行的user
改为有权限的用户(比如root);否则将无法正常读取文件。
完毕后,需要重启nginx以刷新nginx配置文件:
systemctl restart nginx
验证站点访问性
此时,在浏览器中输入你的ip或者域名,应该就可以打开你的网站了!
nginx反代v2ray
在上一步的nginx配置文件的server
块内,加入以下内容:
location /tech {
if ($http_upgrade != "websocket") {
return 404;
}
proxy_redirect off;
proxy_pass http://127.0.0.1:11055;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
其中:
– location
:/tech
需要与v2ray配置中的path
对应(完全对应,不要额外加斜杠)
– proxy_pass
:后面的11055
对应配置中的port
(也不要在最后加斜杠)
然后重启nginx
systemctl restart nginx
配置v2ray结点
在v2ray客户端中复制你的结点,并做如下修改:
– 端口(port)
:nginx站点的端口,如果你按照教程,则是80
保存,连接,尝试访问谷歌,如无意外你应该能够正常打开。
至此,成功为我们的服务套上了一个正经站点。
但它不受TLS传输层安全保护,还是有一定风险。
配置TLS与CDN
本章节我们将使用TLS传输层安全保护我们的数据,并介绍用CDN对结点进行加速。
简单介绍
不涉及任何操作,不想看的可以放心跳过这部分。
什么是TLS
传输层安全TLS会加密整个HTTP Header + HTTP Body。因此在使用TLS后,外界无法获取包头的信息,使结点更加安全。
什么是CDN
CDN是内容分发网络,一般而言,CDN用于对数据的缓存与交付,以免暴露源站的地址以及节省源站流量。在该案例中,我们不会用到CDN的缓存功能,但其对源站的保护可以使结点更加安全;而且内容在经过CDN中转后,其的连接效果可能比直连效果更佳,从而达到加速效果。
简而言之,CDN也可视为是另一个反代服务器,只不过这个反代服务器位于互联网,而非服务器本机。
单独配置TLS
本文并不采取这种做法,因此该部分只做简要讨论。
你可以购买SSL或者生成自签证书配置TLS。
主要步骤大致如下:
1. 购买或生成你的SSL证书
2. 将证书加入nginx配置中(具体配置可参考下种做法的配置文件)
– 常用端口为443
– 可考虑将之前80端口的站点重定向至https的443站点
3. 复制上一步的v2ray结点,修改:
– 端口(port)
:修改为443
– 传输层安全(tls)
:开启为tls
使用cloudflare配置TLS与CDN
cloudflare作为赛博界一大慈善家,深得我们这群网络乞丐的痛爱,本步将介绍如何用cloudflare配置TLS与启用CDN加速。你需要先做如下准备:
– 准备一个域名
将域名接入Cloudflare托管
这一步就谷歌吧,一般按指引来就OK……
配置DNS
在左侧的站点菜单中,点击DNS,并做如下配置:
其中:
– Type
:选择A
– Name
:填写一个子域,比如:www
– Content
:填写你服务器的IP地址
– Proxy status
:记得点开小橙云!
生成SSL服务器证书
服务器证书用于向客户端(此处即cloudflare)证明自身的真实性。cloudflare接受两种证书:
– 受信任证书机构所签发的证书
– cloudflare签发的证书
因为前者比较难搞,因此使用cloudflare签发证书。
在左侧菜单点击SSL/TLS -> Origin Server,并按指引生成证书
注意:一旦刷新网页,私钥便永远无法再查看,妥善保存!!
生成后,将公钥(cert.pem
)与私钥(key.pem
)复制到服务器上:
vi /etc/ssl/cert.pem
vi /etc/ssl/key.pem
配置SSL客户端证书
客户端证书用于验证客户端(此处即cloudflare)的真实性。以保证站点流量源自cloudflare。
首先打开cloudflare侧的开关:
然后下载cloudflare的客户端证书,放到服务器上。
可执行此命令直接下载至/etc/ssl/coudflare.crt
中:
wget -O - https://developers.cloudflare.com/ssl/static/authenticated_origin_pull_ca.pem > /etc/ssl/cloudflare.crt
启用SSL
在左侧菜单中的SSL/TLS -> Overview 选单中,将加密模式设置为Full(strict)
nginx配置SSL站点
将nginx配置文件替换为如下内容:
server {
listen 80 default_server;
listen [::]:80 default_server;
charset utf-8;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
charset utf-8;
server_name example.com;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
root /var/www/html/;
index index.html index.htm;
location / {
index index.html index.htm;
}
location /tech {
if ($http_upgrade != "websocket") {
return 404;
}
proxy_redirect off;
proxy_pass http://127.0.0.1:11055;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- 80端口(http端口)重定向至443(https)
server_name
是你自己的域名。ssl_certificate
、ssl_certificate_key
、ssl_client_certificate
分别是公钥、私钥、cloudflare客户端证书的位置。- v2ray反代中的
/tech
、11055
需要对应v2ray配置文件。
重启nginx
systemctl restart nginx
此时使用https://
访问你之前的站点,应该可以正常打开。
配置v2ray结点
地址(address)
:你在cloudflare DNS中设置的域名子域。比如域名为example.com
子域为www
,则是www.example.com
端口(port)
:443
(https端口)用户ID(id)
:配置文件中的id传输协议(network)
:配置文件中的network,为ws路径(path)
:配置文件中的path,如果没改过则是/tech传输层安全(tls)
:打开tls
保存,并尝试访问谷歌,应可以正常打开。
Cloudflare加速
按上一步的配置,服务器流量已经通过cloudflare中转,但对某些连接cloudflare非常困难的地区而言,这不单止没有加速效果,反而更加慢了。
Cloudflare连接国外服务器的速度事实上是非常迅速的。缓慢的原因是因为天朝某些地区连接cloudflare的速度慢,如果我们能够找到连接cloudflare的最快途径,则可以提升整体速度。
Cloudflare优选IP
Cloudflare内部是一个庞大的网络,如果我们有办法以最快的速度接入cloudflare,然后再通过某种形式,使真正对源服务器的寻址发生在cloudflare内网中,则可以提升整个连接的速度:
本机--(慢)-->Cloudflare服务器--(快)-->解析至源服务器--(快)-->与源服务器交换报文
worker
利用worker我们就可以实现“接入cloudflare后‘解析’至源服务器”。
创建worker
在cloudflare账号菜单(非站点菜单)中选择worker,并新建一个worker
配置worker
将worker的代码替换成如下,这段代码将使接入cloudflare的请求路由至你的服务器中:
addEventListener(
"fetch",event => {
let url=new URL(event.request.url);
url.hostname="www.example.com";
let request=new Request(url,event.request);
event.respondWith(
fetch(request)
)
}
)
url.hostname="...";
填写你上一步使用的域名子域
点击 send
发送测试请求
响应应该为200 OK
,而且文档内容是你的index.html
的内容
为worker设置别名
由于worker已被ban,因此需要使用域名子域作为别名访问worker。
在DNS中新增一个A类型规则,新建一个子域,目标IP任意填写,比如1.2.3.4
(不影响,我们只是为了接入cloudflare),记得打开小橙云。
在站点菜单中选择Workers Routes。添加一个指向你worker的路由。
其中:
– 路由按照新建DNS规则填写,比如子域为w3
,填写w3.example.com/*
– worker选择刚刚新建的那个
配置v2ray
复制上一步的结点,做如下更改
– 地址(address)
:更改为worker别名,比如w3.example.com
– 伪装域名(host)
:同上
尝试打开谷歌,应该可以正常访问。
但此时我们还没做到“加速接入cloudflare”
优选IP
使用better-cloudflare-ip可以筛选出最快接入至cloudflare的IP。以websocket
形式接入后,凭借所谓“伪装域名”(其实就是websocket host
)可以路由至你的worker中,进而路由至你的源服务器。
你所做的只需:
– 下载better-cloudflare-ip
– 按指示优选一个IP
– 将上一步v2ray配置中的地址(address)
改为优选IP
好耶!
大功告成!现在就可以无障碍网上冲浪咯!妈妈再也不用担心我查不到谷歌的资料涅。