在 AWS Ubuntu 上搭 VLESS-Reality(替代 Shadowsocks)
当 Shadowsocks 被精准识别后,换上 Xray 的 VLESS-XTLS-Reality——伪装成正常 HTTPS 流量,目前抗封锁的天花板。
上一篇记的是 Shadowsocks,跑了一段时间后开始频繁被墙。这篇换协议重搭,顺手把"为什么要换"也写清楚。
为什么从 Shadowsocks 换到 VLESS-Reality
Shadowsocks 本身没问题,问题在于它的流量特征已经被精准识别了——加密后的流量看起来是一团"无特征的随机字节",而正常的互联网流量并不长这样,主动探测加机器学习能把它挑出来。一旦被识别,轻则限速、重则直接封端口甚至封 IP。
Xray 的 VLESS-XTLS-Reality 走的是另一条路:它不追求"看起来像随机数据",而是直接伪装成访问某个真实大网站的 HTTPS 流量。审查系统看到的就是一次普普通通的 TLS 握手,连证书都是借用真实网站的,没有任何可供识别的把柄。
| Shadowsocks | VLESS-Reality | |
|---|---|---|
| 伪装思路 | 加密成随机流量 | 伪装成真实 HTTPS 网站 |
| 抗主动探测 | 弱,特征已被识别 | 强,借用真站 TLS 指纹 |
| 需要域名/证书 | 不需要 | 不需要(Reality 免域名) |
| 端口 | 任意非默认端口 | 必须 443 |
| 配置复杂度 | 低 | 略高(需生成密钥) |
代价是配置稍微复杂一点(要生成一对密钥),但照着下面一步步做,大概 10 分钟能搞定。整个过程纯手动、不用第三方一键脚本,最干净。
第一步:安全组开放 443 端口
Reality 的核心是伪装成正常 HTTPS 网页流量,所以必须用 443 端口——这是全球 HTTPS 的标准端口,换成别的端口就失去伪装意义了。
到 AWS EC2 控制台找到实例对应的安全组,编辑入站规则(Inbound rules),加一条:
- 类型:自定义 TCP 或 HTTPS
- 端口:443
- 来源:
0.0.0.0/0
第二步:装 Xray 官方内核
SSH 进 Ubuntu 服务器,执行 Xray 官方安装命令(比第三方一键脚本更安全、纯净):
# 切换到 root
sudo -i
# 官方安装脚本
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
如果提示
curl: command not found,先apt update && apt install curl -y。
第三步:生成密码和"伪装密钥"
Reality 用非对称加密,需要生成三个字符串,先复制保存到记事本,下一步马上用。
1. 生成 UUID(相当于密码):
xray uuid
会得到类似
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx的一串,复制保存。
2. 生成 Reality 密钥对(公钥 + 私钥):
xray x25519
输出两行:
Private key(私钥,放服务器端)和Public key(公钥,放手机客户端),都保存好。
第四步:配置 Xray 服务端
把刚生成的参数填进配置文件。伪装目标网站这里用苹果的 iTunes 域名(itunes.apple.com)——全球不被封、特征极正常。
nano /usr/local/etc/xray/config.json
清空后粘贴以下内容。⚠️ 务必把 你的UUID 和 你的私钥 换成上一步生成的真实值:
{
"inbounds": [
{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "在这里填你的UUID",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "itunes.apple.com:443",
"serverNames": [
"itunes.apple.com"
],
"privateKey": "在这里填你的私钥(Private key)",
"shortIds": [
""
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "blocked"
}
]
}
Ctrl+O 保存、Enter 确认、Ctrl+X 退出。
第五步:启动 + 检查
# 重启 Xray
systemctl restart xray
# 看运行状态
systemctl status xray
看到绿色 active (running) 就成功了。这时如果有人在浏览器里访问 https://你的AWS_IP,只会看到报错或被引流到苹果官网,完全看不出这是个代理服务器。
第六步:Shadowrocket 客户端配置
Reality 配置项比 Shadowsocks 多,严格对照填:
| 字段 | 值 |
|---|---|
| 类型 | VLESS |
| 地址 | AWS 公网 IP |
| 端口 | 443 |
| UUID | 第三步生成的 UUID |
| 流控 (Flow) | xtls-rprx-vision(很重要,提速 + 防探测) |
下滑到 TLS 选项卡:
- 开启 TLS
- 允许不安全 (Allow Insecure): 关闭
- ALPN:
h2,http/1.1 - SNI / 伪装域名:
itunes.apple.com
继续下滑到 REALITY 选项卡:
- 开启 REALITY
- 公钥 (Public Key): 第三步生成的 Public key
- Short ID: 留空
- Spider X: 留空
右上角点完成,回首页打开顶部连接开关即可。之前开的 BBR 提速依然有效,不用重设。
笔记里的 UUID、密钥、IP 全是占位符。真实的密码和私钥自己保存在本地,永远不要 commit 到任何公开仓库。