新型的gRPC协议好用吗?WebSocket已成历史?VLESS+gRPC+TLS ,HTTP/2的升级版(可以套用CDN),Xray的gRPC协议搭建!

文章导读目录

 

前言

2021年的三月份,Xray-core发布了V1.4.0的版本,作者提出了WebSocket 0-RTT & gRPC Transport。

对于 WebSocket 0-RTT,就是在原有 Websocket 协议上更进一步的优化以及提升,我们在服务端配置不变的情况下,客户端仅做小小修改,就可体验新特性带来的速度提升。也就是在客户端的 Websocket 路径后面增加一串字符串而已。

其实更多人关注的是 gRPC 协议。从那天起,gRPC 作为 Xray 的一种新型传输协议和大伙儿见了面,目前已经过去3个多月了,gRPC 经过各位大佬们的不断测试,目前也是逐渐完善了。

什么是 Xray 的 gRPC

gRPC 就是谷歌版的 RPC,服务端与客户端高效通讯的框架。

基于HTTP/2的标准设计,也就是说,你可以认为 gRPC 是 HTTP/2 的进阶版,h2 的所有特性,它都有。

另外,使用 gRPC 协议,客户端可以充分利用高级流和链接功能,那说成人话就是,有助于节省带宽、降低 TCP 的链接次数,从而减少 CPU 的占用、以及电池的损耗。

看到这些优点,不难发现,gRPC 在移动的设备上使用,肯定是最佳的。

以上内容引用自 “ 无主界(idleleo) ” 博客文章

准备工作

1、VPS 一台,重置好主流的操作系统。本视频使用 Debian 系统进行演示。

2、域名一个,做好相应的解析

(若是需要套用 CDN,请 自行托管域名到 CDN,并在 Cloudflare 里面的 “网络” 里面开启 gRPC 选项)

gRPC 不支持指定 Host。请在出站代理地址中填写 正确的域名 ,或在 (x)tlsSettings 中填写 ServerName,否则无法连接。

gRPC 不支持回落到其他服务。

gRPC 服务存在被主动探测的风险。建议使用 Caddy 或 Nginx 等反向代理工具,通过 Path 前置分流

3、Nginx 的版本,必须大于 1.13.10+ ,这个视频中有提到!

搭建 Xray 的 gRPC

系统更新并安装相关组件

CentOS 命令

  1. yum update -y
  2. yum install epel-release -y
  3. yum install -y curl tar socat wget
  4. yum install -y nginx
  5. systemctl start nginx

CentOS 执行上面的更新命令以后,最好是手动重启一下自己的 VPS,一定确保自己的 VPS 成功重启。

重要:请自行关闭防火墙

  1. firewall-cmd --state # 查看防火墙状态
  2. systemctl stop firewalld.service # 停止防火墙
  3. systemctl disable firewalld.service # 禁止防火墙开机自启

Debian 命令

添加 最新 Nginx 源( SSH 工具打开 VPS 如下文件:/etc/apt/sources.list ,在后面添加如下源,根据自己的系统选择相应的源 )

  1. #Debian 7.0:
  2. deb http://nginx.org/packages/debian/ wheezy nginx
  3. deb-src http://nginx.org/packages/debian/ wheezy nginx
  4.  
  5. #Debian 8.0:
  6. deb http://nginx.org/packages/debian/ jessie nginx
  7. deb-src http://nginx.org/packages/debian/ jessie nginx
  8.  
  9. #Debian 9.0:
  10. deb http://nginx.org/packages/debian/ stretch nginx
  11. deb-src http://nginx.org/packages/debian/ stretch nginx

然后执行下面的命令:

  1. wget http://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key
  2. apt update -y
  3. apt install -y nginx
  4. apt install -y curl tar socat wget
  5. systemctl start nginx

验证 Nginx 是否安装成功

1、在 VPS 输入 nginx -V ,查看 Nginx 的版本,确定版本大于 1.13.10+ 。不然不支持 gRPC。

2、在浏览器输入你的 VPS IP,得到如下界面,证明 Nginx 安装成功!(以下是的 Nginx 的截图,或许和你的不一样,只要能看到 Nginx 的欢迎界面就好。)

安装官方 Xray 服务

  1. bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install -u root

申请SSL证书

因为Acme脚本更新 Please update your account with an email address first.,目前需要申请一个账号才可以申请,所以原先的命令做了下面的更新,更改下面的域名以及邮箱为你自己的。具体更多的最新 ACME 脚本申请证书请 点击这里

  1. curl https://get.acme.sh | sh
  2. systemctl stop nginx
  3. ~/.acme.sh/acme.sh --register-account -m xxxxxx@gmail.com
  4. ~/.acme.sh/acme.sh --issue -d test.bozai1.xyz --standalone
  5. ~/.acme.sh/acme.sh --installcert -d test.bozai1.xyz --key-file /root/private.key --fullchain-file /root/cert.crt

Nginx 配置文件

此配置文件的 location 字段,可以用来配置宝塔面板。

若是 CentOS,请直接替换/etc/nginx/nginx.conf配置文件中的 server 字段。注意 { } 符号

若是 Debian,请直接在 /etc/nginx/sites-enabled/default (若是找不到该文件,就是 /etc/nginx/conf.d/default.conf  )中,删除原有配置文件,并粘贴下面配置文件。

  1. server {
  2. listen 80;
  3. listen 443 ssl http2;
  4. server_name test.bozai1.xyz; # 主机头,请更改为你绑定的域名
  5. index index.html; # 默认页面
  6. root /usr/share/nginx/html; # 网页根目录路径
  7. ssl_certificate /root/cert.crt; # 证书路径
  8. ssl_certificate_key /root/private.key; # 密钥路径
  9. ssl_protocols TLSv1.2 TLSv1.3;
  10. 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;
  11. # 在 location 后填写 /{你的 ServiceName}
  12. location /test.bozai1.xyz {
  13. if ($content_type !~ "application/grpc") {
  14. return 404;
  15. }
  16. client_max_body_size 0;
  17. client_body_timeout 1071906480m;
  18. grpc_read_timeout 1071906480m;
  19. grpc_pass grpc://127.0.0.1:2002;
  20. }
  21. }

配置完毕以后,请开启或是重启 Nginx 服务 systemctl restart nginx ,若是不出现报错,证明 Nginx 配置文件无误。

Xray 配置文件

在 VPS 目录找到如下文件:/usr/local/etc/xray/config.json ,贴入以下代码

  1. {
  2. "log": {
  3. "loglevel": "warning"
  4. },
  5. "inbounds": [
  6. {
  7. "port": 2002,
  8. "listen": "127.0.0.1",
  9. "protocol": "vless",
  10. "settings": {
  11. "clients": [
  12. {
  13. "id": "5a5a3a75-d739-46d3-9773-c5139410a4a5" // 填写你的 UUID
  14. }
  15. ],
  16. "decryption": "none"
  17. },
  18. "streamSettings": {
  19. "network": "grpc",
  20. "grpcSettings": {
  21. "serviceName": "test.bozai1.xyz" // 填写你的 ServiceName
  22. }
  23. }
  24. }
  25. ],
  26. "outbounds": [
  27. {
  28. "tag": "direct",
  29. "protocol": "freedom",
  30. "settings": {}
  31. },
  32. {
  33. "tag": "blocked",
  34. "protocol": "blackhole",
  35. "settings": {}
  36. }
  37. ],
  38. "routing": {
  39. "domainStrategy": "AsIs",
  40. "rules": [
  41. {
  42. "type": "field",
  43. "ip": [
  44. "geoip:private"
  45. ],
  46. "outboundTag": "blocked"
  47. }
  48. ]
  49. }
  50. }

注意:更改 Xray 配置以后,一定需要记得重启 Xray 以及 Nginx 服务。 systemctl restart xray  重启 ,查看 Xray是否报错(运行状态) systemctl status xray

下载伪装网站及部署

默认的网站主程序文件夹在 /usr/share/nginx/html/ ,大家可以自行的替换里面的任何东西(整站程序)

  1. rm -rf /usr/share/nginx/html/*
  2. cd /usr/share/nginx/html/
  3. wget https://github.com/V2RaySSR/Trojan/raw/master/web.zip
  4. unzip web.zip
  5. systemctl restart nginx

支持 gRPC 的 Qv2ray 客户端

Windwos 版本的 V2rayNG,全线支持 gRPC。

而目前我只找到了支持 Windows 64 位的 支持 gRPC 的 Qv2ray 客户端,下载地址:点击下载

(若是,大家找到支持 gRPC 的 MacOS 版本的 Qv2ray,请告诉我。 )

安卓手机请继续使用 V2rayNG,而 IOS 手机则可以使用 小火箭。

 

卸载 Nginx

因为,只有版本号大于 1.13.10+ 的 Nginx 才可以支持到 gRPC,所以,列出卸载 Nginx 的命令,供大家使用。
以下为 Nginx 的卸载命令:

  1. apt-get --purge remove nginx -y # 卸载删除 nginx
  2. apt-get autoremove -y # 罗列出与nginx相关的软件自动移除全部不使用的软件包
  3. dpkg --get-selections|grep nginx # 罗列出与nginx相关的软件
  4. apt-get --purge remove nginx -y # 删除查询出与nginx有关的软件
  5. apt-get --purge remove nginx-common -y # 删除查询出与nginx有关的软件
  6. apt-get --purge remove nginx-core -y # 删除查询出与nginx有关的软件

后记

总体来说,gRPC作为一种新型的协议,还需要大家的验证!到底是否好用,或是到底有没有速度的提升?这个都需要大家自己的尝试!就像很多人觉得 Trojan 比 Xray 好用,有些人觉得 V2ray 比 Trojan 好用一样!