How to deploy V2Ray, Web-socket, TLS and Nginx for freely surfing the Internet

How to deploy V2Ray, Web-socket, TLS and Nginx for freely surfing the Internet

Enjoy it!

在最近一个月的红色浪潮中:自建线路被墙得简直非常夸张。

虽然按照上一篇指南,1分钟就能搭建好 Shadowsocks,但是几天一墙的尿性让人非常恼火。

机场老板云集的 Hostloc 投票结果显示,V2Ray + Websocket + TLS + Nginx 是一个比较成熟的解决方案。

好的,拥抱 V2Ray

零、准备

  • 域名 * 1
  • 会使用 Google
  • 国外VPS * 1:建议系统:CentOS 7+
  • 一定的 Linux 基础(至少知道 vim 等命令的用法)

一、安装 V2Ray-Core

官方的 V2Ray-Core 安装只需一条指令:(更多细节点这里)

bash <(curl -L -s https://install.direct/go.sh)

V2Ray 内核安装完毕,看到结果:

Install-v2ray-success
V2Ray 安装信息:
bin命令:/usr/bin/v2ray/v2ray 
配置文件:/etc/v2ray/config.json 
日志:/var/log/v2ray/access.log 和 /var/log/v2ray/error.log

V2Ray 命令行参数:
Usage of ./v2ray:
  -config string    Config file for V2Ray.
  -format string    Format of input file. (default "json")
  -test             Test config file only, without launching V2Ray server.
  -version          Show current version of V2Ray.

二、TLS 部署

TLS(Transport Layer Secure) 传输层安全协议是证书认证机制,即 SSL 的进阶版解决方案,在本方案中起到了加密数据内容的作用。TLS 需要一个域名,拥有域名之后务必记得:在 DNS 面板添加一个 A 记录指向你的 VPS 公网地址

这里用 Acme.sh 脚本生成 Let's Encrypt 的免费证书,本部分说明部分内容参考于 Acme.sh README

2.1 Acme 脚本安装

安装 acme 的依赖 socat,并下载 acme.sh:

yum install -y socat
curl https://get.acme.sh | sh

2.2 使用脚本生成证书

再次确保域名存在已经成功的指向当前操作的服务器的 A记录,Acme.sh 依据 DNS记录 校验域名拥有者的合法性并据此向 Let‘s Encrypt 申请 SSL证书。

~/.acme.sh/acme.sh --issue -d 自己的域名 --standalone -k ec-256

注意安装前要注意80端口占用情况: 如果报错 tcp port 80 is already used by (("nginx",pid=26308,fd=10), 执行killall nginx

生成结果中: *.cer 表示公钥(certificate?, *.key 表示私钥(private key)。

acme-result

注意:Let's Encrypt 的证书有效期只有 3 个月,可以手动更新证书,也可以配置定时任务执行 acme.sh 脚本自动续签证书

完成后可查看安全评级:https://www.ssllabs.com/ssltest/analyze.html?d=%E5%88%9A%E6%89%8D%E9%83%A8%E7%BD%B2%E5%A5%BDTLS%E7%9A%84%E5%9F%9F%E5%90%8D

三、Nginx 部署

Nginx 监听着服务器的 443(TLS默认端口),客户机器请求服务器的 443端口 (https://xxx) 握手检验TLS证书,之后 Nginx 把内容转发给部署在本地的 V2Ray 端口, 于是 Nginx 作为中间件承载建立 Websocket 隧道,从外界看来,就像是正常访问网页一样实现了代理过程。(可能描述不够准确)

3.1 安装 Nginx

默认的 Yum 仓库中没有 Nginx,需首先安装 EPEL-release 源:

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

再安装 Nginx:

yum install -y nginx
Nginx 安装信息:
应用程序:/usr/bin/nginx
配置文件:/etc/nginx/conf.d
日志默认存放位置:/var/log/nginx
程序默认存放位置:/usr/share/nginx/html

3.2 配置 Nginx 配置文件

新建存放 TLS 公钥密钥的文件夹 key/,并把生成的 TLS 移到配置文件夹中:

cd /etc/nginx/conf/conf.d && mkdir key
mv ~/.acme.sh/生成的域名证书文件夹/*.cer /etc/nginx/conf.d/key
mv ~/.acme.sh/生成的域名证书文件夹/*.key /etc/nginx/conf.d/key

新建 Nginx 配置文件:vi /etc/nginx/conf.d/v2ray.conf

server {
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    server_name  **你的域名**;
    root         /usr/share/nginx/html;

    ssl_certificate "conf.d/key/**替换证书名字**";
    ssl_certificate_key "conf.d/key/**替换密钥名字**";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location /ray {
proxy_redirect off;
proxy_pass http://127.0.0.1:10000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
    }
}

V2Ray 配置文件

vi /etc/v2ray/config.json

直接贴一个俺自己的配置文件了,更配置规则请查阅本文档:

UUID 可以在线生成:https://www.uuidgenerator.net/

注意:正常的 JSON 是不能有这些注释的。V2Ray 的 JSON配置文件支持 //、/* */ 形式的注释,所以不需要删除注解也可以运行,但是在编辑器中可能出现 JSON 格式化失败的情况。

{
  "log": {
      "access": "/var/log/v2ray/access.log", // 成功日志存放地址
      "error": "/var/log/v2ray/error.log", // 错误日志存放地址
      "loglevel": "warning" // 错误警告类型
  },
  "inbound": {
    "port": 10000, // 本地 V2Ray 监听端口
    "listen":"127.0.0.1",
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "你的uuid", // 输入生成的 UUID
          "alterId": 64
        }
      ]
    },
    "streamSettings":{ // 传输配置
      "network":"ws", // 传输协议为 Websocket
      "security": "auto", // 加密方式为 auto
      "wsSettings": {
         "connectionReuse": true,
         "path": "/ray" // 请求路径
     }
    }
  },
  "outbound": {
    "protocol": "freedom",
    "settings": {}
  },
  "outboundDetour": [
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ]
}

至此,所有的部署已经完成了,启动 V2Ray 和 Nginx ,然后就能着手客户端的设置了。

启动命令:
/usr/bin/nginx
/usr/bin/v2ray/v2ray

加入开机启动项:
systemctl enable v2ray
systemctl enable nginx

关闭防火墙(较粗暴):
service firewalld stop

四、客户端使用

客户端的使用过于简单,一对一填进去就行,这里就大概描述一下必须输入的数据项:

传输配置ws和对应的Path、安全性质TLS、协议Vmess

V2Ray必须配置的数据项

客户端的选择

经过横向使用对比后,个人的选择方案是:

五、为什么使用这套方案

Shadowsocks 先看看 Shadowsocks 发展的历史进程:单纯的 Shadowsocks 流加密 + OTA 够很容易被 GFW 识别。

于是,SIP004 草案提出使用 AEAD 算法替换,加密算法只能保证传输的数据内容,然而流量的特征还是容易被检测到。

然后,出现了混淆流量的方法,Simple-obfs 项目就是用于混淆流量的工具。思路是在原来的流量上叠加一层加密,使之更像正常的 HTTP 流量,以绕过 GFW 检测。但是,混淆依旧有一定的特征,问题还是没被解决。

V2Ray 别的代理一般都是使用 TCP、HTTP 或者自定义的传输协议和墙外的服务器连接。

V2Ray 这套方案是则是在墙外做了一个 HTTPs 服务,通过中间件 Nginx 以 Websocket 协议和墙外服务器传输数据,然后 Nginx 在服务器中用本地代理访问 V2Ray 并且返回数据。实现了更好的伪装。

这样一来,在墙看来:国外服务器传送的就是正常的网页数据包(即可实现真正意义上的 HTTPs 网站模拟),特征在一定程度上被大大降低。理论上来说能够降低被 ban IP 的几率。

啰嗦一句:本方案未必适合你,接下来上一个方案选择图:

譬如你对速度的要求很高就不建议本方案,有几个过程涉及的开销延迟是比较大的,适合自己的才是最好的。

How to choose a V2Ray scheme - Unknown Author

Related

更多好到爆炸的资料 + 本文参考:

V2Ray 设计理念

V2Ray 抗封锁最优配置

各个翻墙工具的协议进化

简单介绍一下网络连接的封锁与反封锁

v2-ui,一个全新的多协议多用户 V2Ray 面板

V2Ray 配置指南

V2Ray 搭建小记

WebSocket+TLS+Web

V2ray 实现 ws+tls+nginx 加密传输

因为水平有限可能存在错误描述,欢迎看到这里的朋友勘误

No rights reserved
Except where otherwise noted, content on this page is not copyrighted and is free to use.