本文中内容皆为转载,原文链接如下
节点搭建教程,Vmess + WebSocket + TLS + 网站伪装 - Rennen
真的好久没更新了博客了。本篇文章教给读者搭建一个稳定防封、高速、并且使用 Vmess 协议,适用于各种客户端的节点。并且,只要按照教程中的步骤操作,就一定能够搭建成功。
本文绝大部分内容参考自 YouTube 上博主「不良林」的视频,但是作者对一些步骤做了改进,对小白读者更友好。例如申请证书和配置 Nginx 的操作,我们交由运维面板 1Panel 来完成。
为了实现目标,你需要准备:
- 一台 VPS(云服务器)。内存建议至少 1GB,地区香港新加坡最佳, 日本韩国次之,如果线路好的话欧美地区也不是不可以
- 一个域名,如果想要和教程完全一致,可以修改域名的 Nameserver 为 Cloudflare,不修改也没关系
- 一些基础的 Linux 服务器知识,你至少需要懂得如何使用 SSH 工具连接服务器(SSH 工具可以使用简单易用的 FinalShell)
本教程中的云服务器为使用 「阿里云高校学生 300 元无门槛优惠券」 购得的香港轻量应用服务器。虽然速率只有 30M,勉勉强强达到翻墙的标准,但胜在线路和延迟优秀(ITDOG 测速全绿)、价格低廉(24 元/月,300 块刚好能用一年)。
使用的域名为 6 位数字 xyz,在 Spaceship 上注册只需要 0.6 刀一年。
服务器开机后的基本优化,安装必要的软件
请点击 Bulleted List 中的超链接,查看每项操作对应的教程
- 主要需要完成的操作:
- 安装 1Panel (必须完成)
- 开启 BBR
- 添加 Swap(也可以在 1Panel 内完成)
- 自动同步服务器时间,由于 Vmess 协议的特性,若服务器和客户端时间不同步,节点会连接失败(也可以在 1Panel 内完成)
- 可选的额外操作:
- 如果使用国内大厂如阿里云或腾讯云的服务器,建议 DD 纯净系统,或使用一键脚本删除云服务器监控
- 修改默认 SSH 端口并关闭密码登录,开启密钥登录(也可以在 1Panel 内完成)
开启BBR
修改 TCP 拥塞控制算法为 BBR
以下内容摘自 亚马逊 AWS 官方博客——从流量控制算法谈网络优化 – 从 CUBIC 到 BBRv2 算法:
TCP 的 BBR(Bottleneck Bandwidth and Round-trip propagation time,BBR)是谷歌在2016年开发的一种新型的 TCP 拥塞控制算法。在此以前,互联网主要使用基于丢包的拥塞控制策略,只依靠丢失数据包的迹象作为减缓发送速率的信号。这样做的的效果还是不错的,但随着全球化互联网的迅速普及,我们所使用的网络已经发生了巨大的变化。我们拥有了越来越大的带宽,而现在的互联网质量也越来越好。于是我们观察到了一些新的问题,比如影响延迟的缓冲区膨胀的问题。BBR 尝试通过使用全新的拥塞控制来解决这个问题,它使用基于延迟而不是丢包作为决定发送速率的主要因素。
下图是一个原理的演示:

其实 BBR 算法具体的原理我也不是很懂,我们只需要知道 BBR 是一种新型拥塞控制算法,可以使 Linux 服务器 「显著地提高吞吐量和减少 TCP 连接的延迟」 即可。
网上有不少「一键开启 BBR」的脚本,但是有些脚本可能会涉及到修改内核。这里提供一种无需修改内核开启 BBR 的方法 (要求 KVM 虚拟化且 Linux 内核高于 4.9)。
#内核版本高于 4.9 就行。uname -recho "net.core.default_qdisc=fq" >> /etc/sysctl.confecho "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.confsysctl -p#执行下面命令,如果结果中带有bbr,则证明你的内核已开启bbr。sysctl net.ipv4.tcp_available_congestion_control在1panel面板添加Swap

我这里在面板添加后出了点问题,所以改为手动添加
手动添加Swap(可选)
查看 SWAP 空间
在开始创建之前,请先使用以下命令检查您的 Ubuntu 系统是否已启用 SWAP 空间:
sudo swapon --show该列表会包含所有的 SWAP 空间,包括 SWAP 分区和 SWAP 文件。如果输出为空,则表示当前系统尚未启用 SWAP 空间。
虽然可能,但同一台 Linux 计算机上有多个 SWAP 空间的情况并不常见。
创建 SWAP 文件
与 SWAP 分区相比,SWAP 文件具有一个重要的优势,即文件大小可以轻松调整,而无需触及磁盘分区来更改交换空间的大小。
在本节中,我们将创建一个新的 SWAP 文件,并将其添加到当前的交换池中。
-
在「终端」中使用以下命令创建一个空白文件:
Terminal window sudo dd if=/dev/zero of=/swapfile bs=1M count=4096- 文件大小计算为 1M × 4096 = 4G,要创建不同大小的文件,请更改相应的
count参数值。 /dev/zero是 Linux 系统中的一个特殊块设备,在每次读取时输出零字节。
- 文件大小计算为 1M × 4096 = 4G,要创建不同大小的文件,请更改相应的
-
使用以下命令设置正确的文件权限:
Terminal window sudo chmod 600 /swapfile -
使用使用
mkswap实用程序将文件格式化为 SWAP 空间:Terminal window sudo mkswap /swapfile -
使用以下命令激活 swap 文件并将其添加到交换池中:
Terminal window sudo swapon /swapfile -
要让创建好的 SWAP 空间永久生效,需要将 swapfile 路径内容写入到
/etc/fstab文件当中:Terminal window # 将以下内容写入/etc/fstab文件中/swapfile swap swap defaults 0 0
-
使用
swapon或free命令验证 SWAP 文件是否处于活动状态,如下所示:Terminal window sudo swapon --show##或者sudo free -h
参考教程:如何在 Ubuntu 中创建、删除和调整 SWAP 空间 - 系统极客
该文档中还有==「调整 Swappiness 值」==和==「删除Swap文件」==的教程,有需要可以参考
自动同步服务器时间

放行防火墙所有端口
如果使用的是大厂云服务器(如阿里云、腾讯云、Azure、DigitalOcean 等等),你需要完成此操作来避免后续不必要的麻烦。
以阿里云为例,可以在轻量应用服务器的管理后台放行端口,如果不确定要放行哪些端口的话,可以放行 TCP 协议的所有端口。
如果没有在服务器管理面板中找到防火墙,那么你的服务器可能是默认放行所有端口的。
安装 3x-ui 控制面板
Xray-core 是 v2ray-core 的超集,可以用于搭建包括 ss、vmess、vless、trojan 等一系列主流协议翻墙节点。
而 x-ui 是 Xray-core 的可视化在线面板,无需编辑繁琐的 JSON 配置文件即可搭建节点。然而,由于原版 x-ui 项目长时间未更新,这里使用一位伊朗开发者开发的 x-ui 衍生项目 3x-ui。
使用一键脚本进行安装:
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)安装时输入 y 并回车,选择手动配置面板登录信息。用户名和密码设置地越复杂越好,尽量不使用常用密码。面板的端口号建议设置为 10000,后面会用到。
使用 3x-ui 搭建节点
在浏览器地址栏中输入 服务器IP:10000 进入 3x-ui 面板。页面底部将语言切换为中文,登入 3x-ui 面板。面板界面如下:

左侧选择 入站列表,选择 添加入站(其实就是新建节点的意思)。各设置项按如下设置:
- 备注即为节点名。我的习惯是按照
地域 + 云服务厂商 + 速率或流量的格式进行修改 - 协议改为
vmess - 监听修改为
127.0.0.1 - 端口号建议设置为
10001,后面会用到 - 传输设置为
WS - 复制「客户」中随机生成的「电子邮件」,并复制到「小路」中,前面不要忘了加上斜杠。记住这个生成的路径,后面会用到
- 其余项均设置为默认即可
各设置项如下图所示:

1Panel 内安装 OpenResty(Nginx)、创建网站、申请证书
登录 1Panel 面板,找到网站一栏,点击一键安装 OpenResty。
Nginx 是一个集成了静态网站和反向代理等功能的 WEB 服务器,而 OpenResty 可以简单地看做是 Nginx 的增强版。
新建一个网站,类型选择反向代理。主域名填写 free.你购买的域名.域名后缀,代理地址先填写一个 baidu.com。点击确认添加网站。

网站添加成功后出现在网站列表中,点击列表中的文件夹小图标打开网站目录,选择 proxy 文件夹,打开 root.conf 文件,全选删除所有已有的内容并填入以下内容:
location / { proxy_pass https://repo1.maven.org/; #伪装网址 proxy_redirect off; proxy_ssl_server_name on; sub_filter_once off; sub_filter "repo1.maven.org" $server_name; proxy_set_header Host "repo1.maven.org"; 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";}
location /um1mo9a { #分流路径 proxy_redirect off; proxy_pass http://127.0.0.1:10001; #入站端口 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;}对以上配置文件的解释:
- 分流路径需要修改为刚刚创建节点时填写的
小路,也就是说只有该路径下的请求会被分流到我们搭建的节点上 - 平时在浏览器中输入
free.你购买的域名.域名后缀,会跳转到一个伪装站点上。这个伪装站点是 Maven 的中央仓库,满足大流量的特征。你也可以填写其他的网站,只要满足大流量的特征即可。
每次保存完配置文件后,需要重启或重载 Nginx,否则配置不会生效:

保存 root.conf 配置文件后,我们再来申请 SSL 证书。
1Panel 中选择左侧侧边栏中的 网站 - 证书,点击 ACME 账户 并选择创建 ACME 账户,输入你常用的邮箱,其余默认,点击确认。
点击蓝色的 申请证书 按钮,按照下图填写:

点击确认按钮,回到列表中,发现证书的状态为 等待申请,点击申请按钮,此时会要求到 DNS 解析服务商处添加以下解析记录:

添加 DNS 解析域名
如果没有修改域名的 Nameserver 的话,在哪里购买的域名,就要在哪里添加域名的解析记录。一共要添加两条 DNS 解析记录,以下以 Cloudflare 为例。
首先添加节点的 DNS 解析。名称填写 free,IP 地址填写服务器的 IP 地址,类型 A,如果使用 Cloudflare 的话,需要关闭代理状态(仅 DNS),文末有说明。

另外,你还需要添加 SSL 证书的 DNS 解析,只有添加该记录,你才能向 SSL 证书提供商证明该域名是你的,从而继续申请 SSL 证书。注意该 DNS 记录的类型为 TXT。
为网站绑定证书
回到 1Panel 中,添加好 DNS 记录后点击 确认 按钮申请证书。如果配置无误的话,SSL 证书就能够正常申请成功了。
下面开始为网站配置证书。再次打开 1Panel 的网站列表,点击配置,在侧边栏中选择 HTTPS,选择 启用 HTTPS,然后选择刚刚申请的证书:

到了这一步,节点就基本搭建完成了,下面来连接节点。
连接节点
下载最新版本的 v2rayN-With-Core.zip,解压并运行。
打开 3x-ui 的面板,导出创建好的节点的链接,如下图:

在 v2rayN 中,快捷键 Ctrl + V 导入刚刚复制的节点。但此时节点还不能正常使用,需要我们修改部分信息。
右键编辑服务器,地址填写 free.你购买的域名.域名后缀,端口号填写 443,加密方式建议选择 zero,效率更高(因为加密的工作已经在传输层由 TLS 帮我们完成了,就不需要二次加密了),传输层安全选择 TLS,其余默认。

点击确认后,右键节点,选择测试节点延迟和速度,如果上述所有内容都操作无误,那么节点能够正常测试出延迟和速度。

右键节点,选择 分享服务器,此时会生成节点的二维码和链接,方便其他设备使用。

补充说明
- 节点搭建完成后,如果有防火墙的话建议关闭 3x-ui 面板的端口,避免被爆破攻击,可以只保留
80443和服务器的 SSH 登录端口 - 可以使用订阅转换工具,生成适用于包括 Clash、Shadowrocket 在内的,各种客户端的订阅链接
- 如果机器的内存太小(例如低于 512M),由于 1Panel 会占用大概两三百 MB 的内存,所以此时我不建议安装 1Panel 面板,建议按照不良林的视频,只安装 Nginx 和 x-ui 面板,并用 acme.sh 申请证书
- 相比同样使用伪装站点的 Trojan 协议,为什么这种搭建方式还要更稳定一些?因为我们选择的 WebServer 是 Nginx,而不是 Trojan 的内置 WebServer。Nginx 是市场份额第一的 WebServer,因此我们搭建的节点对于墙来说特征更小,更像一个正常的资源网站。
Update: 如何为节点套上 CDN?
CDN 全称为 Content Delivery Network,也就是「内容分发网络」的意思。简单地讲,其原理相当于在本地网络和服务器之间架设一些中转服务器,静态资源可以缓存在中转服务器上减少源站压力,动态资源也可以经由中转服务器起到加速的作用,我们为节点套 CDN 主要是利用了后者的特性。
由于我们底层使用了 WebSocket 传输协议,所以理论上是可以套 CDN 的。
当然,前提是 CDN 厂商支持 WebSocket 协议,常见的支持 WebSocket 的 CDN 厂商有 Cloudflare(完全免费但是基础订阅线路一般),Amazon Cloudfront(收费,但是每个月好像有 1TB 的免费额度)。
以下以 Cloudflare 为例,Cloudflare 启用 CDN 非常简单且优雅,直接打开 DNS 解析设置页,为解析记录启用「小黄云」就可以了。

然而,之前我也这样尝试过套 CDN,却遇到了节点连接不上的问题,浏览器访问我设置的伪装域名也一直出现「页面重定向次数过多」的报错。今天结合评论区的提示终于找出了原因,如下图:


解决方案:
- 将 1Panel 中的 HTTP 选项从「HTTP 跳转到 HTTPS」改为「禁止 HTTP」
- 或者,将 Cloudflare 中的 SSL/TLS encryption mode 改为更高级的 Full 或者 Full(strict)
另外,由于国内的网络环境特殊,Cloudflare 的免费套餐的路由往往不直接走中国境内的服务器,所以套用 CDN 之后会有可能导致延迟增加,我分别测试了手上两台服务器套 CF 前后的测速对比,如下图:

可以看到我这里在套用 CDN 后在速度没有显著提升甚至下降的情况下,延迟却增加了很多。当然, CF 的 CDN 也不是一无是处,当服务器的 IP 被墙,可以套用 CDN 拯救被墙的 IP。由于每个人的网络环境不一样,你也可以自己对比套 CDN 前后的速度看是否有提升。 另外,网上还有一些「Cloudflare 优选 IP」的教程,我这里实在是懒得折腾了,就不展开了。