转载说明
本文整理自 LINUX DO 社区作者的保姆级教程(原文:自建代理节点教程——零基础从头搭建你的专属 VLESS+Reality 节点,发布于 2026.3.13,4.10 最后更新),经本博客整理排版后转载收录,版权归原作者所有。文中「L 站 / 佬友」等称呼均指 LINUX DO 社区。
这是一篇面向完全没有相关经验读者的手把手教程:从购买服务器开始,一步步连接、搭建、配置属于自己的 VLESS+Reality 代理节点,并大致理解每一步背后的原理,最后甚至可以用自己的域名作为掩护。
观前声明:本文所述是一个作者自己跑通实现的方法,在工程实现上可能存在更优、更安全、更便捷的方法。另外,如有任何不理解的地方,欢迎到原帖评论区提问。
预计耗时:3 小时
预算:约 120 元/月(搬瓦工服务器)+ 10 元/年(可选域名)
前置要求:一个绑定了银行卡的支付宝账户(用于购买服务器和域名)
目录
-1 · 什么是 GFW,为什么我们需要代理
00 · 代理的原理和自己部署代理
01 · 购买服务器
02 · 测试网络质量
03 · SSH 连接服务器
04 · 初始化系统
05 · 安装 3x-ui 面板
06 · 申请 SSL 证书
07 · 配置 VLESS+Reality 协议节点
08 · 测试节点
09 · 转换为 Clash 配置(YAML)
10 · 多用户管理
11 · 自己搭建网站并伪装自己(选做)
!! · 关键踩坑记录
-1 · 什么是 GFW,为什么我们需要代理
GFW
GFW 是中华人民共和国的网络审查系统。它实施黑名单屏蔽制度:检测你发出的网络请求,如果目标是未经审查的网站(Google、YouTube 等),就把这个连接直接掐断。因此,如果我们为了学习或工作要访问这些被屏蔽的网站,要做的,就是让 GFW "看不懂" 我们在做什么,让它当作合法目标进行处理。
请注意,2021 年 11 月 14 日,中央网络安全和信息化委员会办公室(国家互联网信息办公室)出台《网络数据安全管理条例(征求意见稿)》,其中第四十一条提到:
第四十一条 国家建立数据跨境安全网关,对来源于中华人民共和国境外、法律和行政法规禁止发布或者传输的信息予以阻断传播。
任何个人和组织不得提供用于穿透、绕过数据跨境安全网关的程序、工具、线路等,不得为穿透、绕过数据跨境安全网关提供互联网接入、服务器托管、技术支持、传播推广、支付结算、应用下载等服务。
境内用户访问境内网络的,其流量不得被路由至境外。
由此,任何买卖、搭建个人代理的行为存在一定法律风险。在此提出倡议:
仅利用代理进行学习和工作的必要行为,遵守国家法律法规,自觉抵制不良信息。
另外,如果你只是想找个便宜代理翻墙(并不想了解原理、自己部署),那这篇教程可以到此为止:直接去 Clash Verge Rev 的 Releases 下载 clash-verge,导入你搞到的节点就好。手机上,安卓可以用 Clash,苹果可以买美区 Stash(支持 Clash 格式),用小火箭的话直接扫节点二维码导入即可。
如果你还想了解更多的原理并自己部署代理,再往下看。
00 · 代理的原理和自己部署代理
代理的工作原理
常见的方法是利用境外的一台服务器当作代理:访问境外网站时,流量不直接去目标网站,而是先发给这台服务器,服务器再代为访问并把结果传回来。GFW 看到的只是你和那台服务器之间的通信,而这个通信被我们伪装成了普通的 HTTPS 流量。GFW 实施的是黑名单制度(不断屏蔽 IP,而不是只允许访问特定 IP),因此我们对陌生 IP 的访问大概率不会被识别并屏蔽。
你的电脑 ──加密流量──▶ 境外VPS ──正常请求──▶ 境外网站
GFW 看到的:你在访问一个随机的 HTTPS 网站 → 放行
为什么要自己部署代理服务器
网上分享的公用节点和购买的代理,日常浏览信息够用。但如果你要用它处理重要个人信息,或从事金融服务等需要极度隐私和安全的场景,公用代理的弊端就显现出来了:使用人数多,高峰时段容易拥堵,人数超标还可能让各大网站触发风控,使 IP "变脏"——这样我们注册网站(例如 Google)的时候就会备受折磨;同时如果代理商不怀好意,你的信息可能被监视并盗取。从安全角度来看,自己部署代理是更好的选择。
01 · 购买服务器
什么是 VPS
VPS(虚拟私人服务器)就是你在机房租用的一台独立服务器,有固定 IP 地址,我们用它做代理的中转。如果你薅到了 GitHub Edu 的服务、Oracle 云、微软云等各类服务器,只要测一下 IP 然后试着连接,可以就都没问题。手头紧凑的话可以购买 RackNerd(新年促销套餐 11 美刀/年,支持支付宝,但有概率遇到坏 IP)。我们对 VPS 的配置要求很低,买最便宜的套餐即可。

推荐:搬瓦工 CN2 GIA
选择 CN2 GIA 线路套餐,访问 CN2 GIA network for your VPS - BandwagonHost VPS,翻到页面底部,根据自己的需求选择香港或洛杉矶节点。
CN2 GIA 是什么?
CN2 GIA 是中国电信的顶级骨干网线路,虽然价格比普通 VPS 贵,但延迟更低,丢包更少。
推荐机房选 Los Angeles DC6 或 DC9,对国内延迟最优。好处是支持支付宝支付,但需要你的支付宝绑定了银行卡。

套餐买最便宜的三个月 49$ 那款(第一个):

加入 Cart,然后 Checkout:

注册账号页面:名字地址可以随便填(别忘了就行),但邮箱要真的,所有信息都发往邮箱:

支付选择 Alipay(支付宝),需要绑定银行卡(要换成美元):

系统选择
购买完成后记录以下信息,后续所有操作都会用到:
服务器 IP 地址
root 密码
KiwiVM 控制台地址和密码
KiwiVM 控制台:救命用的备用入口
搬瓦工提供 KiwiVM 控制台,里面有 VNC 功能——就算 SSH 断了、密码忘了,也能直接在浏览器里操作服务器。务必记录这个地址和密码,关键时刻能救命。
先登进去,选择 Install new OS,选 Ubuntu 24.04 重装一下,大概 1-2 分钟完成。
02 · 测试网络质量
为什么先测试
服务器的 IP 可能已经被 GFW 封锁。买完之后先测一下,确认 IP 没问题再继续操作,免得白费力气。如果确认 IP 已被封锁,可以申请更换节点(换 IP)。
Ping 测试:确认 IP 没被封
在 Windows 命令提示符(cmd)或终端里执行:
ping 你的服务器IP
或者使用 ping.pe,输入 IP,结果更直观。例如作者的:

看结果:
有回应,延迟在 50~300ms 之间 → IP 没被封,可以继续
全部
Request timed out/ 100% 丢包 → IP 被封,找服务商换 IP
注意:ping 通不代表一切正常
ping 用的是 ICMP 协议,GFW 有时候不封 ICMP 但会封 TCP。后续如果节点连接失败,要进一步确认流量是否到达服务器(见踩坑记录)。
03 · SSH 连接服务器
什么是 SSH
SSH 是远程控制服务器的工具。你在自己电脑上输入命令,命令通过加密通道传到服务器执行。
连接
ssh root@你的服务器IP

点 Yes,然后输密码。
输密码时屏幕没有反应是正常的
SSH 出于安全考虑,输入密码时屏幕不显示任何字符(包括星号也不显示),正常输完按回车即可。
出现 root@服务器名:~# 说明连接成功:

04 · 初始化系统
SSH 连上服务器后,第一件事是更新系统,避免后续安装出现兼容性问题:
apt update && apt upgrade -y
如果过程中询问是否保留某个配置文件,输入 N 回车,保留现有配置即可。
apt 是什么?
apt 是 Ubuntu 的包管理器,相当于苹果手机的 App Store。apt update是刷新软件列表,apt upgrade是把已装的软件更新到最新版本,-y的意思是遇到所有询问自动选"是"。
05 · 安装 3x-ui 面板
什么是 x-ui
x-ui 是一个带有网页界面的 xray 管理工具。xray 是代理软件的核心引擎,配置文件比较复杂;x-ui 在它上面套了一个图形化界面,让我们不用手写 JSON 配置文件。
一键安装脚本
执行:
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
安装过程中会提示设置:
用户名:自定义,记下来
密码:自定义,记下来
面板端口:默认 54321,可以不改
访问路径:会生成一个随机路径,记下来
安装完成后,面板地址格式为:https://你的IP:54321/随机路径。
验证安装成功
执行x-ui status,看到Active: active (running)说明面板正在运行。
06 · 申请 SSL 证书
x-ui 面板通过 HTTPS 访问,需要证书才能加密通信;Reality 协议也依赖 TLS。证书免费申请,会自动续期。
安装脚本完成后会自动进入 SSL 申请环节,看到以下提示时:
Choose an option (default 2 for IP):
直接回车选默认的 2(为 IP 地址申请证书),等待申请完成即可。有效期短,但自动续期,无需手动管理。
07 · 配置 VLESS+Reality 节点
Reality 的伪装原理
Reality 在握手时会真正去访问"伪装目标"网站(Target),把它的 TLS 握手行为原封不动地转发给客户端。这样 GFW 看到的流量特征和真正访问那个网站完全一样,极难识别。
关键:伪装目标的选择非常重要,选错了会导致客户端无法连接(详见踩坑记录)。
添加入站(Inbound)
登入面板:

在 x-ui 面板 → 入站列表 → 添加入站:

按下表填写:
填完后点 生成证书(自动生成公钥私钥),再点 添加 保存。大概填完类似这样:


然后新建客户端,flow 改成 xtls-rprx-vision:

记录关键参数
入站创建好后,点 分享 或 二维码 按钮,复制 VLESS 链接。链接格式如下:
vless://UUID@服务器IP:443?type=tcp&security=reality&pbk=公钥&fp=chrome&sni=www.apple.com&sid=ShortID&flow=xtls-rprx-vision
给他人分享时进入分享网页也可以,类似这样:

08 · 测试节点
直接写 Clash 格式太繁琐,v2rayN 直接支持 VLESS 链接,可以调好后再转换。如果对自己的手艺很有信心,可以跳过这一步。
下载:Releases · 2dust/v2rayN · GitHub 最新版
v2rayN-windows-64.zip解压,以管理员身份运行
v2rayN.exe右键托盘图标 → 从剪贴板导入分享链接
选中节点,右键 → 设为活动服务器
底部系统代理选 自动配置系统代理
路由选 V4-全局(Global)
开启底部 TUN 模式(需要管理员权限才能开)
为什么要开 TUN 模式?
系统代理模式只能代理"听话"的软件(浏览器等)。TUN 模式在系统里创建一个虚拟网卡,强制接管所有流量,不会漏。
验证是否成功
浏览器打开 https://www.google.com,能访问
访问 https://ip.sb,显示的 IP 是服务器所在地(如美国洛杉矶)
延迟显示 -1 怎么办?
-1ms 表示协议层握手失败,不是 TCP 连不上的问题。最常见原因是后量子加密兼容性问题(见踩坑记录),解决方案是把伪装目标改为www.apple.com。
09 · 转换为 Clash 配置(YAML)
为什么用 Clash
Clash(Mihomo 内核)比 v2rayN 功能更强,支持按规则分流——国内流量直连、国外流量走代理。推荐日常使用 Clash Verge。
下载 Clash Verge
原版 Clash 已停止维护,推荐使用社区续作 Clash Verge Rev:
下载地址:Releases · clash-verge-rev/clash-verge-rev · GitHub
Windows →
clash-verge_x.x.x_x64-setup.exeMac(M 芯片)→
clash-verge_x.x.x_aarch64.dmgMac(Intel)→
clash-verge_x.x.x_x64.dmg
手写配置文件(最可靠)
转换工具经常出错,最稳妥的方式是直接写配置文件。在 Clash Verge 里新建配置,粘贴以下内容(替换尖括号内容):
proxies:
- name: "节点名称"
type: vless
server: <服务器IP>
port: 443
uuid: <你的UUID>
flow: xtls-rprx-vision
tls: true
udp: true
network: tcp
reality-opts:
public-key: <公钥>
short-id: <Short ID>
servername: www.apple.com
client-fingerprint: chrome
proxy-groups:
- name: "节点选择"
type: select
proxies:
- 节点名称
- DIRECT
rules:
- DOMAIN-SUFFIX,cn,DIRECT # .cn 域名直连
- GEOIP,CN,DIRECT # 中国IP直连
- MATCH,节点选择 # 其余走代理
每个字段的含义
如果懒得自己写,可以用 https://acl4ssr-sub.github.io/ 自动转换:好处是白名单比较全,用起来可能更流畅;坏处是文件比较臃肿,且可能有各种泄露风险。
10 · 多用户管理
给朋友添加独立账号
在 x-ui 面板 → 入站列表 → 编辑入站 → 展开客户端数量 → 添加客户端。
添加后在分享页面会看到每个 UUID 对应的独立 VLESS 链接,把对应的发给对方即可。
为什么要用独立 UUID 而不是共用?
独立 UUID 的好处是可以单独限速、看各人流量消耗、随时踢人而不影响其他人。不想精细管理的话,直接共用同一个 UUID 也完全没问题。
11 · 自己搭建网站并伪装自己(选做)
完成上述所有步骤后,你已经得到了一个可用的代理节点,但仍存在一定风险:大厂的证书被 GFW 研究得很透彻,如果你在短时间内上传大量数据(例如看视频、下载大文件),防火墙会发现端倪("为什么这个用户朝 apple.com 的主页一分钟内发送了 500MB?"),从而强制阻断连接。因此更推荐"偷邻居"或者"偷自己":
偷邻居:把伪装目标换成不常用的正规网站,降低特征识别概率。这位佬友的评论讲得非常详细:

偷自己:在自己 VPS 上跑一个真实的、有域名的网站。流程如下。
原理
不再借用 Apple 或其他大厂的证书,而是在自己的 VPS 上跑一个真实的、拥有域名的网站。实现方式:Xray 站在最前端占据 443 端口处理一切流量——如果流量特征是代理请求(附加了你特定的参数),就执行代理;如果是任何其他东西,就转发给内部端口(作者用的是 8443),流量被转发到 Nginx,展示一个无害的网页。这样 GFW 看到的是:所有流量都走 443 端口,且访问时证书、地址等都没问题;最重要的是,如果任何人真的访问那个网址,还有一个真的网站。这种方法几乎没有破绽——只要不是用得太猖獗,甚至开始销售代理服务,风险极小。
形式化地:
理解原理之后,接下来的步骤顺序无所谓,我们需要:一个网址和 HTTPS 证书,以及一个网页。因为网址需要购买,我们最后做。
01 · 安装 Nginx
SSH 进入服务器后运行:
apt update && apt install nginx -y
验证是否成功:
systemctl status nginx
看到 active (running) 即可。
02 · 撰写 HTML 文件
在本地准备好网站的静态 HTML 文件(随便写几个,或者让大模型帮你搞几个),保存到一个路径(注意这个路径最好不要有中文、奇怪的字符和空格,因为命令行不一定支持):
scp C:\index.html root@你的IP:/var/www/html/
scp— secure copy,通过 SSH 传文件C:\index.html— 本地文件路径root@你的IP地址— 用 root 用户连服务器:/var/www/html/— 传到服务器的这个路径,这是 Nginx 默认网站目录
传完之后浏览器访问 http://你的IP地址,看看有没有显示你的静态网页。
03 · 购买并配置域名
作者采用 Namesilo:便宜,支持支付宝,.top 域名第一年只要 $1.88。

支付选项有点奇葩,一开始没找到支付宝,在这里选 See more:

这个颜色的就是支付宝:

购买后到主页进入 Active Domain:


点击域名进入配置界面:

点击 DNS,把 @ 和 www 都改成你的服务器 IP。
等待几分钟(作者只等了半分钟)DNS 生效后,再申请证书。
04 · 获取证书
先安装 Certbot:
apt install certbot python3-certbot-nginx -y
certbot是自动申请和续期 SSL 证书的工具python3-certbot-nginx是 Nginx 插件,让 certbot 能直接读写 Nginx 配置
申请 HTTPS 证书(更安全,看起来也更像正常的网站):
certbot --nginx -d 你的域名 -d www.你的域名
这在做什么: Certbot 会自动联系 Let's Encrypt,证明你对这个域名有控制权(通过访问你服务器上的一个临时文件来验证),然后签发证书,并自动修改 Nginx 配置加上 HTTPS。
运行后有几个交互提示:
要求输入邮箱 — 随便填一个,用于证书过期提醒
询问是否同意服务条款 — 输入
Y询问是否接收邮件 — 输入
N
注意: 这一步要求 DNS 已经生效,即域名能解析到你的 IP。如果报错说找不到域名,等几分钟再试。
失败的话类似这样:
Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems:
Domain: www.*.top
Type: unauthorized
Detail: Invalid response from http://www.*.top/...
Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot. Ensure the listed domains point to this nginx server and that it is accessible from the internet.
成功的话,会输出:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/*.top/fullchain.pem
Key is saved at: /etc/letsencrypt/live/*.top/privkey.pem
This certificate expires on ...
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for *.top to /etc/nginx/sites-enabled/*.top
Congratulations! You have successfully enabled HTTPS
05 · 更改 x-ui 配置和 Nginx 配置并测试
Nginx 配置(/etc/nginx/sites-available/你的域名):
nano /etc/nginx/sites-available/你的域名
server {
listen 8443 ssl;
server_name 你的域名 www.你的域名;
ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
粘贴完:Ctrl+S 保存 → Ctrl+X 退出。
然后运行这两条(创建软链接启用配置,并测试语法):
ln -s /etc/nginx/sites-available/你的域名 /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
如果输出是这样就没问题:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
x-ui 面板改动:
在回落机制(fallback)中写好:如果接收到的流量不满足代理要求,就转发到这个端口,让 Nginx 显示我们写的网页:

相应地,把 x-ui 的 SNI 和 Target 也改一下:

127.0.0.1:8443 就是本机的 8443 端口,直接用自己的域名也应该可以。
Clash 客户端配置: 因为 SNI 和 Target 换了,最后一步是把 Clash 配置里的 servername 改成你的域名:

在 Clash 中测一下速度就行了:

做完以上这些之后,恭喜你,你得到了一个近乎完美的代理节点!
!! · 关键踩坑记录
这一节是作者真实部署中踩到的坑,全部搞清楚可以让你少走很多弯路。
坑 1:后量子加密兼容性问题(最大的坑)
现象:节点能 ping 通、TCP 能建立连接,但实际代理失败,v2rayN 延迟显示 -1ms,无法翻墙。
完整失败原理链:
1. Reality 握手时,xray 服务端真实访问伪装目标(如 onedrive.live.com)
2. 微软服务器支持新的后量子密钥交换算法:X25519MLKEM768
3. xray 26.x 版本看到对方支持,自动切换到这个新算法
4. v2rayN、Clash/Mihomo 客户端内核尚未实现这个算法
5. 服务端和客户端"说的不是同一种语言" → 握手失败 → 连接断开
为什么 ping 通但代理失败?
ping 用的是 ICMP 协议,TCP 握手只是建立连接,而 VLESS+Reality 的握手失败发生在 TCP 连接建立之后的协议层。所以表现为 TCP 延迟正常(6ms)但实际代理失败(-1ms)。这两个延迟是不同层面的,非常容易误判。
不同伪装目标的兼容性对比:
解决方案:把伪装目标改为苹果官网。
x-ui 面板 → 入站列表 → 编辑入站 → 修改 Target 和 SNI:
Target:
www.apple.com:443SNI:
www.apple.com
点更新保存,问题解决。作者本次部署最终使用 xray 26.2.6,未做任何版本降级,仅靠更换伪装目标解决问题。
坑 2:x-ui 有自己独立的 xray,不是系统的那个
x-ui 有自己内置的 xray 二进制文件:
/usr/local/x-ui/bin/xray-linux-amd64 ← x-ui 实际使用这个
/usr/local/bin/xray ← 系统安装的,x-ui 不用这个
如果要替换 x-ui 用的 xray 版本,必须覆盖前者,且要先停止服务再替换:
x-ui stop
cp /usr/local/bin/xray /usr/local/x-ui/bin/xray-linux-amd64
x-ui start
坑 3:普通 VPS 的 IP 可能被 GFW 针对 TCP 流量
ping 通了不代表 TCP 没被封。GFW 可以选择性地对某个 IP 的 TCP 流量进行封锁,而 ICMP(ping)放行。
验证方法:在服务器上用 tcpdump 抓包,同时在客户端发起连接,看包有没有到达:
# 在服务器上执行
tcpdump -i eth0 port 443 -c 20
如果客户端发起连接但服务器一个包都没收到,说明 TCP 流量在侧就被丢弃了,需要换 IP,而不是折腾配置。
常用命令速查
# SSH连接服务器
ssh root@服务器IP
# 启动/停止/重启 x-ui
x-ui start
x-ui stop
x-ui restart
# 查看 xray 是否在监听端口
ss -tlnp | grep xray
# 抓包验证流量是否到达服务器
tcpdump -i eth0 port 443 -c 20
# 查看 x-ui 用的 xray 版本
/usr/local/x-ui/bin/xray-linux-amd64 version
# 进入 x-ui 管理菜单
x-ui
原文链接:自建代理节点教程——零基础从头搭建你的专属 VLESS+Reality 节点 | 来源:LINUX DO 社区 | 原帖时间:2026.3.13 首发 / 4.10 更新 | 整理:误差之外