# Vmess+ws+tls搭建教程

By [0xC890](https://paragraph.com/@0xc890) · 2023-03-29

---

前言
--

我买了一台RackNerd的小鸡，看了一圈觉得最合适我了，**价格低、配置高、流量大、工单回复及时**，而且也刚好碰上活动，22年的黑五特惠（不知道为啥活动到现在还没结束），就下单了。这里不得不说工单回复即时这个优点。我因为支付方式还没准备好，先创建了订单，等过了两天才支付的，结果支付了机器一直在等待中，我就开了个工单，很快就有回复，大概等了两个钟左右机器就创建好了。我估计是因为我用信用卡的原因，他们后台得查我是不是在薅羊毛什么的，才需要这么久

VPS配置
-----

CPU：1

内存：1 GB

空间：17 GB（RAID 10）

流量：3 TB / 月（1Gbps端口）

IPv4：1 IPv6：0

$10.98 / 年

购买链接：

[https://my.racknerd.com/aff.php?aff=7324&pid=358](https://my.racknerd.com/aff.php?aff=7324&pid=358)

这个配置拿来搭代理刚刚好，一年11$，每个月3T的流量，还是1Gbps的端口。最主要的还是IP还支持解锁Tiktok和ChatGPT。NetFlix不持支，但是套个IPv6就可以解锁了

服务器配置
-----

系统是`Ubuntu20.04`

### 1.更新Packages&更行软件

    #切换到root
    sudo -i
    #升级Packages
    apt update -y
    #更新软件
    apt upgrade -y
    

### 2.安装常用软件

    #安装wget、curl、vim、git、net-tools、lrzsz
    apt install wget curl vim git net-tools lrzsz -y
    

### 3.修改系统时区

    #搜索列表是否有Shanghai
    timedatectl list-timezones | grep Shanghai
    #设置时区为Shanghai时区
    sudo timedatectl set-timezone Asia/Shanghai
    #查看系统时间
    date -R
    

> VMess 协议的认证基于时间，一定要保证服务器和客户端的系统时间相差要在 90 秒以内

### 4.开启TCP BBR 拥塞控制算法

    #下载脚本
    wget --no-check-certificate -O /opt/bbr.sh https://github.com/teddysun/across/raw/master/bbr.sh
    #修改脚本权限
    chmod 755 /opt/bbr.sh
    #运行脚本
    /opt/bbr.sh
    

> 注意：需要4.9及以上的内核才可以开bbr，因为前面upgrade已经把内核也一起更新了，所以运行这个脚本可以直接开启，无需再重启系统。

**4.1检查是否成功开启bbr**

    uname -r   #查看内核版本
    
    sysctl net.ipv4.tcp_available_congestion_control
    返回值一般为：
    net.ipv4.tcp_available_congestion_control = reno cubic bbr
    
    sysctl net.ipv4.tcp_congestion_control
    返回值一般为：
    net.ipv4.tcp_congestion_control = bbr
    
    sysctl net.core.default_qdisc
    返回值一般为：
    net.core.default_qdisc = fq
    
    lsmod | grep bbr
    返回值有tcp_bbr就说明bbr已启动
    tcp_bbr      20480 125
    

### 5.修改SSH端口 \[可选\]

默认的端口是22，大家都知道的东西，还有是一定风险的，防止别人暴力破解

    #修改配置
    vim /etc/ssh/sshd_config
    #在大概15行的位置
    #Port 22
    把'#'删除，修改'22'然后保存→ Port xxxx
    #重启sshd服务
    sudo service sshd restart
    #为了保证服务器不会失联，重启完sshd服务后，新建一个会话尝试是否能连接服务器
    

搭建Vmes+WebSocket+TLS
--------------------

> 搭建这套代理需要有域名，同时需要套Cloudflare

### 1.把域名添加到Cloudflare的NameServers下

### 2.给域名添加一个A解析

这个A解析的域名是用来伪装地址的，**在进行第三步前不要把小云朵打开**

### 3.安装服务

    #运行脚本
    wget https://git.io/tcp-wss.sh && bash tcp-wss.sh
    

这个脚本里面包含了：

*   安装并配置Nginx
    
*   自动为域名申请SSL证书
    
*   配置Vmess协议
    

### 4.前置Cloudflare

**4.1 开启SSL/TLS**

操作路径：点击SSL/TLS→Overview→选择Full或Full(strict)

![](https://storage.googleapis.com/papyrus_images/469b1c51c64b768bd357d8ef0102b6aebd4ecda5091e97765090da5615fec698.png)

**4.2 清理缓存**

清理CF缓存，点击 Caching > Configuration > 点击 Purge Everything 清理所有缓存

![](https://storage.googleapis.com/papyrus_images/e8ba9bd48fe07bf6d2965bbcc6a7717b87221d32db19f7a40daac1ab25e3cad3.png)

**4.3 开启DNS代理**

把小云朵打开（实际上不打开一样有效，但是在运行脚本前不能打开，否则会安装失败）

![](https://storage.googleapis.com/papyrus_images/c7c2076d3de0a1d4097f8435a3d611a6fa947fdc1d265bf40f14d0ed78a2fe78.png)

### 5.连接代理

安装成功后终端会显示配置参数：

    ===========配置参数=============
    地址：${domain}
    端口：443/8080
    UUID：${v2uuid}
    加密方式：aes-128-gcm
    传输协议：ws
    路径：/${v2path}
    底层传输：tls
    注意：8080是免流端口不需要打开tls
    

依照参数到客户端进行配置

![](https://storage.googleapis.com/papyrus_images/2249b178455abe12c7ce68b3bfc7aa2675b18f8a8918347e01f6ccd843b045dc.png)

### 6.修改Nginx配置

通过观察脚本的源代码，我们可以知道，我们的域名根路径`/`的代理内容是只有`Hello World`

的，如果我们的服务器流量跑大了之后，被防火墙检测到只有两个单词的页面天天跑那么多流量肯定会被怀疑，所以我们需要修改根路径 `/` 的反代目标地址，找一个看起来就能用很多流量的网站，一般推荐一些自建的网盘地址，符合天天大流量的可能特征

这是脚本里自动配置的内容：

    location / {
                default_type text/plain;
                return 200 "Hello World !";
            }
    

把这一段的内容替换成下面这段：

`https://www.fan-2000.com` 这个网盘地址是在Google随便找的

    location / {
                proxy_pass <https://www.fan-2000.com>;
                proxy_redirect off;
                proxy_ssl_server_name on;
                sub_filter_once off;
                sub_filter "fan-2000.com" $server_name;
                proxy_set_header Host "fan-2000.com";
                proxy_set_header Referer $http_referer;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header User-Agent $http_user_agent;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header Accept-Encoding "";
                proxy_set_header Accept-Language "zh-CN";
            }
    

修改后保存并退出，然后重新加载Nginx配置

至此，一套Vmess+ws+tls代理就搭建完成了。

---

*Originally published on [0xC890](https://paragraph.com/@0xc890/vmess-ws-tls)*
