本笔记适用于 Azure、腾讯云、阿里云、AWS、DigitalOcean 等支持 Linux 虚拟机的平台。
示例使用 Ubuntu Linux、SSH (WindTerm)、sing-box 以及 VLESS + Reality (XTLS-Vision) 协议。
IMPORTANT
关键前置安全规范:
- 务必在云服务器系统内与本地客户端彻底 关闭 IPv6,避免双栈网络下流量泄漏真实 IP。
- Clash Verge 的 TUN 模式建议开启 严格路由 (Strict Route) 与 Fake-IP,防止 DNS 泄漏与绕过。
一、整体流程
整个代理转发与访问链路如下:
本地电脑 (浏览器/应用)
↓ [Clash Verge (TUN 严格路由 + VLESS Reality)]
云服务器公网 IP (TCP 443)
↓ [sing-box 核心解密 & 流量分发]
目标互联网 (伪装目标:itunes.apple.com / 外部网站)核心任务拆解:
- 创建一台 Linux 云服务器(推荐 Ubuntu);
- 通过 SSH 远程连接服务器(使用 WindTerm 等工具);
- 系统初始化:彻底禁用 IPv6,配置并放行/关闭系统内部防火墙;
- 在云平台控制台(网络安全组 / 防火墙)放行必要端口(TCP 22 与 TCP 443);
- 服务端安装部署 sing-box,配置 VLESS-Reality 服务并设置开机自启;
- 编写本地配置文件并导入 Clash Verge,开启 TUN 代理。
NOTE
WindTerm 仅用于远程配置服务器。代理服务配置完成并作为后台系统服务运行后,WindTerm 即可直接关闭,无需长期挂在后台。
二、服务器配置建议
创建虚拟机时,直接选用标准的 Linux 发行版。
1. 推荐硬件规格
| 项目 | 建议配置 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu Server 22.04 或 24.04 LTS | 长期支持版,内核新,兼容性好 |
| CPU | 1 ~ 2 vCPU | 个人代理日常使用 1 核完全够用 |
| 内存 | 1 ~ 2 GB | 个人轻量代理与核心服务占用极低 |
| 磁盘 | 20 ~ 30 GB SSD | 标准 SSD 即可,性价比最高 |
| 架构 | x64 (amd64) | 兼容绝大多数预编译二进制包 |
| 公网 IP | 必须分配独立公网 IPv4 | 动态或静态均可 |
| 登录协议 | SSH | 默认管理协议 |
| SSH 端口 | TCP 22 | 云平台默认开放 |
2. 存储与地区选择
- 本地冗余(LRS): 数据在单个数据中心内保留 3 份副本,成本最低,个人自建节点首选。
- 区域冗余(ZRS): 跨机房容灾,价格昂贵,个人使用完全无必要。
- 磁盘类型: 优先勾选“标准 SSD”(如 Azure E4 - 32GB,约 ¥0.35 ~ ¥0.40 / 天),高级 SSD 价格翻倍且对代理性能无明显提升。
- 出口地区: 服务器所在地域决定最终出口 IP。例如选择日本/新加坡地域,连接后对外即显示对应地域的公网 IP。
3. 计费与资源管理注意事项
- “免费额度”通常有时效与总量限制,资源费用优先从赠送信用额度中抵扣。
- 虚拟机计算实例、公网 IP、系统磁盘与出站流量均独立计费。
- 不使用时建议在云控制台操作 停止并释放计算资源,避免持续扣费。
三、两个核心端口与防火墙规则
网络通信依赖双层防火墙的准确放行:
- 云平台安全组(Network Security Group / 防火墙策略)
- Linux 操作系统内部防火墙(UFW / iptables)
1. SSH 管理端口:22
- 用途: 远程 WindTerm 终端登录、命令执行、日常维护。
- 入站规则:
协议: TCP|目标端口: 22|源地址: Any (0.0.0.0/0)|动作: 允许
2. Reality 代理服务端口:443
- 用途: Clash Verge 与 sing-box 建立 VLESS + Reality TLS 握手连接。
- 入站规则:
协议: TCP|目标端口: 443|源地址: Any (0.0.0.0/0)|动作: 允许
WARNING
端口一致性原则: 云平台安全组放行端口 (443) 必须等于 服务端 sing-box 监听端口 (443),且必须等于 本地 Clash 配置文件中的 server port (443)。
四、连接前必须关闭本地 VPN / TUN
在首次连接或日常排查 SSH 时,必须先关闭本地电脑上的全局代理/TUN 模式。
1. 常见冲突来源
- Clash Verge 的 TUN 模式
- 系统代理(Windows 代理开关)
- 其他第三方 VPN 客户端或透明网关
2. 冲突根源
SSH 连接目标为云服务器的真实公网 IP。如果本地已开启 TUN 全局流量接管,WindTerm 发出的 SSH 握手流量会被再次打包转发至代理层,形成网络回环或被节点自身拦截,导致以下故障:
- WindTerm 无法弹出用户名/密码认证框;
- 终端持续卡死,随后报
The remote host closed the connection; - 连接被瞬间 RST 重置。
3. 正确连接操作顺序
- 关闭 本地 Clash Verge 的 TUN 开关与系统代理;
- 保持常规本地宽带联网;
- 打开 WindTerm,正常发起 SSH 连接;
- 服务器端配置完毕并启动服务后,最小化或关闭 WindTerm;
- 本地打开 Clash Verge 载入配置,启动节点与 TUN 模式。
五、SSH 登录的两种方式
方式一:SSH 密钥登录(推荐,高安全性)
- 原理: 本地保留私钥(
.pem/.id_rsa),云服务器写入对应公钥。 - 优点: 免密码输入,天然免疫公网 SSH 暴力破解。
- WindTerm 配置:
- 主机:
用户名@服务器公网IP(例如azureuser@203.0.113.10) - 端口:
22 - 认证方式:
PublicKey / SSH Key - 私钥:选择本地保存的私钥文件
- 主机:
方式二:用户名与密码登录
- 原理: 传统账密认证。
- 优点: 无需随身携带私钥文件,多设备临时登录便捷。
- WindTerm 配置:
- 主机:
用户名@服务器公网IP(例如vpnadmin@203.0.113.10) - 端口:
22 - 认证方式:
Password - 私钥:
留空 - 代理/隧道:
关闭
- 主机:
- 排查要点: 若未弹出密码框,优先确认本地 TUN 是否已彻底关闭,以及云平台安全组 22 端口是否已放行。
六、WindTerm 连接规范
- 主机栏填写格式:
用户名@服务器公网IP(严禁仅填写 IP,也不得混淆 22 与 443 端口)。 - 端口对应:
- SSH 管理通信 22
- Reality 代理通信 443
七、连接服务器后的前置系统配置
SSH 成功登入服务器后,依次执行以下系统基础加固与网络优化。
1. 确认系统环境与包更新
# 查看系统内核与发行版本
uname -a
cat /etc/os-release
# 更新软件源并升级基础组件
sudo apt update && sudo apt upgrade -y2. 彻底禁用系统 IPv6(防止双栈泄露真实地址)
执行以下命令直接写入 Linux 内核网络参数:
sudo tee -a /etc/sysctl.conf <<'EOF'
# Disable IPv6 Subsystem
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
# 使内核参数立即生效
sudo sysctl -p验证方式:
ip a | grep inet6若无任何输出,表明 IPv6 已在内核级别完全禁用。
3. 配置并关闭/放行系统内部防火墙 (UFW)
云服务器外部已有云安全组保护,为避免内部 ufw 拦截 Reality 443 流量,可选择直接放行端口或禁用内部防火墙:
- 方案 A:精准放行端口(推荐)
sudo ufw allow 22/tcp sudo ufw allow 443/tcp sudo ufw allow 443/udp sudo ufw reload - 方案 B:直接禁用系统内部 UFW 防火墙(由云安全组全权托管)
sudo ufw disable sudo ufw status
八、安装 sing-box 核心
在 Ubuntu 终端内执行官方一键安装脚本:
curl -fsSL https://sing-box.app/install.sh | sh安装完成后验证核心版本:
sing-box version终端正常输出 sing-box 版本号即代表二进制核心部署成功。
九、创建 VLESS + Reality (XTLS-Vision) 服务
VLESS-Reality 协议通过模拟真实 TLS 1.3 握手(借用合规大厂 SNI 证书,如 itunes.apple.com),无需自建域名与申请证书,具备极强的抗审查与防主动探测能力。
1. 生成必要凭据(UUID 与 Reality 密钥对)
(1) 生成客户端连接 UUID
NEW_UUID=$(sing-box generate uuid)
echo "生成的 UUID: $NEW_UUID"(2) 生成 Reality 专用公私钥对
sing-box generate reality-keypair终端会输出如下格式的密钥对:
PrivateKey: <一串私钥字符,填入服务端配置>
PublicKey: <一串公钥字符,填入本地 Clash 客户端配置>CAUTION
请妥善保管输出的
PrivateKey与PublicKey。PrivateKey仅保存在服务器,严禁外泄!
2. 写入 sing-box 服务端配置文件
执行以下命令生成 /etc/sing-box/config.json(请将配置中的 UUID 与 PrivateKey 替换为你实际生成的值):
sudo tee /etc/sing-box/config.json >/dev/null <<'EOF'
{
"log": {
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "vless",
"tag": "vless-in",
"listen": "0.0.0.0",
"listen_port": 443,
"users": [
{
"uuid": "你的实际uuid",
"flow": "xtls-rprx-vision"
}
],
"tls": {
"enabled": true,
"server_name": "itunes.apple.com",
"reality": {
"enabled": true,
"handshake": {
"server": "itunes.apple.com",
"port": 443
},
"private_key": "你的服务端_PRIVATE_KEY",
"short_id": [
""
]
}
}
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
]
}
EOF参数详解:
listen: 0.0.0.0:仅监听 IPv4 地址。listen_port: 443:标准 HTTPS 端口,流量伪装效果最佳。flow: xtls-rprx-vision:XTLS Vision 流控,消除 TLS in TLS 特征。server_name与handshake.server:握手回落目标域名(如itunes.apple.com或gateway.icloud.com)。private_key:Reality 私钥。short_id: [""]:留空即可。
3. 语法校验、启动服务与开机自启
# 1. 校验配置文件语法(无输出则表示语法完全正确)
sudo sing-box check -c /etc/sing-box/config.json
# 2. 启动服务并设置开机自动运行
sudo systemctl enable --now sing-box
# 3. 查看服务运行状态
sudo systemctl status sing-box --no-pager状态显示 Active: active (running) 即代表服务端已正常拉起。
4. 验证端口监听
sudo ss -lntp | grep 443正常应返回类似记录:
LISTEN 0 4096 0.0.0.0:443 0.0.0.0:* users:(("sing-box",pid=xxxx,fd=x))若启动异常,运行以下命令调取最近 50 行排错日志:
sudo journalctl -u sing-box -n 50 --no-pager十、本地端口连通性测试
在本地 Windows 电脑上打开 PowerShell,执行网络探测命令(将 IP 替换为实际云服务器公网 IP):
Test-NetConnection 实际服务器公网ip -Port 443- 若输出:
TcpTestSucceeded : True表明云防火墙放行无误,sing-box 监听正常,握手通道畅通。 - 若输出:
TcpTestSucceeded : False需重点排查:- 云平台安全组入站规则中
TCP 443是否遗漏; - Ubuntu 内部
ufw是否阻止了 443 端口; sing-box服务是否处于 active (running) 状态;- 服务器公网 IP 是否在重启后发生变动。
- 云平台安全组入站规则中
十一、导入 Clash Verge 配置文件
在本地新建配置文件 azure-reality.yaml,填入以下完整优化配置:
port: 7890
socks-port: 7891
allow-lan: false
mode: rule
log-level: info
ipv6: false
# TUN 模式与严格路由(防止泄漏与旁路穿透)
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
strict-route: true
# DNS 防污染与 Fake-IP 配置
dns:
enable: true
ipv6: false
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 1.1.1.1
- 8.8.8.8
# 节点配置
proxies:
- name: "Azure-Reality"
type: vless
server: ********** # 替换为服务器实际公网 IP
port: 443 # 保持 443
uuid: ****************** # 保持与服务端一致的 UUID
network: tcp
udp: true
tls: true
flow: xtls-rprx-vision
servername: itunes.apple.com # 保持与服务端一致的伪装域名
reality-opts:
public-key: *********** # 替换为实际生成的 PublicKey
short-id: ""
client-fingerprint: chrome
proxy-groups:
- name: PROXY
type: select
proxies:
- Azure-Reality
- DIRECT
rules:
- MATCH,PROXYWARNING
三要素强一致性核对:
serverIP 必须与云平台分配的公网 IP 完全一致;uuid必须与服务器/etc/sing-box/config.json完全一致;public-key必须与服务器private_key严格配对。- 注意格式,ymal文件uuid:这种元素冒号后面要空一格
优化:在yaml文件最后更改rules:使得国内网址直接直连更好。
rules:
- GEOIP,lan,DIRECT,no-resolve
- DST-PORT,123,DIRECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
十二、Clash Verge 使用方式
- 打开 Clash Verge 客户端;
- 进入 订阅 / 配置 (Profiles) 页面,点击导入或新建本地 YAML 文件;
- 右键选择新建的配置文件并点击 启用 (Use);
- 进入 代理 (Proxies) 页面,在
PROXY分组下勾选Azure-Reality; - 点击测速按钮,确认节点出现正常延迟数字(如 80ms ~ 150ms);
- 在客户端设置中开启 TUN 模式 与 系统代理;
- 路由规则推荐选择 规则 (Rule) 模式。
十三、SSH 与 TUN 模式互斥机制剖析
| 场景 | TUN 模式状态 | 流量走向与原理 |
|---|---|---|
| 管理服务器 (SSH) | 关闭 TUN | WindTerm $ |
1. 连接与管理服务器时(必须关闭 TUN) WindTerm 需要直连访问:
云服务器 IP:22 如果此时本地开启了 TUN 模式,TUN 会强制接管 WindTerm 的流量,可能导致:
text WindTerm
↓
Clash TUN 拦截接管
↓
Azure-Reality 代理节点 (尚未连通/自闭环)
↓
云服务器 SSH 端口 (22)
这样会导致流量形成回环或被节点直接丢弃,造成连接断开(报 The remote host closed the connection 或不弹密码框)。 因此,SSH 管理服务器时,必须关闭 TUN。
十四、WindTerm 会话生命周期说明
sing-box属于通过systemd托管的系统级后台服务(Daemon)。- 一旦运行
sudo systemctl enable --now sing-box,服务直接驻留于操作系统后台。 - 关闭 WindTerm、退出 SSH 终端会话或本地电脑关机重启,均不会影响云服务器上代理服务的持续运行。
十五、云服务器启停与费用控制
1. 停止使用(彻底停止计费)
- 仅在 Linux 系统内执行
poweroff关机,在部分云平台(如 Azure)中虚拟机仍处于“已停止(已分配)”状态,硬件计算资源仍会持续扣费。 - 正确停止操作: 登录云平台 Web 控制台,找到对应虚拟机实例,点击 停止 / 取消分配 (Stop / Deallocate),确保状态变为 已停止(已释放)。
2. 恢复使用
- 登录云控制台点击 启动 (Start);
- 虚拟机启动后,
sing-box依托systemd开机自启,无需 SSH 登录重新配置; - 检查新分配的公网 IP,若 IP 变动,仅需在本地 YAML 中更新
server地址即可恢复联网。
十六、动态公网 IP 变动应对方案
若云服务器未绑定静态公网 IP(Elastic / Static IP),每次在控制台“释放后重启”通常会重新分配新的公网 IPv4。
- 应对步骤:
- 启动服务器后,复制控制台显示的新 IPv4 地址;
- 打开本地 Clash YAML 配置文件,修改
server: 新公网IP; - 保存并在 Clash Verge 中重新加载配置;
- 如需 SSH 维护,WindTerm 同步使用
用户名@新公网IP发起连接。
十七、凭据管理与安全轮换
严禁在公开仓库、群聊或截图内暴露节点 UUID 与 Reality 私钥。若凭据发生泄漏,按以下步骤轮换:
- 生成全新 UUID 与 Reality 密钥对:
NEW_UUID=$(sing-box generate uuid); echo "New UUID: $NEW_UUID" sing-box generate reality-keypair - 编辑服务器配置文件更新 PrivateKey 与 UUID:
sudo nano /etc/sing-box/config.json - 校验语法并重启服务:
sudo sing-box check -c /etc/sing-box/config.json sudo systemctl restart sing-box - 同步修改本地 Clash Verge 配置中的
uuid与public-key。
十八、云平台账单监控建议
定期登录云控制台(如 Azure 成本分析 / AWS Cost Explorer)排查以下开销构成:
- Virtual Machines (计算实例): 核心费用项,关机并释放后计费清零;
- Disks (托管磁盘): 即使实例停机释放,挂载的磁盘(标准 SSD)仍会按 GB/月计收少量存储容量费;
- Bandwidth / Data Egress (出站流量): 按实际产生的外网出站流量计费;
- Public IPv4 Addresses: 闲置未绑定的静态公网 IP 可能单独计费。
十九、日常使用极简速查清单
🚀 开始使用
- 控制台启动云服务器;
- 确认并复制公网 IP(若有变动则修改 Clash 配置文件中的
server); - 打开 Clash Verge 选中
Azure-Reality节点; - 开启 TUN 模式,畅通浏览。
🛑 结束使用
- 关闭本地 Clash Verge 的 TUN 模式与系统代理;
- 登录云平台控制台,点击 停止 / 取消分配;
- 确认服务器状态显示为 已停止(已释放)。
🔧 登录维护
- 先关闭 本地 Clash Verge TUN;
- 打开 WindTerm,使用
用户名@服务器IP:22连接; - 维护完毕直接退出 WindTerm,再根据需要重新开启本地 TUN。
核心架构拓扑对照
云服务器 (Ubuntu)
├── [管理端口 TCP 22] <--- WindTerm (必须直连 / 避开 TUN)
└── [代理端口 TCP 443] <--- Clash Verge (VLESS + Reality 流量伪装)
服务端核心:sing-box (Systemd 守护进程)
本地客户端:Clash Verge (TUN 严格路由 + Fake-IP)
终端管理:WindTerm (远程运维,配完即关)