前言

Reality 节点的目标站点(target / 旧称 dest)和 SNI 填什么,直接决定节点的伪装质量、延迟与存活时间。多数教程给出的 apple.commicrosoft.com 等大厂域名虽然可用,却并非理想选择:使用者过多导致特征明显,对方调整 TLS 配置即可使其失效,相关 IP 也更容易被针对。

所谓「偷域名」,是指借用某个真实站点的 TLS 外观、证书链与握手特征,使代理流量在外部观察下尽量接近正常访问该站点的行为——你无需拥有这个域名。Reality 的基本原理见 3x-ui 基本教程,本文只解决一个问题:如何科学地选出延迟低、不易被封、伪装可信的目标站点。

整个流程分三步:

  1. XTLS/RealiTLScanner 在 VPS 同 IP 段扫描候选;
  2. V2RaySSR/RealityChecker 批量检测,筛除不合格项;
  3. 填入 VLESS-REALITY 节点配置。
Important

本文仅供个人学习与自用,请遵守当地法律法规,禁止用于任何非法用途。


一、目标站点的选取标准

Reality 的 target 是用于伪装的真实站点。对未通过 Reality 鉴权的连接,Xray 会将流量转发到 target,使探测流量看起来像在访问该站点。因此 target 须满足一组硬性条件,握手特征才自然、连接才稳定。

条件要求原因
TLS 1.3必须支持Reality 的握手伪装依赖 1.3,1.2 不可用
X25519密钥交换使用 X25519TLS 1.3 常见算法,需与 Reality 特征一致
HTTP/2建议 ALPN 协商出 h2更贴近常见浏览器访问特征
未套 CDN优先选择直连源站见下方说明
不跳转首页尽量直接返回 200避免 HTTP 层行为不稳定
证书合法CA 签发的有效证书自签或过期证书会暴露特征

进阶条件(可进一步提升成功率):Cipher 为 AES_128_GCM、服务器签名为 ECDSA with SHA-256、站点内容丰富而非单页空壳、且未被 GFW 封锁(被墙域名作为 target 等于自断连接)。

关于「未套 CDN」:若 target 套用了 CDN,Reality 转发到 target 的流量可能进入 CDN 节点,服务端实际沦为他人 CDN 的转发节点,最大的隐患就是流量偷跑。因此强烈建议优先选择未套 CDN、同 ASN / 同机房的目标站点。CDN 目标不是一定不可用,但风险更高,这也是不建议直接套用大厂域名的原因之一——它们大多解析到 CDN。


二、核心思路:在同 IP 段内选取

科学选取与随意填写的根本差别,在于目标站点是否与 VPS 同处一个机房。当 target 与 VPS 同机房、同 IP 段、同 ASN 时:

  • 延迟更低:通常显著低于跨地区目标,理想情况下可接近 1ms 级别;
  • 流量自然:同机房主机间的访问,比跨洲访问大厂域名更符合常理;
  • 冷门可控:便于选到少有人用的域名,避免与他人重复。

因此正确做法是以 VPS 自身 IP 为起点,扫描其所在网段的相邻主机。可借助:

  • bgp.tools:查询 VPS IP 所属的 ASN 与网段;
  • Shodan:按 IP 反查域名,或直接寻找同机房站点。

若同段结果不理想,可退而搜索 VPS 所在国家/地区的高校官网——这类站点通常 TLS 配置规范、直连且未套 CDN,再逐项核对上节标准即可。


三、扫描:RealiTLScanner

RealiTLScanner 是 XTLS 官方的 TLS 扫描器,专为寻找 Reality 目标站点设计:它遍历指定 IP / 网段,对每个开放 443 的主机做 TLS 握手,只记录同时满足 TLS 1.3 与 h2 的目标

XTLS
XTLS/RealiTLScanner

A TLS server scanner for Reality

3.9k285GoMPL-2.0

3.1 获取

前往 Releases 下载预编译二进制(无需 Go 环境),或用 Go 自行编译(需 Go 1.21+):

1
go install github.com/XTLS/RealiTLScanner@latest

3.2 参数

参数说明默认
-addr扫描的 IP / CIDR / 域名;填单个 IP 或域名进入 infinity 模式(持续向后扫描至 Ctrl+C)
-port检测端口443
-thread并发线程数1
-timeout单次握手超时(秒)10
-in从文件读取目标列表(每行一个)
-out结果输出文件out.csv
-url从某 URL 抓取域名列表再扫描
-v详细输出(含失败目标)关闭
Note

部分教程将超时参数写作 -timeOut,请以官方的小写 -timeout 为准。

3.3 扫描同 IP 段

VPSIP 替换为服务器真实 IP:

1
./RealiTLScanner -addr VPSIP -port 443 -thread 100 -timeout 5 -out file.csv

裸 IP(不带 /24)会进入 infinity 模式,从该 IP 起依次向后扫描,获取足够候选后按 Ctrl+C 停止。若需范围可控,将 -addr 写成 CIDR:

1
./RealiTLScanner -addr 1.2.3.0/24 -port 443 -thread 100 -timeout 5 -out file.csv

/24 覆盖最近 256 个地址,/21 覆盖 2048 个地址,按需选择。

Tip

扫描应在本地机器运行,而非生产 VPS。 对整段 IP 发起扫描易被机房判定为端口扫描滥用,进而收到 abuse 投诉。扫描源通常不影响目标是否支持 TLS 1.3 / h2 的基本判断,但会影响延迟、可达性和风控风险。多次扫描请使用不同的输出文件名,避免覆盖。


四、检测:RealityChecker

扫描得到的候选往往较多,逐个手检效率低。RealityChecker(V2RaySSR 出品)可批量检测候选是否适合作为 Reality 目标,支持 TLS 检测、地理位置分析与 CDN 识别,并给出星级推荐。

V2RaySSR
V2RaySSR/RealityChecker

Reality协议目标网站检测工具 - 一键检测网站是否适合作为Reality协议目标,支持TLS检测、地理位置分析、CDN识别等功能

50183Go

4.1 获取

下载预编译包(以 x86 为例):

1
2
3
4
apt update && apt install -y unzip curl wget
wget https://github.com/V2RaySSR/RealityChecker/releases/latest/download/reality-checker-linux-amd64.zip
unzip reality-checker-linux-amd64.zip
chmod +x reality-checker

ARM64 机型换用 reality-checker-linux-arm64.zip,CentOS 将 apt 换成 yum。也可源码编译:

1
2
3
git clone https://github.com/V2RaySSR/RealityChecker.git
cd RealityChecker
go build -o reality-checker

4.2 三种检测模式

1
2
3
4
5
6
7
8
# 单个域名
./reality-checker check apple.com

# 多个域名(空格分隔)
./reality-checker batch apple.com tesla.com microsoft.com

# 直接读取 RealiTLScanner 导出的 CSV —— 与上一步衔接
./reality-checker csv file.csv

直接运行 ./reality-checker 查看帮助,./reality-checker version 查看版本。

Tip

RealityChecker 会尝试自动下载所需数据文件。若自动下载失败,可手动将 Country.mmdbgfwlist.confcdn_keywords.txthot_websites.txt 放入程序的 data/ 目录。

4.3 新版 RealiTLScanner CSV 兼容性

Warning

XTLS/RealiTLScanner 新版本导出的 CSV 与 V2RaySSR/RealityChecker 当前读取逻辑不完全兼容。RealityChecker 旧格式默认把第 3 列当作 CERT_DOMAIN,如果直接读取新版 CSV,可能会把 TLS 1.3 当成域名检测,出现「从 CSV 文件提取到 1 个域名」「正在检测 [1/1]: TLS 1.3… 不适合 - 网络不可达」这类结果。

遇到这种情况,不要直接执行 ./reality-checker csv file.csv,先把 RealiTLScanner 的 CSV 转成 RealityChecker 兼容格式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
python3 - <<'PY'
import csv

inp = "file.csv"
out = "checker.csv"

bad_values = {
    "",
    "CloudFlare Origin Certificate",
}

seen = set()

with open(inp, newline="", encoding="utf-8-sig") as f, open(out, "w", newline="", encoding="utf-8") as g:
    r = csv.DictReader(f)
    w = csv.writer(g)

    # 兼容 RealityChecker 旧格式:第 3 列就是 CERT_DOMAIN
    w.writerow(["IP", "ORIGIN", "CERT_DOMAIN", "CERT_ISSUER", "GEO_CODE"])

    for row in r:
        ip = (row.get("IP") or "").strip()
        origin = (row.get("ORIGIN") or "").strip()
        domain = (row.get("CERT_DOMAIN") or "").strip()
        issuer = (row.get("CERT_ISSUER") or "").strip()
        geo = (row.get("GEO_CODE") or "").strip()

        if domain in bad_values:
            continue

        if domain.startswith("*."):
            domain = domain[2:]

        if "." not in domain:
            continue

        key = (ip, domain)
        if key in seen:
            continue
        seen.add(key)

        w.writerow([ip, origin, domain, issuer, geo])

print(f"生成 {out},有效记录 {len(seen)} 条")
PY

./reality-checker csv checker.csv

如果你的扫描文件不是 file.csv,把脚本里的 inp 改成实际文件名即可。

4.4 读取结果

工具按推荐星级排序候选,并标注 TLS、CDN、地理位置等判读结果,优先选择星级高、握手延迟低且稳定的冷门站点。

或者选择可信非个人站点,比如如下网站,大学站点,无CDN,是完美的选择对象。

最终域名基础条件握手时间证书时间CDN热门推荐页面状态
arch.linux.ucla.edu13ms64天-*****200
cinema.usc.edu19ms167天-*****200

五、填入 Reality 配置

常规面板配置中,target 与 SNI 通常使用同一域名(面板内具体填法见 3x-ui 基本教程 的 Reality 章节):

1
2
3
Target / Dest:  your-stolen-domain.com:443
SNI:            your-stolen-domain.com
Fingerprint:    chrome

对应客户端分享链接中的 snifp

1
vless://<UUID>@<服务器IP>:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=your-stolen-domain.com&fp=chrome&pbk=<公钥>&sid=<ShortId>&type=tcp#vless-reality
Important

常规配置下,建议 SNI 与 target 域名保持一致;严格来说,客户端 SNI 应是服务端 serverNames 允许的值,并与目标站证书的 SAN / 服务端接受的 SNI 行为相匹配。


六、长期维护

选定的域名未必长期可用——对方可能调整 TLS、启用 CDN 或直接下线。因此:

  • 建立域名池:保留 5–10 个候选,按延迟与稳定性排序,主用失效时立即切换;
  • 定期复测:每周用 RealityChecker 检测一次,剔除握手异常的域名;
  • 「偷自己」最稳:在符合条件的服务器上自建真实站点(直连源站、TLS 1.3 + H2、未套 CDN)作为 target,完全自主可控、不受第三方变动影响,是社区公认最稳妥的方案。

七、命令速查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 1. 查询 ASN / 同网段
bgp.tools

# 2. 本地扫描同段(足够候选后 Ctrl+C)
./RealiTLScanner -addr VPSIP -port 443 -thread 100 -timeout 5 -out file.csv

# 3. 若 RealityChecker 把 TLS 1.3 当作域名,先按 4.3 脚本生成 checker.csv
./reality-checker csv checker.csv

# 4. 正常读取旧格式 CSV 时,也可直接检测
./reality-checker csv file.csv

# 5. 复核高星候选:TLS1.3 / X25519 / h2 / 非 CDN / 不跳转

# 6. 填入配置:target = 域名:443,SNI 通常使用同一域名

参考与工具